Надежность информационных систем 7
Что такое ошибка?
Согласно одному из известных определений, программное обеспечение
содержит ошибку, если его поведение не соответствует спецификациям. Это
определение страдает существенным недостатком: неявно предполагается,
что спецификации корректны. Такое предположение если и бывает справед-
ливым, то редко; подготовка спецификаций — один из основных источников
ошибок. Если поведение программного продукта не соответствует его спе-
цификациям, ошибка, вероятно, имеется. Однако, если система ведет себя
в соответствии со спецификациями, мы не можем утверждать, что она не
содержит ошибок.
Второе известное определение гласит, что программное обеспечение со-
держит ошибку, если его поведение не соответствует спецификациям при ис-
пользовании в установленных при разработке пределах. В действительности
это определение еще хуже первого. Если система случайно используется в
непредусмотренной ситуации, ее поведение должно оставаться разумным.
Если это не так, она содержит ошибку. Рассмотрим авиационную систему
диспетчеризации, которая прослеживает и координирует движение самолетов
над некоторым географическим районом. Предположим, что, согласно специ-
фикациям, система должна управлять движением до 200 самолетов одновре-
менно. Но однажды по непредвиденным обстоятельствам в районе появился
201 самолет. Если поведение системы неразумно — скажем, она забывает об
одном из самолетов или выходит из строя, — система содержит ошибку, хотя
она используется вне пределов, установленных при проектировании.
Согласно третьему возможному определению, ошибка имеется тогда, ко-
гда программное обеспечение ведет себя не в соответствии с официальной
документацией и поставленными пользователю публикациями. К несчастью,
это определение также страдает несколькими изъянами. Возможны ситуа-
ции, когда программное обеспечение ведет себя в соответствии с официаль-
ными публикациями, но ошибки все-таки имеются, так как они содержатся и
в программе, и в публикациях. Другая проблема возникает вследствие тен-
денции описывать в руководствах для пользователей только ожидаемую и
планируемую работу с системой. К примеру, что мы имеем руководство для
пользователей системы разделения времени, в котором говорится: “Чтобы
дать новую команду, нажмите один раз клавишу “Enter” и напечатайте эту
команду”. Предположим, что пользователь случайно нажимает клавишу “En-
ter” дважды и система программного обеспечения выходит из строя, потому
что ее разработчики не предусмотрели такой ситуации. Система, очевидно,
содержит ошибку, но мы не можем утверждать, что она ведет себя не в соот-
ветствии с публикациями.