- •Качество и надежность программного обеспечения
- •Лекция 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 Влияние избыточности на повышение надежности программ
- •Эффективность применения избыточности для повышения надежности комплексов программ
- •Влияние оперативного контроля и восстановления на производительность эвм.
- •Методы программного восстановления
- •Методы обеспечения надежности комплексов программ при сопровождении
- •Литература
Значение уровня языка
В течение последних десятилетий значительная доля усилий специалистов в области языков программирования была направлена на разработку и реализацию новых языков и часто при этом выполнялось усовершенствование ранее существовавших языков Но из-за отсутствия количественного измерения вывод о реальном улучшении языка был весьма субъективным Без принятия гипотезы соотносящей конкретный язык с мысленной работой по его использованию нельзя с уверенностью сказать положительно или отрицательно его введение Объединяя уравнение (47) с уравнением работы получаем что число элементарных мысленных различений требуемых для написания некоторой программы должно подчиняться закону обратных квадратов относительно уровня языка или
Е = V*3/2 (48)
Из соотношений Е = V2/V* и V = V*/L следует что Е = V*/L2 откуда при помощи равенства L = /V* выводим (48) Для небольшой выборки программ написанных на двух языках можно определить средние значения и с их помощью найти сравнительную трудоемкость Так выигрыш во времени программирования при переходе от языка низкого уровня 1 к языку высокого уровня 2 определяется соотношением
ΔT/T = (T1 - T2) / T1 = 1 - T2 / T1 = 1 - (1)2 / (2)2 (4.9)
Тогда по данным табл.6 при переходе от Ассемблера к Фортрану выигрыш во времени составит 40% , от Ассемблера к ПЛ-1 - 67%.
Важность понятия уровня языка подтверждается также из уравнения (48) следующими обстоятельствами Поскольку потенциальный объем V* и среднее значение должны быть известны или вычислимы сразу после определения программистского проекта и выбора языка это дает рациональную основу для планирования времени программирования
С другой стороны, подставляя в (4.7) выражение для L из (3.2), получим
= (V*)2 / V (4.10)
Из этого выражения видно, что для постоянства увеличение объема программы должно квадратично зависеть от увеличения количества информации по внешним связям. Поэтому алгоритмически сложные программы вычисления малого числа переменных будут давать значительно более низкое значение , чем программы вычисления большого числа
переменных по элементарным выражениям. Поэтому применение метрики для сравнения языков программирования следует делать только для конкретной предметной области и близких типов задач.
Метрика числа ошибок в программе.
Значительная часть усилий и времени, затрачиваем на реализацию большинства программ для ЭВМ, приходится на их отладку, т. е. выявление и устранение ошибок типа “лишних и недостающих элементов”, внесенных в начальный период написания программы. Следовательно, любое обоснованное представление о числе первоначальных ошибок, ожидаемых в данной программе, даст важную оценку для практики. Предлагаемая метрика предсказывает число первоначальных ошибок (до отладки и тестирования) и не может служить доказательством правильности (корректности) программы, даже если ее значение равно нулю.
Время, требуемое на разработку программы, характеризуется числом элементарных мысленных различений Е. Следовательно, число моментов, в которые можно сделать ошибочное различение, также определяется значением Е или связанным с ним значением объема программы V. По утверждениям психолога Джорджа Миллера (закон “7±2”) мозг человека может в своей “сверхбыстрой” памяти обрабатывать пять “объектов” одновременно (т. е. получать из них результат). Представив эту способность мозга как Екрит, получим ее программное значение.
Пусть каждый объект так же, как и результат, соответствует единице уникальных операндов в потенциальном языке, т. е. 2* = 6. С помощью равенств 1* = 2 и
V* = (1* + 2*) log2 (1* + 2*) (4.11)
получаем
V*крит = (2 + 6)log2(2 + 6) = 24 (4.12)
Далее из уравнения (4.8) имеем
E = (V*)3/2 ,
а из табл. 6 получаем для английского языка = 2,16. Тогда для описания программы на уровне английского языка приходим к следующему выводу
Екрит = (24)3 * (2,16)2 = 3000 (4.13)
Определим теперь Ео как среднее число элементарных различений между возможными ошибками в программировании, а В — как число переданных ошибок в программе. Можно ожидать, что
В = Е/Ео, (4.14)
но при этом не будет учтено какая-либо избыточность в создаваемой программе.
Однако уровень программы L, собственно, и является мерой такой избыточности. Заметим, что только в потенциальном языке, на котором любая программа может быть выражена в виде вызова процедуры, не повторяются ни операторы, ни операнды. Для такого потенциального языка L = 1. Для всех же остальных языков L уменьшается с увеличением избыточности.
Следовательно, вместо уравнения (4.14) реальнее ожидать, что
B = L * Е/Ео. (4.15)
По правилам алгебры произведение L Е можно заменить на V, что даст
B=V/Eo. (4.16)
Если теперь приравнять Eo из уравнений (4.14) значению Екрит, найденному по уравнению (4.13), то получим соотношение
B= V / 3000 (4.17)
C другой стороны, подставив в (4.17) выражение для V из (4.10), получим
B= (V*)2 / (3000*) (4.18)
Из выражения (4.18) следует, что поскольку для определения потенциального объема необходимо только знание числа независимых входных и выходных параметров программы, задаваемого в техническом задании на ее разработку, то после выбора языка программирования потенциальное количество ошибок можно оценить до написания программы.