1. Внутри каждой большой программы есть маленькая, которая там совсем не нужна. 2. Все ошибки, описанные как особенности, в момент сдачи программы не сработают или будут вести себя, как ошибки. 3. Все программы содержат ошибки, просто о некоторых мы не догадываемся. 4. Если Вы заводите в компьютер ерунду, то ничего кроме ерунды оттуда не выходит, только прошедшая через обработку такой умной машиной ерунда становится ценной и значимой в глазах начальства. 5. Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей. 6. Если Вы точно не знаете, что ваша программа должна делать, надо ли ее начинать? 7. Если программа бесполезна, она будет документирована. Если программа полезна, ее изменят. 8. Если программа полностью отлажена, ее нужно будет скорректировать. 9. Именно та ошибка, о которой не знаешь, в один прекрасный день запорет твою работу за последние пять лет, одновременно уничтожая все игры на диске начальника. 10. Компьютерам свойственно ошибаться, но людям свойственно делать это намного чаще (В каждой ошибке компьютера Вы найдете, по крайней мере, две ошибки человека). 11. Любая, даже самая гениальная программа никогда не работает в момент сдачи ее заказчику. 12. Любая действующая программа устарела. 13. Любая программа обходится дороже и требует больших затрат времени, чем предполагалось. 14. Любая программа стремится занять всю доступную память. 15. Мощность компьютера увеличивается как квадрат цены. Таким образом, если Вы хотите сделать ваш компьютер в два раза дешевле, Вам нужно сделать его вчетверо быстрее. 16. Неопределимые ошибки бесконечны, а определимые ограничены способностями компилятора. 17. Новый компьютер сломается как раз тогда, когда старый отключат и выбросят. 18. Основное различие между пользователя и хакером, взламывающим какую-либо систему это то, что действия пользователя непредсказуемы, и он действует на более широком фронте. 19. Работа с автоматическим исправителем ошибок приведет к обнаружению его узких способностей и широких недостатков. 20. Сделайте так, чтобы программисты писали программы на английском, и Вы узнаете, что они не умеют писать на английском. 21. Сделать компьютер значительно проще и дешевле, чем заставить его что-то делать. 22. Сложность программы растет до тех пор, пока не превысит способности программиста. 23. Программы тестирования обязательно находят ошибку там, где их нет. Если ошибка все-таки есть то она в другом месте (например, на 5-10 символов выше, за границей экрана). 24. То, что некоторые пользователи зовут в программе, пользуясь ей, ошибкой, на самом деле является особенностью. Вывод: все что является для них особенностью или просто крутым (например, Windows) на самом деле есть не что иное, как одна большая ошибка. 25. Усилия, прилагаемые для исправления ошибки, увеличивают ее в геометрической прогрессии по отношению к затраченному времени. 26. Ценность программы прямо пропорциональна весу ее "выдачи". 27. Чем более сложна и совершенна программа, тем более неточные результаты она выдает. Первая аксиома компьютеров. Чтобы ошибиться, достаточно компьютера, но чтобы действительно испортить все, нужен все-таки еще и человек. Третий закон Грида. Машинная программа выполняет то, что Вы ей приказали делать, а не то, что бы Вы хотели, чтобы она делала. Второй закон Вейнберга. Если бы строители строили здания так же, как программисты пишут программы, первый залетевший дятел разрушил бы цивилизацию. Первая компьютерная аксиома Лео Бейзера. Закладывая что-то в ЭВМ, помните, куда Вы это положили. Руководство по системному программированию Штейнбаха. Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать. Закон Сатлингера. Компьютер будет работать лучше, если его включить. Постулаты Трумэна по программированию. 1. Самая грубая ошибка будет выявлена, лишь когда программа пробудет в производстве, по крайней мере, полгода. 2. Контрольные перфокарты, которые не могут стоять в неправильном порядке‚ будут перепутаны. 3. Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобретательный идиот, который придумает способ, чтобы неправильная информация прошла через этот контроль. 4. Непечатный жаргон - это тот язык, которым решительно все программисты владеют в совершенстве. 5. Защита от "дурака" спасает только от неизобретательного дурака. 6. Если у Вас вдруг появляется гениальная идея, Вы ее тут же забываете, но если она неверна, то пытаетесь ее применить. 7. Если установка программы прошла нормально с первого раза, ничего не будет работать. Законы ненадежности Джилба. 1. Компьютеры ненадежны, но люди еще ненадежнее. 2. Любая система, зависящая от человеческой надежности, ненадежна. 3. Число ошибок, которые нельзя обнаружить, бесконечно, в противовес числу ошибок, которые можно обнаружить- оно конечно по определению. 4. В поиски повышения надежности будут вкладываться средства до тех пор, пока они не превысят величину убытков от неизбежных ошибок или пока кто-нибудь не потребует, чтобы была сделана хоть какая-то полезная работа. Закон Брука. Увеличения числа участников при подготовке опаздывающей программы только замедляет процесс. Закон мира ЭВМ по Голубу. 1. Неточно спланированная программа требует в три раза больше времени, чем предполагалось; тщательно спланированная - только в два раза. 2. Работающая над программой группа питает отвращение к еженедельной отчетности о достигнутых результатах, поскольку она слишком явно свидетельствует об отсутствии таковых. Принцип Шоу. Создайте систему, которой сможет пользоваться дурак, и только дурак захочет ею пользоваться.
15. Мощность компьютера увеличивается как квадрат цены. Таким образом, если Вы хотите сделать ваш компьютер в два раза дешевле, Вам нужно сделать его вчетверо быстрее. Тут чего-то в математике не клеится... или уже поздно???
Мне вот это больше нравится: Теория ошибок (В. Тихонов) Аксиома. В любой программе есть ошибка. Закон пропорциональности. Чем более программа необходима, тем больше в ней ошибок. Следствие. Ошибок не содержит лишь совершенно ненужная программа. Фундаментальный закон теории ошибок. На ошибках учатся. Следствие 1. Программист, написавший программу, становится ученым. Следствие 2. Чем больше программист делает ошибок, тем быстрее он делается ученым. Следствие 3. Крупный ученый–программист никогда не пишет правильные программы. Замечание. На то он и ученый. Указание начинающему программисту. Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе. Закон необходимости ошибок. Программист может обнаружить ошибку только в чужой программе. Следствие. Ошибке не все равно кто ее обнаружит. Совет начинающему программисту. Никогда не исправляйте найденные ошибки, ибо это повлечет за собой появление неизвестного числа ненайденных. Лучше опишите их в сопроводительной конфигурации как особенность программы. Язык ошибок. Определение. Будем называть языком ошибок правила, в обход которых пишутся программы. Ошибки могут следовать друг за другом. От перестановки двух эквивалентных ошибок результат не меняется (коммутативность эквивалентных ошибок). Две последовательные ошибки можно объединить в одну более сильную. Одинаковые ошибки необязательно делать каждый раз, достаточно сделать одну и обращаться к ней по мере необходимости из любого места программы. Ошибки могут образовывать циклы. Наиболее устойчивый из них бесконечный. Ошибки могут вызывать друг друга и сами себя (рекурсивность ошибок). Ошибки допускают многократное вложение друг в друга. Две одинаковые вложенные ошибки называются четной ошибкой и ошибкой не являются. Свойство четности ошибок. Если написанная программа сработала правильно, то это значит, что во время ее работы выполнилось четное число ошибок или программист не понял задание. Формулировка вышеприведенного свойства, предназначенная для политиков. Ошибка, повторенная дважды, перестает быть ошибкой. Взаимодействие ошибок с базовой операционной системой. Во время исполнения ошибки имеют наивысший приоритет. Прервать исполнение ошибки может только другая, более активная ошибка. Запросы операционной системы к ошибкам ошибками могут игнорироваться. Запросы ошибок к операционной системе игнорироваться не могут. При работе с файлами ошибки могут пользоваться файловой системой базовой ОС и ее ошибками. На ЭВМ с параллельной архитектурой может выполняться несколько ошибок одновременно. Системные программы. Системные программы облегчают процесс написания прикладных программ и их ошибок. Определение. Тестирование – это процесс нахождения ошибок в тесте. Хороший тест должен содержать ошибки компенсирующие их нехватку в тестируемой программе. Языковой редактор, призванный уберечь программиста от синтаксических ошибок, позволяет вносить в программу весьма хитроумные ошибки, которые не удается обнаружить ни транслятором, ни отладчиком. Обычный текстовый редактор таких возможностей не предоставляет. Программа – транслятор, предназначенная для перевода программы с языка высокого уровня на машинный язык, при переводе порождает ошибки. Ошибки, которые содержались в исходном описании, переводятся безошибочно. Заключительный совет тем, кто до него добрался. До начала работы над проектом следует продумать все необходимые ошибки и связи между ними. Это значительно упростит работу над ошибками в самом проекте.