Надёжность программного обеспечения (ПО) – это вероятность того, что ПО определённый период времени будет работать без отказов (сбоев) с учётом степени их влияния на выходные результаты. Другими словами, надежность ПО, есть функция от ущерба, наносимого ошибкой пользователю.
Сопоставим кривые интенсивности отказов технического объекта (ТО) (см. рис.2.3) и ПО. Интенсивность отказов ПО значительно отличается от интенсивность отказов ТО. А именно ПО не подвержено износу, редко встречаются ошибки производства. Ненадежность ПО целиком определяется ошибками разработки. Интенсивность отказов ПО изменяется в соответствии с кривой (рис. 1.1, б). Причём, в данном случае, ошибки исправляются по мере обнаружения и не вносятся новые ошибки.
Из рис. 11.1 можно сделать вывод: Надежность ТО определяется в основном случайными отказами, а в основе ненадежности ПО лежат предопределенные ошибки. Кроме того, отказ оборудования не зависит от обрабатываемой информации.
Отказ ТО, как правило, не зависит от конкретных значений обрабатываемых данных, если эти данные не выходят за рамки определённые технической характеристикой. С другой стороны, программные ошибки в большей степени зависят от входной информации. Причина появления ошибки при этом заключается в уникальном наборе обрабатываемых ПО данных.
Корректное ПО – это ПО удовлетворяющее своей спецификации.
Большая часть ПО, рассматриваемого в настоящее время как надежное, не является корректным. Можно считать систему надежной и при наличии в ней ошибок, но при условии, что:
· ошибки программирования оставляют возможность правильного использования системы (например, неправильный вывод, который обнаруживается и исправляется пользователем);
· ситуации, в которых ошибки оказывают влияние на конечные результаты, встречаются редко, а вероятность возникновения этих ситуаций в необходимый момент не очень велика.
С другой стороны, корректное ПО может быть ненадежным. Это случается тогда, когда спецификация ПО не является полным описанием того, что ожидается от данного ПО.
Огромное влияния на надежность и корректность ПО оказывает структура системы. Слабо структурированные системы обладают большей вероятностью быть ненадёжными и некорректными. В случаи их изменения (модификации) велика вероятность внесения ошибок.
Для решения задачи получения надежного ПО на этапе проектирования необходимо:
· при написании спецификаций для системы и каждого из ее модулей быть достаточно реалистичными при описании желаемого поведения в условиях, когда совершенное поведение недостижимо;
· в описании интерфейса между системой и окружающей средой, а также интерфейса между модулями системы необходимо предусматривать проверки корректности отработки заданий;
· включать в интерфейс взаимные проверки корректности отработки заданий.