Статическая модель Миллса
Модель совершенно другого типа разработал Миллс. В ней не используется никаких предположений о поведении интенсивности отказов λ(t), эта модель строится на твердом статистическом фундаменте. Сначала программа «засоряется» некоторым количеством известных ошибок. Эти ошибки вносятся в программу случайным образом, а затем делается предположение, что для исходных и внесенных в программу ошибок вероятность обнаружения при последующем тестировании одинакова и зависит только от их количества. Тестируя программу в течение некоторого времени и сравнивая количество обнаруженных исходных и внесенных в программу ошибок, можно оценить N – первоначальное число ошибок в программе.
Предположим, что в программу было внесено s ошибок, после чего решено начать тестирование. Пусть при тестировании обнаружено n+v ошибок, причем п – число найденных исходных ошибок, a v – число найденных внесенных ошибок. Тогда оценка для N по методу максимального правдоподобия будет следующей:
(3.4)
Например, если в программу внесено 20 ошибок и к некоторому моменту тестирования обнаружено 15 исходных и 5 внесенных ошибок, значение N можно оценить в 60. В действительности N можно оценивать после обнаружения каждой ошибки; Миллс предлагает во время всего периода тестирования отмечать на графике число найденных ошибок и текущие оценки для N.
Вторая часть модели связана с выдвижением и проверкой гипотез об N. Примем, что в программе имеется не более k исходных ошибок, и внесем в нее еще sошибок. Теперь программа тестируется, пока не будут обнаружены все внесенные ошибки, причем в этот момент подсчитывается число обнаруженных исходных ошибок (обозначим его п).Уровень значимости С вычисляется по следующей формуле:
(3.5)
Величина С является мерой доверия к модели; это вероятность того, что число исходных ошибок будет не больше k. Например, если мы утверждаем, что в программе нет ошибок (k = 0), и, внеся в программу 4 ошибки, все их обнаруживаем, не встретив ни одной исходной ошибки, то С = 0,80. Чтобы достичь уровня 95 %, нам надо было бы внести в программу 19 ошибок. Если мы утверждаем, что в программе не более трех исходных ошибок, и, внеся шесть ошибок, обнаруживаем их все и не более трех исходных, уровень значимости равен 60 %. Формула для С имеет под собой прочные статистические основания; выведена она Миллсом.
Эти две формулы для N и С образуют полезную модель ошибок; первая предсказывает число ошибок, а вторая может использоваться для установления доверительного уровня прогноза. Слабость этой формулы в том, что С нельзя предсказать до тех пор, пока не будут обнаружены все внесенные ошибки (а это, конечно, может не произойти до самого конца этапа тестирования). Чтобы справиться с этой трудностью, можно модифицировать формулу для С так, чтобы Сможно было оценить после того, как найдено j внесенных ошибок (j £ s):
(3.6)
В предыдущем примере, где k = 3, a s = 6, если найдены 5 из 6 внесенных ошибок, С опускается с 60 до 33 %. Еще один график, который полезно строить во время тестирования, – текущее значение верхней границы k для некоторого фиксированного доверительного уровня, например 90 %.
Модель Миллса одновременно математически проста и интуитивно понятна. Легко представить себе программу внесения ошибок, которая случайным образом выбирает модуль, вносит логическую ошибку, изменяя или убирая операторы, и затем заново его компилирует. Природа внесенной ошибки должна сохраняться в тайне, но все их следует регистрировать, чтобы впоследствии можно было разделять ошибки на исходные и внесенные.
Процесс внесения ошибок в настоящее время является самым слабым местом модели, поскольку предполагается, что для исходных и внесенных ошибок вероятность обнаружения одинакова (но неизвестна). Из этого следует, что внесенные ошибки должны быть «типичными» образцами ошибок, но мы еще недостаточно хорошо понимаем программирование, чтобы сказать, какими именно должны быть типичные ошибки. Однако по сравнению с проблемами, стоящими перед другими моделями надежности, эта проблема кажется относительно несложной и вполне разрешимой.
Наконец, отметим еще одно достоинство внесения ошибок: оно может оказывать положительное психологическое влияние на группу тестирования. У программистов возникают затруднения при отладке своих программ, например, потому, что они склонны считать каждую обнаруженную ошибку последней. Внесение ошибок может помочь в этом деле, поскольку теперь программист знает, что в его программе есть еще не обнаруженные ошибки.
Глава 3. Заключение
Несмотря на очевидную актуальность, вопрос надежности программного обеспечения не привлекает должного внимания. Вместе с тем, даже поверхностный анализ проблемы с теоретико-вероятностной точки зрения позволяет выявить некоторые закономерности.
В заключение можно подвести итог:
В соответствии с классической работой Г. Майерса:
1. В программном обеспечении имеется ошибка, если оно не выполняет того, что пользователю разумно от него ожидать;
2. Отказ программного обеспечения - это появление в нем ошибки;
3. Надежность программного обеспечения - есть вероятность его работы без отказов в течении определенного периода времени, рассчитанного с учетом стоимости для пользователя каждого отказа.
Из данных определений можно сделать важные выводы:
1. Надежность программного обеспечения является не только внутренним свойством программы;
2. Надежность программного обеспечения - это функция как самого ПО, так и ожиданий (действий) его пользователей.
Основными причинами ошибок программного обеспечения являются:
1. Большая сложность ПО, например, по сравнению с аппаратурой ЭВМ;
2. Неправильный перевод информации из одного представления в другое.
Глава 4. Список используемой литературы
Основная литература
1. Липаев В. В. / Программная инженерия.Методологические основы. //М.:ТЕИС,2006.
2. ГОСТ 27.002 – 89. Надежность в технике. Основные понятия. Термины и определения. // М.: Издательство стандартов, 1990.
3. ГОСТ Р ИСО/МЭК 9126 – 93. Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению. // М.: Издательство стандартов, 1994.
4. ГОСТ 51901.5 – 2005. Менеджмент риска. Руководство по применению методов анализа надежности. // М.: Издательство стандартов, 2007.
5. ГОСТ 28195 – 89. Оценка качества программных средств. Общие положения. // М.: Издательство стандартов, 1989.
6. ГОСТ 27.310 – 95. Надежность в технике. Анализ видов, последствий и критичности отказов. // М.: Издательство стандартов, 1995.
7. ГОСТ 51901.12 – 2007. Менеджмент риска. Метод анализа видов и последствий отказов. // М.: Издательство стандартов, 2007.
8. Г. Майерс. Надежность программного обеспечения. Москва, Мир, 1980 год.
Дополнительная литература
1. Р. Гласс. Руководоство по надежному программированию. Москва, «Финансы и статистика», 1982 год.
2. В. Турский. Методология программирования. Москва, Мир, 1981 год.
3. В. Феллер. Введение в теорию вероятностей и ее приложения. Т.1. Москва; изд.: «Мир». 1967 год.
Периодические издания