문제

코드 기반에 정적 분석기 (Coverity)를 사용하기 시작했습니다. 우리는 우리가받은 엄청난 양의 경고 (수십만 명에)에 즉시 멍청한 일을했으며, 팀 전체가 몇 달 동안 그들 모두를 정리하는 데 몇 달이 걸릴 것입니다 (무의식적으로 불가능).

우리가 지금까지 논의한 옵션은입니다

1) 계약자를 고용하여 경고를 정리하고 수정하십시오. 그는 단점을 보입니다. 우리는 아마도 이러한 모든 수정을 수행하기 위해 사람들이 경험이 필요할 것입니다.

2) 경고를 필터링하고 위험한 것만 처리하십시오. 여기서 문제는 정적 분석 출력이 항상 혼란스러워서 문제를 분리하기가 어렵다는 것입니다. 또한 경고 필터링도 큰 노력입니다.

어느 쪽이든, 정적 분석기가 우리에게 유용한 도구가 될 수있을 때 코드를 상태로 가져 오는 것은 기념비적 인 작업으로 보입니다.

그렇다면 현재 개발 노력을 완전히 스탠드로 두드리지 않고 정적 분석기와 어떻게 협력 할 수 있습니까?

도움이 되었습니까?

해결책

가장 먼저해야 할 일은 분석 설정에서 도대체를 조정하는 것입니다. Coverity Support는 아마도 상당히 일반적인 구성을 남겼을 것입니다.

  • TRIAGE 결함의 대표적인 샘플이며 체커가 노이즈보다 신호를 더 많이 생성하지 않는 경우 지금은 끄십시오. (대부분의 커버티 체커는 좋지만 완벽하지는 않지만 무자비한 우선 순위를 정해야 할 것 같습니다.)
    • 장기적으로, 그 체커 중 일부를 다시 켜고보고에 우선 순위가 낮은 것으로 표시하십시오. (이것은 더 어렵다. 나는 커버가 Dawson Engler라는 누군가의 결함 순위에 관한 몇 가지 논문을 읽어야한다고 오랫동안 주장했다. :-).
    • 더 긴 달리기에서는 기본적으로 비활성화 된 체커를 사용해보십시오. 그들 중 일부는 인상적인 버그를 찾습니다. 그리고 경고는 놀랍게도 유용하지만 가짜를 끄야합니다.
  • 코드베이스의 어느 부분을 실제로 곧 고칠 것인지에 대해 냉소적으로 현실적입니다. 구성 요소를 사용하여 적어도 지금은 결함을 수정하지 않을 코드의 분석을 건너 뜁니다. (예를 들어, 이론적으로, 귀하의 제품에 제 3 자 코드가 포함 된 경우, 귀하는 품질에 대한 책임이 있고 버그를 패치해야합니다. 실제로 버그가 고정되지 않습니다. 그러한 버그는 거의 해결되지 않습니다. 긍정적 인 비율이 높을 것입니다.)
    • 구성 요소와 제외를 설정하는 것은 까다 롭지 만 일단 완료되면 잘 작동합니다. 부정적인 외모의 regexes 중 하나는 100 개가 넘는 분리가있었습니다.
    • 구성 요소는 또한 결함에 대한 개별 책임을 지정하는 데 도움이되며,이를 고치는 데 결정적인 것으로 나타났습니다.
  • 새로운 결함에 대한 보고서를 설정하고 사람들이 해당 URL을 보도록합니다. 새로운 결함은 활성 코드에 있으며 새로운 경고 정책으로 시작하는 것이 더 쉽습니다.

몇 가지 면책 조항으로 끝내 드리겠습니다.

  • Coverity Support Forum 에서이 질문을 다시 사용할 수 있습니다 (http://forums.coverity.com/), 그것은 매우 활동적이지는 않지만 NDA 위반에 대해 걱정할 필요가 없습니다. 나는 가능할 가치가있는 체커의 목록을 가지고 있습니다.
  • 나는 생계를 위해 이것을하고, 아마도 당신은 우리를 고용하고 싶을 것입니다 (http://codeintegritysolutions.com/); 오늘 스탠포드 에서이 주제에 대해 이야기하고 있습니다. 튜닝을하기 위해 컨설턴트를 고용하는 것은 많은 의미가 있습니다. 회사 밖에서 누군가가 트라이어징을하는 것은 까다 롭습니다. 외부인이 있으면 수정 사항이 더 까다 롭습니다. 실수로부터 배우는 것이 고치는 것보다 훨씬 중요합니다.

다른 팁

일주일에 하루 : 분석을 켜십시오. 100 개의 가장 성가신 경고를 선택하십시오. 그들을 고치십시오. 분석을 끕니다. 요컨대 : 당황하지 마십시오. 당신의 코드는 그대로 작동합니다 (그렇지 않습니까?); 한 입 크기의 덩어리로 경고를 통해 작업하십시오.

동일한 유형의 경고가 계속 다시 나타나고 (나쁜 코딩 관행) 팀에 미래를 피하도록 교육하십시오.

나는 오래된 코드 기반으로 이것을했다 : 나는 아침 일찍 (팀의 나머지 팀 전)에 들어가서 컴파일러의 경고/분석 수준을 높이고 경고를 수정 한 다음 기본값으로 다시 설정했다.

  1. 레거시 코드의 경우. 이러한 Leagcy 버그를 우선 순위를 정하고 그들을 다루기위한 계획을 세웁니다. 버그 수정 및 새로운 기능 개발의 균형을 유지하십시오. 새로운 기능이 항상 더 중요합니다.
  2. 새 코드의 경우. 통합 프로세스의 일부로 만들기 : 새 코드를 확인하기 전에 커버티가 없는지 확인하십시오.

계약자 옵션의 경우보다 적당한 경로로 이동하여 명확하고 로컬에있는 문제 만 해결하고 코드를 완전히 이해할 필요가 없습니다. 나는 많은 수의 커버티 히트가 가능한 Null 포인터 피해 도약과 같은 것들이라고 생각하거나 버퍼의 끝을 지나서 문제의 코드에 완전히 로컬에있는 간단한 점검으로 수정할 수 있으며 큰 그림.

나는 인정할 것입니다 - 나는 prefast/prefix 또는 Microsoft에서 도구가 호출되는 것을 사용하기 전에 이런 일을 해냈으며, 그 중 많은 부분이 기계적인 변화였습니다. 계약자 나 인턴에 적합합니다. 그러나 더 많은 분석이 필요한 것들이있을 것입니다. 계약자에게 일을 깊이 들어 가지 말아야한다는 것이 명확하게 확인하십시오.

그리고 그들에게 친절하십시오 - 그것은 Drudge 일이므로, 당신이 즐겁게 할 수있는 다른 것을 만드십시오.

사람들은 우리에게 처음으로 사용할 때 모든 경고를 '무시'하라고 말했습니다. 다음 차이 빌드에서는 점차 새로운 경고가 있습니다. 그런 다음 도구를 몇 달 동안 사용하면 편안하게 도구를 사용하면 돌아가서 오래된 경고를 고치기 시작합니다.

다른 정적 분석기를 사용해보십시오. 나는 Parasoft C ++ 테스트를 사용했으며 심각도에 따라 경고를 필터링하는 편리한 방법을 가졌습니다.

그것은 당신이 당신의 요구에 맞게 사용자 정의하는 데 문제가 있다는 것을 의미합니까?
처럼

""사용자 정의 가능한 분석

Coverity STATIC 분석은 배포 된 체커 수 또는 NULL POINTER DEREFERENCES의 임계 값과 같은 개별 검사기에 특정한 설정을 수정하여 분석을 미세 조정하는 기능을 제공합니다. 특정 코드 블록 또는 애플리케이션에 대한 커버티를 구성하는 기능을 통해 개발자는 응용 프로그램에 가장 적합한 성능 수준을 선택할 수 있으며보다 정확하고 신뢰할 수있는 결과로 이어질 수 있습니다. Coverity Software Development Kit를 사용하면 사용자 정의 검사기를 만들어 C 및 C ++ 코드의 고유 한 결함 유형을 감지 할 수 있습니다. 이는 동시성, 예외 처리 및 기타 중요한 문제를 찾기위한 사용자 정의 검사기를 만드는 것입니다. ""
http://www.coverity.com/products/static-analysis.html

표지에 대한 일반적인 상자 별 분석 구성은 천 줄의 코드 당 1 ~ 3 개의 결함을 제공하는 경향이 있습니다. 수십만 개의 결함이 있고 1 억 명 미만의 코드가 크게 있으면 조직 구성에 대한 분석 구성이 부정확하거나 차선책을 보장 할 수 있습니다.

튜닝 분석 구성 자체 외에도 영향력으로 우선 순위를 정할 수 있습니다. 기본 "High", "Medium"및 "Low"매핑은 하위 카테고리가 가장 피해를주는 느낌을 얻을 때까지 시작하기에 충분해야합니다. 너의 어플리케이션.

셋째, CodeBase가 크고 (및 그렇지 않은 경우) 각 팀 또는 개발자 그룹이 직접 유지 관리하는 코드 만 볼 수 있도록 구성 요소로 세분화하는 경우. 또한 구성 요소의 우선 순위를 정할 수 있습니다 (서버 코드의 결함은 클라이언트 코드, 테스트 코드 또는 타사 코드 등의 결함보다 중요합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top