Лекция 4. Качество ПО Учебные вопросы: 1. Стандартная модель качества ПО 2. Методы анализа ПО 3. Постановка задачи анализа надежности ПО
Вопрос 1
Качество ПО Качество ПО - комплексная характеристика свойств ПО с точек зрения различных участников Стандартная модель качества ПО представлена в ISO 9126 Функциональность Надежность Удобство использования Эффективность Переносимость Удобство сопровождения
Качество ПО Стандарт ISO 9126 учитывает точки зрения Разработчиков - внутреннее качество ПО Руководства и аттестации ПО - внешнее качество ПО Конечных пользователей - качество ПО при использовании Качество ПО включает 6 факторов 27 атрибутов - для качественной оценки факторов метрики или показатели - для количественной оценки атрибутов ГОСТ Р ИСО/МЭК 9126
Функциональность Функциональность - способность ПО в определенных условиях решать задачи, нужные пользователям Функциональная пригодность - способность решать нужный набор задач Точность - способность выдавать нужные результаты Способность к взаимодействию, совместимость - способность взаимодействовать с нужным набором других систем Соответствие стандартам и правилам - соответствие ПО имеющимся стандартам, нормативным и законодательным актам, другим регулирующим нормам Защищенность - способность предотвращать неавторизованный и не разрешенный доступ к данным, коммуникациям и др
Надежность Надежность - способность ПО выполнять свои функции в заданных условиях Зрелость - величина, обратная частоте критических отказов, вызванных ошибками в ПО Устойчивость к отказам - способность поддерживать заданный уровень работоспособности при внутренних и внешних отказах Способность к восстановлению - способность восстанавливать определенный уровень работоспособности и целостность данных после отказа Соответствие стандартам надежности
Удобство сопровождения Удобство сопровождения - удобство проведения всех видов деятельности, связанных с сопровождение программ Удобство проведения анализа - удобство проведения анализа ошибок, дефектов и недостатков, а также удобство анализа необходимости изменений и их возможных последствий Удобство проверки - показатель, обратный трудозатратам на проведение тестирования и других видов проверки того, что внесенные изменения привели к нужным результатам Удобство внесения изменений - показатель, обратный трудозатратам на выполнение необходимых изменений Стабильность - показатель, обратный риску возникновения неожиданных эффектов при внесении необходимых изменений Соответствие стандартам удобства сопровождения
Эффективность Эффективность (производительность) - свойство ПО при заданных условиях обеспечивать необходимую работоспособность по отношению к выделяемым ресурсам Временная эффективность - способность ПО решать определенные задачи за отведенное время Эффективность использования ресурсов - способность решать нужные задачи с использованием заданных объемов ресурсов определенных видов (ресурсоемкость) Соответствие стандартам производительности
Удобство использования Удобство использования - способность ПО быть удобным в обучении и использовании Понятность - показатель, обратный к усилиям, которые затрачиваются пользователями на восприятие основных понятий ПО и осознание способов их использования для решения своих задач Удобство обучения - показатель, обратный к усилиям, затрачиваемым пользователями на обучение работе с ПО Удобство работы - показатель, обратный трудоемкости решения пользователями задач с помощью ПО Привлекательность - способность ПО быть привлекательным для пользователей Соответствие стандартам удобства использования
Переносимость Переносимость (мобильность) - способность ПО сохранять работоспособность при переносе из одного окружения в другое (аппаратное, программное окружение) Адаптируемость - способность ПО приспосабливаться к различным окружениям без специальных действий Удобство установки - способность ПО быть установленным или развернутым в определенном окружении Способность к сосуществованию - способность ПО сосуществовать в общем окружении с другими программами, разделяя с ними общие ресурсы Удобство замены другого ПО данным - возможность применения данного ПО вместо других программных систем для решения тех же задач в определенном окружении Соответствие стандартам переносимости
Причины недостаточного качества Функциональность Функциональные ошибки - несоответствия требованиям пользователей, функциональной спецификации и т.п. Надежность Нефункциональные ошибки - нарушение правил языка программирования, использования библиотечных функций и сторонних компонентов и т.п. Эффективность Ошибки анализа необходимого количества ресурсов, обычно проявляются только в определенных ситуациях
Задачи обеспечения качества Обеспечение качества Измерение (оценка) качества программы Применение методов повышения качества Повышение качества Обнаружение ошибок и неудовлетворительных мест в программе Исправление ошибок и другие изменения программы Необходимость оценки качества Контроль текущего прогресса Оценка эффективности затрат на повышение качества Выбор наиболее эффективных методов повышения качества Основа для измерения и повышения качества - анализ ПО
Вопрос 2
Методы анализа ПО
Ручные методы Персональные проверки Аудит кода Парное программирование Ручная верификация
Динамические методы Динамические методы используют результаты выполнения программы Тестирование Модульное Системное Нагрузочное Мониторинг Профилирование Анализ трасс выполнения
Статические методы Статические методы используют различные артефакты получаемые в процессе проектирования ПО (требования, спецификации, исходные код программы) Методы формальной верификации Дедуктивная верификация Верификация на основе проверки моделей Статический анализ исходного кода
Гибридные методы Гибридные методы используют несколько разных методов Создание тестов на основе статического анализа Статический анализ для автоматического формирования моделей, для которых применяются формальные методы проверки моделей Уточнение результатов статического анализа с помощью методов проверки моделей Комбинирование результатов статического анализа и тестирования для повышения точности результатов
Надежность ПО Надежность по является одной из важнейшей характеристик качества Надежность ПО - вероятность его работы без отказов в течении периода времени, рассчитанная с учетом стоимости каждого отказа (Майерс) Надежность ПО должна учитывать не только частоту проявления ошибок, но и серьезность их последствий для пользователя системы. Оценивать и повышать надежность можно на любой стадии проектирования, на основе одного или нескольких представлений программы, при этом можно говорить только о надежности исполняемой программы
Требования к надежности ПО Для каждой программы можно определить необходимый уровень надежности Назначение Область применения Требования к надежности Программа, демонстрирующая возможности транзакций Курс лабораторных работ по предмету «Базы данных» Время работы - единицы минут, корректно работает при заранее определенных действиях пользователя Программа расчета заработной платы Финансовый отдел предприятия Время работы - десятки часов, устойчива к любым действиям пользователя, обеспечивает восстановление данных после сбоя. Программа управления срабатыванием подушки безопасности Автомобиль Время работы - десятки тысяч часов, устойчива к любым внешним воздействиям, определяет случаи перехода в нерабочее состояние. Программа управления опасным объектом Промышленность, авиация и космос, ВС
Причины ненадежности Основными источниками ненадежности аппаратных систем являются внешние факторы, обычно неподвластные человеку: скачки напряжения питания; электромагнитное излучение; радиация;... Источником ненадежности программ являются ошибки, сделанные разработчиками программ, на разных стадиях проектирования Будем считать программу правильной, если она не содержит ошибок разработчиков, такая программа не дает неверных результатов Абсолютно надежна
Источники ошибок в ПО Что такое ошибка в программе ? Если программа не соответствует Спецификации - в ней то же могут быть ошибки Неформальным требованиям пользователя - пользователь может не учесть всех возможных ситуаций или неправильно сформулировать свои требования, у программы может быть много пользователей с различными требованиями Непредусмотренные входные данные и воздействия Ошибки окружения программы - некорректная работа другого ПО и аппаратуры Является ли луна вражеским объектом ? Одна из первых компьютерных систем противовоздушной обороны США (60-е годы) в первое же дежурство подняла тревогу, приняв восходящую из-за горизонта Луну за вражескую ракету, поскольку этот «объект» приближался к территории США и не подавал сигналов что он «свой»
Последствия ошибок в программах Переоблучение больных из за ошибки в программе управления радиотерапевтической установкой Печально известная ошибка в линейном ускорителе Therac-25 стала причиной гибели нескольких больных, получивших смертельные дозы радиации во время лечения, проводимого с июня 1985-го по январь 1987 года в нескольких онкологических клиниках в США и Канаде. Эти дозы, как было оценено позже, более чем в 100 раз превышали те, что обычно применяются при лечении. Частично причиной этих несчастий стала ошибка типа race condition.
Последствия ошибок в программах Авария при запуске французской ракеты «Ариан-5» (1996) на 37-й секунде полёта компьютер, находившийся на борту ракеты, получил от датчиков системы управления неверную информацию о пространственной ориентации ракеты. Исходя из этой информации, компьютер начал корректировать траекторию полёта для того, чтобы компенсировать несуществующую на самом деле погрешность. Ракета стала отклоняться от курса, что привело к возрастанию нагрузок на её корпус. В результате чрезмерных нагрузок верхняя часть ракеты отвалилась, и по команде земли ракета была взорвана.
Последствия ошибок в программах Неудача при запуске первого американского спутника к Венере Единственная ошибка в программе на Фортране - вместо требуемой в операторе запятой программист поставил точку. В результате Потеря связи с космической станцией «Фобос-1» Произошла из-за ошибочной команды, переданной с Земли на бортовой компьютер Ошибка не учета отрицательной высоты При полетах над Мертвым морем американских самолетов произошла ошибка деления на ноль что привело к перезагрузке системы Падение спутников системы ГЛОНАСС Три спутника навигационной системы ГЛОНАСС упали в Тихий океан недалеко от Гавайских островов вскоре после их запуска. Причина аварии была признана ошибка в программировании, которая привела к тому, что в ракету залили неправильное количество топлива.
Фобос-Грунт «... никаких фатальных ошибок и дефектов при создании станции обнаружено не было". Причиной возникновения "нештатной ситуации", установили специалисты, стал "перезапуск двух полукомплектов устройства ЦВМ22 БВК, выполнявших на этом участке полета управление КА "Фобос-Грунт"...
Вопрос 3
Постановка задачи оценки надежности ПО Процесс обеспечения любой характеристики подразумевает возможность оценки полученного результата Измерение (оценка) надежности ПО - определение одного или нескольких показателей надежности История вопроса Интерес к измерению надежности ПО возник одновременно с появлением программ Были предприняты попытки получить традиционную вероятностную оценку надежности для ПО как для отдельной технической системы, с помощью подходов классической теории надежности Теория надежности ПО (Software Reliability Engineering)
Показатели надежности Вероятность безотказной работы - вероятность того, что в пределах заданной наработки (времени или объема работы) не возникнет отказ Средняя наработка до отказа (Mean Time To Failure) - мат. ожидание наработки объекта до первого отказа Средняя наработка на отказ (Mean Time Between Failures) - отношение суммарной наработки к мат. ожиданию числа отказов в течении этой наработки Интенсивность отказов - плотность вероятности возникновения отказов Коэффициент готовности - вероятность того, что объект окажется в работоспособном состоянии в произвольный момент времени Средний срок службы Вероятность восстановления
Ошибки в программах Вносят разработчики Процесс проектирования ПО - преобразование и детализация различных представлений программы Ошибки вносятся на разных стадиях и присутствуют в соответствующих представлениях программы (артефактах процесса проектирования) Причина появления ошибок - высокая сложность проектирования ПО
Классификация ошибок Функциональные ошибки - нарушения программной спецификации (несоответствие функциональным или нефункциональным требованиям). Приводят к ухудшению функциональности ПО (пригодность, точность) Нефункциональные ошибки - нарушения правил языка программирования, неправильное использование библиотечных функций и т.п. Приводят к снижению надежности (зрелости) и ухудшению функциональности (защищенности) Ошибки в последовательных программах Ошибки синхронизации
ЖЦ программной ошибки Действие программиста приводящее к ошибке (Mistake) - ошибка, опечатка, незнание или неверное понимание работы вызываемых функций Программная ошибка, программный дефект (Error, Defect) -совокупность конструкций в исходном коде программы, которые могут приводить к некорректным действиям Срабатывание ошибки (Fault) - наступление условий в процессе выполнения программы, при которых выполняются некорректные действия Проявление ошибки, отказ (Failure)- негативное влияние сработавшей ошибки на работу программы (аварийное завершение, зависание, выдача некорректных результатов)
Свойства программных ошибок Ошибки в программе - величина ненаблюдаемая, наблюдаются не сами ошибки, а результат их проявления - отказы Надежность связана с частотой проявления ошибок, но не с их количеством - разные ошибки имеют разную частоту проявления Отказ программы может быть следствием не одной, а сразу нескольких ошибок Ошибки могут компенсировать друг друга - после исправления ошибки интенсивность отказов может увеличиться В результате исправления ошибки или любого другого изменения получается новая программа с другими показателями надежности
Влияние внешнего окружения При оценке надежности аппаратуры Для элементов, из которых изготавливается аппаратная система, модели надежности известны, они определяются на этапе их разработки и изготовления. Определение надежности элементов производится путем проверки достаточно большого числа этих элементов, с фиксацией сбоев и отказов Внешняя среда является естественным источником ненадежности, результаты двух экспериментов получаются независимыми При одинаковых условиях эксплуатации влияние внешней среды на тестируемые элементы в среднем будут одинаковым Известные характеристики (модели) надежности элементов позволяют получить оценку надежности всего устройства Внешнее окружение вызывает сбои и отказы аппаратуры
Влияние внешнего окружения При оценке надежности программ Для ПО обычно трудно провести разделение на части (элементы), измерение надежности каждой части в общем случае невозможно Параллельное тестирование двух экземпляров ПО даст почти полностью зависимые результаты Параллельное тестирование нескольких экземпляров имеет смысл только при различном внешнем окружении, разных входных данных и воздействиях, однако в этом случае трудно оценить корреляцию экспериментов и обработать полученные результаты Количество всех возможных состояний внешней среды для любой нетривиальной программы слишком велико что не позволяет провести полное множество экспериментов Внешнее окружение увеличивает число возможных состояний программы
Изменение надежности со временем Надежность аппаратной системы меняется со временем В начале эксплуатации она растет - фаза приработки Затем некоторое время остается постоянной В конце, начинает уменьшаться - фаза износа Надежность программы со временем не меняется Для ПО отсутствует фаза приработки и износа Коррекция программы, аналогична внесению изменений в конструкцию аппаратного устройства - получается новое ПО, с другими показателями надежности
Методы оценки надежности ПО Динамические методы - используют результаты выполнения программы Методы на основе моделей сложности - основаны на различных метриках сложности исходного кода программы Архитектурные методы - основаны на анализе архитектуры системы и могут использовать как динамические так и статические подходы Эмпирические методы - используют информацию о процессе проектирования Методы на основе статических методов обнаружения дефектов - основаны на обнаружении дефектов с помощью различных статических методов
Свойства методов оценки надежности Универсальность метода, по отношению к различным программам (архитектура программы, язык программирования, используемые библиотеки и компоненты) Универсальность метода, по отношению к различным условиям эксплуатации программы Стадии применения метода (проектирование, написание кода, тестирование, эксплуатация) Требуемые исходные данные Точность и достоверность оценки Сложность получения оценки