Слайд 1Качество программного обеспечения
Слайд 2Качественные характеристики программного продукта
- надежность;
- эффективность;
- модифицируемость;
- мобильность;
- понятность (программа
должна быть составлена так, чтобы ее легко было читать и
использовать, так как программа пишется для людей);
- учет человеческого фактора.
Слайд 3Эффективность программы - это минимальные затраты оперативной и внешней памяти,
времени работы процессора, необходимые для выполнения программы.
Слайд 4Мобильность - программа является завершенной и машинонезависимой.
Слайд 5Модифицируемость - это возможность расширения вычислительных возможностей отдельных модулей.
Слайд 6Учет человеческого фактора - программа не требует излишних затрат времени
и усилий пользователя по поддержанию ее функционирования.
Слайд 7Надежность программы определяется как свойство выполнять заданные функции в заданных условиях работы
и на заданной вычислительной машине
Слайд 8Сбои в работе:
выдача неверных результатов;
отсутствие результатов;
уменьшение производительности;
порча данных пользователя.
Слайд 9Отказ программного продукта может быть обусловлен двумя причинами:
1) нарушение разработчиком программы
спецификации - технических требований к программе;
2) спецификация неточная или не полная.
Слайд 10Классификация программ
По степени точности спецификации:
1) программы, функции которых полностью определяются
спецификацией;
2) программы, функции которых корректируются сопоставлением вычислительных и измеренных результатов (сюда
относятся моделирующие программы , реализующие математическую модель физического объекта )
3) программы, действующие в постоянно изменяющейся среде (эта среда состоит из других программ, данных пользователей, реальных установок и схем и т.п.; к ним относятся операционные системы, управляющие программы и т.д.).
Слайд 11В связи с этой классификацией введено понятие корректности программы - ее соответствие
спецификации.
Но поскольку спецификация не всегда и не полностью соответствует
фактическим требованиям к программе, возможны случаи, когда некорректная программа работает надежно или, наоборот, корректная программа - ненадежно.
Слайд 12 Характерной особенностью ошибок, вызывающих отказы программ, является их скрытность -
проявление лишь в редких комбинациях исходных данных.
Слайд 13Обеспечение и повышение надежности программ
1) Усовершенствование технологии программирования.
Методологические подходы
необходимо
широко использовать принципы модульного программирования в сочетании с практикой минимизации
числа соединений между модулями
необходимо искать и применять способы так называемого оборонительного программирования, направленного на уменьшение вероятности ошибок в программах.
Слайд 14Обеспечение и повышение надежности программ
Основные концепции программирование
а) Защита –ограничение
неправильного использования программных объектов.
Требование проектировать и программировать таким образом,
чтобы не только гарантировать ожидаемое использование программы в строгом соответствии со спецификациями, но и сделать невозможным ее неправильное использование.
Слайд 15Обеспечение и повышение надежности программ
Основные концепции программирование
б) Устойчивость к
ошибкам, заключается в том, что как бы хорошо ни была
спроектирована и реализована программа, в ней обязательно будет содержаться несколько остаточных ошибок.
Модули программы, которые могут дать сбой, должны иметь “резервный запас”.
Слайд 16Обеспечение и повышение надежности программ
Модуль проектируется в виде блоков
восстановления. Каждый блок восстановления содержит пропускной тест и один или
несколько вариантов реализации. Основной вариант инициируется при вызове блока восстановления, и когда его выполнение завершается, происходит проверка значения пропускного теста.
Если он дает «истину», то считается, что выполнение блока восстановления успешно завершено.
Если же тест дает «ложь», то инициируется другой вариант, за которым следует определение значения пропускного теста и т. д. , и так до успешного выполнения блока восстановления.
Если же ни один вариант не прошел пропускного теста, то блок восстановления рассматривается как ошибочный и начинается исполнение другого варианта вызываемого модуля.
Слайд 17Обеспечение и повышение надежности программ
2) Выбор алгоритмов не чувствительных к различного рода нарушениям
вычислительного процесса (использование алгоритмической избыточности).
Слайд 18Обеспечение и повышение надежности программ
Мерой чувствительности алгоритма может являться
погрешность вычислений.
Результаты вычислений искажаются следующими погрешностями:
а) исходных данных, трансформированными в ходе
вычислений;
б) округления;
в) погрешностями метода;
г) погрешностями, обусловленными отказами, сбоями и ошибками в программе;
Слайд 19Обеспечение и повышение надежности программ
3) Резервирование программ (введение структурной избыточности).
Основано
на осознании того факта, что достижение необходимого уровня надежности программы
путем использования технологических мер обычно ограничено.
Для этого подготавливаются две или более версий программы для решения одной и той же задачи.
Слайд 20Обеспечение и повышение надежности программ
При дуальном программировании (если разрабатываются две версии
программы) в случае обнаружения расхождения в результатах, необходимо определить по
дополнительным критериям, какой результат правильный и отбросить другой результат.
Слайд 21Обеспечение и повышение надежности программ
При N-версионном программировании
подготавливаются N версий программы и правильный результат
определяется по мажоритарному признаку, т.е. выбирается тот результат, который наблюдается
в большинстве вариантов программы.
Слайд 22Обеспечение и повышение надежности программ
при модифицированном дуальном программировании наряду с
достаточно точной, но сложной основной программой используется менее точная, но
простая резервная программа.
Если при одинаковых исходных данных результаты работы программ отличаются на величину большую, чем допустимая погрешность, делается предположение, что отказала основная программа, как менее надежная, и в качестве правильного результата принимается результат работы резервной программы.
Слайд 23Обеспечение и повышение надежности программ
4) Тестирование программ. Тестирование - проверка
работы программы по результатам ее выполнения на специально подобранных наборах
исходных данных - тестах.
Программа может быть тестирована либо полностью, либо выборочно в отдельных точках пространства исходных данных.
Слайд 24Обеспечение и повышение надежности программ
При выборочном тестировании надежность программы не может
быть полностью гарантирована. Если тесты предлагаются программистом, то они могут
охватить только те части программы, с которыми программист наиболее знаком. Поэтому многие скрытые ошибки могут оставаться не обнаруженными.
Слайд 25Обеспечение и повышение надежности программ
Полное тестирование при всех возможных входных
наборах программы или даже тестирование всех путей в структуре программы
нереально, так как число тестов будет недопустимо большим.
Слайд 26Обеспечение и повышение надежности программ
Структурное выборное тестирование
основанно на разделении пространства
исходных данных на классы, причем каждый класс позволяет подтвердить определенные
свойства или работоспособность определенных элементов структуры программы.
Слайд 27Методы обеспечения надежности программных средств
создавать программные модули и функциональные компоненты высокого,
гарантированного качества;
предотвращать дефекты проектирования за счет эффективных технологий и средств автоматизации обеспечения
всего жизненного цикла комплексов программ и баз данных;
обнаруживать и устранять различные дефекты и ошибки проектирования, разработки и сопровождения программ путем систематического тестирования на всех этапах жизненного цикла ПС;
удостоверять достигнутое качество и надежность функционирования ПС в процессе их испытаний и сертификации перед передачей в регулярную эксплуатацию;
оперативно выявлять последствия дефектов программ и данных и восстанавливать нормальное, надежное функционирование комплексов программ.
Слайд 28Методы обеспечения надежности программных средств
Все принципы и методы обеспечения надежности
в соответствии с их целью можно разбить на четыре группы:
предупреждение
ошибок,
обнаружение ошибок,
исправление ошибок,
обеспечение устойчивости к ошибкам.
Слайд 29Методы обеспечения надежности программных средств
Предупреждение ошибок
принципы и методы, позволяющие минимизировать
или вообще исключить ошибки.
Слайд 30Методы обеспечения надежности программных средств
Обнаружение ошибок
Методы сосредоточивают внимание на функциях
самого программного обеспечения, помогающих выявлять ошибки.
Слайд 31Методы обеспечения надежности программных средств
Исправление ошибок
Функции программного обеспечения, предназначенные для
исправления ошибок или их последствий.
Слайд 32Методы обеспечения надежности программных средств
Обеспечение устойчивости к ошибкам
Мера способности системы
программного обеспечения продолжать функционирование при наличии ошибок.
Слайд 33Предупреждение ошибок
Цель — не допустить появления ошибок в готовой программе.
Слайд 34Предупреждение ошибок
1) методы, позволяющие справиться со сложностью, свести ее к минимуму,
так как это — главная причина ошибок перевода;
2) методы достижения большей
точности при переводе;
3) методы улучшения обмена информацией;
4) методы немедленного обнаружения и устранения ошибок. Эти методы направлены на обнаружение ошибок на каждом шаге перевода, не откладывая до тестирования программы после ее написания.
Слайд 35Предупреждение ошибок
Предупреждение ошибок — оптимальный путь к достижению надежности программного обеспечения.
Лучший
способ обеспечить надежность — прежде всего не допустить возникновения ошибок.
Слайд 36Обнаружение ошибок
Если предполагать, что в программном обеспечении какие-то ошибки все же
будут, то лучшая (после предупреждения ошибок) стратегия — включить средства
обнаружения ошибок в само программное обеспечение.
Слайд 37Обнаружение ошибок
Немедленное обнаружение имеет два преимущества: можно минимизировать влияние ошибки и
последующие затруднения для человека, которому придется извлекать информацию о ней,
находить ее и исправлять.
Слайд 38Обнаружение ошибок
Меры по обнаружению ошибок можно разбить на две подгруппы:
пассивные попытки обнаружить
симптомы ошибки в процессе «обычной» работы программного обеспечения
активные попытки программной
системы периодически обследовать свое состояние в поисках признаков ошибок.
Слайд 39Обнаружение ошибок
Пассивное обнаружение.
Меры по обнаружению ошибок могут быть приняты на нескольких
структурных уровнях программной системы.
Слайд 40Обнаружение ошибок
1. Взаимное недоверие. Каждый из компонентов должен предполагать, что все другие содержат
ошибки. Когда он получает какие-нибудь данные от другого компонента или
из источника вне системы, он должен предполагать, что данные могут быть неправильными, и пытаться найти в них ошибки.
2. Немедленное обнаружение. Ошибки необходимо обнаружить как можно раньше. Это не только ограничивает наносимый ими ущерб, но и значительно упрощает задачу отладки.
3. Избыточность. Все средства обнаружения ошибок основаны на некоторой форме избыточности (явной или неявной).
Слайд 41Обнаружение ошибок
Активное обнаружение ошибок
Диагностический монитор -параллельный процесс, который периодически анализирует состояние
системы с целью обнаружить ошибку:
периодически выполняемая задача (например, она планируется
на каждый час)
задача с низким приоритетом, которая планируется для выполнения в то время, когда система переходит в состояние ожидания.
Слайд 42Обнаружение ошибок
Монитор может
обследовать основную память, чтобы обнаружить блоки памяти, не
выделенные ни одной из выполняемых задач и не включенные в
системный список свободной памяти.
проверять также необычные ситуации: например, процесс не планировался для выполнения в течение некоторого разумного интервала времени.
осуществлять поиск «затерявшихся» внутри системы сообщений или операций ввода-вывода, которые необычно долгое время остаются незавершенными, участков памяти на диске, которые не помечены как выделенные и не включены в список свободной памяти, а также различного рода странностей в файлах данных.
Слайд 43Исправление ошибок
После того как ошибка обнаружена, либо она сама, либо ее
последствия должны быть исправлены программным обеспечением.
Исправление ошибок самой системой
— плодотворный метод проектирования надежных систем аппаратного обеспечения.
Слайд 44Исправление ошибок
Некоторые устройства способны обнаружить неисправные компоненты и перейти к использованию
идентичных запасных.
Аналогичные методы неприменимы к программному обеспечению вследствие глубоких
внутренних различий между сбоями аппаратуры и ошибками в программах.
Если некоторый программный модуль содержит ошибку, идентичные «запасные» модули также будут содержать ту же ошибку.
Слайд 45Исправление ошибок
Другой подход к исправлению связан с попытками восстановить разрушения, вызванные ошибками, например
искажения записей в базе данных или управляющих таблицах системы.
Слайд 46Исправление ошибок
Польза от методов борьбы с искажениями ограничена, поскольку предполагается, что
разработчик заранее предугадает несколько возможных типов искажений и предусмотрит программно
реализуемые функции для их устранения.