PVS‑Studio представляет собой решение для Static Application Security Testing (SAST). Инструмент помогает улучшать код по трём направлениям: качество, надёжность и защищённость.
PVS‑Studio позволяет выявить многие ошибки и потенциальные уязвимости на ранних стадиях и тем самым уменьшить стоимость их иcправления и, что более важно, снизить риск репутационных потерь. Поддерживается анализ программ на языках: C, C++, C#, Java.
Анализатор PVS‑Studio крайне востребован там, где любая ошибка может привести к большим потерям времени или денег.
Одной из таких сфер разработки программного обеспечения является финансовый сектор. Речь идёт, например, о трейдинге и банковском программном обеспечении.
Чтобы пояснить, что всё это означает на практике, предлагаем маленькую реальную историю, рассказанную нам одним из пользователей, с которым мы познакомились на конференции.
В анализаторе есть диагностика V3040, которая выявляет ситуацию, когда одно целочисленное значение делится на другое целочисленное значение и результат помещается в переменную типа float или double. Конечно, не всегда подобный код является ошибочным, но он однозначно подозрителен и требует проверки.
Кто‑то посчитает, что подобная ошибка надуманна и предупреждение V3040 часто будет ложным. Он может быть и прав, и не прав. Всё зависит от типа приложения и от того, что, собственно, программа считает.
Пользователь рассказал, что команда, в которой он работает, нашла с помощью этой диагностики очень неприятную ошибку в их программном обеспечении. Где этот человек работает, мы рассказывать не будем, так как история была поведана нам на условиях анонимности (нет, это был не банк).Модуль, в котором была найдена ошибка, рассчитывал гибкие цены для различных вариантов и условий заказов. Другими словами, подсчитывалось, какую цену менеджеру по продажам озвучить потенциальному клиенту. Ошибка закралась в расчёт некоего коэффициента. Использовалось целочисленное деление там, где не надо:
double K; .... if (foo) K = 200 / 95; else ....
Сразу скажем, мы придумали этот код и не знаем, как на самом деле он выглядел. Идея в том, что вместо коэффициента 2.1 получился коэффициент 2. В результате менеджеры начинали общение с клиентом, выставляя цену чуть ниже, чем полагалось. Цена считалась неправильно только при определённом сочетании условий, поэтому никто никогда ошибку не замечал, доверяя тем числам, которые выдаёт программа.
Поскольку, как я сказал, этот коэффициент рассчитывался неправильно только в редких случаях, эта ошибка не нанесла заметного вреда выручке компании. Тем не менее, ошибка была столь неприятна для разработчиков, что они решили скрыть её обнаружение от вышестоящего руководства и просто тихо исправили.Оставим в стороне вопрос корректности такого поведения программистов. Намного интереснее, что очень простая ошибка целочисленного деления приводит к таким последствиям, про которые страшно рассказывать начальству.
Как видите, даже простые ошибки могут стать причиной потери времени, денег, репутации. Если же речь идёт о более ответственном программном обеспечении, то ошибки могут обойтись вообще крайне дорого. Те, кто разрабатывает софт для финансовой сферы, используют комплексный подход для обеспечения надежности. Статический анализатор PVS‑Studio может стать отличным дополнением к комплексу мер по контролю качества кода.