В.Тихонов. Теория ошибок



Ошибки так же неисчерпаемы, как и атом.
Аксиома. В любой программе есть ошибки.
Закон пропорциональности. Чем более программа необходима, тем больше в ней ошибок.
Следствие. Ошибок не содержит лишь совершенно ненужная програм- ма.
Фундаментальный закон теории ошибок. На ошибках учатся.
Следствие 1. Программист, написавший программу, становится уче- ным.
Следствие 2. Чем больше программист делает ошибок, тем быстрее он делается ученым.
Следствие 3. Крупный ученый-программист никогда не пишет пра- вильные программы.
Замечание. На то он и ученый.
Указание начинающему программисту. Если вы с первого раза суме- ли написать программу, в которой транслятор не обнаружил ни од- ной ошибки, сообщите об этом системному программисту. Он испра- вит ошибки в трансляторе.
Закон необходимости ошибок. Программист может обнаружить ошибку только в чужой программе.
Следствие. Ошибке не все равно, кто ее обнаружит.
Совет начинающему программисту. Никогда не исправляйте найден- ные ошибки, ибо это повлечет за собой появление неизвестного числа ненайденных. Лучше опишите их в сопроводительной докумен- тации как особенность программы.
Определение. Будем называть языком ошибок правила, в обход ко- торых пишутся программы.

      ???'?'?'?'?'?'?'?'?'?'?'?'
      ??Язык ошибок??
      ???'?'?'?'?'?'?'?'?'?'?'?'
Ошибки могут следовать друг за другом.
От перестановки двух эквивалентных ошибок результат не меняется (коммутативность эквивалентных ошибок ).
Две последовательные ошибки можно объединить в одну, более сильную.
Одинаковые ошибки необязательно делать каждый раз, достаточно сделать одну, а затем обрашаться к ней по мере необходимости из любого места программы.
Ошибки могут образовывать циклы. Наиболее устойчивый из них - бесконечный.
Ошибки могут вызывать друг друга и сами себя (рекурсивность ошибок).
Ошибки допускают многократное вложение друг в друга. Две одина- ковые вложенные ошибки называются четной ошибкой и ошибкой не являются.
Свойство четности ошибок. Если написанная программа сработала правильно, то это значит, что во время ее работы выполнилось четное число ошибок или программист не понял задание.
Формулировка вышеприведенного свойства, предназначенная для по- литиков. Ошибка, повторенная дважды, перестает быть ошибкой.

      ???'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'
      ??Взаимодействие ошибок с базовой операционной системой.??
      ???'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'
Во время исполнения ошибки имеют наивысший приоритет. Прервать исполнение ошибки может только другая, более активная ошибка.
Запросы операционной системы к ошибкам ошибками могут игнориро- ваться.
Запросы ошибок к операционной системе игнорироваться не могут.
При работе с файлами ошибки могут пользоваться файловой систе- мой базовой ОС и ее ошибками.
На ЭВМ с параллельной архитектурой может выполняться несколько ошибок одновременно.

      ???'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'
      ??Системные программы??
      ???'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'?'
Системные программы облегчают процесс написания прикладных программ и их ошибок.
Определение. Тестирование - это процесс нахождения ошибок в тесте. Хороший тест должен содержать ошибки, компенсирующие их нехватку в тестируемой программе.
Языковый редактор, призванный уберечь программиста от синтакси- ческих ошибок, позволяет вносить в программу весьма хитроумные ошибки, которые не удается обнаружить ни транслятором, ни от- ладчиком. Обычный текстовый редактор таких возможностей не пре- доставляет.
Программа-транслятор, предназначенная для перевода программ с языка высокого уровня на машинный язык, при переводе порождает ошибки. Ошибки, которые содержались в исходном описании, пере- водятся безошибочно.
Заключительный совет тем, кто до него добрался. До начала рабо- ты над проектом следует тщательно продумать все необходимые ошибки и связи между ними. Это значительно упростит работу над ошибками в самом проекте.