Cppcheck MISRA-C:2012

Cppcheck는 C/C++ 코드를 정적 분석해주는 오픈 소스 툴이다. 본 글에서는 Cppcheck를 사용해 MISRA-C 코딩 표준을 적용하여 C/C++ 코드를 정적 분석하는 방법에 대해 설명한다.

개요

Cppcheck 1.88 이상이 필요하다. MISRA 적용을 위한 --addon 커맨드라인 옵션이 1.88 부터 제공되기 때문이다.

Ubuntu 환경에서 소스 코드를 다운로드 받아 직접 빌드하여 사용하였다.

현재 Cppcheck에서 지원하는 MISRA 코딩 표준은 MISRA-C:2012 이다.

다운로드

Cppcheck 소스 코드는 아래 SourceForce 혹은 GitHub에서 다운로드 받을 수 있다.

  • https://sourceforge.net/projects/cppcheck/
  • https://github.com/danmar/cppcheck

빌드 & 설치

readme.txt 참조하여 아래와 같이 CMake를 사용하여 빌드하였다.

$ cd cppcheck-1.89
$ mkdir build
$ cd build
$ cmake --build ..
$ sudo make install

cppcheck 실행 파일이 /usr/local/bin 디렉토리에 설치된다.

실행

--addon 옵션을 사용하여 MISRA 체크 규칙을 적용할 수 있다.

$ cppcheck --addon=misra.json somefile.c

misra.json 파일은 아래와 같이 작성한다.

{
    "script": "/usr/local/src/cppcheck-1.89/addons/misra.py",
    "args": [ "--rule-texts=./misra-rules.txt" ]
}

MISRA는 오픈 표준이 아니기 때문에 Cppcheck는 Rule 번호만 표시하고, Rule에 대한 설명은 표시하지 않는다.

Rule 설명을 모두 표시하려면 Rule Text 파일을 사용자가 직접 작성해주어야 한다. 전체 Rule Text는 구글 검색으로 찾을 수 있지만 Cppcheck에서 인식하는 포맷으로 편집해주어야 한다.

Rule Text 포맷은 다음과 같다.

Here can be any text.

Incorrect definitions:
Appendix A
Appendix A Summary:

Rule 1.1
Error!

Here we go:
Appendix A Summary of guidelines

Rule 1.2
Rule text.

Stop parsing after this line:
Appendix B

Rule 1.3
Error!

References

  • http://cppcheck.sourceforge.net/
  • http://cppcheck.sourceforge.net/misra.php