2010-02-25 3 views
4

StyleCop 또는 Fxcop에서 제공하는 정적 코드 분석을 요청하지 않습니다. 둘 다 다른 목적을 가지고 있으며 잘 작동합니다. 사용자 정의 컨트롤 또는 하위 모듈의 코드 범위를 찾는 방법이 있는지 묻습니다. 예를 들어, 별도의 어셈블리에서 도우미 클래스를 사용하는 응용 프로그램이 있습니다. 단위 테스트 코드 범위를 보장하려면 응용 프로그램을 실행하고 NCover 또는 유사한 도구를 사용해야합니다.코드를 실행하지 않고 코드 커버리지를 결정하는 방법이 있습니까?

내 요구 사항은 실행하지 않고 도우미 클래스 또는 이와 유사한 종류의 어셈블리에 대한 코드 적용 범위를 찾을 수 있습니까?

답변

0

아니요. 컴파일러가 결정할 수있는 'dead code'는 예외입니다.

코드 적용 범위에 대한 나의 정의는 프로그램에서 각 코드 행이 몇 번 실행되는지를 나타내는 결과입니다. 물론 프로그램 실행과 관련이 있습니다. 여기에서 결정 요인은 일반적으로 프로그램을 통과하는 데이터의 값으로 조건의 실행 경로를 결정합니다. 컴파일러와 같은 정적 분석은 어떤 조건에서도 실행할 수없는 코드 행을 추론 할 수 있습니다.

예를 들어 프로그램에서 타사 라이브러리를 사용하지만 라이브러리에 버그가있는 경우를 예로들 수 있습니다. 프로그램이 라이브러리의 해당 부분을 사용하지 않거나 라이브러리에 보내는 데이터로 인해 버그가 발생하지 않으면 영향을받지 않습니다.

모든 조건부가 취해질 것으로 가정하고 모든 파생 클래스를 통해 모든 함수 호출을 따르는 프로그램을 작성할 수 있지만 이것이 무엇을 의미하는지는 잘 모르겠습니다. 코드 라인에 버그가 있는지 여부는 확실하게 알 수 없습니다.

+1

일반적으로 "코드 범위"라는 용어는 특정 코드 행이 실행되는 것을 말하며 실행 된 횟수는 아닙니다. –

+0

@ John Saunders : IIRC gcov는 각 행이 실행 된 횟수를 알려줍니다. See : http://gcc.gnu.org/onlinedocs/gcc/Gcov-Intro.html#Gcov-Intro 그렇습니다. 라인이 실행되었는지 아닌지를 알아야합니다. – quamrana

+0

이 gcov에 대한 질문 이었습니까? 그렇다면 나는 그것을 놓쳤다. 나는 약 6 개의 다른 코드 커버리지 시스템에 대해서만 알고있다. –

3

일반적으로 대답은 '아니오'입니다. 이것은 계산할 수없는 halting problem과 같습니다.

0

Coverity Static Analysis은 프로그램에서 많은 보안 결함을 식별 할 수있는 도구입니다. 또한 데드 코드를 식별 할 수 있으며 개발자가 모든 코드를 실행할 수 있다는 것을 입증해야하는 D0178B와 같은 테스트 규정을 충족하는 데 사용할 수 있습니다.

2

추상적 인 해석 또는 모델 검사를 기반으로 도구 모음이 있으며 실행은하지 않고 언어의 하위 집합에 대해 적용 범위 속성을 표시 할 수 있습니다. 예를 들어

는 그로, D. KUHNE, U. DRECHSLER, 일반적으로

2008 R., 그래, 방법이 있습니다,하지만 그들은 전문있어, 일부 필요할 수 있습니다, "경계 모델 검사에서 기능 범위 분석" 공식적인 방법 경험. 이런 종류의 것들은 여전히 ​​최첨단 연구입니다.

5

Static Estimation for Test Coverage은 소스 코드를 실행하지 않고 적용 범위를 계산하는 기술을 참조하십시오.

기본 아이디어는 각 테스트 케이스에 대해 program slice을 계산 한 다음 슬라이스가 열거하는 항목을 "계산"하는 것입니다. (앞으로) 슬라이스는 효과적으로 코드의 특정 시작 지점 (이 경우 테스트 코드)에서 도달 할 수있는 프로그램의 일부입니다.

ACM 회원이 아니거나 [참석 한 컨퍼런스에 참석하지 않은 경우] 위의 기술 보고서는 얻기가 어렵지만, slide presentation here입니다.

물론이 정적 견적기를 실행하면 (대략) 어떤 코드가 실행되는지 알 수 있습니다. 실제로 테스트를 실행하는 대신에 테스트가 통과하는지 확인합니다!

관련 문제