Найти тему
PVS-Studio

Распространённые паттерны опечаток при программировании

Оглавление

Есть бесконечное количество способов ошибиться при написании кода. Однако иногда можно заметить явные интересные закономерности, как и где ошибаются программисты. Поговорим о коде, который "притягивает" опечатки.

Автор статьи: Андрей Карпов

На чём основаны наблюдения

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

Рассматривая все эти ошибки, я постепенно замечаю различные повторяющиеся паттерны опечаток. За редким исключением они не зависят от языка программирования. По крайней мере, они одновременно свойственны коду, написанному на C, C++, C#, Java. В этой статье я опишу 7 паттернов, которые заметил к настоящему моменту:

  • Эффект последней строки.
  • Злополучная функция memset.
  • Неверные функции сравнения.
  • Неверные функции копирования.
  • Ошибки работы с датами и временем.
  • Несчастливые числа: 0, 1, 2.
  • Ошибка на единицу (off-by-one error).

Заметность закономерностей в ошибках свидетельствует о том, что они крайне распространены. Полезно знать о них, чтобы избегать написания потенциально опасного кода или более эффективно находить их в процессе обзоров кода. Другим словами, вы узнаете, какой код притягивает ошибки, и будете более внимательно его проверять. Конечно, PVS-Studio способен выявить многие подобные ошибки, но не все. Поэтому дополнительное внимание не повредит.

PVS-Studio

Все баги, описанные в этой статье, были найдены с помощью PVS-Studio. Этот инструмент поможет вам быстро выявлять в новом коде опечатки и другие дефекты, тем самым сокращая стоимость их исправления.

Полную версию статьи вы можете прочитать здесь