Характерной особенностью современных АСУ является значительное усложнение используемого в них программного обеспечения, которое представляет собой большие комплексы взаимодействующих программ объемом до десятков и сотен тысяч команд. С ростом надежности вычислительной техники программное обеспечение становится основным источником неправильного функционирования систем управления. В процессе его разработки допускается большое количество ошибок, стоимость обнаружения и устранения которых составляет 40-50% общих затрат на разработку и внедрение АСУ.
Технология разработки и внедрения программного обеспечения АСУ предусматривает проведение следующих этапов: постановка задач и выбор алгоритмов их решения, разработка, системных и программных спецификаций задач, разработка комплекса программ, его отладка, опытная и промышленная эксплуатация.
Ошибки программного обеспечения могут быть классифицированы следующим образом: системные ошибки, обусловленные неправильным пониманием содержания задачи и условий ее реализации в АСУ; алгоритмические ошибки, связанные с некорректной формулировкой и реализацией алгоритмов программным путем; программные ошибки (описки, ошибки в логике, кодировании и т.д.); технологические ошибки в процессе подготовки документации на программу и перевода ее на машинные носители.
Основным этапом формирования разрабатываемых комплексов программ, на котором обнаруживаются, локализуются и устраняются ошибки проектирования, является отладка. Процесс отладки по уровню сложности и связи с реальными данными делится на программную и системную отладку.
Программная отладка включает проверку общей логики программы и правильности ее записи (камеральная проверка), подготовку к вводу в ЭВМ г, трансляцию, индивидуальную (автономную) отладку отдельных частей программы. В процессе программной отладки обнаруживаются и устраняются различные алгоритмические, программные и технологические ошибки.
Системная отладка предназначена для проверки соответствия логической схемы комплекса программ ее функциональному назначению с использованием специально подготовленных массивов и в условиях, моделирующих процесс функционирования АСУ. В процессе системной отладки устраняется большинство сложных алгоритмических и системных ошибок. Общее число выявляемых в процессе системной отладки ошибок определяется ограничениями на временные и стоимостные ресурсы и исходным количеством ошибок в комплексе программ, поступающем на этап системной отладки. При достижении выбранного уровня показателей качества системной отладки комплекс программ передается в опытную эксплуатацию для проверки его функционирования с использованием реальных полноразмерных массивов и в реальном масштабе времени.
Обнаружение ошибок в программах на этапе эксплуатации системы может привести к существенным потерям времени и средств на их устранение, а в отдельных случаях к потере работоспособности системы. Поэтому с целью повышения качества комплексов программ, поступающих в эксплуатацию, необходимо улучшить планирование и организацию отладки, что позволит в конечном счете повысить эффективность функционирования АСУ за счет снижения затрат, связанных с наличием необнаруженных ошибок и получением недостоверных результатов; уменьшения времени и затрат на устранение и выявление ошибок; уменьшения вероятности наличия ошибок в программах.
Качество комплекса программ, поступающего на этап отладки, определяется в основном эффективностью методов проектирования и программирования, которые используются при его разработке. Использование модульно-иерархического построения программ с применением принципов структурного программирования позволяет существенно снизить сложность компонентов и их взаимодействия, упростить общее координирование компонентов, повысить адаптивность и модернизируемость комплекса программ, минимизировать пути распространения ошибок за счет минимизации или ограничения числа связей между модулями и, таким образом, повысить качество создаваемого программного обеспечения.
Общими задачами отладки являются генерация- множества тестов, анализ работоспособности программ и их комплексов, обнаружение ошибок различных типов, диагностика и локализация ошибок, устранение ошибок, корректировка алгоритмов, программ и соответствующей документации. Известные в настоящее время модели и методы отладки ориентированы на формализацию и автоматизацию отдельных ее операций.
Рассмотрим существующие методы обнаружения и локализации ошибок в комплексах программ. Наиболее разработанными методами обнаружения ошибок на этапе отладки являются: формальное доказательство правильности программ; методы Диверсионного программирования; методы тестирования программ.
Формальное доказательство правильности программ основано на анализе исполняемых программой действий и состоит в доказательстве того, что утверждения на выходе программы будут удовлетворяться при любом разрешенном входе. Среди методов этого класса можно выделить аксиоматическое доказательство правильности, доказательство правильноети с использованием аннотаций, которые представляют собой утверждения, связанные с каждым принципиальным узлом программы, доказательство корректности программных свойств.
В общем случае доказательство корректности составления программных модулей - очень сложная процедура. Для доказательства корректности программного модуля объемом около 100 инструкций требуется один человеко-месяц работы.
Основными ограничениями широкого использования методов формального доказательства правильности являются сложность формализации условий в программах, отсутствие развитых языков утверждений для программ с разнообразными типами данных, наличие ошибок в данных, большое число ограничений на семантику языков и работу компилятора и тл. Кроме того, доказательство правильности может подтвердить правильность только действительно верных программ. Вместе с тем после проведения формального доказательства правильности нельзя утверждать, что программа всегда будет выполняться верно. Применение методов формального доказательства правильности программ в настоящее время ограничивается небольшими и несложными программами.
Методы N-версионного программирования, получившие развитие в последнее время, являются в определенном смысле аналогами методов резервирования, применяемых в технических системах. При использовании этих методов ресурсы на проведение отладки минимальны. Создается несколько версий программы каждая из которых допускает наличие некоторого числа ошибок. Правильность функционирования набора версий достигается за счет их совместного использования. При этом используется одна из двух стратегий: резервная программа включается в работу при обнаружении ошибки; выбирается верное решение параллельно работающих программ. Согласованным функционированием программ управляет программа-супервизор, а версии программ разрабатываются различными программистами. Программные спецификации при использовании данного метода должны составляться таким образом, чтобы в различных версиях программы использовались различные структуры и приемы программирования.
Однако в настоящее время не существует методики формирования соответствующих спецификаций и оценки эффективности метода N-версионного программирования. Следует отметить, что N-версионное программирование не применимо в системах реального времени с жестким ограничением ресурсов, в задачах с большими объемами выходных данных, а также в тех задачах, где трудно определить допустимую разницу результатов, получаемых различными версиями программы.
Метод тестирования программ является основным методом отладки. Тестирование обеспечивает проверку того, что постановка задачи правильно понята системщиками и программистами, обеспечивает конкретное доказательство возможности получения решения, по крайней мере, части задачи, концентрирует внимание на небольшом числе наиболее сложных процедур обработки данных и причинах появления ошибок. Тестирование есть процесс оценки степени готовности модулей программного обеспечения к передаче в режим эксплуатации, основанный на сборе и анализе данных о характеристике поведения программного обеспечения по результатам его реализации в известных условиях для заданных входов (тестов).
При отладке комплексов программ различают методы статистического и детерминированного тестирования.
При статистическом тестировании характеристики тестов описываются некоторыми распределениями или статистическими параметрами, а признаком ошибки является отклонение параметров или законов распределения выходных данных от ожидаемых. Статистическое тестирование применяется в основном для определения надежностных характеристик комплекса программ на этапе опытной эксплуатации, так как не несет в себе информации для локализации и устранения ошибок, а характеризует только их наличие.
При использовании методов детерминированного тестирования важнейшим вопросом на этапе отладки является выбор модели исследуемого комплекса программ и степени ее детализации. В качестве модели программы используют ее блок-схему, причем наибольшей степени детализации моделирования соответствует использование в качестве блока оператора программы, наименьшей – всей программы. В последнем случае структура программы представляет собой "черный ящик", а модель программы – отображение пространства входов Xв пространство выходов Y:
Степень детализации модели комплекса программ следует выбирать в зависимости от цели тестирования (тестирование основных функций, тестирование связей по информации и управлению и т л.). При этом возникает проблема оценки полноты тестирования.