- •О. В. Шишов технология разработки программных продуктов
- •1. Программы и программирование
- •1.1 Основные определения
- •1.2. Классификация программ и различные виды программирования
- •1.3. Категории специалистов, занятых разработкой и эксплуатацией программ
- •2. Жизненный цикл программного обеспечения
- •2.1 Основные этапы жизненного цикла и их взаимосвязь
- •2.2 Стратегии и модели жизненного цикла
- •3. Качество по
- •3.1 Критерии оценки качества по
- •3.2 Методы оценки качества программного средства
- •4. Надежность программных продуктов
- •4.1 Надежность и виды отказов
- •4.2 Надежность и правильность программы
- •4.3. Вероятностный подход к оценке надежности
- •4.4 Факторы надежности
- •4.5 Приемы надежного программирования
- •6.2. Стандарты технологии создания программных продуктов
- •6.3. Основные этапы технологического процесса разработки программ
- •7. Структурное проектирование программных продуктов
- •7.1. Модули. Сцепление и связность модулей
- •7.2. Структура программных продуктов
- •7.3. Методы структурного программирования
- •8. Алгоритмическое представление задачи программирования
- •8.1. Свойства алгоритмов
- •8.2. Формы записи алгоритмов
- •8.3. Базовые алгоритмические структуры
- •9. Языки программирования
- •9.1. Основные понятия и элементы языков программирования
- •9.2. Классификация языков программирования
- •9.3. Развитие языков программирования
- •10. Пользовательский интерфейс
- •10.1. Типы интерфейсов
- •10.2. Этапы разработки пользовательского интерфейса
- •10.3. Критерии оценки интерфейса пользователем
- •11. Порядок работы эвм при выполнении программ. Трансляторы, интерпритаторы, компиляторы
- •12. Оптимизация программ
- •13. Отладка и тестирование программного обеспечения
- •13.1. Классификация неисправностей и ошибок в программе
- •13.2. Порядок и способы отладки и тестирования программ
- •13.3. Методы тестирования
- •13.4. Требования и рекомендации по тестированию программ
- •13.4. Программирование «с защитой от ошибок»
- •14. Аттестация программного средства
- •15. Сопровождение по
- •16. Защита программных продуктов
- •16.1. Обеспечение защищенности программных средств
- •16.3. Правовые методы защиты программных продуктов
- •17. Документорование программных продуктов
- •17.1. Виды программных документов
- •17.2. Содержание документации по еспд
- •17.3. Стиль оформления программы
- •Содержание
4.3. Вероятностный подход к оценке надежности
Надежность – понятие статистическое, т. е. предполагается наличие не единичного запуска программы, некоторого (достаточно большого) количества одинаковых образцов, испытаний и т. д. Существенно также, что имеется элемент случайности. Изучению случайных явлений посвящен специальный раздел математики: теория вероятностей. Основное понятие этой теории - пространство элементарных событий (выборочное пространство, пространство исходов), на котором задается некоторая (вероятностная) мера. Случайная величина, согласно теории, есть функция, заданная на пространстве элементарных событий. Наконец, в качестве меры надежности используются некоторые характеристики случайной величины (как правило, математическое ожидание).
Рассмотрим для простоты класс программ, имеющих единственный вход и выход, т.е. не содержащих бесконечных циклов. Фазу выполнения программы от начала до завершения будем называть запуском. Все возможные результаты запуска разобьем на два класса: правильные и неправильные (ошибочные). Будем считать, что любой результат всегда можно отнести к одному из этих классов. Рассмотрим классическую вероятностную модель последовательности испытаний Бернулли. Пространство элементарных событий в этой модели содержит 2n точек, где n – число испытаний (в данном случае под испытанием подразумевается запуск программы). Каждый запуск программы имеет два исхода: правильный и неправильный. Обозначим вероятность неправильного исхода р, а вероятность правильного – (1–p). Вероятность того, что из n запусков К приведут к неправильному результату, выражается хорошо известной формулой биномиального распределения.
B(р,n,k) = C(n,k) * pk * (1–р)(n–k), (1)
где С(n,k) – число сочетаний. Вероятность р априори неизвестна, но по результатам запусков известны n и k. Величина В как функция р имеет максимум при
р = k/n. (2)
В качестве меры надежности программы можно принять величину
R = 1 – k/n = (n-k)/n, (3)
значения которой (от 0 до 1) согласуются с общепринятым смыслом термина надежность: например, если все запуски окончились с ошибочным результатом (k = n), то надежность - нулевая.
Наиболее существенное предположение в данной модели состоит в том, что запуски программы считаются независимыми. Это означает, что результаты предыдущих запусков не дают никакой информации о результатах следующего.
Следует отметить, что изготовитель программы и ее пользователь располагают разной информацией о ней. Например, изготовителю заведомо известна логика программы, так что по результатам запуска с некоторыми исходными данными он иногда может точно предсказать результаты запусков с другими исходными данными (на этом, в конечном счете, основана любая методика тестирования), и в этом смысле предположение о независимости испытаний не выполняется. Однако пользователя редко интересует устройство программы, для него важно лишь одно: выполняет ли она требуемые функции, поэтому у пользователя нет оснований считать запуски зависимыми. Если же имеется желание использовать информацию об устройстве программы при оценке ее надежности, то следует придумать какую-то более сложную вероятностную модель, которая бы ее учитывала.
Из формулы (3) следует, что оценка надежности программы растет с увеличением числа ее запусков по гиперболическому закону. Это подтверждает интуитивно ясное соображение о том, что программа тем надежнее, чем больше опыт ее эксплуатации, который зависит как от интенсивности использования программы, так и от тиража компьютера, на котором она запускается. Таким образом, надежность программ для персональных компьютеров типа IBM РС, общий тираж которых составляет в настоящее время около 100 миллионов, на несколько порядков выше аналогичных программ для специализированных процессоров (если, конечно, такие программы действительно существуют и эксплуатируются).