Статистическая модель Миллса

 

Модель совершенно другого типа разработал Миллс [13]. В ней не используется никаких предположений о поведении интенсивности отказов λ(t), эта модель строится на твердом статистическом фунда­менте. Сначала программа «засоряется» некоторым количеством известных ошибок. Эти ошибки вносятся в программу случайным образом, а затем делается пред­положение, что для исходных и внесенных в программу ошибок вероят­ность обнаружения при последующем тестировании одинакова и зависит только от их количества. Тести­руя программу в течение некоторого вре­мени и сравнивая количество обнаруженных исходных и внесенных в про­грамму ошибок, можно оценить N – первона­чальное число ошибок в про­грамме.

Предположим, что в программу было внесено s ошибок, после чего решено начать тестирование. Пусть при тестировании об­наружено n+v ошибок, причем п – число найденных исходных ошибок, a v – число най­денных внесенных ошибок. Тогда оценка для N по методу максимального правдоподобия будет следующей:

 

(3.4)

 

Например, если в программу внесено 20 ошибок и к некоторому мо­менту тестирования обнаружено 15 исходных и 5 внесенных ошибок, зна­чение N можно оценить в 60. В действительности N можно оценивать по­сле обнаружения каждой ошибки; Миллс [13] предлагает во время всего периода тестирования отмечать на гра­фике число найденных ошибок и те­кущие оценки для N.

Вторая часть модели связана с выдвижением и проверкой ги­потез об N. Примем, что в программе имеется не более k исходных ошибок, и вне­сем в нее еще s ошибок. Теперь программа тести­руется, пока не будут об­наружены все внесенные ошибки, причем в этот момент подсчитывается число обнаруженных исходных ошибок (обозначим его п).Уровень значи­мости С вычисляется по следующей формуле:

 

(3.5)

 

Величина С является мерой доверия к модели; это вероятность того, что число исходных ошибок будет не больше k. Например, если мы утвер­ждаем, что в программе нет ошибок (k = 0), и, внеся в программу 4 ошибки, все их обнаруживаем, не встретив ни одной исходной ошибки, то С = 0,80. Чтобы достичь уровня 95 %, нам надо было бы внести в про­грамму 19 ошибок. Если мы утверждаем, что в программе не более трех исходных ошибок, и, внеся шесть ошибок, обнаруживаем их все и не более трех ис­ходных, уровень значимости равен 60 %. Формула для С имеет под собой прочные статистические основания; выведена она Миллсом [13].

Эти две формулы для N и С образуют полезную модель ошибок; первая предсказывает число ошибок, а вторая может использо­ваться для установления доверительного уровня прогноза. Сла­бость этой формулы в том, что С нельзя предсказать до тех пор, пока не будут обнаружены все внесенные ошибки (а это, конечно, может не произойти до самого конца этапа тестирования). Чтобы справиться с этой трудностью, можно моди­фицировать формулу для С так, чтобы С можно было оценить после того, как найдено j внесенных ошибок (j £ s)[14]:

 

(3.6)

 

В предыдущем примере, где k = 3, a s = 6, если найдены 5 из 6 вне­сен­ных ошибок, С опускается с 60 до 33 %. Еще один график, ко­торый по­лезно строить во время тестирования, – текущее значение верхней границы k для некоторого фиксированного доверительного уровня, например 90 %.

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

Процесс внесения ошибок в настоящее время является самым сла­бым местом модели, поскольку предполагается, что для исходных и вне­сенных ошибок вероятность обнаружения одинакова (но неизвестна). Из этого следует, что внесенные ошибки должны быть «типичными» образ­цами ошибок, но мы еще недостаточно хо­рошо понимаем программирова­ние, чтобы сказать, какими именно должны быть типичные ошибки. Од­нако по сравнению с пробле­мами, стоящими перед другими моделями на­дежности, эта проблема кажется относительно несложной и вполне разре­шимой.

Наконец, отметим еще одно достоинство внесения ошибок: оно мо­жет оказывать положительное психологическое влияние на группу тести­рования. У программистов возникают затрудне­ния при отладке своих про­грамм, например, потому, что они склон­ны считать каждую обнаруженную ошибку последней. Внесение ошибок может помочь в этом деле, по­скольку теперь программист знает, что в его программе есть еще не обна­руженные ошибки.