Категории ошибок в программном обеспечении
Многообразие ошибок, встречающихся в программных изделиях, порождает множество их классификаций, необходимых для систематизации большого статистического материала, накопленного при создании и эксплуатации программного обеспечения.
Ошибки можно систематизировать по этапам разработки программного продукта.
1. При описании требований к программному продукту появляются ошибки в спецификациях, обусловленные неполным или некорректным пониманием требований пользователя разработчиком. Некачественно сформулированные пользователем требования также порождают ошибки в требованиях к программному изделию. Это наиболее серьезные ошибки, исправление которых на последующих этапах проектирования, и особенно в процессе эксплуатации, может потребовать огромных трудозатрат.
2. На этапе системного анализа решаемой проблемы могут также появляться неточные формулировки требований к программному обеспечению, а также пропуск отдельных требований.
3. Архитектурное проектирование программного изделия может порождать ошибки, связанные с неточностями в функциональной декомпозиции и в интерфейсах между модулями.
4. При алгоритмизации отдельных функциональных задач могут быть допущены ошибки, обусловленные выбором неверного или неэффективного алгоритма, неправильного математического метода решения, неверной логикой алгоритма.
5. Серьезные ошибки могут быть допущены при проектировании базы данных (в описании модели, определении типов элементов и структур данных, а также связей между ними, способах обращений к данным и т.п.)-
6. Наибольшее число ошибок относится к этапу кодирования и тестирования. Ошибки этой группы исследованы наиболее полно, и для них собран обширный статистический материал-Ошибки при программировании можно просто разделить на синтаксические и логические. Многие синтаксические ошибки обнаруживает транслятор; немало синтаксических ошибок при трансляции не обнаруживается.
Так в ряде языков программирования не обнаруживаются пропуски операторов в программе, нарушения форматов ввода/вывода, правил индексации массивов, отсутствие начальных значений переменных и т.п.