2009-07-17 4 views
10

어떤 정적 코드 분석기 (있는 경우)를 사용합니까? 파이썬 용 PyLint를 사용해 왔는데 꽤 만족 스럽습니다. 이제는 C 코드와 비슷한 것이 필요합니다.C 용 정적 코드 분석기

정상적인 일일 사용을 위해 출력량을 얼마나 많이 억제해야합니까?

+0

내 질문에 확장하려면 : 누구든지 SourceMonitor (http://www.campwoodsw.com/sourcemonitor.html)를 사용하고 어떻게 평가합니까? – Josip

+1

중복 된 http://stackoverflow.com/questions/2873/choosing-a-static-code-analysis-tool? –

답변

14

위키 백과는 다양한 언어 (C 포함)로 list of static code analysis tools을 유지합니다.

저는 개인적으로 PC-LintSplint을 모두 사용했습니다. 최선의 선택은 귀하가 작성한 신청 유형에 따라 다릅니다. 그러나 어떤 도구를 사용하든 관계없이 도구와 코드를 올바르게 조정할 때까지 신호 대 잡음 비율이 낮습니다.

PC-Lint은 내가 사용한 가장 강력한 린트 도구입니다. 기존 프로젝트에 추가하면 신호 대 잡음비가 낮아질 수 있습니다. 그러나 도구와 코드가 올바르게 구성되면 표준 빌드 프로세스의 일부로 사용할 수 있습니다. 마지막으로 사용한 주요 프로젝트는 PC-Lint 경고가 빌드를 손상시킬 수 있도록 설정했습니다. PC-Lint의 라이센스 비용은 $ 389이지만 비용이들 것입니다.

Splint은 위대한 오픈 소스 도구입니다. 여러 프로젝트에서이 프로젝트를 사용했지만 ANSI C가 아닌 컴파일러 (예 : 임베디드 시스템 프로젝트)를 사용할 때 구성하기가 어려울 수 있음을 발견했습니다.

Valgrind 또한 동적 분석 도구로 고려할 가치가 있습니다.


귀하는 특히 SourceMonitor에 대한 피드백을 요청했습니다. 이 도구는 코드에 대한 흥미로운 메트릭을 제공하지만 그러한 종류의 분석을 제공하지 않으므로 좋은 린트 도구의 보완 도구로 사용해야합니다.

자신의 홈 페이지에서 언급 한 바와 같이

, SourceMonitor는 :

... , 모듈의 상대적 복잡성을 식별하는 방법을 많은 코드 당신이 가지고 알아보십시오. 예를 들어 SourceMonitor를 사용하여 결함이 포함될 가능성이 가장 높은 코드 을 식별 할 수 있으므로 공식적인 검토가 필요합니다.

최근 프로젝트에서 사용 했으므로 (임베디드 시스템 코드의 경우에도) 사용하기 쉽습니다. 복잡성 측정 항목은 오류가 발생하기 쉽고 유지 관리가 쉬운 코드 개발을위한 훌륭한 리소스입니다.

SourceMonitor은 메트릭 수집을 자동화하려는 경우 올바른 형식의 XML뿐만 아니라 좋은 출력 그래프를 제공합니다. 유일한 단점은 도구가 Windows에서만 실행된다는 것입니다.

+0

몇 가지 C 확장을 지원하는 Microchip C18 컴파일러로 작업 중이므로 Splint에 대한 여러분의 의견은 정말 유용합니다. 감사. – Josip

0

저는 PCLint을 영원히 사용했으며 실제로 좋아했습니다. 나는 그들이 C#에 들어가기를 바란다 ... 그들은 모든 잡지의 C 또는 C++ 코드에 관한 퀴즈를 가진 사람들이다.

3

거기에 splint 있지만, 솔직히 말해서, 나는 그것을 작동시킬 수 없었습니다; 제 플랫폼에서는 너무 지나치게 활동적입니다. 실제로, 나의 가장 많이 사용되는 "보풀"는 의미 그 어떤 반 gcc

-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual 

물론, 나는 대부분 잊어 버린에 대한 다음과 같은 경고 플래그입니다. 그러나 그들은 꽤 많은 것들을 잡습니다.

+0

lint는 모듈 간 검사를하기 때문에 lint와 컴파일러 경고에는 큰 차이가 있습니다. 컴파일러는 컴파일 된 소스 파일과 포함 된 헤더 파일의 문제에 대해서만 경고 할 수 있습니다. – Dipstick

5

에 대해 동일해야합니다. 다음 억제 해제는 당신이

  • 억제 해제 모든 관심이 무엇인지, 당신은에 관심이있어 경고를 억제,

    • 모든 것을 억제 :

      메시지 억제 및 튜닝에 대한 몇 가지 캠프가 될 것 같다

    • 우리는 두 번째와 세 번째 범주 사이 어딘가에 떨어지는 경향이

    억제 해제 모든 것을 유지. 이것은 lint 당 100MiB + 텍스트 덤프 (한 줄에 하나의 에러)가 핵심 라이브러리 (많은 오래된 코드)에서 실행된다는 것을 의미합니다.

    사용자 정의 diff과 같은 도구는 변경 사항을 감시하고 커밋의 작성자에게 전자 메일을 보내 대부분의 사람들이 몇 줄까지 검토해야하는 금액을 유지합니다. 몇 가지 기본적인 데이터 마이닝을 통해 오류에 대한 흥미로운 통계를 수집합니다.

    당신은 정말 등, 기존의 경고를 고정 "포인트"를 제공,보다 자세한 설명을 다시 오류에 하이퍼 링크, 여기에 광택 얻을 수 있습니다 ...

  • 1

    나는, LC/Lint에 데이비드 에반스의 작품의 큰 팬이에요 그 이름은 부목으로 바뀌었다. 매우 공격적이어서 코드에 주석을 추가하여 많은 유용한 정보를 알 수 있습니다. 프로그래머 주석과 함께 사용하도록 설계되었습니다. 그것들 없이는 기능 할 것이지만 주석을 달지 않고 간단한 체커로 사용하려고하면 아마도 실망하게 될 것입니다.   원하는 것은 완전히 자동화 된 검사입니다. Windows 전용 도구를 다룰 수 있다면 Gimpel의 PC-Lint을 사용하는 것이 좋습니다. 짐 Gimpel은년 이상 행복한 고객을 가지고있다.