3

저는 레거시 C++ 코드베이스의 현재 소유자입니다. 수십 개의 소스 & 헤더 파일이 있습니다. 이 프로젝트는 일반적으로 리눅스에서 개발, 빌드 및 배포됩니다. 리눅스에서 빌드 시스템은 scons/gcc이고 제품은 하나의 실행 파일입니다.Visual Studio Maintainability Index의 계층 구조는 main()까지만입니다.

코드 영역의 아키텍처에 대한 업데이트가 이전 아키텍처보다 유지 관리 가능하다는 것을 보여주기 위해 코드의 여러 부분에 대해 유지 관리 가능성 (MI)을 생성하려고합니다. 그래서 몇 가지 조사를했고 Visual Studio 2013 (Ultimate 라이센스가 있음)이이 작업을 수행한다는 것을 알았습니다.

새 VS2013 "Win32 Console Application"에 모든 소스를 성공적으로 가져 왔습니다. 또한 gcc & VS2013 간의 차이점을 수용하기 위해 몇 가지 변경 사항을 적용하여 빌드 할 소스를 얻었습니다.

나는 실행하는 시도 "분석 |에 대한 코드 메트릭 계산을 [프로젝트]"와 VS2013이 오류 발생 :
 
Project: [omitted] 
Configuration: Debug 
Scope: None 
Assembly: [omitted] 
Maintainability Index: 
Cyclomatic Complexity: 
Depth of Inheritance: 
Class Coupling: 
Lines of Code: 
Message: The project target file '[omitted]' contains no managed code. 

그래서 내가 "속성의 값이 변경 | 구성 속성 | 일반 | 공용 언어 런타임 지원 ""CLR 지원 없음 "에서"Pure MSIL CLR 지원 "으로 변경 한 후"코드 메트릭 결과 "창에서 확인하십시오 (아직 이미지를 게시 할 수 없어 최선을 다해 출력 함) :

 
Hierarchy      Maintainability Index Cyclomatic Complexity ... 
---------------------------------------------------------------------------------- 
* [executable] (Debug)        36      31 
    * Global           36      31 
    * main(int, char** const): int     36      31 

main()보다 자세한 정보를 얻을 수 없습니다. [executable] 또는 Global과 같이 main()을 확장합니다. 파일 당, 함수 별 또는 클래스 별 점수를 얻을 수있을 것이라고 생각했습니다.

사람은 말해 줄 수 :

  • 는 VS2013는 행된 파일, 함수, 클래스 수준에서 MI를 생성 할 수 있습니까?
  • 어떻게 수행하나요?
  • < $ 50 리눅스에서 코드를 실행하여 MI를 생성 할 수 있습니까?

나는 코드에 최소한의 변경을 만들고 싶어하지만 쉽게 변경이 소스 새 프로젝트 & 다시 가져 오기를 만들고, 유형, 프로젝트 속성 투사 할 수 있도록 빌드 .DLL하는 제품 또는 lib 디렉토리를 변경할 수 있습니다 등등.

+1

유지 관리 지표 란 무엇입니까? 다른 이름을 사용하여 Linux 용으로 잘 알려진 도구가있을 수 있습니다 (예 : [C++ check] (http://sourceforge.net/apps/mediawiki/cppcheck/index.php?title=Main_Page) [disclaimer - I haven ' t는 도구를 사용했다 - 나는 단지 그것을 봤다]). –

+0

Maintainability Index는 기본적으로 코드 유지 관리의 상대적 용이성을 나타내는 지표입니다. 자세한 내용은 http://msdn.microsoft.com/en-us/library/bb385914.aspx 및 http://www.projectcodemeter.com/cost_estimation/help/GL_maintainability.htm을 참조하십시오. C++ check에 대한 링크를 제공해 주셔서 감사합니다. –

+0

그냥 C++ 검사를 보았습니다. 정적 분석을위한 좋은 도구 였지만 찾고있는 것이 아닙니다 ... 제가 찾고있는 것은 복잡한 수학 알고리즘을 구현하는 한 가지 방법이 그것을 구현하는 또 다른 방법보다 읽고 유지해야합니다. –

답변

2

내 의견에 언급했듯이 내 코드는 관리되지 않는 C++이므로 코드 메트릭 만 관리되는 코드에서만 실행된다는 설명서를 발견했습니다./clr 옵션 중 하나를 추가하는 것만으로는 함수 수준에서 생성 된 메트릭을 얻는 데 충분하지 않습니다.

+2

다른 도구를 사용하기 만하면됩니다. 관리 코드 용으로 작성하는 것이 훨씬 쉽지만 C++ 용 코드 분석기도 있습니다. 매우 복잡한 척도가 아니라면 쉽게 찾을 수 있어야합니다. 그러나 C++에서는 템플릿과 선행 처리기가 종종 때로 혼란을 야기 할 수 있기 때문에 코드 분석기는 종종 혼란 스럽습니다. 조심하셔야합니다.) – quetzalcoatl

+3

궁극적으로 제가 일을 끝내 었습니다 ... 동료가 작성한 Klocwork 및 일부 Python 스크립트를 사용하여 메트릭을 생성 할 수있었습니다. 필자는이 고난 이후에 특정 메트릭에 대한 메트릭을 생성하는 것이 얼마나 쉬운지를 나타내는 지표 인 새로운 메트릭 메트릭을 만들 예정이라고 생각합니다. –