﻿# Мифы о статическом анализе\. Миф второй – профессиональные разработчики не допускают глупых ошибок

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

Миф второй: "Профессиональные разработчики не допускают глупых ошибок, которые в основном и ловят статические анализаторы кода"\.

Вот как выглядит такое утверждение при обсуждении на форуме \(собирательный образ\):

_У меня, профессионального разработчика, уже N лет не было проблем с порчей памяти, временем жизни объектов и так далее\. Статический анализ \- это инструмент для "макдональдса", а здесь \(на профессиональном форуме\) сидят гики\. Сейчас мои основные проблемы это сложно тестируемые алгоритмы и интеграция с другими разработчиками с использованием неявных контрактов по состояниям объектов\._

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

Это не так\. Любые программисты делают глупые ошибки\. Я знаю, что вы меня не услышали\. Повторю еще раз еретические мысли\. Все программисты делают глупые ошибки\. Неважно, какие они профессионалы\. Людям свойственно делать ошибки\. И чаще всего эти ошибки просты\.

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

Отвлечемся немного и вспомним, почему так живучи различные гороскопы\. Первая причина \- это очень расплывчатые формулировки, которые человеку легко подстроить под себя\. Но нам интересен второй компонент\. Люди не запоминают те случаи, когда предсказание не сбылось\. Зато очень хорошо помнят и пересказывают те случаи, когда их жизненная ситуация совпала с ситуацией, описанной в гороскопе\. В результате получается, что, говоря и вспоминая о гороскопе, мы находим N подтверждений, что гороскопы работают и не вспоминаем про N\*10 случаев, когда гороскоп не сработал\.

Что\-то аналогичное происходит с программистом, когда он занимается поиском ошибок\. Он хорошо помнит про сложные и интересные ошибки\. Может подискутировать о них с коллегами или написать заметку в блог\. Когда же он заметит, что вместо переменной 'AB' он написал 'BA', то он просто исправит ляп, и этот факт сразу исчезнет из его памяти\. Фрейд обратил внимание на следующую особенность памяти: человеку свойственно помнить положительные высказывания о себе и забывать отрицательные\. Если человек сражается со сложной ошибкой в алгоритмической задаче, то когда он её исправляет, считает себя героем\. Это стоит запомнить и даже рассказать другим\. Когда он находит глупый баг, то помнить про это нет никакого повода и желания\.

Какие у меня есть доказательства? Хотя большинство опечаток и ляпов исправляется, некоторые из них всё\-таки остаются незамеченными\. И массу примеров таких ошибок можно обнаружить в [этой](https://pvs-studio.ru/ru/blog/posts/cpp/a0077/) статье\. В статье хорошо видно, что ошибки допускали не новички, а квалифицированные программисты\.

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