Авторы работы [5] выделяют следующие причины возникновения таких ошибок:
неверная логика (может быть следствием, как ошибок проектирования, так и кодирования);
неправильно выполняются арифметические операции (как правило – это ошибки кодирования);
неточные вычисления (могут быть следствием, как ошибок проектирования, так и кодирования). Очень сложная тема, надо выработать свое отношение к ней с точки зрения разработки безопасного ПО.
Выделяются подпункты:
устаревшие константы;
ошибки вычислений;
неверно расставленные скобки;
неправильный порядок операторов;
неверно работает базовая функция;
переполнение и потеря значащих разрядов;
ошибки отсечения и округления;
путаница с представлением данных;
неправильное преобразование данных из одного формата в другой;
неверная формула;
неправильное приближение.
Начальное и последующие состояния (Ошибки инициализации).
Представляется не очень обоснованным их выделение в самостоятельный раздел, хотя они важны.
Выделяются подпункты:
не присвоены начальные значения;
не инициализирована переменная, управляющая циклом;
не инициализирован указатель;
не очищена строка;
не инициализированы регистры;
не сброшен флаг;
данные должны были инициализироваться в другом месте;
не выполнена повторная инициализация;
предположение (не верное), что данные не были инициализированы;
путаница со статическими и динамическими переменными;
не предполагавшаяся модификация данных, выполняемая другими подпрограммами;
ошибочная инициализация;
зависимость от инструментальных средств, которых может не быть.