2009-03-24 5 views
18

파이썬 코드의 "조건/결정 범위"의 비율을 계산하는 도구/라이브러리가 있습니까? 나는 오직 coverage.py 만 찾았지만 "계산서 적용 범위"의 퍼센트만을 계산합니다.python의 조건 적용

답변

7

Coverage.py now includes branch coverage.

궁금한 점 : 코드는 실행 전에 수정되지 않습니다.추적 기능은 실행중인 행을 추적하고 실행되지 않은 경로 가능성을 찾기 위해 컴파일 된 바이트 코드의 정적 분석과 해당 정보를 비교합니다.

2

cyclomatic complexity (Wikipedia)을 찾고 계십니까? 기본적으로 코드 조각을 통해 경로 수를 계산합니다. 예를 들어 PyMetrics 또는 this one과 같이 파이썬 코드를 계산할 프로젝트가 있습니다. Google은 확실히 더 많은 것을 가져올 것입니다.

그러나 나는 당신에게 적용 범위를 보여줄 단위 테스트와의 통합에 대해 알지 못합니다.

+0

> 순환 적 복잡성 (위키 백과)을 찾고 있습니까? 아니요. 흥미로운 정보를 제공해 주셔서 감사합니다. > 그러나 단위 테스트와의 통합에 대해 자세히 알지는 못합니다. 나도;) –

+0

순환 복잡성은 기본적으로 조건 적용과 관련이 없습니다. –

2

필자는 파이썬의 분기 커버리지 도구에 대해 잘 모르고 있지만 필자는이 글을 쓰려고 생각하고있다. 내 생각은 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 노드를 만들 수 있습니다.

+0

"또는"die "예제는 읽기가 재미 있고 쓰기가 재미있었습니다.) – myroslav

+0

파이썬으로 전환하기 전에 필자는 Perl 프로그래머였습니다. 저것은 Perl-ism입니다. Perl은 결코 지루한 언어로 알려지지 않았습니다. –

1

매우 동일한 coverage.py의 관리자는 get coverage information at the bytecode level으로가는 길에 대해 논의하는 기사를 가지고 있습니다. 이 방법은 조금 복잡합니다. 수정 된 줄 번호가있는 .pyc 파일을 다시 조합해야합니다. 그러나, 당신이 요구할 수있는 범위 측정에 관해서는 많은 세분성을 제공합니다.

2

나는 직접 사용하지 않았지만 적용 범위 분석을 mutation testing으로 바꾸려면 "pester"라는 돌연변이 검사기에 대해 들어 보았습니다.

내가 인터넷 검색을하는 동안, 나는 또한 a list of python testing tools을 찾아 왔으며 몇 가지 가능한 코드 범위 도구에 대해 언급했습니다.