|
Распространенным источником программных ошибок являются неопределенные переменные и переменные, для которых не заданы начальные значения. Любая переменная, присутствующая в опера* торе вывода данных, или находящаяся справа от знака равенства •в арифметических и логических операторах, должна либо слева от знака равенства принимать конкретное вычисляемое значение, либо использоваться в операторе ввода данных, либо задаваться гв качестве параметра некоторой подпрограммы. Это значит, что нельзя использовать переменные, которые не были определены при вводе или в результате вычислений.
Рассмотрим для примера следующие два оператора:
А = 1
В = В +А
Очевидно, что если переменной В ранее не было присвоено некоторого значения, то она является неопределенной. В большинстве языков в данном случае в качестве текущего значения В будет взята некоторая комбинация двоичных разрядов, оставшаяся в области памяти, отведенной для В, от предыдущих операций. В результате эта переменная приобретает случайное значение, и невозможно заранее предсказать, что произойдет дальше. Хороший отладочный компилятор должен выявлять неопределенные переменные.
Достоверным признаком наличия неопределенных переменных •является получение различных результатов в результате двукратного прогона программы с одними и теми же входными данными (без внесения каких бы то ни было изменений- в программу). Ошибка такого типа приводит к нарушению правила детерминированности, согласно которому поведение программы должно быть многократно воспроизводимо при одном и том же наборе входных данных. Очень часто присутствие неопределенных переменных в программе обнаруживается лишь после длительного ее использования. Это значит, что неопределенная переменная обычно принимала либо нулевое значение, либо такое, которое не приводило к явной ошибке.
Существуют две причины появления в программе неопределенных переменных; отсутствие указаний относительно начальных значений используемых переменных и ошибки при перфорировании программы.
Первый случай был рассмотрен выше. Во избежание подобной ситуации программист должен строго следить за тем, чтобы любая переменная употреблялась лишь после того, как она определена.
Второй случай связан с подготовкой перфоносителей, поэтому отперфорированная программа должна всегда проходить проверку на предмет исключения опечаток. Помогает избежать подобных ошибок и тщательный подбор наименований переменных, позволяющий исключить двусмысленность, характерную, например, для следующих, опасных с этой точки зрения имен:
КО может идентифицироваться как КО (нуль) и КО (буква), KI может интерпретироваться как К1 (единица) и KI (буква). Особенно трудно обнаружить в наименованиях переменных ошибочную замену буквы О нулем и наоборот. Прочие виды опечаток будут рассмотрены в разделе, касающемся именно этого типа ошибок.
⇐4.13. Общие рекомендации || Оглавление || 4.15. План распределения памяти⇒
|