- •Качество и надежность программного обеспечения
- •Лекция 1. Введение. Основные стандарты и термины по качеству программного обеспечения. Метрики и критерии качества программных продуктов. Составляющие качества программных продуктов.
- •Общие термины
- •Лекция 2. Классификация видов сложности программных продуктов. Метрические характеристики программ по м.Холстеду
- •Оценивание качества разработки программ на основе метрик Холстеда. Измеримые свойства алгоритмов
- •Длина программы
- •4. Объем программы
- •Потенциальный объем V*
- •Лекция 3. Уровень программ. Интеллектуальное содержание программы.
- •1. Уровень программы
- •2. Вывод уравнения уровня программы
- •3. Определение интеллектуального содержания программ
- •Лекция 4. Работа в программировании. Уровни языков программирования. Метрика числа ошибок в программе.
- •Значение уровня языка
- •Лекция 5. Метрики структурной сложности программ.
- •Лекция 6. Методы и средства измерения характеристик программ. Аппаратные измерительные мониторы.
- •Лекция 7. Программные измерительные мониторы.
- •Лекция 8. Понятие корректности программ.
- •II. Эталоны и методы проверки корректности.
- •Лекция 9. Аналитическая проверка корректности программ. Верификация программ.
- •Лекция 10. Тестирование программных продуктов
- •1. Основные понятия процесса тестирования
- •2. Объекты тестирования
- •3. Категории тестов для различных объектов тестирования
- •Лекция 11. Виды, критерии и методы тестирования. Методы структурного тестирования программ
- •1. Тестирование на основе потока управления
- •2. Тестирование на основе потока данных
- •Лекция 12. Методы функционального тестирование программных продуктов
- •1. Метод эквивалентного разбиения
- •1.1. Выделение классов эквивалентности
- •1.2. Построение теста
- •2. Анализ граничных значений
- •3. Метод функциональных диаграмм
- •4. Метод, основанный на предположении об ошибке
- •Лекция 13. Основные показатели надежности программного обеспечения (по). Математические модели оценки надежности по.
- •13.1. Основные показатели надежности программного обеспечения (по).
- •13.2. Математические модели оценки надежности по.
- •Модель Джелинского-Моранды.
- •Модель Шика-Уолвертона.
- •Лекция 14. Модели, основанные на методе "посева" и разметки ошибок, и модели на основе учета структуры входных данных
- •Модель Нельсона. Применение последовательного анализа Вальда для снижения количества прогонов программы.
- •Лекция 15. Методы повышения надежности программ и оценка эффективности их применения.
- •15.1 Влияние избыточности на повышение надежности программ
- •Эффективность применения избыточности для повышения надежности комплексов программ
- •Влияние оперативного контроля и восстановления на производительность эвм.
- •Методы программного восстановления
- •Методы обеспечения надежности комплексов программ при сопровождении
- •Литература
Лекция 3. Уровень программ. Интеллектуальное содержание программы.
1. Уровень программы
Понятие уровня программы известно с тех пор как первые «языки высокого уровня» получили свое название Однако, прежде чем это понятие сможет применяться в науке оно должно быть выражено количественно или приведено к измеримому виду так как в противном случае невозможно определить изменения уровня разных выражений какого либо алгоритма
Прежде, чем вводить метрическую характеристику уровня программы необходимо заметить что уровень языка и уровень программы являются разными понятиями хотя и тесно связанными Функциональное соотношение между ними и способы измерения уровня языка будут рассмотрены позднее Сейчас ограничимся измерением уровня отдельных программ Ранее выведенные выражения для определения объема V программы и потенциального объема V* подсказывают простой метод количественного выражения данного понятия Если записать уровень L программы являющейся реализацией какого либо алгоритма как
(3.1)
то лишь наиболее сжатое выражение какое только возможно для алгоритма будет иметь уровень равный единице
Более объемные реализации будут иметь меньшие значения уровня так что L1
Перестроив выражение (3.1) и выделив независящий от реализации член получим
V* = LV (3.2)
при увеличении объема уровень программы уменьшается и наоборот
Обычно легче написать вызов процедуры чем саму процедуру С этой точки зрения проще всего было бы использовать потенциальный язык (L = 1). Однако из самого определения потенциального языка следует что любая процедура которая когда либо могла бы понадобиться в нем уже присутствует Так как число таких процедур бесконечно процесс простого ознакомления с их списком тоже бесконечен Поэтому реализация и использование потенциальных языков невозможны для выполнения реальных заданий
Однако уровень программы играет двойственную роль в определении легкости или трудности ее понимания Специалист которому известны все используемые термины сможет уловить идею тем быстрее чем выше уровень ее представления С другой стороны чтобы сообщить подобную идею лицу менее сведущему в данной конкретной области требуется больший объем сведений и меньший уровень
2. Вывод уравнения уровня программы
Нередко требуется определить уровень программы непосредственно из ее реализации не зная ее потенциального объема V* и не ссылаясь на возможное обращение к ней в виде вызова процедуры Это можно сделать рассмотрев отдельно влияние операторов и операндов на уровень программы Разумно предположить что чем больше число уникальных операторов используемых в реализации тем ниже ее уровень Но наименьшее возможное число уникальных операторов равно двум и эти два оператора суть символ функции и оператор присваивания или группировки те 1*= 2 С другой стороны увеличение числа уникальных операторов беспредельно поскольку на него нет ограничений ни в каком языке в котором разрешено определение новых вложенных процедур подпрограмм или переходов к помеченным участкам Отсюда получаем следующее соотношение операторов
L (33)
Операнды же не дают однозначного минимума по всем возможным алгоритмам поэтому к ним требуется иной подход В этом случае достаточно заметить что всякое повторение имени операнда является указанием на более низкий уровень реализации Этот эффект можно измерить взяв отношение числа простых операндов к общему числу операндов
L (34)
Объединяя уравнения (33) и (34), заметим что коэффициент пропорциональности являющийся константой должен равняться единице, поскольку в случае потенциального языка 1=1* 2=N2 и L=1. Тогда приходим к уравнению уровня программы
(35)
в котором символ ^ указывает на то что уровень определяемый этим выражением служит аппроксимацией уравнения (31) На самом деле его можно было бы взять в качестве альтернативного определения уровня программы
Возвращаясь к примерам программ для алгоритма Евклида, определим их уровень и его оценку для представлений на Паскале и СИ.
Паскаль: L = V* / V =11.6 / 254.4 = 0.0456; = 2*2 /(1* N2) = 2*6/(12*21) =0.0476
СИ: L = V* / V =11.6 / 224.8 = 0.0516; = 2*2 /(1* N2) = 2*6/(11*18) =0.0606 .