Методы оценки и повышения надежности программного обеспечения

Автор: Пользователь скрыл имя, 27 Декабря 2011 в 22:52, реферат

Описание работы

Существует и другое, более простое определение, согласно которому программное обеспечение представляет собой совокупность компьютерных инструкций. Оно охватывает программы, подпрограммы (разделы программы) и данные. Таким образом, программное обеспечение указывает компьютеру, что делать, как, когда, в какой последовательности и как часто. Нередко программное обеспечение называют просто программой.
Компьютерные программы состоят из перечней команд, которые заставляют компьютер выполнять нужную работу. Компьютер должен получать исчерпывающие конкретные команды. Часто компьютерные программы имеют вид стенограммы.

Содержание

ВВЕДЕНИЕ 3
1. Свойства надежности программного обеспечения 4
2. Модели оценки надежности программ 6
2.1. Модель Джелински-Моранды 6
2.2. Модель Шумана 7
2.3. Модель Миллса 7
3. Методы обеспечения надежности программных средств 8
4. Подход к обеспечению надежности №1 - предупреждение ошибок 10
4.1. Методы борьбы со сложностью 10
4.2. Обеспечение точности перевода 10
4.3. Преодоление барьера между пользователем и разработчиком 11
4.4. Контроль принимаемых решений 11
5. Подход к обеспечению надежности №2 - обнаружение и исправление ошибок 12
6. Подход к обеспечению надежности №3 - обеспечение устойчивости программы к ошибкам 16
ЗАКЛЮЧЕНИЕ 18
СПИСОК ИСПОЛЬЗОВАНОЙ ЛИТЕРАТУРЫ 19

Работа содержит 1 файл

реферат.doc

— 108.50 Кб (Скачать)

3. Методы обеспечения надежности программных средств 

     Стало классическим утверждение, что ошибка в программе обходится тем  дороже, чем позже она обнаружена. На самом же деле дорого обходится  не ошибка, а опыт эксплуатации программы (т.е. общее количество ее запусков), независимо от того, проявились ошибки или нет. Перед пользователем программы, в которой проявились ошибки, возникает дилемма: продолжать ее эксплуатировать или установить модифицированную версию (разумеется, речь не идет о тех случаях, когда последствия ошибок могут быть катастрофическими). Следует еще раз подчеркнуть, что если программа подвергалась модификациям (в частности, в ней исправлялись ошибки), то при оценке надежности следует учитывать только запуски, выполненные с момента последней модификации, так как в результате модификации получается новая программа, с другим (возможно, худшим) показателем надежности, и вся прежняя статистика должна быть аннулирована.

     Этим  частично объясняется тот факт, что  пользователи порой предпочитают обновленным  версиям программ старые, проверенные, эксплуатировавшиеся длительное время, даже если в них обнаружены погрешности: опыт эксплуатации стоит очень дорого, и даже если в программе выявлены ошибки, гораздо дешевле внести исправления и дополнения в инструкции к программе (если это, конечно, возможно), чем пожертвовать накопленным опытом.

     Стремление  разработчиков создавать бинарно  совместимые семейства микропроцессоров находит дополнительное объяснение с позиций надежности программного обеспечения: если бы это удалось  в полной мере, то опыт эксплуатации программ не приходилось бы аннулировать при переходе на новый тип процессора, что способствовало бы существенному повышению надежности использующихся программ.

     Интересно сравнить характеристики надежности аппаратуры и компьютерной программы. Как известно, надежность физического устройства меняется со временем: в начале эксплуатации она растет (происходит "приработка" изделия), затем некоторое время остается постоянной и, наконец, начинает уменьшаться (эффект износа или "старения").

     Говоря  о надежности аппаратуры, имеют в виду именно среднюю фазу, на которой надежность постоянна. Всеми отмечается тот факт, что компьютерная программа не изнашивается, так что последней фазы для нее не существует. Однако важно подчеркнуть, что первая фаза ("приработки" программы) тоже отсутствует: коррекция программы (независимо от причин, по которым она выполнялась) аналогична внесению изменений в конструкцию физического устройства, в результате чего получается новое устройство, с другим показателем надежности.

     Рассмотрим теперь общие принципы обеспечения надежности ПС, что, является основным мотивом разработки ПС, задающим специфическую окраску всем технологическим процессам разработки ПС. Известны четыре подхода обеспечению надежности:

  • предупреждение ошибок;
  • обнаружение ошибок;
  • исправление ошибок;
  • обеспечение устойчивости к ошибкам.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

4. Подход к обеспечению надежности №1  - Предупреждение ошибок 

     Целью подхода предупреждения ошибок - не допустить ошибок в готовых продуктах, в нашем случае - в ПС. Проведенное рассмотрение природы ошибок при разработке ПС позволяет для достижения этой цели сконцентрировать внимание на следующих вопросах:

  • борьба со сложностью;
  • обеспечение точности перевода;
  • преодоление барьера между пользователем и разработчиком;
  • обеспечение контроля принимаемых решений.

   Этот  подход связан с организацией процессов  разработки ПС, т.е. с технологией  программирования. И хотя гарантировать  отсутствие ошибок в ПС невозможно, но в рамках этого подхода можно  достигнуть приемлемого уровня надежности ПС. 

4.1. Методы борьбы со сложностью.

     Сложность системы является одной из главных  причин низкой надежности программного обеспечения. В общем случае, сложность  объекта является функцией взаимодействия (количества связей) между его компонентами. Известны два общих метода борьбы со сложностью систем:

  • обеспечения независимости компонент системы;
  • использование в системах иерархических структур.

   Обеспечение независимости компонент означает разбиение системы на такие части, между которыми должны остаться по возможности меньше связей. Одним из воплощений этого метода является модульное программирование.

     Использование в системах иерархических структур позволяет локализовать связи между  компонентами, допуская их лишь между  компонентами, принадлежащими смежным уровням иерархии. Этот метод, по-существу, означает разбиение большой системы на подсистемы, образующих малую систему. Здесь существенно используется способность человека к абстрагированию. 

4.2. Обеспечение точности перевода.

     Обеспечение точности перевода направлено на достижение однозначности интерпретации документов различными разработчиками, а также пользователями ПС. Это требует придерживаться при переводе определенной дисциплины. Майерс предлагает использовать общую дисциплину решения задач, рассматривая перевод как решение задачи. Лучшим руководством по решению задач он считает книгу Пойа "Как решать задачу". В соответствии с этим весь процесс перевода можно разбить на следующие этапы:

  • поймите задачу;
  • составьте план (включая цели и методы решения);
  • выполните план (проверяя правильность каждого шага);
  • проанализируйте полученное решение.
 

4.3.Преодоление барьера между пользователем и разработчиком.

     Как обеспечить, чтобы ПС выполняла то, что пользователю разумно ожидать от нее? Для этого необходимо правильно понять, во-первых, чего хочет пользователь, и, во-вторых, его уровень подготовки и окружающую его обстановку. Для преодоление барьера между пользователем и разработчиком при разработке ПС следует привлекать пользователя для участия в процессах принятия решений, а также тщательно освоить особенности его работы разработчику (лучше всего - побывать в его "шкуре"). 

4.4. Контроль принимаемых решений.

     Обязательным  шагом в каждом процессе (этапе) разработки ПС должна быть проверка правильности принятых решений. Это позволит обнаруживать и исправлять ошибки на самой ранней стадии после ее возникновения, что, во-первых, существенно снижает стоимость ее исправления и, во-вторых, повышает вероятность правильного ее устранения.

     С учетом специфики разработки ПС необходимо применять везде, где это возможно смежный контроль, сочетание как  статических, так и динамических методов контроля.

     Смежный контроль означает, проверку полученного  документа лицами, не участвующими в его разработке, с двух сторон: во-первых, со стороны автора исходного для контролируемого процесса документа, и, во-вторых, лицами, которые будут использовать полученный документ в качестве исходного в последующих технологических процессах. Такой контроль позволяет обеспечивать однозначность интерпретации полученного документа.

     Сочетание статических и динамических методов  контроля означает, что нужно не только контролировать документ как  таковой, но и проверять, какой процесс  обработки данных он описывает. Это отражает одну из специфических особенность ПС (статическая форма, динамическое содержание). 
 
 
 
 
 
 
 
 

5. Подход к обеспечению надежности №2  - Обнаружение и исправление ошибок в программе 

     ПО  как объект тестирования имеет ряд  особенностей:

  • отсутствие полностью определенного эталона (программы), которому должны соответствовать все результаты тестирования проверяемой программы;
  • высокая сложность программ и принципиальная невозможность построения тестовых наборов, достаточных для их исчерпывающей проверки;
  • невысокая степень формализации критериев качества процесса тестирования и достигаемого при этом качества объектов тестирования;
  • наличие в программах вычислительных и логических компонент, а также компонент, характеризующихся стохастическим и динамическим поведением.
 

     Тестирование  является основным методом обнаружения  ошибок при отладке программ. При  этом затраты на тестирование являются наибольшими, достигают 30 - 40% общих  затрат на разработку программ и в  значительной степени определяют качество созданного программного продукта. Высокая доля затрат на тестирование приводит к необходимости создания методов и средств, позволяющих достигать максимального качества программ при реальных ограничениях на длительность тестирования и на связанные с этим затраты. Создаются различные методы систематического и регламентированного тестирования, обеспечивающие наилучшее использование ресурсов проектирования с учетом особенностей создаваемых программ.

     Для определения задач тестирования целесообразно выделить три стадии:

  1. Тестирование для обнаружения ошибок в программе.

    Основной  целью тестирования для обнаружения  ошибок является выявление всех отклонений результатов функционирования реальной программы от заданных эталонных  значений. При этом задача состоит  в обнаружении максимального числа ошибок, в качестве которых принимается любое отклонение от эталонов. На этой стадии успешным является тестирование, которое приводит к обнаружению ошибок. Если в результате тестирования ошибки не выявлены, то проведенные операции не дали сведений, позволяющих повысить качество программ и тем самым не оправдали затрат. Таким образом, эффективными являются операции тестирования, обладающие высокой способностью по обнаружению ошибок в программе. Чем больше ошибок выявляется на этой стадии при каждой операции тестирования, тем выше их эффективность и обоснованность затрат на их выполнение. С этих позиций тесты, не способствующие обнаружению ошибок и только подтверждающие корректность функционирования программ, являются неэффективными.

  1. Тестирование для диагностики и локализации причин обнаруженных искажений результатов.

    Применяется после тестирования для обнаружения  ошибок. На этой стадии важнейшая задача - точно установить место искажения  программы или данных, явившегося причиной отклонения результатов от эталонных при тестировании для обнаружения ошибок. Тем самым определяется часть программы, подлежащая корректировке. Эффективными являются тесты, способствующие быстрой и точной локализации первичных ошибок. На этой стадии затраты оправданы и тестирование можно считать успешным, если оно приводит к полной локализации ошибки, подлежащей исправлению.

  1. Тестирование для контроля выполненных корректировок программ и данных (контрольное тестирование).

    Контрольное тестирование применяется после локализации и устранения обнаруженных ошибок, его задача состоит в подтверждения правильности выполненной корректировки программы и в отсутствии проявления ранее обнаруженных ошибок. В этом случае успешность тестирования определяется отсутствием проявления ранее обнаруженной, локализованной и устраненной ошибки, а также отсутствием вторичных ошибок, которые могут появиться при корректировке.

    Для тестирования применяются методы, предусматривающие  упорядочение и систематизацию тестов по различным стратегиям и параметрам, и методы неупорядоченного тестирования. Основное внимание при упорядоченном тестировании сосредоточивается на обнаружении ошибок при исходных данных и условиях функционирования, заданных требованиями технического задания. Однако в реальных условиях на вход программы могут попадать сильно искаженные или ложные данные. Программы должны сохранять свою работоспособность при последующем поступлении данных, изменяющихся в заданных пределах. Для этого тестирование необходимо проводить не только при корректных исходных данных, но и при искаженных.

    При неупорядоченном тестировании исходные данные, имитирующие внешнюю среду, случайным образом генерируются во всем диапазоне возможного изменения  параметров, производится случайный  перебор значений в произвольных сочетаниях различных величин. При этом многие значения исходных данных характеризуются малой вероятностью обнаружения ошибок и не оправдывают затраты на выполнение тестирования. Кроме того, возможно появление логически противоречивых данных. В то же время данные, наиболее важные с позиции реального использования программ и возможности обнаружения ошибок, могут оказаться не охваченными в процессе тестирования. При реально существующих ограничениях на объемы тестирования его неупорядоченное применение оказывается малоэффективным и почти не находит применения.

Информация о работе Методы оценки и повышения надежности программного обеспечения