На этом шаге мы укажем некоторые причины, осложняющие поиск ошибок.
Такое положение вещей заставляет иногда на стадии отладки прибегать к дублированию получения результата другим методом. В нашем примере это можно сделать, проинтегрировав систему уравнений с помощью другой программы интегрирования, и затем сравнить полученные результаты. Правда, при этом возникает вопрос: как быть в случае расхождения результатов? Ведь ошибочным может оказаться не первоначальный, а как раз контрольный результат!
Например, обнуляя значения элементов массива и по ошибке выйдя за его границы, можно присвоить нулевое значение некоторой переменной, при использовании которой в арифметическом выражении будет зафиксировано деление на нуль, хотя вначале этой переменной было присвоено ненулевое значение и она нигде не изменялась.
В ходе отладки программист нередко допускает просчет, необоснованно принимая некоторые предположения о возможных источниках ошибок.
Например, используя стандартную библиотечную подпрограмму, он полностью уверен в ее безошибочности. Такие неверные установки, как правило, либо заводят программиста в логический тупик, либо программист впустую тратит время, пытаясь обнаружить ошибку там, где ее нет.
Наиболее часто это возникает при наличии в программе переменных, которым не присвоено начальное значение. В этом случае начальное значение этой переменной случайным образом зависит от содержимого соответствующей ей ячейки памяти в момент загрузки программы. В зависимости от этого значения возможно возникновение ошибочных ситуаций.
Отладка программы - это прежде всего эксперимент, а не наблюдение за поведением программы. Различие между этими двумя понятиями удачно и точно охарактеризовал знаменитый русский физиолог И.П.Павлов, отметивший, что наблюдение собирает то, что ему предлагает природа, опыт же берет у природы то, что хочет. И, как всякий эксперимент, отладку нужно уметь проводить. Очень важно при этом делать правильные выводы на основании данных, полученных из эксперимента. То, насколько при этом можно ошибиться, наглядно демонстрирует следующая шутливая история [1].
Некий школьник предложил интересную гипотезу: он утверждал, что органы слуха у пауков находятся на ногах, и взялся доказать это. Положив пойманного паука на стол, он крикнул: "Бегом!". Паук побежал. Мальчик еще раз повторил свой приказ. Паук снова побежал. Затем юный экспериментатор оторвал пауку ноги и, снова положив его на стол, скомандовал: "Бегом!". Но на сей раз паук остался неподвижен. "Вот видите, - заявил торжествующий мальчик, - стоило пауку оторвать ноги, как он сразу оглох".
А "окончив" отладку, вспомните, что когда известного датского скульптора Торвальдсена спросили мнение об одной из его скульптур, он ответил: "Я не вижу в ней недостатков, из чего заключаю, что у меня хромает воображение".
На следующем шаге мы рассмотрим принципы исправления и анализа допущенных ошибок.