Архивы: по дате | по разделам | по авторам

К вопросу об ошибках

Архив
автор : ВЛАДИМИР СИГУНОВ    09.06.1997

В каждой программе есть по крайней мере одна ошибка. Это не просто программистский фольклор, это суть всего программирования. И ни одно тестирование никогда не спасет от ошибок полностью. Максимум, что можно сказать о программе после прогона тестов - это то, что на тестах она отработала корректно.

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

Другой путь в борьбе с ошибками - совершенствование методов тестирования и отладки. Очень интересным является подход к тестированию, используемый, в частности, в США. Основывается он на предположении, что вероятность найти ошибку, внесенную в текст программы умышленно, равна вероятности найти ошибку, находившуюся в программе исходно. Таким образом, добавляя в программу "искусственные" ошибки всех возможных типов (семантические, синтаксические и пр.) и отлаживая их, мы автоматически устраняем и настоящие ошибки программы. Правда, само предположение, на котором строится метод, является очень сильным с математической точки зрения, а надежность программы, равная 80-90%, достигается путем внесения в программу нескольких сотен новых ошибок.

© ООО "Компьютерра-Онлайн", 1997-2020
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.