Система микропроцессорной централизации есть единство аппаратных и программных средств. При этом бóльшая часть функций МПЦ реализуется программным путем. Этим определяется важность проблемы надежности программ.
Отказы программного обеспечения (ПО) возникают в результате ошибок программиста, допущенных при написании программ, и в результате отказов аппаратных средств вычислительной системы, проявившихся при реализации программы.
Рассмотрим механизмы возникновения отказов в программах на примере программы LIGHT (см. табл. 3.7). Пусть программист сделал ошибку и в команде № 3 записал: MOV C, M2. Это вызывает искажение символов М3 ® М2 и в регистр С записывается значение переменной вместо значения переменной . Тогда программа вычисляет ошибочную функцию (см. формулу (3.6)). Такое эквивалентное искажение функции в контактной схеме (см. рис. 3.7, б) возможно, если монтажник вместо контакта 1СП установит контакт 1ПК (рис. 3.33, а). В результате при открытии сигнала Н не проверяется свободность 1-го стрелочного участка и, следовательно, отказ является опасным.
Предположим теперь, что в программе произошло искажение символов ANA B ® ORA B при выполнении команды № 5 (см. табл. 3.7) из-за сбоя в аппаратуре. Для этого достаточно искажения одного разряда кода команды (рис. 3.34). В результате программа вычисляет ошибочную функцию , что равносильно по последствиям в контактной схеме неправильному монтажу (см. рис. 3.33, б). Это опасно, так как при включении лампы Н не контролируется наличие плюсового контроля стрелки 1.
Приведенные примеры показывают, что ошибки программиста и отказы аппаратуры вычислительной системы приводят к искажению символов программы и нарушению процессов вычислений, причем эти нарушения могут вызвать опасные последствия. Поэтому столь важна задача повышения надежности ПО микропроцессорных централизаций. Надежность есть комплексное свойство ПО и содержит четыре составляющие (рис. 3.35).
Корректность – свойство программы удовлетворять ее функциональным спецификациям. Написанная без ошибок (правильная) программа является корректной. Однако, поскольку сложные программные продукты практически не могут быть созданы без ошибок, корректность есть менее жесткое требование, чем правильность. Корректность требует вычисления правильных выходных данных в области изменения входных данных, удовлетворяющих спецификациям, при условии безотказности аппаратных средств. Таким образом, корректность – статическое свойство, рассматриваемое вне временного функционирования.
Множество входных данных, с которыми работает программа
,
где – множество входных данных, рассмотренных при составлении спецификаций в техническом задании на систему;
– множество входных данных, проверенных при тестировании и испытаниях;
– множество входных данных, реально поступающих на вход системы.
В идеальном случае для простых программ возможно . Обычно эти множества не совпадают (рис. 3.36). Тогда корректность программы обеспечивается в области . Корректность может нарушаться в области при наличии в программе ошибки, которая проявляется в этой области.
Устойчивость – свойство программы быть в процессе ее выполнения нечувствительной к ошибкам, отказам аппаратуры и некорректным входным данным; это динамическое свойство, рассматриваемое во временном функционировании. Оно аналогично свойству отказоустойчивости аппаратуры и должно выполняться в области (см. рис. 3.36).
Безопасность – свойство программы вычислять правильные или защитные выходные данные при наличии ошибок или появлении отказов аппаратуры и некорректных входных данных. Это также динамическое свойство, важное для систем управления ответственными объектами. Под защитными выходными данными понимают неправильные результаты при реализации программ, которые не переводят управляющую систему в опасное состояние.
Недоступность – свойство ПО исключать возможность обращения одного пользователя к данным и программам, являющимися собственностью другого пользователя. Недоступность достигается тщательной изоляцией данных и программ разных пользователей друг от друга и от операционной системы, а также применением ключевых кодов. Это свойство важно в ответственных управляющих системах и в коммерческих системах хранения и обработки данных.
Надежность ПО – свойство сохранять корректность, устойчивость, безопасность и недоступность в течение определенного периода времени при заданных условиях эксплуатации и технического обслуживания.
Надежность ПО, так же как и надежность аппаратуры (см. рис. 3.1), является комплексным свойством. Однако между этими понятиями имеются существенные различия. В теории надежности для аппаратуры отсутствует понятие корректности, то есть считается, что изначально (после окончания периода испытаний и приработки) аппаратные средства исправны и не имеют ошибок проектирования. Для сложных программных продуктов заранее предполагается наличие ошибок, допущенных программистами и не обнаруженных при откладке и испытаниях.
Указанное различие объясняется двумя причинами. Во-первых, программные средства являются более сложными и менее изученными объектами, чем аппаратные средства. Обычно аппаратура строится из хорошо известных стандартных модулей, а программные модули в большинстве случаев нестандартны и содержат большое число команд. Во-вторых, разработаны и широко применяются эффективные методы исчерпывающей проверки аппаратуры. Любая же проверка ПО может только показать наличие ошибок, но не может доказать их отсутствие.
Ошибки ПО делятся на программные, алгоритмические и системные. Программные ошибки вызываются неправильной записью команд на языке программирования и ошибками при трансляции. Их количество зависит от квалификации программистов, степени автоматизации программирования, глубины и качества тестирования. На начальных этапах разработки ПО программные ошибки составляют одну треть всех ошибок, но потом их удельный вес уменьшается, поскольку эти ошибки сравнительно легко обнаруживаются.
Алгоритмические ошибки возникают из-за неправильной постановки задачи или из-за некорректной формулировки алгоритма ее решения. Типичные примеры таких ошибок состоят в неполном учете условий решения, диапазонов изменения переменных, в превышении выделенных ресурсов, в неправильной оценке времени реализации отдельных программных модулей и т.п. Обнаружить алгоритмические ошибки сложнее, чем программные.
Еще труднее обнаруживаются системные ошибки, которые связаны с неправильным взаимодействием комплексов программ между собой и с внешними объектами.
Материальные затраты на исправление ошибки с течением времени жизненного цикла ПО возрастают, а вероятность правильного исправления ошибки уменьшается. Поэтому целесообразно осуществлять мероприятия по повышению надежности ПО на ранних этапах проектирования, учитывая то, что на тестирование и сопровождение (устранение ошибок в процессе эксплуатации) приходится до 75% всех затрат на разработку. По мере исправления ошибок в процессе сопровождения (если при этом не вносятся новые ошибки) частота отказов ПО уменьшается, поскольку программы не «изнашиваются» и не «стареют» в отличие от аппаратуры.
Дата: 2018-11-18, просмотров: 1241.