﻿# Для повышения надежности и безопасности банковского программного обеспечения используйте PVS\-Studio

Среди наших клиентов постепенно начинают появляться организации, занимающиеся разработкой программного обеспечения в сфере финансов\. У нас много статей, посвященных разным тематикам, но сферу финансов мы как\-то незаслуженно обошли стороной\. Попробуем исправиться и со временем написать ряд статей, а начну я с маленького рассказа\.

![0528_Finances_ru/image1.png](https://import.viva64.com/docx/blog/0528_Finances_ru/image1.png)

Вводный абзац для тех, кто не знаком с инструментом PVS\-Studio\. Статический анализатор кода PVS\-Studio предназначен для выявления ошибок и потенциальных уязвимостей в коде программ на языках C\#, C, C\+\+, а также диалектах языка C\+\+, таких как C\+\+/CLI и C\+\+/CX \(WinRT\)\. Работает в среде Windows и Linux\. На данный момент PVS\-Studio является одним из самых мощных инструментов в классе статических анализаторов и позволяет выявлять большое количество типов дефектов\. Предлагаем познакомиться со [списком предупреждений](https://pvs-studio.ru/ru/docs/warnings/v789/), а также с [примерами](https://pvs-studio.ru/ru/blog/inspections/) использования анализатора\.

PVS\-Studio позволяет выявить многие ошибки сразу после их появления\. Чем быстрее ошибка выявлена, тем дешевле стоит её устранение\. Вот как, например, растёт стоимость дефекта безопасности согласно данным NIST:

![0528_Finances_ru/image2.png](https://import.viva64.com/docx/blog/0528_Finances_ru/image2.png)

Анализатор PVS\-Studio крайне востребован там, где любая ошибка может привести к большим потерям времени или денег\. Одной из таких сфер разработки программного обеспечения является финансовый сектор\. Речь идёт, например, о трайдинге и банковском программном обеспечении\. Мы видим постепенный рост интереса со стороны команд разработчиков, обслуживающих финансовые компании, и они начали пополнять список наших [клиентов из финансовой сферы](https://pvs-studio.ru/ru/about/customers/)\. Однако, конечно, нам надо уделить этому направлению больше внимания и эта статья \- первая ласточка\.

А теперь небольшая обещанная история\. В анализаторе есть диагностика [V3040](https://pvs-studio.ru/ru/docs/warnings/v3040/), которая выявляет ситуацию, когда одно целочисленное значение делится на другое целочисленное значение и результат помещается в переменную типа _float_ или _double_\. Конечно, не всегда подобный код является ошибочным, но он однозначно подозрителен и требует проверки\.

Кто\-то посчитает, что подобная ошибка надуманна и предупреждение V3040 часто будет ложным\. Он может быть и прав, и не прав\. Все зависит от типа приложения и от того, что, собственно, программа считает\.

Один человек рассказал, что команда, в которой он работает, нашла с помощью этой диагностики очень неприятную ошибку в их программном обеспечении\. Где этот человек работает, я рассказать не могу, так как история была поведана мне на условиях анонимности \(нет, это был не банк\)\.

Модуль, в котором была найдена ошибка, рассчитывал гибкие цены для различных вариантов и условий заказов\. Другими словами, подсчитывалось, какую цену менеджеру по продажам озвучить потенциальному клиенту\. Ошибка закралась в расчёт некоего коэффициента\. Использовалось целочисленное деление там, где не надо:

```cpp
double K;
....
if (foo)
  K = 200 / 95;
else
....
```

Сразу скажу, я придумал этот код и не знаю, как на самом деле он выглядел\. Идея в том, что вместо коэффициента 2\.1 получился коэффициент 2\. В результате менеджеры начинали общение с клиентом, выставляя цену чуть ниже, чем полагалось\. Цена считалась неправильно только при определенном сочетании условий, поэтому никто никогда ошибку не замечал, доверяя тем числам, которые выдаёт программа\.

Поскольку, как я сказал, этот коэффициент рассчитывался неправильно только в редких случаях, эта ошибка не нанесла заметного вреда выручке компании\. Тем не менее, ошибка была столь неприятна для разработчиков, что они решили скрыть её обнаружение он вышестоящего руководства и просто тихо исправили код\.

Оставим в стороне вопрос корректности такого поведения программистов\. Намного интереснее, что очень простая ошибка целочисленного деления приводит к таким последствиям, про которые страшно рассказывать начальству\.

![0528_Finances_ru/image3.png](https://import.viva64.com/docx/blog/0528_Finances_ru/image3.png)

Как видите, даже [простые ошибки](https://pvs-studio.ru/ru/blog/posts/cpp/0499/) могут стать причиной потери времени, денег, репутации\. Если же речь идёт о более ответственном программном обеспечении, то ошибки могут обойтись вообще крайне дорого\. Те, кто разрабатывает софт для финансовой сферы, используют комплексный подход для обеспечения надежности\. Статический анализатор PVS\-Studio может стать отличным дополнением к комплексу мер по контролю качества кода\.

Предлагаю всем, кого заботит качество кода, незамедлительно [скачать](https://pvs-studio.ru/ru/pvs-studio/download/) и попробовать анализатор PVS\-Studio\. Он найдет вам ошибки, и вы будете изумляться тому везению, что программа вообще работала :\)\. Пусть лучше многие ошибки найдет анализатор, а не ваши клиенты, и уж тем более не хакеры\.

А ещё отчеты PVS\-Studio можно очень красиво показывать начальству, [интегрировав](https://pvs-studio.ru/ru/blog/posts/0513/) его с инструментом SonarQube\.

![0528_Finances_ru/image5.png](https://import.viva64.com/docx/blog/0528_Finances_ru/image5.png)

Несколько ознакомительных видео о PVS\-Studio \(на английском\):

1. [PVS\-Studio static code analyzer for C, C\+\+ and C\# \(2017\)](https://youtu.be/kmqF130pQW8)\.
1. [PVS\-Studio plugin for SonarQube](https://youtu.be/TkmZiz0g9WE)\.
1. [PVS\-Studio for Linux](https://youtu.be/4SZxwRKo_os)\. This video shows how to install the PVS\-Studio for Linux and to check Far Manager for bugs\.
1. Adopting PVS\-Studio in a large project\. [Part N1](https://youtu.be/Jh-TP2jopTo), [Part N2](https://youtu.be/ZfYQMUISOIA)\.