Разработка программнотАУалгоритмических средств для определения надёжности программного обеспечения на основании моделирования работы системы типа "клиенттАУсервер"
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
группы принципов обеспечения надежности:
предупреждение ошибок;
обнаружение ошибок;
исправление ошибок;
обеспечение устойчивости к ошибкам.
В работе [17] говорится, что для повышения надежности программных комплексов необходимо применять разнообразие. Этот метод предполагает реализацию одной и той же функции разными алгоритмами и с применением разных средств разработки. Также предлагается применять глубоко эшелонированную защиту. Этот метод предполагает применение многоуровневой защиты с перекрытием, т.е. с перекрывающимися назначениями защит разных уровней. Предлагается применять также смягченную деградацию систем, т.е. когда часть системы при выходе из строя другой части частично берет на себя выполнение ее функций.
Возможные действия, направленные на минимизацию ошибок и сбоев:
предотвращение ошибок за счет структурного программирования;
сокрытие информации или дозированный доступ к данным со стороны программных средств и объектов в объектноориентированном программировании;
отладка;
устойчивость к сбоям;
обработка исключительных ситуаций (перехват ошибок, например, деление на ноль) и локализация ошибок и сбоев;
восстановление программы после сбоя;
верификация и валидация (верификация отвечает на вопрос, правильно ли и качественно ли создана программа, а валидация (или аттестация) на вопрос правильно ли работает программа).
В работе [13] говорится о повышении надежности ПО с помощью введения избыточности. Для повышения надежности ПО пользуются методом резервирования. Для этого разрабатывают две или более различных по алгоритмам версий программы для решения одной и той же задачи. Для этого хорошо подходит метод, когда одну и ту же программу пишут две независимые группы программистов, даже если при этом они реализуют один и тот же алгоритм (задача не должна быть при этом тривиальной). Это очень ресурсоемкий метод и поэтому редко используется на практике. Такое ПО параллельно выполняется в процессе эксплуатации. Сюда же подходит метод быстрого, но не точного решения и долгого и точного, с последующим сравнением результатов. ПО считается правильно отработавшим, если результат сравнения удовлетворяет какомулибо критерию близости результатов, например разность результатов не должна превышать некоторого значения.
Надежность ПО повышается также с помощью применения различных методов тестирования. Полное тестирование ПО объективно невозможно, поэтому обычно применяют следующие виды тестирования:
тестирование ветвей;
математическое доказательство правильности алгоритма решения задачи (в некоторых работах именно в этом смысле употребляется слово верификация). В [11] показывается, что доказательство правильности программы с помощью исчисления предикатов первого порядка не исключает ошибки в программе, так как относится к доказательству правильности внутренней спецификации на конкретный модуль. Этот метод заключается в том, что с помощью аппарата формальной математической логики пишут входные условия и выходные утверждения, а затем показывают, что, производя над входными условиями действия согласно тем, что записаны в программе, получается выходное утверждение. Часто пользуются обратным методом, т.е. идут от выходного утверждения к входному утверждению. Этот метод труден и утомителен, а многие конструкции языков программирования не поддаются доказательству с точки зрения формальной логики. Этот метод не работает, если выходное утверждение само не правильно. Тогда можно доказать, что программа приводит к этому утверждению, но это оказывается бесполезно с практической точки зрения. Тем не менее, метод имеет право на жизнь, потому что позволяет обнаруживать ошибки во внутренней логике модуля, но применим в основном к программам численных вычислений и применим к незначительному подмножеству языка программирования;
символическое тестирование (или с помощью специально подобранных тестовых наборов), еще называется статическим тестированием. Удобно при локализации ошибки, проявление которой выявлено при конкретном узком или строго заданном диапазоне входных значений;
динамическое тестирование (с помощью динамически генерируемых входных данных), что удобно при быстром тестировании во всем широком диапазоне входных параметров;
тестирование путей выполнения программы;
функциональное тестирование;
проверки по времени выполнения программы;
проверка по использованию ресурсов и стрессовое тестирование.
В работе [8] говорится, что существует 4 основные составляющие функциональной надежности программных систем:
безотказность свойство программы выполнять свои функции во время эксплуатации;
работоспособность свойство программы корректно (так как ожидает пользователь) работать весь заданный период эксплуатации;
безопасность свойство программы быть не опасной для людей и окружающих систем;
защищенность свойство программы противостоять случайным или умышленным вторжениям в нее.
В этом случае высокий уровень функциональной надежности может быть достигнут только за счет уменьшения эффективности работы программы. В работе [19] говорится, что в соответствии с ГОСТ 19.00480 различают следующие виды работ, направленные на устранение ошибок в ПО: проверка, отладка и испытание программы.
Чем интенсивнее использование ПО, тем быстрее выявляются в нем ошибки. На рис.5 приведена зависимость числа обнаруженных ошибок от числа и