Главная Первое Второе Третье Последнее

Г.Майерс: Надежность программного обеспечения

Поскольку обработка данных затрагивает нашу жизнь всё в большей степени, ошибки ЭВМ могут теперь иметь такие последствия, как нанесение материального ущерба, нарушение секретности и многие другие, включая смерть.

Что такое ошибка в программном обеспечении и что такое надёжность программного обеспечения? Важно договориться о стандартном определении, чтобы избежать таких ситуаций, когда пользователь утверждает, что обнаружил в системе ошибку, а разработчик отвечает: "Нет, система так и была задумана".

Что такое ошибка?

Пример: Система раннего обнаружения баллистических снарядов Ballistic Missile Early Warning System должна наблюдать за объектами, движущимися по направлению к США, и, если объект не опознан, начать последовательность защитных мероприятий - от попыток установить с объектом связь до перехвата и уничтожения. Одна из ранних версий системы ошибочно принимала поднимающуюся над горизонтом Луну за снаряд, летящий над Северным полушарием. Является ли это ошибкой? С точки зрения пользователя (Министерства обороны США) - да. С точки зрения разработчика системы - возможно, и нет. Разработчик может настаивать на том, что в соответствии со спецификациями защитные действия должны быть начаты по отношению к любому движущемуся объекту, появившемуся над горизонтом и не опознанному как мирный летательный аппарат.

Дело в том, что разные люди по-разному понимают, что такое ошибка в программном обеспечении.

Программное обеспечение содержит ошибку, если:

  • 1. его поведение не соответствует спецификациям.
    Недостатки: неявно предполагается, что спецификации корректны. Это если и бывает справедливым, то редко; подготовка спецификаций - один из основных источников ошибок. Если поведение программного продукта не соответствует его спецификациям, ошибка, вероятно, имеется. Однако, если система ведёт себя в соответствии со спецификациями, мы не можем утверждать, что она не содержит ошибок.
  • 2. его поведение не соответствует спецификациям при использовании в установленных при разработке пределах.
    Это определение ещё хуже первого. Если система случайно используется в непредусмотренной ситуации, её поведение должно оставаться разумным. Если это не так, она содержит ошибку. Например, авиационная диспетчерская система, согласно спецификациям, должна управлять движением до 200 самолётов одновременно. Но однажды, в районе появился 201 самолёт. Если поведение системы неразумно - скажем, она забывает об одном из самолётов или выходит из строя, система содержит ошибку, хотя и используется вне пределов, установленных при проектировании.
  • 3. программное обеспечение ведёт себя не в соответствии с официальной документацией и поставленными пользователю публикациями.
    А если ошибки содержатся и в программе и в публикациях? Или если в руководстве описана только ожидаемая и планируемая работа с системой. Например, написано: "Чтобы получить то-то, нажмите один раз то-то". Предположим, что пользователь случайно два раза нажимает то-то и система выходит из строя, потому что её разработчики не предусмотрели такой ситуации. Система, очевидно, содержит ошибку, но ведёт себя в соответствии с публикациями.
  • 4. система не способна действовать в соответствии с исходным контрактом и перечнем требований пользователя.
    Это утверждение тоже не лишено недостатков, поскольку письменные требования пользователя редко детализированы настолько, чтобы описывать желаемое поведение программного обеспечения при всех мыслимых обстоятельствах.
Окончательное определение:
В программном обеспечении имеется ошибка, если оно не выполняет того, что пользователю разумно от него ожидать. Отказ программного обеспечения - это проявление ошибки в нём.

Что такое надёжность?

Согласно известному определению, надёжность есть вероятность того, что при функционировании системы в течение некоторого периода времени не будет обнаружено ни единой ошибки.

Основной недостаток такого определения - это то, что в нем не учтено различие между ошибками разных типов. Например, рассмотрим авиационную диспетчерскую систему с двумя ошибками в программном обеспечении: из-за одной теряется след самолёта, а другая состоит в том, что в сообщении оператору неправильно печатается одно слово (например, ТРАНСАТТЛАНТИЧЕСКИЙ вместо ТРАНСАТЛАНТИЧЕСКИЙ). По своим последствиям эти ошибки далеко не одинаковы, поэтому надёжность должна быть определена как функция не только частоты ошибок, но и их серьёзности. Следовательно:

Надёжность программного обеспечения есть вероятность его работы без отказов в течение определённого периода времени, рассчитанная с учётом стоимости для пользователя каждого отказа.

Таким образом, надёжность программного обеспечения является функцией воздействия ошибок на пользователя системы; она не обязательно прямо связана с оценкой "изнутри" программного обеспечения. Даже крупный просчёт в проектировании может оказаться не слишком заметным для пользователя. С другой стороны, как будто бы тривиальная ошибка может иметь катастрофические последствия. Например, первый запуск космического корабля на Венеру потерпел неудачу из-за того, что в операторе DO программы на Фортране была пропущена запятая.

Надёжность и стоимость программного обеспечения.

Типичное распределение стоимости программного обеспечения:

    17% - Проектирование;
    8% - Программирование;
    25% - Тестирование;
    50% - Сопровождение.
Высокая стоимость программного обеспечения - во многом следствие низкой надёжности. При увеличении производительности программиста (если измерять её только скоростью разработки и кодирования программы) стоимость существенно не уменьшается. Попытки увеличить производительность программиста могут в некоторых случаях даже повысить стоимость. Наилучший путь сокращения стоимости - в уменьшении стоимости его тестирования и сопровождения. А это может (Под сопровождением понимается любое продолжение работы с программным продуктом, такие как изменения, дополнения и т.п. с целью обеспечения его дальнейшей работоспособности и соответствия его требованиям времени). А это может быть достигнуто не за счёт инструментов, призванных увеличить скорость программирования, а лишь в результате разработки средств, повышающих корректность и чёткость при создании программного обеспечения.

Основные принципы проектирования.

Все принципы и методы обеспечения надёжности в соответствии с их целью можно разбить на четыре группы:

    1 - Предупреждение ошибок
    2 - Обнаружение ошибок
    3 - Исправление ошибок
    4 - Обеспечение устойчивости к ошибкам


met-rix.narod.ru
Сайт управляется системой uCoz

Интерреклама. Интернет