******************************** Теория ошибок ************************

                                   Ошибки так же неисчерпаемы, как и атом

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

                                 Язык ошибок.

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


           Взаимодействие ошибок с базовой операционной системой

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

                            Системные программы.

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