2010-08-09 4 views
3

우리는 C 코드 기반을 위해 코드 분석기로 Splint를 사용할 계획입니다. 그러나 우리는 전에는 부목 도구를 사용해 본적이 없었습니다. 그래서 우리는 당신의 의견을 베니스, 찬반 양론이라고합니다.C 용 부목 코드 분석기

답변

1

당신을 위해 무엇을 할 수 있는지에 대한 간략한 개요는 this transcript을 참조하십시오.

8

보풀 도구는 일반적인 문제와 코드 검토에서 누락되는 오류를 찾는 데 유용합니다. 제 생각에는 정적 코드 분석을 할 때 잃을 것이 아무것도 없다는 것입니다. 유일한 단점은 중요하지 않을 수있는 오진 또는 경고를 많이 얻을 수 있다는 것입니다 (즉 코딩 스타일 권장 사항). 좋은 필터링 기술을 개발해야합니다. 정적 분석기는 모든 것을 포착 할 수는 없지만 아무것도없는 것보다 낫습니다. 이 도구는시 오류가있을 수 패턴을 찾습니다 http://www.sans.org/reading_room/whitepapers/securecode/secure-software-development-code-analysis-tools_389

+1

* 오 탐지 *를 강조 표시합니다. 주석이 달린 코드에 부목을 사용하는 것은 정말 재미 있지 않습니다 ... – eckes

0

: 여기

당신을 관심 수도 SANS 연구소에서 백서입니다. 장점은 도구가 잠복 버그를 발견 할 수 있으며 단점은 오탐 (false positive)에 대해서도 전체를 찾을 수 있다는 점입니다.

1

waffleman은 정적 분석기가 많은 거짓 경보를 생성한다고 제안했습니다. 나는 Sparrow보다 더 나은 경보를내는 것을 막는다. 그것들은 우리가 정적 분석을 위해 사용하는 두 가지입니다.

전형적인 허위 경보 좋은 알람의 예는 다음과 같습니다

bar (char **output) 
{ 
    *output = malloc(100); 
} 
foo() 
{ 
    char *output=NULL; 
    bar(&output) 
} 

기능 표시 줄에서이 포인터 출력 메모리 누수를보고있다. 함수 foo에서는 함수 막대가 호출 될 때 NULL 역 참조를보고합니다. 그럼에도 불구하고 100 초의 거짓 알람 사이에서 진정한 알람을 찾는 것 중에서 선택의 여지가 있습니다.

코드 검토 중에 놓칠 수있는 메모리 누수가 있습니다. 라이센스가 비싸지 않게하고 알람이 거짓으로 표시되면 이후 분석에서 나타나지 않습니다. 그러므로 부목이 동일한 일을하는지 찾아야합니다.

1

Splint은 코드를 더욱 관용적으로 만들어서 (따라서 다양한 컴파일러에서 구문 분석하고, 더 이식성이 뛰어나며, 리팩터링하기 쉽습니다.) 더욱 뛰어납니다. 부목은 int와 float 사이의 암시 적 캐스트와 같은 미묘한 버그를 발견 할 수 있습니다. 부목은 메모리 누수 및 기타 보안 취약성을 추적합니다.

시험해보기 : splint hello.c.