코드 정적 분석: CI 툴에 추가할만한듯?

VS 2005를 쓰고 있긴하지만, 팀 시스템이 아니라서 static code analysis 기능은 없다. 정정 분석(static code analysis)은 *nix 시절의 lint 비슷한 툴을 생각하면 된다. 소스 코드를 입력으로 받아서 실제 실행없이 *버그가 있음직한* 곳을 찾아서 경고해주는 기능을 하는 도구다. 

예전에 팀 동료인 Azyu 군이 VS 2005 (w/o TS)에서도 정적 분석이 된다고 해서,  좀 찾아봤는데 이건 뭔가 좀 불충분(?)해보여서 관뒀는데, cppcheck 란 툴을 발견하고 좀 써보기로 했다.

대략,

  • 커맨드라인 툴이고
  • 실행 속도는 적당히 빠른 편 – CPP 소스 94개 정도의 파일 공유 웹서버 프로젝트를 분석하는데 1분 미만.
  • XML 출력이 됨 — CI 툴에 곁들이기가 좋아보인다
  • *nix / Win32 모두 지원 — linux distro. 들은 직접 팩키지를 제공하는 경우가 많고 Win32 설치용 바이너리도 있다

정도의 장점이 있음.

내가 일하는 데 사용하는 CI 툴에 통합해본 건 아니지만, 이 정도면 통합하는데 오래걸리진 않을 듯 하다 + 기존 오픈소스 프로젝트에서도 몇 가지 버그를 찾은걸 보면 나름대로 도움은 될듯?

Published by

rein

나는 ...

6 thoughts on “코드 정적 분석: CI 툴에 추가할만한듯?”

  1. 1.
    분석기 전공자 입장에서 첨언을 할께요.

    분석기는 문법 기반 분석기랑 의미기반 분석기가 있어요.
    lint는 문법 기반, prevent나 sparrow는 의미기반 분석기죠.
    의미기반의 정확도를 문법기반은 따라갈 수 없지만,
    실용적인 의미기반 분석기를 만들기는 힘들죠.

    아쉽게도 C++용으로 제대로 작동하는 의미 기반분석기는 나오지 않았어요.
    언어 자체가 의미를 충실히 따라가는 분석기를 만들기에는 너무 복잡하거든요.
    당분간은 lint 수준의 분석기가 C++에선 최선일거에요.

    2.
    lint급의 분석툴이 실제 개발에 어느정도 도움이 되는지도 궁금하네요.

  2. Azyu / ㄹ…

    발당 / 실제로 지금 있는 코드 분석기(lint류)가 큰 도움이 되진 않아서 인간이 일일이 신경써서 리뷰하는게 좋다곤 하지. 그래도 자동으로 백그라운드에서 돌아주는 정도면 조금 도움이 되도 쓸만은 함.

    + 실제로 도움이되는 수준은 DevPartner 나 valgrind 같은 애들이 좀 더 도움이 된단 느낌?

  3. Cppchek를 쓴지 한달 정도 되어갑니다.
    큰 기대하지 않으면 쓸 만한 툴입니다.
    비싼 상용툴을 써 본적이 있는데 false-positive가 많아서 거의 사용이 불가능하더군요.
    Cppcheck도 잘못 찾는 경우가 있지만 관리가능한 수준입니다.
    다만 찾아주는 항목이 적어서 ‘기본적인 체크’정도로 생각하면 딱 좋더군요.
    쓰시면서 좋은 정보 있으면 공유 부탁드립니다.
    특히 CI툴 연동하는거 궁금합니다~ ^^

  4. 헝그리맨 / 나름대로 쓸만한 거 같아요. 처음엔 오류 코드 반환하게 설정해서 썼더니 -all 로 실행했을 때 오류코드가 거의 반환되서(메모리 릭 잡는 부분은 false-alarm이 꽤 납니다;; ) 좀 아쉽긴합니다;;;

    그래도 나름대로 잘 체크되는 것 같아서 괜찮군요.

Leave a Reply