печатать мавлют / lec2
.pdf
Лекция #2
Формальные методы обеспечения качества ПО
Михаил Моисеев
Методы оценки надежности ПО
Определение надежности
Надежность (Reliability, Dependability) – свойство объекта сохранять во времени в установленных пределах значения всех параметров, характеризующих способность выполнять требуемые функции в заданных режимах и условиях применения, технического
обслуживания, хранения и транспортирования*
Надежность – комплексное свойство, в зависимости от назначения и условий применения может включать
Безотказность – свойство непрерывно сохранять работоспособное состояние в течении некоторого времени
Долговечность – свойство сохранять работоспособное состояние в течении установленного срока эксплуатации
Ремонтопригодность – свойства приспособленности к поддержанию
работоспособного состояния путем обслуживания и ремонта
Сохраняемость – свойство сохранять значения параметров при хранении и
транспортировке
* ГОСТ 27.002-89
Лекция #2 |
2 |
Показатели надежности
Вероятность безотказной работы – вероятность того, что в пределах заданной
наработки (времени или объема работы) не возникнет отказ
Средняя наработка до отказа (Mean Time To Failure) – мат. ожидание
наработки объекта до первого отказа
Средняя наработка на отказ (Mean Time Between Failures) –
отношение суммарной наработки к мат. ожиданию числа отказов в течении этой наработки
Интенсивность отказов – плотность вероятности возникновения отказов
Коэффициент готовности – вероятность того, что объект окажется в
работоспособном состоянии в произвольный момент времени
Средний срок службы
Вероятность восстановления
Лекция #2 |
3 |
Постановка задачи
Процесс обеспечения любой характеристики подразумевает возможность оценки полученного результата
Измерение (оценка) надежности ПО – определение одного или нескольких показателей надежности
История вопроса
Интерес к измерению надежности программного обеспечения (ПО) возник одновременно с появлением программ. Были предприняты попытки получить традиционную вероятностную оценку надежности для ПО как для отдельной технической системы, с помощью подходов классической
теории надежности.
Теория надежности ПО (Software Reliability Engineering)
Лекция #2 |
4 |
Причины ненадежности
Источники ненадежности аппаратных систем – внешние факторы
Источник ненадежности программ – ошибки, сделанные разработчиками программ, на разных стадиях проектирования
Инженеры vs Программисты
Истинные причины
Сложность ПО обычно выше, больше набор входных данных, больше внутренних состояний, длинные зависимости между состояниями в времени
Аппаратная система проектируется из сравнительно небольшого числа типовых элементов
Аппаратные решения меньше подвержены изменениям
Для аппаратуры меньше взаимное влияние элементов друг на друга
Инженеры тоже делают ошибки
Лекция #2 |
5 |
Ошибки в программах
Процесс проектирования ПО – преобразование и детализация
различных представлений программы
Ошибки вносятся на разных стадиях и присутствуют в соответствующих представлениях программы (артефактах процесса проектирования)
Причина появления ошибок – высокая сложность проектирования ПО
Лекция #2 |
6 |
Ошибки в программах
Значительное число ошибок вносится на стадии кодирования – эти ошибки находятся в исходном коде программы
Будем рассматривать в основном такие ошибки
Вопросы управления требованиями и формирования программной спецификации, а также остальные этапы проектирования рассматриваются в других курсах
Лекция #2 |
7 |
Классификация ошибок
Функциональные ошибки – нарушения программной спецификации (несоответствие функциональным или нефункциональным требованиям). Приводят к ухудшению функциональности ПО (пригодность, точность)
Нефункциональные ошибки – нарушения правил языка программирования, неправильное использование библиотечных функций и т.п. Приводят к снижению надежности (зрелости) и
ухудшению функциональности (защищенности)
Ошибки в последовательных программах
Ошибки синхронизации
Лекция #2 |
8 |
Примеры программных дефектов
Функциональные ошибки
Нефункциональные ошибки – зависят от языка программирования
Основные виды нефункциональных ошибок в последовательных программах на языке C
Ошибки использования неинициализированного, освобожденного указателя или указателя на NULL
Утечки ресурсов, в том числе динамической памяти
Ошибочно игнорируемые участки кода
Ошибки отсутствия инициализации интервальных переменных
Ошибки выхода за границы статических и динамических объектов
Отсутствие проверки возвращаемого значения функций
Лекция #2 |
9 |
Примеры программных дефектов
Основные виды ошибок синхронизации для программ,
использующих библиотеку Pthreads
Конкурентная работа с разделяемыми объектами программы из нескольких потоков (Race condition) – один из видов недетерминизма при выполнении программы
Взаимная блокировка потоков на объектах синхронизации (Deadlock)
Активная блокировка (Livelock), возникающая из за невозможности получения всех необходимых ресурсов
Лекция #2 |
10 |
