83
лее примитивными (операторы на определенном языке, участки ранее напи-
санных программных систем). Это значит, что разработчик ПО для достиже-
ния надежности должен выполнить более сложную работу, чем разработчик
оборудования.
Таким образом, ошибка ПО обусловлена его несоответствием постав-
ленным задачам. Это может произойти по двум причинам: либо разработчи-
ком программы допущено нарушение спецификации, либо спецификация не
точная или неполная.
Спецификация – это точное описание поведения системы с точки зрения
достижения поставленных перед ней целей и требований пользователя. В
разработке ПО трансляция целей и требований пользователя во внутренние
спецификации является самой значительной, так как по объему и степени
сложности ошибок, порождаемых в этот момент, она занимает основное ме-
сто во всем процессе разработки ПО. После написания внутренних специфи-
каций можно приступать к проектированию, кодированию и отлаживанию
ПО.
Несоответствие по первой причине встречается в первую очередь в
сложных программных системах, где отдельные ошибки программиста труд-
но обозримы и могут оставаться не раскрытыми.
Несоответствие по второй причине, возникает в первую очередь по тому,
что при составлении спецификации многие факторы, влияющие на работу
программ, не известны. Они выявляются постепенно, только в ходе эксплуа-
тации программы. Особенно это относится к управляющим программам.
Кроме того, ни в технических требованиях, ни при проверке программы
невозможно оговорить и проверить все ситуации, которые могут возникнуть
при использовании программы. Дело в том, что программа является краткой
записью очень сложных функций, поэтому записать в спецификациях все
свойства функции зачастую становится просто невыполнимой задачей. На-
пример, если входами для программы являются 10 переменных, каждая из ко-
торых может принимать 10
3
различных значений, то число возможных вход-
ных комбинаций будет 10
30
. Если допустить, что проверка реакции програм-
мы на каждую из входных комбинаций занимает одну микросекунду, то в год
можно проверить только 10
13
комбинаций. Поэтому естественно, что в разра-
ботанной программе всегда могут встречаться непроверенные сочетания ис-
ходных данных, при наступлении которых программа может отказать в вы-
полнении нужных функций.
Поэтому возникновение ошибок по первой причине не говорит о надеж-
ности ПО, в этом случае говорят о корректности программы.
Корректность программы – это ее соответствие спецификации. По-
скольку спецификация не всегда и не полностью соответствует фактическим
требованиям к программе, возможны случаи, когда некорректная программа
работает надежно, или наоборот, корректная программа – ненадежно.