Простые интуитивные модели

 

В поисках средств прогнозирования надежности программного обеспечения было разработано и несколько чрезвычайно простых моделей для оценки числа ошибок. Из-за их простоты им часто уделяется недоста­точно внимания, но они основаны на более реальных предположениях, чем сложные модели, и могут оказаться очень полезными.

Первый из них – метод независимого тестирования. Он предлагает начинать тестирование двумя совершенно независимыми группами, ис­пользующими независимые наборы тестов. Этим двум группам (или двум сотрудникам – в зависимости от размеров проекта) в течение некоторого времени позволяется тестировать систему параллельно, а затем их резуль­таты собирают и сравнивают. Обозначим через N1и N2число оши­бок, об­наруженных каждой из групп соответственно, а через N12– число ошибок, обнаруженных дважды (т.е. обеими группами). Это отношение изображено на рис. 3.7.

Пусть N обозначает неизвестное полное число ошибок в про­грамме. Можно установить эффективность тестирования каждой из групп: E1=N1/N, E2=N2/N. Предполагая, что возможность обнаружения для всех ошибок одинакова (что справедливо далеко не для всех программ), мы можем рассматривать каждое под множество пространства N как аппрок­симацию всего пространства. Если первая группа обнаружила 10 % всех ошибок, она должна была найти примерно 10 % всякого случайным обра­зом выбранного подмножества, например подмножества N2. Отсюда

 

E1 = (N1/N) = (N12/N2).

 

Выполняя подстановку для N2, получаем

 

E1=N12/(E2·N)

и

(3.7)

N12известно, а Е1и Е2можно оценить как N12/N2и N12/N1соот­ветст­венно, откуда мы получаем приближение для N.


Рис. 3.7. Множества ошибок, обнаруженных на независимых тестах

 

Например, предположим, что две группы нашли по 20 и 30 ошибок соответственно, и, сравнивая их, мы замечаем, что восемь ошибок из них –общие. Имеем E1 = 0,27, E2 = 0,4, что дает, оценку N = 74 и примерно 32 необ­наруженные ошибки (74 – 20 – 30 + 8).

Второй метод (вероятно, самый простой) – метод накопления стати­стики. Он строит оценки, основываясь на исторических данных, в частно­сти на сред­нем числе ошибок, приходящемся на один оператор в преды­дущих проектах. В литературе сведения о частоте ошибок программистов довольно немногочисленны, но на основании имеющихся данных пред­ставляется, что в среднем по «отрасли» на каждую тысячу опе­раторов про­граммы после автономного тестирования остается при­мерно 10 ошибок. Таким образом, если нет более точных данных, можно предположить, что в программе из 32 000 операторов после автономного тестирования еще остается 320 ошибок. Интенсивность отказов из-за одной ошибки при не­прерывном использовании программы составляет в среднем 10–4 1/ч.

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

Из-за неопределенностей во всех обсуждавшихся моделях пока са­мый разумный подход – воспользоваться несколькими моделями сразу и объединить их результаты. Если имеется возможность создать имитацион­ную модель процесса, ее тоже следует использовать для уточнения резуль­татов.