Написание и тестирование программ
Возможности программиста по написанию и тестированию программ ограничены его опытом и воображением. Другими словами, если он не понимает или не может себе представить, что могут встретиться некоторые условия, он не учтет их при проектировании программы или при ее тестировании. Это также относится к недопониманию исходных спецификаций. Недостаток воображения, возможно, был причиной появления известного примера о счете на £ 0.00 и ему подобных. Никто не предполагал, что сложится такая ситуация, поэтому она не была проверена. Это еще раз показывает преимущества привлечения другого программиста к проверке вручную и тестированию программы.
Процесс тестирования удостоверяет качество программы, поэтому он должен быть документирован. Будущие пользователи программы имеют право на нечто большее, чем голословное заявление о том, что программа работает. Они должны знать, как и при каких условиях программа тестировалась, каковы были входные данные и результаты, с тем, чтобы тест можно было повторить. (Повторное тестирование, несомненно, понадобится при модификации программы или при переносе ее на другую ЭВМ.) В документации должны содержаться детальное описание тестовых процедур, функции каждого тестового набора данных и результаты, которые должны быть выданы правильно работающей программой.
Отладка. Знать о том, что ошибки существуют, — это одно, а избавиться от них — совершенно другое. Ошибки в программе или модуле могут проявляться по-разному. Уже были рассмотрены синтаксические ошибки и ошибки, вызванные внутренними несоответствиями, которые могут быть обнаружены компилятором. Кроме того, существуют логические ошибки двух видов: ошибки, которые не вызывают прекращения выполнения программы, а приводят к несоответствию между предполагаемыми и получаемыми в действительности результатами, и ошибки, которые вызывают выполнение недопустимых операций, таких как деление на ноль, попытка считать информацию после окончания входного файла или попытка обращения к несуществующему элементу массива — все это приводит к преждевременному прерыванию выполнения программы.
Разграничение между этими двумя видами ошибок четко не проведено. Например, в некоторых языках и системах границы массивов во время прогона проверяются автоматически, но в других это не делается. В Фортране границы массивов обычно проверяются только тогда, если это специально запрашивается, при условии, что такая возможность вообще предоставляется. В этом случае недопустимое обращение может привести либо к прежде временному прерыванию, если происходит обращение по адресу, выходящему за пределы доступной программе памяти, либо к выдаче неправильного результата.
Практически, если Вам действительно не повезет, в некотором конкретном случае ошибка может вообще никак не проявиться. Важно знать, какие из указанных ошибок может обнаруживать компилятор, и самому позаботиться о проверке тех из них, которые он игнорирует. Кроме того, в некоторых компиляторах имеются средства восстановления, позволяющие продолжать работу, если возникла непредвиденная ситуация, например деление на ноль. Если компилятор сообщает о том, что такое восстановление произошло, это тоже, конечно, говорит о наличии ошибки, которая должна быть обработана соответствующим образом.

