코드 커버리지 도구는 어떻게 작동합니까?
NCover와 같은 코드 커버리지 도구는 코드의 어떤 부분이 실행되고 어떤 부분이 실행되지 않았는지 어떻게 알 수 있습니까?
다음 은 임의 언어에 대한 테스트 커버리지 도구를 구현하는 방법 에 대한 기술 문서입니다 .
우리 회사는이 원칙을 기반으로 Java, C #, C ++, PHP, COBOL, PLSQL 등을위한 테스트 커버리지 도구 제품군을 구축합니다.
NCover FAQ 에서 바로 인용 : NCover는 자동화 된 테스트 과정에서 수행 된 코드의 분기 비율을보고합니다. 각 분기에서 소스 코드를 계측하고 파일에 '적중'포인트를 작성하여이를 달성합니다. 이러한 '적중'포인트는 '적중'되었을 수있는 총 가능한 포인트와 비교됩니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 여전히 관심이 있다면 오픈 소스 프로젝트 OpenCover를 살펴봄 으로써 .NET 응용 프로그램에 대해 그러한 계측이 어떻게 수행되는지에 대한 예를 볼 수 있습니다 .
OpenCover는 코드의 중요한 지점에 계측 지점을 삽입합니다.
- 코드 라인 커버리지의 경우 PDB 파일 에서 가져온 시퀀스 포인트를 사용 합니다.
- 분기 커버리지의 경우 점프 대상과 분기 명령 이후의 다음 명령 (즉, 점프 없음)을 계측하여 COND_BRANCH 명령을 계측합니다.
- 메서드 계측의 경우 모든 메서드의 첫 번째 명령을 계측합니다.
이러한 모든 규칙은 Mono.Cecil을 사용하여 적절한 지점을 찾고 콘솔 호스트에서 프로파일 러로 전달한 후 CoverageInstrumentation.cpp 에 적용됩니다 .
PartCover에 대한 소스 코드도 사용할 수 있지만 (표시된대로) 따르기가 훨씬 더 어렵지만 코드를 계측하는 위치를 결정하기 위해 PDB의 시퀀스 포인트를 사용합니다.
에서 이 소스 :
NCover는 .NET Framework 프로파일 러 API를 사용하여 응용 프로그램의 실행을 모니터링합니다. 메서드가 CLR에 의해로드되면 NCover는 IL을 검색하고이를 계측 된 IL 코드로 바꿉니다.
요컨대, Just-In-Time 컴파일에 연결됩니다.
하지만 모든 도구가 동일한 방식으로 작동하는 것은 아닙니다. 다른 도구는 코드가 컴파일 된 후 애플리케이션의 바이트 코드를 수정하여 작동합니다.
코드 커버리지 분석이 활성화 된 상태에서 테스트를 한 번 실행 한 다음 해당 블록 (즉, 범위 블록) 수를 계산하고 테스트중인 프로젝트의 총 블록 수와 비교해야합니다.
기본적인 이유는 가능한 각 코드 블록 조합이 포함되면 모든 코드 경로가 포함된다는 것입니다 1 . 코드 커버리지 숫자에 너무 많은 가중치를 두는 것에 대한 주된 주장은 getter 및 setter와 같은 "쉬운"블록이 실제 값을 제공하지 않고 잘못 될 가능성이 거의 없음은 오류가 발생하기 쉬운 코드 블록만큼 계산된다는 것입니다. .
1) Ira Baxter 가 의견에서 언급 했듯이이 문장의 이전 문구가 잘못되었습니다. 이에 대한 토론에 대한 의견을 읽으십시오.
참조 URL : https://stackoverflow.com/questions/3051563/how-do-code-coverage-tools-work
'programing' 카테고리의 다른 글
우분투“장치에 남은 공간이 없습니다”하지만 많은 공간이 있습니다 (0) | 2021.01.16 |
---|---|
log4j 파일에 대한 로그 파일 분석기가 있습니까? (0) | 2021.01.16 |
별도의 delegate / dataSource를 사용할 때 UITableView 문제 (0) | 2021.01.16 |
ConfigureAwait (false)가 기본 옵션이 아닌 이유는 무엇입니까? (0) | 2021.01.16 |
오프라인 / 온라인 데이터 동기화 설계 (Javascript) (0) | 2021.01.16 |