Модели поведения ошибок функционирующего ПО

Принятое в эксплуатацию ПО содержит случайное число N(0) скрытых ошибок (дефектов), которые впоследствии проявляют себя в случайные моменты процессорного времени , j = 1, 2, …(наработки до отказов) и вызывают отказы отдельных программ и всего комплекса (рис. 4.4).

 

Рис. 4.4 – Схема функционирования ПО на стадии эксплуатации: - процессорное время, - астрономическое время; Р – работа; В - восстановление

 

Каждый отказ полностью восстанавливается за случайное время 1, 2,…программистом-«ремонтником», который находит ошибку и устраняет ее путем исправления алгоритма и/или текста ПО. После подобного полного «ремонта» ПО проходит статическое и/или динамическое тестирование и считается сертифицированным программным продуктом, вводимым как бы заново в условный момент времени t=0 в эксплуатацию .

В процессе функционирования ПО число N(t) оставшихся ошибок изменяется случайным образом в каждый момент t, , так как значения и - случайные и, кроме того, программисты-«ремонтники» могут вносить в программы новые случайные дефекты. Зависимость числа ошибок ПО от времени t можно описать моделью поведения , являющейся оценкой математического ожидания дискретной случайной величины N. Три возможных модели поведения ошибок ПО на этапе его эксплуатации показаны на рис. 4.3 и рис. 4.5.

 

Рис. 4.5 – Модели поведения числа ошибок на этапе эксплуатации ПО: - процессорное время

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

.

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

Указанное свойство ПО рано или поздно становиться (в рамках модели ) безошибочным и, тем самым абсолютно надежным, характерно только для программных объектов и не наблюдается у технических элементов и систем. Действительно, для технических элементов надежность всегда снижается при увеличении срока их эксплуатации, т.е. Р(t) ® 0 при t ® ¥.

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

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

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

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

При быстром возрастании и числа программных отказов необходим «капитальный ремонт» ПО, заключающийся в переписывании всех или наименее надежных программ.