네드 배첼더: 발신자 전용 중계 노트

네드 배첼더: 발신자 전용 중계

저자는 호출자별로 함수의 코드 커버리지를 측정하고자 합니다. 이는 BASIC 인터프리터인 Acidica에서 오류 검사 코드를 리팩토링하는 데서 비롯되었습니다. 초기에는 각 내장 함수가 자체 인자 유효성 검사를 가지고 있어 오류 조건에 대한 특정 커버리지가 가능했습니다. 리팩토링 후, 유효성 검사가 공유 헬퍼 함수로 이동하면서 이러한 상세한 커버리지가 손실되었습니다.제안된 해결책은 coverage.py의 동적 컨텍스트를 활용하는 데코레이터를 포함합니다. 이 데코레이터는 장식된 함수를 실행하기 전에 호출 사이트(파일 및 줄 번호)의 이름을 딴 새로운 커버리지 컨텍스트를 생성합니다. 함수 완료 시 원래 컨텍스트가 복원됩니다.coverage.Coverage.current()cov.switch_context()를 사용하는 개념 증명 데코레이터가 이 기능을 시연합니다. 이를 위해서는 중첩 컨텍스트를 지원하기 위해 coverage.py의 사소한, 아직 출시되지 않은 변경이 필요합니다. 저자는 HTML 커버리지 보고서가 이제 expects 함수의 각 호출자에 대해 별도의 컨텍스트를 보여주어 누가 어떤 분기를 실행했는지 드러낸다는 것을 발견했습니다.향후 개선 사항에는 특정 호출자에 대한 누락된 커버리지를 식별하기 위해 이러한 컨텍스트를 후처리하고, 호출자와 실행 세부 정보를 동시에 추적하기 위해 계층적 또는 다중 컨텍스트를 활성화하는 것이 포함됩니다. 저자는 또한 데코레이터를 사용하여 소스 코드를 수정하는 대신 커버리지 구성을 통해 이 기능을 통합하는 것을 목표로 합니다. 잠재적인 응용 프로그램에는 컨텍스트 식별자로 func_name과 같은 함수 인자를 사용하는 것이 포함됩니다.
CdXz5zHNQW_IFrCzZRuFh.png