﻿# Цена ошибки на примере одной из проблем в PVS\-Studio

Мы часто пишем статьи про программные ошибки, которые обнаруживаем с помощью нашего статического анализатора кода PVS\-Studio\. Эти ошибки бывают разные: простые и сложные, очевидные и труднонаходимые, понятные и такие, про которые приходится объяснять отдельно, да еще и несколько минут\. Все эти ошибки объединяет то, что у них есть цена\. Но вот какая она, эта цена ошибки – наши читатели часто не соглашаются с нашим мнением\. Некоторые говорят так: ну и что, что это ошибка\. Найдем – исправим\. А не найдем – значит и не страшно\. Или по\-другому немножко\. Ну упадет приложение из\-за этой ошибки, ничего страшного\. Перезапустим и все\.

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

Я хочу рассказать историю из жизни нашей компании\. Хотя она и не относится к статическому анализу, но она очень хорошо иллюстрирует понятие "цена ошибки"\.

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

Схема простая и работающая\. Обработчик формы запросов на сайте, проверка и отправка почты по cron, да что здесь может сломаться? Однако 19 декабря на сервере отвалился cron\. Уже не важно почему конкретно, да и тем более фрагмент кода здесь привести не удастся\. Допускаю даже, что там нет ошибки, а это что\-то не настроено было просто как надо\. Но он отвалился\. И письма с ключами перестали отправляться\. Совсем\.\.\.

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

Цена ошибки для меня в этом инциденте составила около 50 запросов ключа, на которые мы не ответили вовремя\. 50 пользователей с помощью усилий в маркетинге и рекламе мы привели на сайт и не смогли обработать\. 

Вы скажете: "Ну что же вы не тестируете отправку почты с сайта? Это же важная часть процесса\!" Да, важная\. Поэтому мы ее тестируем\. "Наверное вы отправляете e\-mail в случае ошибки, а тут он не отправился?" Нет, мы знаем, что в обработчиках ошибок часто тоже содержатся ошибки\. Поэтому мы сделали умно\. Письмо о том, что почта работает приходит каждый день в одно и тоже время\. Последнее такое письмо было как раз 18 декабря\. К сожалению, я не заметил, что оно перестало приходить\.

К чему вся эта заметка? Ошибки \(в программах, в их настройке, да и просто человеческий фактор\) приводят к потерям\. Если вы можете что\-то сделать для того, чтобы уменьшить эти риски, то обязательно сделайте\. Например, внедрите статический анализатор кода\.

Ещё этот хороший пример, демонстрирующий, почему в статьях мы регулярно обращаем внимание на важность проверки результаты работы функций, [таких как malloc](https://pvs-studio.ru/ru/blog/posts/cpp/0558/)\. Приостановка работы программы \(падение\) это не нормальное поведение, если что\-то пошло не так\. Это отказ в обслуживании \(CWE\-400\)\. Это потенциальная уязвимость\. [Сокращая](https://pvs-studio.ru/ru/blog/posts/0625/) их количество вы снижаете риски потерь\.