파이썬 코드의 "조건/결정 범위"의 비율을 계산하는 도구/라이브러리가 있습니까? 나는 오직 coverage.py 만 찾았지만 "계산서 적용 범위"의 퍼센트만을 계산합니다.python의 조건 적용
답변
Coverage.py now includes branch coverage.
궁금한 점 : 코드는 실행 전에 수정되지 않습니다.추적 기능은 실행중인 행을 추적하고 실행되지 않은 경로 가능성을 찾기 위해 컴파일 된 바이트 코드의 정적 분석과 해당 정보를 비교합니다.
cyclomatic complexity (Wikipedia)을 찾고 계십니까? 기본적으로 코드 조각을 통해 경로 수를 계산합니다. 예를 들어 PyMetrics 또는 this one과 같이 파이썬 코드를 계산할 프로젝트가 있습니다. Google은 확실히 더 많은 것을 가져올 것입니다.
그러나 나는 당신에게 적용 범위를 보여줄 단위 테스트와의 통합에 대해 알지 못합니다.
필자는 파이썬의 분기 커버리지 도구에 대해 잘 모르고 있지만 필자는이 글을 쓰려고 생각하고있다. 내 생각은 AST로 시작하여 각 분기점에 대한 추가 계측을 삽입하는 것이 었습니다. 그것은 가능하지만 몇 가지 까다로운 경우가 있습니다. 이것에 대한 예를 들어
,
raise SomeException(x)
지점 범위는 SomeException (x)가 완전히 인스턴스화 자체 예외를 발생하지 않았다 확인해야합니다.
assert x, "Oh No!: %r" % (x, y)
이렇게하면 어설 션문의 오른쪽에있는 텍스트가 완전히 평가되는지 확인해야합니다.
return args.name or os.getenv("NAME") or die("no name present")
첫 번째 두 용어 각각은 참/거짓 경로를 검사해야하지만 마지막 것은 검사하지 않아야합니다. 실제로, 마지막은 돌아 오지 않을 수도 있습니다.
걱정할 사례가 많았지 만 호기심 이외에는 그럴 필요가 없었기 때문에 아무데도 가지 않았습니다. 나는 또한 특정한 경고를 억 누르는 어떤 방법이 필요한 곳에서 오탐 (false positive)이 많이 발생하는지 궁금합니다.
이 경로를 사용하려면 Python 2.6 또는 3.0부터 시작하십시오. 이 릴리스에서는 AST 모듈에 대해 설명하고 코드 또는 .pyc 파일을 생성하기 전에 고유 한 AST 노드를 만들 수 있습니다.
"또는"die "예제는 읽기가 재미 있고 쓰기가 재미있었습니다.) – myroslav
파이썬으로 전환하기 전에 필자는 Perl 프로그래머였습니다. 저것은 Perl-ism입니다. Perl은 결코 지루한 언어로 알려지지 않았습니다. –
매우 동일한 coverage.py의 관리자는 get coverage information at the bytecode level으로가는 길에 대해 논의하는 기사를 가지고 있습니다. 이 방법은 조금 복잡합니다. 수정 된 줄 번호가있는 .pyc 파일을 다시 조합해야합니다. 그러나, 당신이 요구할 수있는 범위 측정에 관해서는 많은 세분성을 제공합니다.
나는 직접 사용하지 않았지만 적용 범위 분석을 mutation testing으로 바꾸려면 "pester"라는 돌연변이 검사기에 대해 들어 보았습니다.
내가 인터넷 검색을하는 동안, 나는 또한 a list of python testing tools을 찾아 왔으며 몇 가지 가능한 코드 범위 도구에 대해 언급했습니다.
구문 분석 및 수정 AST는 올바른 대답입니다. IMHO. 당신이해야 할 일에 대한 자세한 설명은이 논문 를 참조하십시오 "임의 언어에 대한 지점 범위 손쉬운"
http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf
"악기"조건 범위 구현처럼 보이는 :
Link about coverage.py and instrumental
사람이 그것을 시도했습니다? 작은 버전 번호가 있습니다. 나는 내가 신뢰할 수있는 어떤 것을 필요로한다.
> 순환 적 복잡성 (위키 백과)을 찾고 있습니까? 아니요. 흥미로운 정보를 제공해 주셔서 감사합니다. > 그러나 단위 테스트와의 통합에 대해 자세히 알지는 못합니다. 나도;) –
순환 복잡성은 기본적으로 조건 적용과 관련이 없습니다. –