정적 코드 분석 도구 선택
나는 유닉스 환경에서 C에서 코딩하는 프로젝트를 하고 있어.보풀 도구를 사용해서 소스코드를 확인하고 있어.린트는 (1979년 이후) 오랜 기간 동안 내가 사용할 수 있는 보다 최신 코드 분석 도구를 제안할 수 있는 사람이 있는가? 가능한 한 무료인 도구가 좋다.
당신은 cppcheck를 사용할 수 있다.정적 코드 분석 툴을 사용하기 쉽다.
예를 들면 다음과 같다.
cppcheck --enable=all .
현재 폴더 아래의 모든 C/C++ 파일을 검사한다.
컴파일러 자체를 간과하지 마라.컴파일러의 설명서를 읽고 컴파일러가 제공할 수 있는 모든 경고와 오류를 찾아낸 다음, 귀하에게 이치에 맞는 수만큼 활성화하십시오.
또한 컴파일러에게 경고를 오류처럼 처리하도록 지시하여 경고를 즉시 수정하도록 하십시오.-Werror
gcco. 그따위 , ,지 마.-Wall
gcc에서 모든 경고를 활성화하지는 않는다.
확인(무료!)— "많은 메모리 관리 및 스레딩 버그를 탐지하고 프로그램을 세부적으로 프로파일링"정적 체커는 아니지만 훌륭한 도구랍니다!
나는 최근에 내가 마음대로 가지고 있던 정적 분석 도구들의 목록을 작성했는데, 나는 여전히 그것들을 모두 평가하는 과정에 있다.참고로, 이러한 툴은 대부분 보안 분석 툴이다.
보풀과 같은 도구는 일반적으로 "허위 경보" 문제에 시달린다. 즉, 실제로 존재하는 것보다 훨씬 많은 문제를 보고한다.진정으로 유용한 경고의 비율이 너무 낮으면 사용자는 도구를 무시하는 법을 배운다.더 많은 현대적인 도구들은 가장 가능성 있는/관심적인 경고에 초점을 맞추기 위해 약간의 노력을 기울인다.
C 코드의 경우 반드시 Flexelint를 사용해야 한다.나는 거의 15년 동안 그것을 사용했고 맹세했다.이것의 가장 훌륭한 특징 중 하나는 코드의 코멘트("/* lint -e123*/")를 통해 경고를 선택적으로 끄고 켤 수 있다는 것이다.이것은 뭔가 색다른 것을 원했을 때 강력한 문서화 도구로 밝혀졌다."나는 경고 X를 끄고 있다. 그러므로 내가 X를 하고 있는 좋은 이유가 있다."
흥미로운 C/C++ 질문에 대한 자세한 내용은 사이트에서 몇 가지 예를 살펴보고 힌트를 보지 않고도 버그를 알아낼 수 있는지 확인하십시오.
나는 IERC가 백엔드로 LLVM을 사용하는 clang static Analyzer에 대해 좋은 점을 들었다.만약 그것이 당신의 플랫폼에 구현된다면, 그것은 좋은 선택일 것이다.
내가 아는 바로는 구문 분석 그 이상을 한다.예를 들어 "자동 버그 찾기"를 참조하십시오.
Uno 도구가 유용하다는 것을 알게 될 것이다.그것은 몇 안 되는 무료 비토이 옵션 중 하나이다.소수의 "대안적인" 오류(Null pointer deserfs, Out-of-bounds 어레이 인덱스, 초기화되지 않은 변수 사용)에 초점을 맞춘다는 점에서 보풀, 플렉셀린트 등과 다르다.또한 잠금 해제 규율과 같은 사용자 정의 검사를 허용한다.
후계자 도구를 공개하려고 노력중이지만
오리온(콘텐츠를 더 이상 사용할 수 없음)
gcc에 대한 "-Weffc++" 옵션이 있으며, Mac OS X man 페이지에 따라 다음과 같은 옵션이 제공된다.
Scott Meyers의 Effective C++ 책에 수록된 다음과 같은 스타일 지침 위반에 대해 경고하십시오.
[스냅]
네가 C에 대해 물어봤다는 건 알지만 내가 아는 바로는..
C++ 소스 코드를 확인하기 위해 Coverity Prevent를 사용해 왔다.
이것은 무료 도구가 아니지만, 여러분이 찾을 수 있는 최고의 정적 분석 도구 중 하나이다.C++보다 C에서 더 인상적이라고 들었는데, 지금까지 꽤 많은 버그를 피하는데 도움이 됐다.
PC-lint/Flexelint는 매우 강력하고 유용한 정적 분석 도구로, 구성성이 뛰어나지만 슬프게도 무료는 아니다.
이런 도구를 처음 사용할 때 엄청난 수의 경고를 낼 수 있어 중대형과 경상을 구분하기 어려울 수 있다.따라서 프로젝트 초기에 코드에 있는 도구를 사용하기 시작한 다음 가능한 한 자주 코드에 실행해 새로운 경고가 뜨는 대로 대처할 수 있도록 하는 것이 가장 좋다.
이렇게 계속 사용하게 되면, 당신은 곧 도구에 의해 적용되는 규칙을 확인하는 방법으로 당신의 코드를 쓰는 방법을 알게 된다.
이 때문에, 나는 상대적으로 빨리 달리는 린트와 같은 도구를 선호하고, 따라서 사용 빈도가 낮아질 수 있는 번거로운 도구보다는 지속적인 사용을 장려한다.
윈도우즈 및 리눅스, trought VS Plugin, IDE 또는 명령줄에서 사용할 수 있는 매우 완전한 정적 분석기 CppDependent를 사용해 보십시오. 이 분석기는 오픈 소스 제공자에게 무료로 제공되며,
보풀은 계속 업데이트된다...그런데 왜 좀 더 최근 걸 원하시죠?
BTW 플렉시블린트는 보푸라기다.
좋은 날,
컴파일러가 -Wall을 설정한 후 알려주는 내용을 읽고 소화하는 제안에 전적으로 동의한다.
보안을 위한 좋은 정적 분석 도구는 데이비드 휠러가 쓴 폴락파인더다.다양한 보안 취약점을 찾아내는 데 도움이 되고
하지만, 그것은 당신의 코드를 읽을 수 있는 지식을 가진 누군가를 대신하는 것은 아니다.다윗이 웹페이지에서 말한 대로, "도구를 가진 바보는 여전히 바보다!"
건배.
롭
나는 버그를 찾기 위해 여러 개의 정적 분석 도구를 사용하는 것이 일반적으로 가장 좋다는 것을 발견했다.모든 도구는 다르게 설계되어 있고, 그들은 서로 매우 다른 것들을 발견할 수 있다.
일부 회담에서는 좋은 논의가 이루어지고 있다.미국 국토안보부가 개최한 정적 분석 회의에서 나온 겁니다.
스파이스는 리눅스 커널에서 가능한 코딩 결함을 찾기 위해 고안된, 이미 리눅스 에서 사용할 수 있는 컴퓨터 소프트웨어 도구다.
로드 가능한 커널 모듈의 품질을 향상시키기 위한 리눅스 검증 센터의 두 가지 활성 프로젝트가 있다.
- Linux 드라이버 검증(LDV) - Linux 장치 드라이버의 정적 소스 코드 검증을 위한 포괄적인 도구 세트.
- KEDR 프레임워크 - 커널 모듈의 동적 분석 및 검증을 위한 확장 가능한 프레임워크.
- 또 다른 진행 중인 프로젝트는 리눅스 파일 시스템 구현의 검증을 위한 전용 툴셋 개발을 목표로 하는 리눅스 파일 시스템 검증이다.
참조URL: https://stackoverflow.com/questions/2873/choosing-a-static-code-analysis-tool
'IT이야기' 카테고리의 다른 글
C에서 실행 파일의 위치를 찾으려면 어떻게 해야 하는가? (0) | 2022.05.25 |
---|---|
If/Else If가 아닌 전환/대소문자를 바꾸는 이유 (0) | 2022.05.25 |
정의되지 않은 지정되지 않은 구현 정의 동작 (0) | 2022.05.25 |
Vue.js - 프롭 정의되지 않음 (0) | 2022.05.25 |
C 전처리로 잠시 루프를 쓰는 방법? (0) | 2022.05.25 |