C#, PVS-Studio, ReSharper

b00e06a6bd6ef1681a64e6b19d67ac5d.pngНам постоянно задают вопрос: «Есть ли смысл использовать анализатор кода PVS-Studio, если уже используется ReSharper?». Подразумевается, что ответом должна стать статья, где будут приведено сравнение возможностей этих инструментов в выявлении ошибок в программах. Мы знаем, что это тупиковый путь, и такая статья ничего не даст. Однако вопрос задаётся столь часто, что на него все-таки надо иметь ответ. Ответ — да, смысл есть. Сразу предупреждаю, что в статье вы не найдете ожидаемого сравнения. Но если вы потратите всего 10 минут, чтобы полностью прочитать эту статью, то мы уверены вы согласитесь с нашим ответом и видением ситуации.

PVS-Studio — статический анализатор кода, выявляющий ошибки в коде программ на языке C, C++. Недавно анализатор освоил новое для себя поприще — C#. Исторически сложилось, что среди вспомогательных инструментов для C# царствует ReSharper. Этот инструмент относится к категории productivity tool и не является в классическом понимании статическим анализатором кода. Однако ReSharper умеет выполняет множество различных проверок и раскрашивает подозрительные участки кода. Поэтому у программистов неизбежно возникает вопрос: «есть ли смысл смотреть в сторону PVS-Studio, если уже есть ReSharper?».
Ответ: Да! Мы уверены в этом ответе. Но вот обосновать это простой табличкой сравнения возможностей не получится. Сделать такую табличку не проблема. Но мы зареклись делать подробные сравнения. Как показывает жизнь, написание таких сравнений, скорее портит нам карму, а не улучшает её.

Например, у нас был опыт сравнения PVS-Studio с Cppcheck и Visual Studio SCA. Было потрачено много времени и сил. Результаты были представлены в кратком и подробном варианте. После чего только ленивый не написал, что мы всё сделали неправильно или, что наше сравнение является нечестным благодаря специально выбранным проектам для проверки.

Мы не видим более смысла тратить время на подобные сравнения. Как бы тщательно и честно мы не подошли к нему, всегда можно будет сказать, что сравнение было предвзято.

Тем не менее что-то нам нужно что-то отвечать человеку, который спрашивает про ReSharper. Мы можем предложить отличный вариант сравнения:

Вы уже используете ReSharper? Отлично! Теперь установите PVS-Studio и найдите в своём проекте ошибки!

Это будет лучшей демонстрацией пользы от использования PVS-Studio. Кстати, здесь нет никакого противопоставления. Инструменты могут отлично дополнять друг друга.

Читатель скажет — хорошо, новый инструмент не повредит. Но сможете ли вы попасть на рынок C# инструментов? Здесь уже всё давно занято и поделено. Нужен ли кому-то PVS-Studio для C#? Для начала ответ такой:

Certainty of death, small chance of success. What are we waiting for?

«Верная смерть. Никаких шансов на успех. Так чего же мы ждём?!» (en).

На самом деле, мы уже сталкивались с вопросом, «нужен ли анализатор PVS-Studio?». Этот вопрос звучал, когда анализатор PVS-Studio был молод и ему только предстояло завоевать популярность среди С++ программистов. Казалось бессмысленным появление ещё одного инструмента, ведь уже существовали:

  1. Компиляторы, реализующие в себе функциональность статических анализаторов. Например, некоторые редакции Visual Studio содержат статический анализатор C++ кода. А ещё, например, есть Clang.
  2. Существуют бесплатные анализаторы кода, такие как Cppcheck.
  3. Есть мощные платные инструменты: Coverity, Klocwork и так далее.


Так зачем нужен «PVS-Studio для C++?». И нам нечего было ответить на этот вопрос. Нечего на него ответить и сейчас. Но этот вопрос больше не имеет никакого значения. Мы с легкостью можем продемонстрировать ту пользу, которую приносит анализатор PVS-Studio.

Больше нет разницы, есть какие-то другие инструменты или нет. Мы нашли тысячи ошибок в программах, чему есть документальное подтверждение. Мы нашли эти ошибки, не смотря на существование других инструментов. Сколько угодно можно говорить про конкурентные преимущества. Но нам это не интересно. Вот вам 9355 ошибок, найденных в таких проектах как Chromium, Qt, LibreOffice, TortoiseSVN, Unreal Engine 4 и так далее.

Более того, теперь мы можем давать ссылки, когда кто-то хочет сравнения с конкретным инструментом.

  • Например, кто-то хочет узнать, чем мы лучше Clang. Отлично. Всё очень просто. Мы находили ошибки в Clang: ссылка 1, ссылка 2.
  • Кто-то хочет знать, есть ли смысл использовать анализатор PVS-Studio, или можно ограничиться анализатором, реализованным в Visual Studio. Конечно смысл есть. Не зря же мы находим ошибки в библиотеках Visual Studio: 2012, 2013.
  • Стоит ли покупать PVS-Studio, если есть бесплатный Cppcheck. Конечно. На эту тему есть статья-сравнение, которое все поругали. Поэтому можно и по-другому: ссылка.
  • Кто-то уверен, что Coverity/Klocwork достаточно на все случаи жизни. Бесспорно, это мощные и крайне полезные инструменты. Но и PVS-Studio не луком шит, раз может находить то, что не видят эти инструменты: ссылка 1, ссылка 2.


С C# анализатором мы только в начале этого пути. Пока мы можем скромно заявлять:

  • Мы находили ошибки в проекте Roslyn.
  • Да и вообще, мы находим ошибки в проектах компании Microsoft, которая славится высоким качеством исходного кода. Найти хоть что-то, это уже большое достижение. Примеры: CoreFX, Microsoft Code Contracts


Подождите немного, и вопрос сравнения отпадёт. Хотя нет, не ждите. Анализатор уже можно и нужно использовать. Пусть он молод, и мы пока реализовали только малую часть диагностик из запланированного. Но он прямо сейчас может начать приносить пользу. Попробуйте режим автоматической проверки после компиляции. Надеемся, вам понравится. А если что-то не так — пишите, мы очень активно работаем с отзывами и пожеланиями.

Итоги. Не зависимо от того, используете вы ReSharper или нет, мы предлагаем скачать и попробовать анализатор PVS-Studio. Если он найдет ошибки в вашем проекте, это будет лучшее доказательство его пользы. Только не забывайте, что единичные проверки не имеют смысла. Анализаторы кода приносят пользу только при регулярном использовании. Неэффективно искать опечатки и ошибки, отлаживая код, если это может сделать за вас анализатор. Конечно, он не способен найти все ошибки, но сможет сэкономить вам массу времени на более полезные дела, чем на поиск опечатки в условии.

© Habrahabr.ru