Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метрики качества программного обеспечения.doc
Скачиваний:
26
Добавлен:
28.07.2019
Размер:
560.13 Кб
Скачать

2.4. Классификация моделей надежности

Как известно, на данный момент времени разработано большое количество моделей надежности ПС и их модификаций. Каждая из этих моделей определяет функцию надежности, которую можно вычислить при задании ей соответствующих данных, собранных во время функционирования ПС. Основными данными являются отказы и время. Другие дополнительные параметры связаны с типом ПС, условиями среды и данных.

Ввиду большого разнообразия моделей надежности разработано несколько подходов к классификации этих моделей [3]. Такие подходы в целом основываются на истории ошибок в проверяемой и тестируемой ПС на этапах ЖЦ. Одной из классификаций моделей надежности ПО является классификация Хетча. В ней предлагается разделение моделей на прогнозирующие, измерительные и оценочные (рис. 2).

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

Например, модель Мотли-Брукса основывается на длине и сложности структуры программы (количество ветвей, циклов, вложенность циклов), количестве и типах переменных, а также интерфейсов. В этих моделях длина программы служит для прогнозирования количества ошибок, например, для 100 операторов программы можно смоделировать интенсивность отказов.

Рис. 10.4. Классификация моделей надежности

Метрика Холстеда.

Модель Холстеда прогнозирует количество ошибок в программе в зависимости от ее объема и таких данных, как число операций и операндов, а также их общее число [2].

n1 - число уникальных операторов программы, включая символы-

разделители, имена процедур и знаки операций (словарь операторов);

n2 - число уникальных операндов программы (словарь операндов);

N1 - общее число операторов в программе;

N2 - общее число операндов в программе.

Опираясь на эти характеристики, получаемые непосредственно при анализе исходных текстов программ, М. Холстед вводит следующие оценки:

словарь программы

n=n1+n2, (1)

длину программы

N=N1+N2, (2)

объем программы

V=N*log2(n) (бит). (3)

Под битом подразумевается логическая единица информации - символ, оператор, операнд.

Далее М. Холстед вводит n* - теоретический словарь программы, т.е. словарный запас, необходимый для написания программы, с учетом того, что необходимая функция уже реализована в данном языке и, следовательно, программа сводится к вызову этой функции.

Используя n*, Холстед вводит оценку V*:

V* = n* * log2 n*, (4) с помощью которой описывается потенциальный объем программы, соответствующий максимально компактному тексту программы, реализующей данный алгоритм.

Время программирования программы предлагается вычислять по следующей формуле:

(5),

где S - число Страуда (Холстед принял равным 18 - число умственных операций в единицу времени).

Метрика Мак-Кейба.

Том Мак-Кейб заметил, качество программ зависит от сложности ее потока управления, а не от операторов и операндов как в теории Холстеда.

У Мак-Кейба показатель сложности определяется двумя показателями: цикломатическим числом Z(G) и цикломатической сложностью D(G).

Z(G)=e-V+2p (6), где е – число дуг (переходов) ориентированного графа; V – число вершин (узлов) соответствуют операторам; р – число компонент связности графа (обычно 1).

Цикломатическое число определяет количество линейно-независимых путей в программе (на основании теории графов).

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

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

Цикломатическая сложность – D(G)=e-V+p (7).

По Мак-Кейбу число условий (цикломатическое число), влияющих на поток управления, является показателем того, на сколько сложен компонент для понимания тестирования и обслуживания.

Мак-Кейб утверждает, что хорошо структурированные модули имеют цикломатическое число в диапазоне от 3 до 7, а цикломатическое число, равное 10, - разумный верхний предел сложности отдельного модуля, что подтверждается эмпирическими данными.

Если программисты переступают эту границу, им следует или переделать программу, или разбить ее на модули.

Оценка цикломатического числа полезна при подготовке тестовых данных и может дать нужную информацию о логической сложности программы. Другими словами, цикломатическое число показывает требуемое количество прохода для покрытия всех контуров сильно связного графа или количество тестовых прогонов программы, необходимых для исчерпывающего тестирования по критерию «работает каждая ветвь».

Пример 1.

Z(G)=e-V+2p; e=8; V=7; p=1; Z(G)=3.

Метрика Джилба

Одной из наиболее простых, но, как показывает практика, достаточно эффективных оценок сложности программ является метрика Т. Джилба, в которой логическая сложность программы определяется как насыщенность программы выражениями типа IF-THEN-ELSE. При этом вводятся две характеристики: CL - абсолютная сложность программы, характеризующаяся количеством операторов условия; cl - относительная сложность программы, характеризующаяся насыщенностью программы операторами условия, т. е. cl определяется как отношение CL к общему числу операторов.

Метрика граничных значений

Пусть G=(V,E) - ориентированный граф программы. Число входящих вершин у дуг называется отрицательной степенью вершины, а число исходящих из вершины дуг - положительной степенью вершины. Вершины у которых положительная степень <=1 - принимающие вершины, а вершины у которых положительная степень >=2 - вершины отбора.

Для получения оценки по методу граничных значений необходимо разбить граф G на максимальное число подграфов G', удовлетворяющих следующим условиям : вход в подграф осуществляется только через вершину отбора; каждый подграф включает вершину (называемую в дальнейшем нижней границей подграфа), в которую можно попасть из любой другой вершины подграфа.

Число вершин, образующих такой подграф, равно скорректированной сложности вершины отбора. Каждая принимающая вершина имеет скорректированную сложность, равную 1, кроме конечной вершины, скорректированная сложность которой равна 0. Скорректированные сложности всех вершин графа G суммируются, образуя абсолютную граничную сложность программы. После этого определяется относительная граничная сложность программы :

S0=1-(v-1)/Sa (8).

где S0 - относительная граничная сложность программы; Sa - абсолютная граничная сложность программы; v - общее число вершин графа программы.

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

Типичным примером таких моделей являются модели Нельсона, Рамамурти-Бастани и др.

Модель Нельсона

Модель оценки надежности Нельсона основывается на выполнении k-прогонов программы при тестировании и позволяет определить надежность

(9),

где tj - время выполнения j -прогона, и при qi<=1 она интерпретируется как интенсивность отказов. В процессе испытаний программы на тестовых ni прогонах оценка надежности вычисляется по формуле

(10), где к - число прогонов программы.

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

Простая интуитивная модель

Использование этой модели предполагает проведение тестирования двумя группами программистов (или двумя программистами в зависимости от величины программы) независимо друг от друга, использующими независимые тестовые наборы. В процессе тестирования каждая из групп фиксируют все найденные ею ошибки [5].

Пусть первая группа обнаружила n1 ошибок, вторая n2 , n12 - это число ошибок, обнаруженных как первой, так и второй группой.

Обозначим через N неизвестное количество ошибок, присутствующих в программе до начала тестирования. Тогда можно эффективность тестирования каждой из групп определить как

. (11).

Эффективность тестирования можно интерпретировать как вероятность того, что ошибка будет обнаружена. Таким образом, можно считать, что первая группа обнаруживает ошибку в программе с вероятностью (12), вторая - с вероятностью (13). Тогда вероятность p12 того, что ошибка будет обнаружена обеими группами, можно принять равной . С другой стороны, так как группы действуют независимо друг от друга, то р12 = р1р2.

Получаем: (14).

Отсюда получаем оценку первоначального числа ошибок программы:

(15).

Пример 2.

В процессе тестирования программы 1-я группа нашла 15 ошибок, 2-я группа нашла 25 ошибок, общих ошибок было 5. Определить надёжность по простой интуитивной модели.

n1

15 ошибок

n2

25 ошибок

Общие ошибки

5 ошибок

N

75

p1

0,2

p2

0,333333

P12

0,066667

Модель Миллса

Пусть в процессе тестирования обнаружено n исходных ошибок и v из S рассеянных ошибок. Тогда оценка N - первоначальное число ошибок в программе - составит

. (16)

Вторая часть модели связана с проверкой гипотезы выражения и тестирования N.

Рассмотрим случай, когда программа содержит К собственных ошибок и S рассеянных ошибок. Будем тестировать программу до тех пор, пока не обнаружим все рассеянные ошибки. В то же время количество обнаруженных исходных ошибок накапливается и запоминается. Далее вычисляется оценка надежности модели: 

(17)

как вероятность того, что в программе содержится K ошибок.

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

Формула для расчета С в случае, когда обнаружены не все искусственно рассеянные ошибки, модифицирована таким образом, что оценка может быть выполнена после обнаружения v (vS) рассеянных ошибок:

  (18)

где числитель и знаменатель формулы при n  К являются биноминальными коэффициентами.

Пример 3.

Предположим, что в программе имеется 3 собственных ошибки. Внесём ещё 6 ошибок случайным образом. В процессе тестирования было найдено:

1) 6 ошибок из рассеянных и 2 собственных;

2) 5 ошибок из рассеянных и 2 собственных;

3) 5 ошибок из рассеянных и 4 собственных.

Найти надёжность по модели Миллса - С.

K=3, S=6.

  1. n=2, v=6, C=(6!/(6-1)!)/((6+3+1)!/(3+6)!)=0,6.

  2. n=2, v=5, C=(6!/(5-1)!)/((6+3+1)!/(3+5)!)=0,333333, 2!=2, 4!=24, 6!=720, 8!=40320, 10!=3628800.

  3. n=4, v=5, C=1 (по формуле (18)).

Модель Коркорэна

Применение модели предполагает знание следующих ее показателей:

  • модель содержит изменяющуюся вероятность отказов для различных источников ошибок и соответственно разную вероятность их исправления;

  • в модели используются такие параметры, как результат только N испытаний, в которых наблюдается Ni ошибок i-го типа;

  • выявление в ходе N испытаний ошибки i-го типа появляется с вероятностью аi.

Показатель уровня надежности R вычисляют по следующей формуле:

(19)

где N0 - число безотказных (или безуспешных) испытаний, выполненных в серии из N испытаний, k - известное число типов ошибок, ai — вероятность выявления при тестировании ошибки i-го типа,

Yi - вероятность появления ошибок, при Ni > 0, Yi = ai, при Ni = 0, Yi = 0.

Пример 4.

Было проведено 100 испытаний программы. 20 из 100 испытаний прошли безуспешно, а в остальных случаях получились следующие данные:

Тип ошибки

Вероятность появления ошибки ai

Число появления ошибок Ni при испытании

Yi

(Yi*(Ni-1))/N

1. Ошибки вычисления

0,09

5

0,09

0,0036

2. Логические ошибки

0,26

25

0,26

0,0624

3. Ошибки ввода/вывода

0,16

3

0,16

0,0032

4. Ошибки манипулирования данными

0,18

0

0

0

5. Ошибки сопряжения

0,17

11

0,17

0,017

6. Ошибки определения данных

0,08

3

0,08

0,0016

7. Ошибки в БД

0,06

4

0,06

0,0018

Оценить надёжность по модели Коркорэна.

N=100, N0=20, R=20/100+0,0036+0,0624+0,0032+0,017+0,0016+0,0018=0,2896 - вероятность безотказной работы выполнения программы.

Пример 5.

Было проведено 100 испытаний программы. 20 из 100 испытаний прошли безуспешно, а в остальных случаях получились следующие данные:

Тип ошибки, i

Вероятность появления ошибки. ai

Число появления ошибок Ni при испытании

Yi

(Yi*(Ni-1))/N

1

0,09

8

0,09

0,0063

2

0,26

0

0

0

3

0,17

4

0,17

0,0051

4

0,2

25

0,2

0,048

5

0,8

25

0,8

0,192

6

0,08

3

0,08

0,0016

7

0,16

5

0,16

0,0064

Оценить надёжность программы по модели Коркорэна.

N=100, N0=20, R=20/100+0,0063+0,0051+0,048+0,192+0,0016+0,0064=0,4594 – вероятность безотказной работы выполнения программы.

Оценочные модели основываются на серии тестовых прогонов и проводятся на этапах тестирования ПC. В тестовой среде определяется вероятность отказа программы при ее выполнении или тестировании.

Эти типы моделей могут применяться на этапах ЖЦ. Кроме того, результаты прогнозирующих моделей могут использоваться как входные данные для оценочной модели. Имеются модели (например, модель Муссы), которые можно рассматривать как оценочную и в то же время как измерительную модель.

Другой вид классификации моделей предложил Гоэл, согласно которой модели надежности базируются на отказах и разбиваются на четыре класса моделей: без подсчета ошибок; с подсчетом отказов; с подсевом ошибок;

модели с выбором областей входных значений.

Модели без подсчета ошибок основаны на измерении интервала времени между отказами и позволяют спрогнозировать количество ошибок, оставшихся в программе. После каждого отказа оценивается надежность и определяется среднее время до следующего отказа. К таким моделям относятся модели Джелински и Моранды, Шика Вулвертона и Литвуда-Вералла.

Модели с подсчетом отказов базируются на количестве ошибок, обнаруженных на заданных интервалах времени. Возникновение отказов в зависимости от времени является стохастическим процессом с непрерывной интенсивностью, а количество отказов является случайной величиной. Обнаруженные ошибки, как правило, устраняются и поэтому количество ошибок в единицу времени уменьшается. К этому классу моделей относятся модели Шумана, Пуассоновская модель и др.

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

Модели с выбором области входных значений основываются на генерации множества тестовых выборок из входного распределения, и оценка надежности проводится по полученным отказам на основе тестовых выборок из входной области. К этому типу моделей относится модель Нельсона и др.

Таким образом, классификация моделей роста надежности относительно процесса выявления отказов, фактически разделена на две группы:

модели, которые рассматривают количество отказов как марковский процесс;

модели, которые рассматривают интенсивность отказов как пуассоновский процесс.

Фактор распределения интенсивности отказов разделяет модели на экспоненциальные, логарифмические, геометрические, байесовские.

Модель Шумана

Модель Шумана основана на следующих допущениях:

  • общее число команд в программе на машинном языке постоянно;

  • в начале компоновочных испытаний число ошибок равно некоторой постоянной величине, и по мере исправления ошибок их становится меньше. В ходе испытаний программы новые ошибки не вносятся;

  • ошибки изначально различимы, по суммарному числу исправленных ошибок можно судить об оставшихся;

  • интенсивность отказов программы пропорциональна числу остаточных ошибок.

Предполагается, что до начала тестирования (т.е. в момент =0) имеется M ошибок. В течение времени тестирования τ обнаруживается ε1() ошибок в расчете на одну команду в машинном языке.

Тогда удельное число ошибок на одну машинную команду, оставшихся в системе после времени тестирования τ, равно:

(20)

где I - общее число машинных команд, которое предполагается постоянным в рамках этапа тестирования.

Предполагается, что значение функции количества ошибок Z(t) пропорционально числу ошибок, оставшихся в программе после израсходованного на тестирование времени τ.

Z (t) = C * ε2 (τ), (21)

где С - некоторая постоянная, t - время работы программы без отказов.

Тогда, если время работы программы без отказа t отсчитывается от точки t = 0, а τ остается фиксированным, функция надежности, или вероятность безотказной работы на интервале от 0 до t, равна

(22)

(23)

Нам необходимо найти начальное значение ошибок M и коэффициент пропорциональности С. Эти неизвестные оцениваются путем пропуска функционального теста в двух точках переменной оси отладки a и в, выбранных так, что ε1(a)<ε1(d).

В процессе тестирования собирается информация о времени и количестве ошибок на каждом прогоне, т.е. общее время тестирования τ складывается из времени каждого прогона:

τ = τ1 + τ2 + τ3 + … + τn.

Предполагая, что интенсивность появления ошибок постоянна и равна λ, можно вычислить ее как число ошибок в единицу времени,

(24)

где Ai - количество ошибок на i - ом прогоне.

Тогда . (25)

Имея данные для двух различных моментов тестирования a и в, можно сопоставить уравнения (23) при τa и τb:

(26)

(27)

Из соотношений (26) и (27) найдем неизвестные параметры С и М:

(28)

(29)

Получив неизвестные M* и C*, можно рассчитать надежность программы по формуле (22).

Пример 6.

Программа содержит 2 000 командных строк, из них, до начала эксплуатации (после периода отладки), 15 командных строк содержат ошибки. После 20 дней работы обнаружена 1 ошибка. Найти среднее время безошибочной работы программы и интенсивность отказов программы при коэффициенте пропорциональности, равном 0,7.

I=2000

M=15

t=20

=1

C =0,7

e1=1/2000=0,0005;

e2=(15/2000)-0,0005=0,007;

P(t)=exp(-0,7*(15/2000-0,0005)*20))=0,90661- функция надежност;

tср=1/0,7*(15/2000-0,0005)=204,0816;

=0,0049 – интенсивность появления ошибок.

Пример 7.

На условиях примера 3 определить вероятность безошибочной работы программы в течение 90 суток.

P(t)=exp(-0,7*(15/2000-0,0005)*90))=0,643393.