Качество программного обеспечения

Качество программного обеспечения

1. Качество программного обеспечения

2.

Основные понятия
Решение любой задачи, выполнение любой функции,
возложенной на ЭВМ, работающей в сети или локально, возможно
при взаимодействии аппаратных и программных средств. Поэтому
при анализе надежности выполнения ЭВМ заданных функций
следует рассматривать единый комплекс аппаратных и
программных средств.
По аналогии с терминами, принятыми для обозначения
показателей надежности ТУ, под надежностью программного
обеспечения (ПО) понимается свойство этого обеспечения
выполнять заданные функции, сохраняя свои характеристики в
установленных пределах при определенных условиях эксплуатации.
Надежность ПО определяется его безотказностью и
восстанавливаемостью. Безотказность ПО – это свойство
сохранять работоспособность при использовании его для
обработки информации в ИС. Безотказностью программного
обеспечения оценивается вероятность его работы без отказов при
определенных условиях внешней среды в течение заданного периода
наблюдения.

3.

В приведенном определении под отказом ПО понимается
недопустимое отклонение характеристик функционирования этого
обеспечения от предъявляемых требований. Определенные условия
внешней среды – это совокупность входных данных и состояние
самой ИС. Заданный период наблюдения соответствует времени,
необходимому для выполнения на ЭВМ решаемой задачи.
Безотказность ПО может характеризоваться средним
временем возникновения отказов при функционировании программы.
При этом предполагается, что аппаратные средства ЭВМ находятся в
исправном состоянии.
С точки зрения надежности, принципиальное отличие ПО от
аппаратных средств состоит в том, что программы не изнашиваются
и их выход из строя из-за поломки невозможен. Следовательно,
характеристики функционирования ПО зависят только от его
качества, предопределяемого процессом разработки. Это означает,
что безотказность ПО определяется его корректностью и зависит от
наличия в нем ошибок, внесенных на этапе его создания.

4.

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

5.

Основные причины отказов программного
обеспечения
Основными причинами, вызывающими нарушения
нормального функционирования ПО, являются:
1) ошибки, скрытые в самой программе;
2) искажение входной информации;
3) неверные действия пользователя;
4) неисправность аппаратных средств ИС, на которой
реализуется вычислительный процесс.

6.

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

7.

в) Ошибки ввода-вывода. Эти ошибки связаны с неправильным
управлением ввода-вывода, формированием выходных записей,
определением размера записей и другими неправильно
свершенными действиями.
г) Ошибки манипулирования данными. К числу таких ошибок
относятся: неверное определение числа элементов данных;
неверные начальные значения, присвоенные данным; неверное
указание длины операнда или имени переменной и другие ошибки.
д) Ошибки совместимости связаны с отсутствием совместимости
разрабатываемого или применяемого ПО с операционной системой
или другими прикладными программами.
е) Ошибки сопряжений. группа этих ошибок вызывает неверное
взаимодействие ПО с другими программами или подпрограммами, с
системными программами, устройствами ЭВМ или входными
данными.

8.

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

9.

10.

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

11.

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

12.

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

13.

14.

Значения неизвестных параметров K и M могут быть
оценены на основании последовательности наблюдения
интервалов между моментами обнаружения ошибок.
На практике условия рассмотренной модели нередко
не соблюдаются, а именно:
- не всегда при устранении ошибки интенсивность
отказов уменьшается на одну и ту же величину K , так как
разные ошибки имеют различное влияние на ход исполнения
программы;
- довольно часто возникают ситуации, при которых
устранение одних ошибок приводит к появлению новых;
- не всегда удается устранить причину ошибки и
программу продолжают использовать, так как при других
исходных данных ошибка может себя и не проявить.

15.

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

16.

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

17.

Пусть в процессе исправления ошибок новые ошибки не
появляются.
Следовательно, интенсивность исправления ошибок будет
равна интенсивности их обнаружения:

18.

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

19.

Типы отказов и сбоев при исполнении комплекса программ
Отказы и сбои, по степени их влияния на функционирование
комплекса программ и на всю систему управления в целом, делятся на
несколько крупных групп:
1) искажения вычислительного процесса и данных, вызывающие полное
прекращение выполнения функций системой управления на длительное
или неопределѐнное время;
2) отказ, в значительной степени обесценивающий результаты предыдущего
функционирования;
3) искажения, кратковременно прерывающие функционирование системы и
мало искажающие накопленные данные и выдаваемые результаты;
4) частичный отказ или длительный сбой, в некоторой степени,
обесценивающий предыдущие результаты;
5) искажения кратковременные и малоотражающиеся на вычислительном
процессе и обрабатываемых данных;
6) сбои, практически не обесценивающие результаты функционирования
комплекса программ.

20.

В зависимости от глубины контроля и длительности запаздывания
в обнаружении отказа, а также в зависимости от качества средств,
осуществляющих восстановление, одни и те же ситуации искажений
могут быть отнесены к разным типам отказов или сбоев. Наиболее
типичными полными отказами при функционировании сложных
комплексов программ являются:
1) зацикливание, т. е. последовательное, повторяющееся исполнение
группы команд, которое не прекращается без внешнего
вмешательства, блокируя функционирование всех остальных
программ данного комплекса;
2) остановка ЭВМ и полное прекращение решения функциональных
задач, при этом может сохраниться возможность приѐма и выдачи
информации и выполнения некоторых функций, стимулируемых
прерываниями;
3) значительное искажение или полная потеря накопленных данных о
состоянии внешних абонентов и процессе их функционирования;
4) прекращение или недопустимое снижение темпа решения
некоторых задач, пропуск или потеря необработанных групп
сообщений вследствие перезагрузки ЭВМ.

21.

Эти отказы существенно влияют на выполнение основных
функций комплексом программ. В несколько меньшей степени, на
вычислительный процесс и обрабатываемые данные влияют
искажения, приводящие к следующим типам частичных отказов или
длительных сбоев:
1) искажения
заданной
последовательности
вызова
подпрограмм, приводящие к пропуску исполнения отдельных
подпрограмм или их частей, что приводит, в свою очередь, к
неправильному или неполному решению некоторых задач и к
искажению выходных данных;
2) использование и обработка искажѐнных исходных данных,
отражающиеся на логике решения задач и приводящие к
искажению отдельных накопленных и выдаваемых данных.

22.

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

23.

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

24.

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

25.

Искажения исходной информации, в большинстве случаев,
не влияют на надежность выполнения программ. Причинами
искажений данных, поступающих от внешних абонентов, могут
быть:
1) искажение данных на первичных носителях информации;
2) сбои и частичные отказы в аппаратуре ввода данных с
первичных носителей информации;
3) шумы и сбои в каналах связи при передаче или приѐме
телекодовой информации;
4) потери или искажения сообщений в ограниченных буферных
накопителях вычислительной системы;
5) ошибки в документах, используемых для подготовки данных,
вводимых в вычислительную систему.

26.

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

27.

Невыявленные ошибки являются основной причиной
ненадѐжности функционирования. В процессе отладки основная
часть ошибок в программах обнаруживается и устраняется, но есть
риск пропуска нескольких ошибок. Любая отладка «может показать
наличие ошибок, но не может показать их отсутствие». В процессе
тестирования и отладки программ практически невозможно
выполнение абсолютно полных проверок. В результате в
программах
всегда
существует
некоторое
количество
невыявленных ошибок.

28.

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

29.

Идея структурного (модульного) программирования базируется
на стремлении упорядочить сложные комплексы программ и их
проектирование. Строгое определение термина «структурное
программирование» не существует. Имеется несколько определений
структурного (модульного) программирования. Чаще всего оно
определяется как программирование без использования операторов
GO TO, с применением нисходящего метода разработки программ и с
использованием принципа модульного конструирования программ.
Указанные три приѐма повышают надѐжность, удобочитаемость и
удобство обслуживания программного обеспечения.
Программирование без использования операторов GO TO.
Сам по себе оператор безусловного перехода не приводит к ошибкам.
Однако передача управления с помощью этого оператора может
вызвать усложнение логической схемы программы и сделать еѐ
трудночитаемой. Наоборот, исключение операторов GO TO позволяет
получить более понятную и удобочитаемую программу. Кроме того,
программу, не содержащую операторов безусловного перехода, легче
проверить.

30.

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

31.

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

32.

Всю совокупность данных можно разделить на два иерархических
уровня: простые переменные и массивы. Простые переменные
представляют собой минимальную компоненту данных, имеющую имя и
описание. Массивы образуются из нескольких простых переменных по
некоторым правилам объединения и упорядочивания и имеют
собственное описание, структуру и имя. Основными символами для
описания данных являются буквы, цифры и ограничители. Наиболее
часто используются следующие типы переменных:
1) вещественные, принимающие действительные положительные и
отрицательные значения в заданных пределах;
2) целые, в заданных интервалах принимающие только целые
положительные и отрицательные численные значения;
3) булевы, принимающие только два значения: да или нет (истина
или ложь);
4) двоичные, представляющие собой последовательность бит;
5) символьные, образующиеся из последовательности байтовых
кодов, каждый из которых соответствует некоторому символу
языка программирования или описания данных.

33.

Из простых переменных по заданным правилам упорядочения
образуются массивы, размеры которых задаются списками граничных пар.
Структура массивов и правила упорядочения переменных различны и
определяются следующими факторами:
1) типами и структурой простых переменных, а также областью
значений, которые могут принимать переменные;
2) мощностью массива – наибольшим числом значений, которые могут
принимать переменные, а также объемом памяти, необходимым для
хранения массива в любой момент времени;
3) способом заполнения и уплотнения переменных в памяти,
используемой для хранения массива;
4) методом и частотой заполнения и выборочного обновления
компонентов массива и затратами производительности ЭВМ,
необходимыми для обращения к массиву;
5) типом реальной памяти, используемой для хранения массива.
Для повышения надѐжности комплексов программ целесообразно
использовать простейшие структуры массивов. При работе с массивами
наибольшие затраты производительности ЭВМ связаны с поиском простых
переменных или частных массивов, признаки которых удовлетворяют
некоторому условию.

34.

Тестирование и испытание программ
Вполне вероятно, что даже при использовании
самых лучших способов программирования, программные
комплексы всѐ же будут содержать те или иные ошибки.
Целью испытаний программы является подтверждение
того, что она соответствует проектным замыслам. Любая
корректировка программы может быть сведена к трѐм
типовым операциям:
1) исключение части или всей подпрограммы;
2) вставка компонент или новой целой подпрограммы
на имеющееся свободное место;
3) замена части или всей подпрограммы в пределах
освобождающегося свободного места или с
расширением программы и использованием
дополнительной памяти.

35.

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

36.

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

37.

Затем этот инструментальный файл данных и файл данных
исходной программы, снабжѐнный дополнительными операторами,
вводятся в модуль анализатора, который выдаѐт на выходе
сведения о поведении испытуемого модуля в процессе его
выполнения. В каждом таком отсчѐте содержится информация о
числе случаев появления каждого оператора, числе случаев выбора
конкретного маршрута в каждой точке ветвления и о времени,
необходимом для выполнения каждого оператора. Подобная
информация используется при проверке структуры программы; она
даѐт уверенность в правильности логики и кода программы,
гарантирует, что каждый оператор и каждое ответвление
программы выполняется хотя бы один раз. Можно также
обеспечить вызов хотя бы один раз каждой подпрограммы.
Длительность испытаний зависит от конфигурации системы и
состава испытаний, но типичным можно считать период, включая
испытания в условиях пользователя от 1 до 6 месяцев, иногда и
более.

38.

Критерии надежности программных комплексов
При разработке технических требований на
надѐжность программных комплексов следует принимать
во внимание следующие критерии:
1) корректность программного обеспечения – число
серьѐзных ошибок в индивидуальном программном
пакете и время, необходимое для их исправления;
2) обслуживаемость системы – влияние ошибок
программного комплекса на обслуживаемость
системы;
3) безотказность системы – частота системных (или
подсистемных) отказов, вызываемых ошибками
программного обеспечения.

39.

С учѐтом сложившейся реальности при выборе критериев оценки
надѐжности необходимо принимать во внимание следующие.
Новое программное обеспечение может требовать в первое время
менее
жѐстких
критериев
и
большего
времени
для
его
совершенствования.
На короткое время, после выпуска новой версии программного
обеспечения, также могут потребоваться менее строгие критерии его
качества.
Разбросы, вызываемые различием в условиях применения и
использования.
Эффективность работ по исправлению ошибок программного
обеспечения, проводимых пользователем, зависит от воспроизводимости
ошибок, что, в свою очередь, зависит от информации, поступающей от
пользователя.
Возможны и другие требования, которые следует принять во
внимание,
например,
связанные
с
быстродействием
и
производительностью. Может случиться, что подобные критерии
достигаются только за счѐт большого числа остающихся некорректностей
или низкой безотказности и обслуживаемости системы.
English     Русский Правила