c - 종류 - 정적분석도구 시장점유율




정적 코드 분석 도구 선택 (10)

UNIX 환경에서 C로 코딩하는 프로젝트에서 일하고 있습니다. 보푸라기 도구를 사용하여 내 소스 코드를 확인했습니다. 린트는 (1979 년 이래로) 오랫동안 사용되어 왔으며 누구나 내가 사용할 수있는 최신 코드 분석 도구를 제안 할 수 있습니까? 무료 도구가 바람직합니다.


C 코드의 경우 확실히 Flexelint 사용해야 Flexelint . 나는 그것을 거의 15 년 동안 사용했고 그것에 의해 맹세했다. 코드의 주석 ( "/ * lint -e123 * /")을 통해 경고를 선택적으로 껐다 켤 수 있다는 점이 가장 큰 특징 중 하나입니다. 이것은 평범하지 않은 무언가를 원했을 때 강력한 문서화 도구로 밝혀졌습니다. "경고 X를 끄기 때문에 X를하고있는 좋은 이유가 있습니다."

흥미로운 C / C ++ 질문에 대한 사람들은 자신의 사이트에서 예제를보고 힌트를 보지 않고 버그를 파악할 수 있는지 확인하십시오.


IIRC가 LLVM을 백엔드로 사용하는 clang 정적 분석기 에 대한 좋은 소식을 들었습니다. 이것이 플랫폼에서 구현 되었다면 좋은 선택 일 수 있습니다.

내가 이해 한 바로는 구문 분석뿐입니다. "자동 버그 찾기".


나는 최근 처분 할 수있는 모든 정적 분석 도구 목록을 작성했으며, 나는 여전히 모든 것을 평가하는 중이다. 참고로, 대부분 보안 분석 도구입니다.


보푸라기 같은 도구는 일반적으로 "거짓 경보"문제로 고통을 겪습니다. 실제로 존재하는 것보다 더 많은 문제점을보고합니다. 진정으로 유용한 경고의 비율이 너무 낮 으면 사용자는 도구를 무시하는 법을 배웁니다. 보다 현대적인 도구는 가장 가능성이 높거나 흥미로운 경고에 집중하기 위해 노력합니다.


우리는 Coverity Prevent 를 사용하여 C ++ 소스 코드를 확인했습니다.

무료 도구는 아니지만 (오픈 소스 프로젝트를 무료로 검색 할 수 있다고 생각하지만), 가장 뛰어난 정적 분석 도구 중 하나입니다. C ++보다 C에서 더 인상적이라고 들었지만 지금까지는 많은 버그를 피하는 데 도움이되었습니다.


일반적으로 여러 정적 분석 도구를 사용하여 버그를 찾는 것이 가장 좋습니다. 모든 도구는 다르게 설계되고 서로 매우 다른 것을 찾을 수 있습니다.

여기 일부 회담에서 좋은 토론이 here . 미국 국토 안보부 (Department of Homeland Security)에서 정적 분석에 관한 회의에서 온 것입니다.


cppcheck 를 사용할 수 있습니다. 그것은 정적 코드 분석 도구를 사용하기 쉽습니다.
예 :
cppcheck --enable=all .
현재 폴더 아래의 모든 C / C ++ 파일을 검사합니다.


Sparse 는 Linux에서 이미 사용 가능한 컴퓨터 소프트웨어 도구로, Linux 커널에서 가능한 코딩 오류를 찾기 위해 설계되었습니다.

로드 밸런싱 커널 모듈의 품질을 향상시키기위한 리눅스 검증 센터 의 두 가지 프로젝트가 있습니다.

  1. Linux Driver Verification (LDV) - Linux 장치 드라이버의 정적 소스 코드 확인을위한 포괄적 인 도구 세트입니다.
  2. KEDR 프레임 워크 - 커널 모듈의 동적 분석 및 검증을위한 확장 가능한 프레임 워크입니다.
  3. Linux 파일 시스템 구현의 검증을위한 전용 도구 세트를 개발하는 것을 목표로하는 Linux 파일 시스템 검증이 진행중인 또 다른 프로젝트입니다.

CppDepend , Windows 및 Linux에서 사용할 수있는 매우 완벽한 정적 분석기, VS 플러그인, IDE 또는 명령 줄을 시도해 볼 수 있으며 오픈 소스 제공자 에게 무료입니다.


PC-lint/Flexelint 는 매우 강력하고 유용한 정적 분석 도구이며 설정이 자유 롭지 만 슬프게도 무료는 아닙니다.

이런 도구를 처음 사용할 때 많은 수의 경고를 생성 할 수있어 주요 경고문과 부전언을 구별하기가 어려울 수 있습니다. 따라서 가능한 한 프로젝트 초기에 코드에서 도구를 사용하고 가능한 한 자주 코드에서 실행하여 새 경고가 발생할 때 처리 할 수 ​​있도록하는 것이 가장 좋습니다.

이와 같이 계속 사용하면 곧 도구로 적용된 규칙을 확인하는 방식으로 코드를 작성하는 방법을 배우게됩니다.

이 때문에 나는 린트 (Lint)와 같은 툴을 선호한다. 린트 (Lint) 같은 툴은 상대적으로 빨리 돌아가고, 자주 사용하지 않는 더 귀찮은 툴보다는 지속적인 사용을 장려한다.







testing