문제

배경

나는 몇 년 동안 약 60 KLOC 인 C ++ 원시 C ++로 작성된 응용 프로그램이 있습니다. 죽은 많은 기능과 클래스가 많이 있습니다 (아마도 아래의 유사한 유닉스 기반 질문과 같은 10-15%). 최근에 모든 새 코드에서 단위 테스트를 시작하고 가능할 때마다 수정 된 코드에 적용하기 시작했습니다. 그러나 현재 우리는 현재 5% 미만의 테스트 범위를 가지고 있다는 스와그를 만들 것입니다.

가정/제약

방법 및/또는 도구는 다음을 지원해야합니다.

  • 네이티브 (예 : 관리되지 않는) C ++
  • 윈도우 XP
  • Visual Studio 2005
  • 범위를 위해 사용자 제공 테스트 사례를 요구해서는 안됩니다. (예 : 코드 범위를 생성하기 위해 단위 테스트에 의존 할 수 없습니다)

방법이 이러한 요구 사항보다 더 많은 것을 지원하면 훌륭합니다.

노트: 우리는 현재 팀 시스템이 아닌 Visual Studio 2005의 전문 판을 사용하고 있습니다. 따라서 팀 시스템을 사용하는 것은 다음과 같습니다 유효한 제안 (나는 모르겠다, 나는 그것을 사용한 적이 없다) 그러나 나는 그것이 아니기를 바라고있다. 해결책.

코드 범위에 단위 테스트를 사용하는 것이 문제가되는 이유

나는 일반적인 도구가 오 탐지가없는 임의의 애플리케이션에서 모든 죽은 자 (예 : 도달 할 수없는 코드)를 찾는 것이 불가능하다고 생각합니다 (이것은 중단 문제와 동일하다고 생각합니다). 그러나 일반적인 도구가 다른 어떤 것들이 코드에서 참조하지 않는 클래스 나 기능과 같이 실제로 죽을 가능성이 높은 많은 유형의 죽은 코드를 찾을 수 있다고 생각합니다.

단위 테스트를 사용 하여이 적용 범위를 제공함으로써 더 이상 일반 알고리즘을 사용하지 않으므로 감지 할 수있는 죽은 코드의 비율과 히트가 잘못된 양성이 아닐 확률을 모두 증가시킵니다. 반대로, 단위 테스트를 사용하면 단위 테스트 자체가 주어진 코드를 행사하는 유일한 것일 수 있기 때문에 잘못된 네거티브가 발생할 수 있습니다. 이상적으로는 외부에서 이용 가능한 모든 방법, API, 사용자 컨트롤 등을 연습하는 회귀 테스트가있어서 코드 적용 범위 분석의 기준 측정 역할을하여 특정 방법이 잘못된 양성이되는 것으로부터 배제 할 수 있습니다. 그러나 슬프게도, 나는 현재이 자동 테스트가 없습니다.

그러나 테스트 사례 범위가 낮은 대형 코드 기반을 가지고 있기 때문에 테스트 사례 작성에 투자 한 많은 시간을 요구하지 않고 도움이 될 수있는 것을 찾고 있습니다.

의문

Visual Studio 2005 개발 환경과 함께 Windows 플랫폼의 기본 C ++ 애플리케이션에서 자동화 된 또는 반자동 패션으로 죽은 코드를 감지하는 방법은 무엇입니까?

또한보십시오

레거시 C/C ++ 프로젝트의 죽은 코드 감지 VC ++ 컴파일러에게 모든 코드를 컴파일하도록 지시하고 싶습니다. 할 수 있습니까?

도움이 되었습니까?

해결책

링커에 회개되지 않은 개체를 제거하도록 요청하십시오 (/opt : ref). 함수 수준 링크 및 Verbose Linker 출력을 사용하는 경우 링커 출력은 사용되지 않는 모든 기능이 사용되지 않습니다. 이 목록은 완전하지 않을 수 있지만 이미 필요한 도구가 있습니다.

다른 팁

우리는 사용 황소의 눈, 그리고 나는 그것을 추천 할 수 있습니다. 우리가하는 일이지만 단위 테스트 환경에서 실행할 필요는 없습니다.

단위 테스트 스위트에 대한 코드 커버리지 도구를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top