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 툴에 통합해본 건 아니지만, 이 정도면 통합하는데 오래걸리진 않을 듯 하다 + 기존 오픈소스 프로젝트에서도 몇 가지 버그를 찾은걸 보면 나름대로 도움은 될듯?
VS 2005에서는 뭔가 제대로 안 된다는 이야기가 좀 있었고…
VS 2008에서는 확실히 돌아가더군.
1.
분석기 전공자 입장에서 첨언을 할께요.
분석기는 문법 기반 분석기랑 의미기반 분석기가 있어요.
lint는 문법 기반, prevent나 sparrow는 의미기반 분석기죠.
의미기반의 정확도를 문법기반은 따라갈 수 없지만,
실용적인 의미기반 분석기를 만들기는 힘들죠.
아쉽게도 C++용으로 제대로 작동하는 의미 기반분석기는 나오지 않았어요.
언어 자체가 의미를 충실히 따라가는 분석기를 만들기에는 너무 복잡하거든요.
당분간은 lint 수준의 분석기가 C++에선 최선일거에요.
2.
lint급의 분석툴이 실제 개발에 어느정도 도움이 되는지도 궁금하네요.
Azyu / ㄹ…
발당 / 실제로 지금 있는 코드 분석기(lint류)가 큰 도움이 되진 않아서 인간이 일일이 신경써서 리뷰하는게 좋다곤 하지. 그래도 자동으로 백그라운드에서 돌아주는 정도면 조금 도움이 되도 쓸만은 함.
+ 실제로 도움이되는 수준은 DevPartner 나 valgrind 같은 애들이 좀 더 도움이 된단 느낌?
Cppchek를 쓴지 한달 정도 되어갑니다.
큰 기대하지 않으면 쓸 만한 툴입니다.
비싼 상용툴을 써 본적이 있는데 false-positive가 많아서 거의 사용이 불가능하더군요.
Cppcheck도 잘못 찾는 경우가 있지만 관리가능한 수준입니다.
다만 찾아주는 항목이 적어서 ‘기본적인 체크’정도로 생각하면 딱 좋더군요.
쓰시면서 좋은 정보 있으면 공유 부탁드립니다.
특히 CI툴 연동하는거 궁금합니다~ ^^
헝그리맨 / 나름대로 쓸만한 거 같아요. 처음엔 오류 코드 반환하게 설정해서 썼더니 -all 로 실행했을 때 오류코드가 거의 반환되서(메모리 릭 잡는 부분은 false-alarm이 꽤 납니다;; ) 좀 아쉽긴합니다;;;
그래도 나름대로 잘 체크되는 것 같아서 괜찮군요.
C/C++ 정적 코드 분석기 cppcheck…
http://cppcheck.sourceforge. net/ http://rein.kr/blog/archives/1573 에서 존재를 알게됨. 위키피디아에서 몇가지 읽어둘만한 페이지들 Cppcheck 정적코드분석 정적코드분석도구들 lint(splint) 는 세팅이 귀찮고(include 지정등) C 만 지원하고 너무 쪼잔한 놈이라 쓰기가 좀 그런데 cppcheck 는 사용도 쉽고 현재 내 코드(valgrind 기반으로 품질유지되는…