Надежная программа, прежде всего, должна обеспечивать низкую вероятность отказа в процессе ее реального функционирования. Быстрое реагирование на искажения программ, данных или вычислительного процесса и восстановление работоспособности за время, меньшее, чем порог между сбоем и отказом, позволяют обеспечивать высокую надежность программ. При этом некорректная программа может функционировать в принципе абсолютно надежно. Действительно, если каждое появление реальных исходных данных, попадающих в области, не проверенные при тестировании и стимулирующих неправильные результаты, не приводит к событиям, соответствующим отказу, то такая программа функционирует безотказно и надежно, хотя и не всегда правильно.
Совершенно корректная программа определена в области исходных данных, заданных требованиями технического задания. Однако в реальных условиях за счет различных причин исходные данные могут попадать в область, не проверенную при отладке и не соответствующую требованиям спецификации. При таких исходных данных правильная программа не проверялась и может потерять работоспособность за счет конфликта между исходными данными и программой. В результате формально правильная программа окажется ненадежной, прежде всего, из-за системных ошибок при задании области изменения исходных данных. Если при тех же исходных данных восстановление происходит за время, меньшее, чем пороговое время между отказом и сбоем, то такие события не влияют на основной показатель надежности – наработку на отказ. Следовательно, отказ при функционировании программы является понятием динамическим.
Таким образом, показатели надежности программ должны учитывать характеристики восстановления после возникновения отказовой ситуации в процессе функционирования. Кроме того, корректная и надежная программы различаются областями изменения исходных данных, которые определяют степень некорректности или степень ненадежности.
В некоторой области изменения исходных данных, корректность и надежность программы оказываются коррелированными, что соответствует данным, определенным техническим заданием и не проверенным при тестировании. Однако и при таких исходных данных программа может иметь высокие показатели надежности, если восстановление производится оперативно в пределах интервала времени, ограничивающего события сбоев.
Так как в программах нет необходимости «ремонта» компонентов с участием человека, то нужно добиваться высокой автоматизации программного восстановления функционирования. Автоматизируя процесс и сокращая время восстановления, можно преобразовать отказы в сбои и тем самым улучшить показатели надежности функционирования системы в реальном времени. Для решения этой задачи в комплексе программ должны быть средства, позволяющие [17]:
• проводить систематический контроль и оперативно обнаруживать аномалии процесса функционирования или состояния программ и данных;
• диагностировать обнаруженные искажения;
• вырабатывать решения и выбирать методы и средства оперативного восстановления;
• реализовывать оперативное восстановление нормальной работоспособности;
• регистрировать каждый происшедший сбой или отказ и обобщать с данными предыдущих искажений для выявления систематических случаев, требующих доработки программ или аппаратуры.
Высокое качество программного продукта достигается при определенных затратах на их разработку и отладку. Значительную долю в них составляют затраты на тестирование и испытания комплекса программ, особенно в системах реального времени. Исследование факторов, влияющих на затраты ресурсов при создании программ, позволило рационализировать их использование и добиваться заданного качества при минимальных или допустимых затратах. Повышению качества функционирования комплекса программ способствует введение избыточности в программы и данные. Особенно большое влияние может оказывать избыточность на надежность решения задач в реальном времени. При этом возможно снижение затрат на отладку и частичное обеспечение необходимой надежности программ за счет средств повышения помехоустойчивости, оперативного контроля и автоматического восстановления функционирования программ.
В программных продуктах реального времени, для обеспечения высокой надежности их функционирования в 80-х годах было предложено максимально быстро обнаруживать искажения, возможно, точно классифицировать тип уже имеющихся и возможных последствий дефектов, а также проводить мероприятия, обеспечивающие быстрое восстановление нормального функционирования программного продукта. Неизбежность ошибок в сложных комплексах программ, искажений исходных данных и аппаратных сбоев привели к необходимости регулярной автоматической проверки процесса исполнения программ и сохранности данных. В процессе проектирования недостаточно было создавать корректные программы, выдающие верные результаты при идеальных исходных данных и абсолютном отсутствии любых возмущений. Требовалось разрабатывать надежные и безопасные программы, устойчивые к различным, негативным возмущениям и способные сохранять достаточное качество результатов в реальных условиях функционирования.
Читать дальше
Конец ознакомительного отрывка
Купить книгу