Отказы аппаратно-программных средств и основные проблемы исследования надежности программного обеспечения

 

Любое АПС содержит как аппаратную (техническую), так и программную части [20].

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

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

Аппаратные и программные отказы АПС и имеют много общего:

- невыполнение объектом заданных функций;

- времена до отказов и времена устранения отказов носят случайный характер;

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

Вместе с тем программные отказы существенно отличаются от отказов аппаратурных:

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

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

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

- прогнозировать возникновение аппаратных отказов сравнительно легко, а прогнозировать возникновение отдельных программных отказов трудно, а часто и невозможно (для отдельных программных отказов трудно предвидеть время, когда они становятся действующими, а когда – недействующими);

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

Основными причинами, вызывающими нарушения нормального функционирования ПО, являются:

- ошибки, скрытые в самой программе;

- искажение входной информации;

- неверные действия пользователя;

- неисправность аппаратных средств, на которой реализуется вычислительный процесс.

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

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

Логические ошибки. Эта группа ошибок является причиной искажения алгоритма решения задачи. К ошибкам подобного рода можно отнести неверную передачу управления, неверное задание диапазона изменения параметра цикла, неверное условие и другие ошибки.

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

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

Ошибки совместимости связаны с отсутствием совместимости разрабатываемого или применяемого ПО с операционной системой или другими прикладными программами.

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

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

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

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

Следствием появления ошибок в программе является ее отказ. Последствия отказов ПО можно разделить на:

- полное прекращение выполнения функций программы;

- кратковременное нарушение хода обработки информации.

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

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

Таким образом, к основным проблемам исследования надежности ПО следует отнести:

1) разработку методов оценки и прогнозирования надежности ПО;

2) определение факторов, влияющих на достижение заданного уровня надежности ПО;

3) разработку методов, обеспечивающих достижение заданного уровня надежности ПО;

4) совершенствование методов повышения надежности ПО на всех этапах его жизненного цикла.