Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_ИС.doc
Скачиваний:
272
Добавлен:
22.02.2015
Размер:
1.69 Mб
Скачать

6.4.3. Дискретные эмпирические модели надежности по (дэмп)

Количество разработанных к настоящему времени ДЭМП невелико по сравнению с НЭМП, но именно они реально могут быть использованы для расчетов надежности вычислительных систем [6.5]. Причиной этого является прежде всего аргумент ДЭМП - порядковый номер испытаний, а не время , условное или фактическое при любых способах его измерения или учета. Как указано в [6.3], «…хотя желание выразить надежность ПО некоторой функцией времени вполне разумно, следует понимать, что в действительности она от времени не зависит. Надежность программного обеспечения является функцией числа ошибок, их серьезности и их расположения, а также того, как система используется».

Рассмотрим описание одной из самых известных ДЭМП модели Нельсона, который приводит такое определение надежности ПО: «Надежность программы это вероятность безотказного выполнения n-прогонов программы». В основу построения модели Нельсона положены следующие допущения:

  • машинная программа П может быть определена как описание некоторой вычисляемой функции F на множестве Е всех значений наборов входных данных, таких, что каждый элемент Ej множества Е представляет собой набор значений данных, необходимых для выполнения прогона программы, j = 1(1)Nмах, где Nмах – мощность множества Е;

  • выполнение программы П приводит к получению для каждого Еj определенное значение функции F(Еj);

  • множество Е определяет все возможные вычисления в программе П, т.е. каждому набору входных данных Еj соответствует некоторый прогон П и каждому прогону П соответствует некоторый набор входных данных Еj;

  • наличие дефектов в программе соответствует тому, что на самом деле ей отвечает функция F*, отличная от заданной функции F;

  • для некоторого набора в программе Еj отклонение выхода F*(Еj), полученного в ходе выполнения программы от желаемого результата F(Еj), находится в пределах нормы Δj

(6.12)

для всех остальных Ej , образующих подмножество Ее множества Е , выполнение программы П не обеспечивает приемлемого результата, т.е.

(6.13)

при этом работа программы прекращается преждевременно или зацикливается.

Вероятность того, что произвольный прогон программы П будет правильным , т.е. выполняется условие (6.12), равна

где ne- общее число входных данных, соответствующих подмножеству Ее.

Для практической оценки величины показателя надежности программы предлагается следующая процедура.

Производится n прогонов программы, причем , выбор входных данных должен соответствовать некоторым известным вероятностям реализации входных наборов- pj. Часть прогонов будет верной, а другая часть закончится отказами ПО. При этом процесс испытаний не должен прекращаться, а ошибки исправляться до завершения всех n прогонов. Тогда оценка показателя вероятности безотказной работы программы рассчитывается по формуле

(6.14)

где ne*, - количество ошибочных прогонов в серии из n испытаний,

R*- оценка вероятности безотказной работы ПО.

6.5. Способы обеспечения и повышения надежности по

6.5.1. Основы организации тестирования программ

Для предотвращения ошибок и дефектов ПО широко используются методы тестирования.

Тестирование программного обеспечения (software testing) - это процесс анализа или эксплуатации программного обеспечения с целью выявления дефектов [6.7]. Тестирование может быть статическим или динамическим (методами «белого ящика» или «черного ящика»).

Тестирование обеспечивает [6.2]:

  • обнаружение ошибок;

  • демонстрацию соответствия функций программы ее назначению;

  • демонстрацию реализации требований к характеристикам программы;

  • отображение надежности как индикатора качества программы.

Тестовая деятельность, связанная с анализом результатов разработки ПО, называется статическим тестированием (static testing). Статическое тестирование может выполнять проверку программных кодов, сквозной контроль и проверку программы даже без запуска на ЭВМ. Такой подход к тестированию иногда отождествляют с тестированием по методу « белого ящика». Однако тестирование « белым ящиком» всегда подразумевает прогон отдельных программных компонент с использованием специальных тестовых наборов.

При тестировании « белым ящиком» известна внутренняя структура программы.

Исследуются внутренние элементы программы и связи между ними.

Объектом тестирования является внутреннее поведение программы.

Тестовая деятельность, предусматривающая эксплуатацию программного продукта с целью проверки выполнения функций системы, называется динамическим тестированием (dynamic testing), иначе этот подход называют « черным ящиком».

При тестировании методом «черного ящика» известны функции, выполняемые системой.

Исследуется работа каждой функции на всей области определения.

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

Тестирование методом «черного ящика» демонстрирует:

  • как выполняются функции программы;

  • как принимаются исходные данные;

  • как вырабатываются результаты;

  • как сохраняется целостность внешней информации.

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

Верификация (verification) это процедура, которая показывает соответствие результатов конкретной фазы процесса разработки ПО требованиям данной и предшествующих стадий.

Аттестация (validation) есть гарантия того, что программный продукт удовлетворяет всем системным требованиям заказчика.

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