Перетин PVS-Studio і Cppcheck

Неодноразово нам задавали питання, як сильно перетинаються діагностики нашого аналізатора PVS-Studio і аналізатора Cppcheck. Я вирішив написати маленьку статтю на цю тему, щоб швидко відповідати на це питання. Якщо зовсім коротко — то перетинаються слабо. Тільки 6% від загальної кількості помилок знаходяться обома аналізаторами. У статті буде розказано, як було отримано це число.

На початку я хотів намалювати діаграму Венна, у вигляді красивих кружечків. Але виявляється, це ціла завдання. Excel малюють кружечки без урахування їх площі. А програми, які малюють правильні пропорційні діаграми — платні. Так що я обмежився квадратиками, для яких мені знадобилася лише калькулятор для розрахунків, ручка з папером і редактор Paint.

Малюнок 1. Наочне відображення кількості знайдених помилок з допомогою аналізатора PVS-Studio і Cppcheck.
Малюнок 1. Наочне відображення кількості знайдених помилок з допомогою аналізатора PVS-Studio і Cppcheck.

Площа квадратів пропорційна кількості знайдених помилок. Сірий прямокутник відображає кількість помилок, які знаходять одночасно обидва аналізатора.

Загальна:
  • Кількість помилок, знайдених з допомогою PVS-Studio: 742
  • Кількість помилок, знайдених з допомогою Cppcheck: 193
  • У сумі, аналізатори знайшли 884 унікальні помилки.
  • Кількість помилок, які виявляються обома аналізаторами: 51
  • Перетин становить: 6%.
Дані були отримані таким чином. У березні 2014 року ми провели велику порівняння чотирьох аналізаторів коду: PVS-Studio, CppCat, Cppcheck, Visual Studio:Результати були піддані жорсткій критиці деякими нашими читачами. Але ми впевнені, що більшість критики пов'язано з тим, що люди прочитали короткі висновки, але не уважно ознайомилися зі статтею, що описує сам процес порівняння.

Так як аналізатор PVS-Studio показав себе набагато краще, ніж Cppcheck, деякі читачі вирішили, що ми смошеннічать. Насправді, ніякого обману немає. Аналізатор PVS-Studio дійсно більш потужний, ніж Cppcheck. Не зрозуміло, що в цьому несподіваного і підозрілого. Комерційні інструменти, як правило, краще безкоштовних аналогів. Висока якість порівняння аналізаторів, підтвердив і сам автор Cppcheck. Як не будь ми опублікуємо статтю, де наведемо його лист про порівняння аналізаторів, а також відповімо на ряд запитань, які задавали читачі після публікації статті про порівняння.

Повернемося до перетину з диагностикам. Як видно, перетин досить слабке, але це не дивно. По-перше, ніхто не прагне скопіювати всі діагностики з іншого аналізатора. Перетин відбувається за тим помилкам, патерни яких очевидні і часто зустрічаються. Таким чином, ідея пошуку таких помилок автори приходять незалежно.

По-друге, ера статичних аналізаторів тільки починається. Є неймовірний обсяг патернів помилок, які вони можуть діагностувати. Тому настільки мало перетинів. Один аналізатор налягає на помилки одного типу, інший на інші. Зрозуміло, що з часом перетин буде поступово наростати. Але патернів так багато, що цей процес буде повільний. В добавок, з появою С++11 і С++14, тільки збільшується поле для діяльності.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.