- •Качество и надежность программного обеспечения
- •Лекция 1. Введение. Основные стандарты и термины по качеству программного обеспечения. Метрики и критерии качества программных продуктов. Составляющие качества программных продуктов.
- •Общие термины
- •Лекция 2. Классификация видов сложности программных продуктов. Метрические характеристики программ по м.Холстеду
- •Оценивание качества разработки программ на основе метрик Холстеда. Измеримые свойства алгоритмов
- •Длина программы
- •4. Объем программы
- •Потенциальный объем V*
- •Лекция 3. Уровень программ. Интеллектуальное содержание программы.
- •1. Уровень программы
- •2. Вывод уравнения уровня программы
- •3. Определение интеллектуального содержания программ
- •Лекция 4. Работа в программировании. Уровни языков программирования. Метрика числа ошибок в программе.
- •5 S 20 в сек
- •Значение уровня языка
- •Лекция 5. Метрики структурной сложности программ.
- •Где pi – количество вершин ветвления в I-том маршруте без учета последней вершины
- •M5 1 – 3 – 4 – 6 – 8 – 14 независимые
- •Лекция 6. Методы и средства измерения характеристик программ. Аппаратные измерительные мониторы.
- •Лекция 7. Программные измерительные мониторы.
- •Лекция 8. Понятие корректности программ.
- •II. Эталоны и методы проверки корректности.
- •Лекция 9. Аналитическая проверка корректности программ. Верификация программ.
- •Invk (x1, … , xn),
- •Invt1 (x1, … , xn): p ; invt2 (x1, … , xn): q ; invt3 (x1, … , xn) ; … ,
- •U: invr(x1, … , xn) u0
- •Лекция 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. Определение интеллектуального содержания программ
Соотношения для объема и уровня программы рассмотренные ранее приводят к интересному выводу Если произведение объема на уровень любого алгоритма действительно не изменяется при выражении его на различных языках то это свойство можно считать фундаментальным И хотя интуитивно ясно что в машинном коде требуется большая степень детализации для того чтобы «сказать то же» что и на языке Паскаль пока еще отсутствует способ позволяющий измерить «сколько» же было сказано в каждом случае Но если постулировать что любые две эквивалентные программы в самом деле «говорят одно и то же» мы сможем ответить на вопрос «сколько?»
Меру того сколько было сказано в программе логичнее было бы назвать информационным содержанием программы но теория информации Шеннона раньше других завладела смыслом этого термина правда для указания лишь объема сообщения без учета его уровня
Поэтому «информационое содержание» программы мы заменим понятием интеллектуального содержания и определим как
I = V (36)
С помощью уравнений (21) и (35) это выражение можно представить в виде
(N1+N2) log2(1+2) , (37)
где все члены в правой части доступны непосредственному измерению, исходя из любого выражения алгоритма Интеллектуальное содержание вычисленное с помощью уравнения (3.6) приближенно равно потенциальному объему V* полученному из уравнения (34). Следовательно поскольку V* не зависит от языка на котором выражен алгоритм интеллектуальное содержание также не должно от него зависеть
Эту инвариантность можно продемонстрировать оценив интеллектуальное содержание программ, реализующих алгоритм Евклида на разных языках Выше мы рассмотрели метрики алгоритма Евклида, реализованного на Паскале и СИ (приведены в таблицах 2 и 3). Для этих программ значения интеллектуального содержания будут равны:
Паскаль: I = V = 0.0476 * 254.4 = 12.11;
СИ: I = V = 0.0606 * 224.8 = 13.62;
Теперь рассмотрим существенно отличный от этих двух вариант реализации алгоритма поиска наибольшего общего делителя (НОД), основанный на выборе значений НОД из заранее подготовленной таблицы значений. Пусть в качестве операнда «TABLE» в программу включен массив из 1000 строк и 1000 столбцов содержащий заранее вычисленные значения НОД Тогда алгоритм вычисления сводится к выбору значения НОД из двумерного массива по индексам, равным аргументам функции НОД и может быть представлен в виде:
TABLE 0,1,.........................
0,1,.........................
..............................
..............................
GCD := TABLE [A,B]
Подсчет частот для алгоритма вычисления НОД в виде «просмотра таблицы» представлен в табл. 4.
Таблица 4
J |
Оператор |
f1,j |
J |
Операнд |
f2,j |
1 |
|
1 000 001 |
1 |
TABLE |
1 000 001 |
2 |
|
1 |
2 |
A |
1 |
3 |
:= |
1 |
3 |
B |
1 |
4 |
[ ] |
1 |
4 |
CGD |
1 |
1=4 |
|
N1=1 000 004 |
2=4 |
|
N2=1 000 004 |
Соответственно, значение интеллектуального содержания такой программы будет равно
(N1+N2) log2(1+2) = 2/4 * 4/1000004 *2*1000004* log2(8) = 4*3 =12
В потенциальном языке этот алгоритм будет записан в виде одного оператора
GCD(A, B, GCD) для которого 1=N1=2 2=N2=3
И значение интеллектуального содержания программы на потенциальном языке будет
(N1+N2) log2(1+2) = 2/2 * 3/3 *5* log2(5) = 11.6
В табл. 5 указаны данные для всех четырех версий алгоритма Евклида а также вычисленное с помощью уравнения (37) интеллектуальное содержание I .
Таблица 5
-
Язык
1
2
N1
N
I
Паскаль
10
6
21
52
12.11
СИ
9
6
21
52
13.62
Потенциальный
2
3
3
5
11.6
Просмотр таблицы
4
4
1 000 004
2 000 0088
12
Как и следовало ожидать с уменьшением уровня используемого в реализации алгоритма пропорционально возрастает требуемый объем поэтому интеллектуальное содержание колеблется в пределах приблизительно 10% от его среднего значения { }
Поскольку данное свойство остается неизменным при изменении языка и лишь усиливается с увеличением сложности задачи оно определяет не зависящую от языка меру содержания внутренне присущего программе.
Пока параметры I и V* используются только как вспомогательные величины они являются весьма полезными метрическими характеристиками которые задают меру того «сколько» было сказано но ничего не говорят о важности сказанного То есть программные параметры показывают насколько хорошо написана программа но не определяют нужно ли было вообще ее писать