Содержание к диссертации
Введение
Приложение 1 Каталог ошибок 3
Приложение 2. Организация поиска семантических ошибок 87
CLASS Приложение 3. STRONG Пример сеанса отладки программы ST CLASS RONG 127
Каталог ошибок
В приведенных примерах неверно указаны длины символьных констант. После того как транслятор произведет их выравнивание (дополнение) пробелами до необходимой длины, значение констант фактически изменится, так как дополнение пробелами произойдет со стороны, противоположной требуемой. В примере 3 после выравнивания длина константы будет равна 4 байтам вместо необходимых 8 байтов.
Наличие знаменателей, способных обратиться в нуль. Такая ситуация не является непосредственно ошибкой, но может приводить к неправильному функционированию алгоритма в случае деления на нуль. Задача состоит в том, чтобы выделить все знаменатели, способные обратиться в нуль, и проверить, предусмотрена ли реакция программы (алгоритма) на операцию деления на нуль в каждой конкретной точке программы. Реакция может состоять как в задании программной обработки соответствующего прерывания (или стандартной обработки), так и в проверке наличия нулевого значения знаменателя и затем в обеспечении соответствующего обхода вычислений с таким знаменателем. Ситуация деления на нуль может возникнуть как для знаменателей, состоящих из одной отдельной переменной, так и для арифметических выражений, входящих в знаменатель. Ошибочное деление на нуль может возникать в операторах языка, которые вычисляют (операторы присваивания) или используют арифметические выражения (например, операторы условного перехода).
Приведенные примеры демонстрируют возможность возникновения ситуации деления на нуль в различных операторах языка и для различных типов знаменателей. В данных конкретных примерах ошибка может устраняться одним из возможных способов - предварительной проверкой условным оператором на отсутствие нулевого значения. Группа операторов после метки 2345 осуществляет необходимую коррекцию алгоритма в случае равенства нулю какого-либо знаменателя.
Применение одних синтаксических конструкций вместо других. Такая ошибка возникает при замене одних элементарных синтаксических конструкций языка другими, причем не нарушаются правила синтаксического построения отдельных операторов и программы в целом. Таким образом, транслятору недоступно автоматическое обнаружение данных ошибок. Ошибки встречаются как в операторах описаний, так и в выполняемых операторах программы, например, в описаниях присутствуют ненужные имена, а нужные отсутствуют. Тип переменной или константы может быть указан неверно. Один или несколько атрибутов переменной могут быть заданы неправильно, В выполняемых операторах ошибки могут присутствовать в поле операций, в поле операнда, в признаках формата и типа операции. Вместо необходимых операций могут присутствовать другие, иденти фикаторы или адреса входных и выходных переменных могут быть подменены другими. Может быть другим признак типа той же операции или ее код. Близкие по синтаксису операторы могут быть подменены друг другом. Ошибки возможны при написании различных специальных символов, входящих в алфавит языка и используемых в некоторых операторах как ограничители, указатели режимов работы и т.д. Примеры ошибок:
В примерах I, 4, 6, 7, 8 ошибка допущена при написании идентификатора переменной или имени общей области, в примерах 2, 3 неправильно указан тип и размер переменных величин, в примере 5 ошибочно указано имя стандартной функции, а в примере 9 вместо необходимой запятой употреблен знак
Ошибки перфорирования и фиксирования программ в памяти. Рассматриваемая ошибка не зависит от программиста и определяется некоторыми технологическими аспектами этапов разработки программы. Ошибки такого типа состоят в несовпадении последующего представления программы с предыдущим из-за погрешностей, вносимых при переводе программы на физический носитель или в память ЭВМ. Ошибки перфорирования могут представлять собой пропуск отдельных символов операторов, наличие лишних символов, перестановку операторов местами (перфокарт), потерю некоторых операторов, перестановку частей текста программы, замену одних символов или операторов другими. Поиск таких ошибок можно вести путем тщательного и/или многократного сравнения распечатки перфокарт (перфоленты) с исходным текстом программы. Необходимо особенно обратить внимание на набивку цифры 0 и буквы 0, цифры 4 и буквы Ч, цифры 3 и буквы , пробелов, разделителей, групп повторяющихся символов. Данные ошибки по своему проявлению подобны ошибкам подмены одних синтаксических конструкций другими. Рассматриваемые ошибки состоят также в неправильном фиксировании программ в памяти ЭВМ при ее прошивке либо при другом способе записи. При этом неправильно устанавливаются отдельные разряды памяти, что подобно ошибке применения одних синтаксических конструкций вместо других.
Организация поиска семантических ошибок
Обращение к версии системы. Вызов версии системы отладки КАПКАН-ФОРТРАН осуществляется с помощью пакета управляющих предложений операционной системы. В задании на запуск версии системы необходимо в общем случае определить следующие наборы данных: - библиотеку шага задания, в котором находится загрузочный модуль системы отладки; - набор данных, в котором находится отлаживаемая программа пользователя, написанная на языке ФОРТРАН; - набор данных, содержащих справочную информацию, используемую оператором СПРАВКА; - набор выходных данных для печати на АЦПУ.
Оператор JOB определяет имя- PUSK -задания и устанавливает уровень печати сообщений операционной системы. В зависимости от конкретной вычислительной машины могут потребоваться другие параметры оператора JOB , например, учетная информация. Оператор EXEC определяет имя загрузочного модуля, который будет выполнен -SYSTEMA. Под таким именем хранится в библиотеке загрузочных модулей версия системы, передаваемая пользователям. Для работы версии системы требуется память размером 296 Кбайт, указанная параметром REGION. В качестве параметра отладочной системы передается строка символов, описанная обязательным параметром PARM. В данной версии системы передаваемая строка должна иметь вид, как в примере I. Пробелы внутри строки не допускаются. В строке символов указывается режим работы версии системы и название языка, на котором написана отлаживаемая программа пользователя, определенная оператором DD с именем RTKIN.
Оператор ш с именем STEPLIB определяет личную библиотеку пользователя, в одном из разделов которой находится загрузочный модуль версии системы. В примере I библиотека имеет ИМЯ RTK.DB и размещена на диске с именем PRVH3. Пользователь может разместить библиотеку на любом устройстве прямого доступа и присвоить ей любое другое имя.
Оператор ъъ с именем RTKIN определяет местоположение отлаживаемой программы, представленной в виде текста на языке ФОРТРАН. В примере I программа размещена в символьной библиотеке PORT.TEXT в разделе PR0G1 на диске АВС001. В начале работы версии системы отлаживаемая программа считывается из набора данных, определенного именем RTKIN, и помещается в оперативную память. Библиотека FORT.TEXT может быть размещена на одном диске с библиотекой RTK.DB, а не на разных, как в примере.
Оператор DD с именем SP определяет местоположение справочного файла, содержащего данные для оператора СПРАВКА языка ПОИСК-ДИАЛОГ. Файл состоит из блокированных записей с фиксированной длиной 80 символов с любым коэффициентом блокирования. В примере I справочный файл размещен в разделе ТІ текстовой библиотеки БЕВШБР на диске PRVH3. Кроме библиотечной, допускается также последовательная организация справочного файла на устройстве прямого доступа. Оператор DD с именем RTKPRIITT определяет выходной поток печати, в который направляются все сообщения в ходе работы версии системы и данные, определенные оператором печать языка поиск-диалог.
Оператор с именем SYSUTV определяет заказ на устройство 7066 (дисплей), которое будет использовано для ведения диалога пользователя с версией системы.
Имена всех операторов DD фиксированы и могут использоваться при вызове системы отладки только в описанном выше смысле. Если наборы данных, определенные DD -именами STEPLIB, RTKIN, SP, каталогизированы, то параметры ижіт и YOL В описании наборов можно опускать.
В примере 2 предполагается, что наборы данных с DD-именами STEPLIB и SP каталогизированы, поэтому указаны лишь параметры DSN и DISP. Кроме того, текст отлаживаемой программы находится непосредственно во входном потоке задания на перфокартах. После последней перфокарты с текстом программы размещен оператор ограничения /ж
Пример сеанса отладки программы
При составлении программы в использованных при расчетах формулах была необходимость использовать дробные числа, т.е. константы типа КЕАЬ . Перед непосредственным вычислением значений несобственного интеграла с помощью целочисельных констант (типа INTEGER) устанавливаются значения целочисельных переменных, характеризующих положение точки на пластине. Других типов констант быть не должно. Поэтому пользователь вводит ответ системе отладки
Это сокращение слов INTEGER И REAL, которые также можно было бы ввести полностью без сокращения. На экране появится следующий запрос системы отладки укажите значения констант типа integer появление очередного запроса системы отладки без каких-либо сообщений на предыдущий ответ пользователя означает, что все в порядке - в программе в пределах операторов 1-83 нет других типов констант, отличных от INTEGER ИЛИ REAb. Для ввода ответа на поступивший запрос системы отладки пользователь оценивает возможные значения. Целые константы используются для характеристики положения точки на пластине, и пользователь при составлении программы выбирал их положительными, начиная от I и далее с шагом I. Число возможных положений точки на пластине невелико, поэтому пользователь предполагает, что целочисельные значения не будут превышать 10. Тогда ответ пользователя системе отладки следующий:
Это означает, что в программе значения всех констант типа INTEGER находятся в диапазоне от I до 10. На экране дисплея появляется следующий запрос системы отладки
Получение пользователем следующего запроса системы отладки сразу после ввода его ответа снова означает отсутствие ошибок в значениях целочисельных констант, другими словами, нет в программе констант, чьи значения выходили бы за пределы диапазона 1:10. Ответ на данный запрос пользователь вводит, исходя из запрограммированных формул, в которых присутствует деление на 2, на 4 и умножение на 2:
Отсутствие иных сообщений показывает, что в программе нет действительных констант, чьи значения отличаются от указанных. Данные сообщения указывают на отсутствие в области поиска (здесь и далее этой областью является вся программа) ошибок искомого типа и одновременно указывают на окончание поиска этих ошибок.
Следующей пользователь вызывает отладочную процедуру "наличие знаменателей, способных обратиться в нуль". Необходимость применения этой отладочной процедуры вызвана наличием в запрограммированных формулах операций деления на нуль. Поэтому пользователь вводит директиву
Рассматриваемая отладочная процедура выполняется автоматически, анализируя все знаменатели, имеющиеся в программе и содержащие хотя бы одну переменную. После вызова отладочной процедуры на экране дисплея появляются сообщения системы отладки
Полученные сообщения свидетельствуют о том, что при опреде-ленных значениях указанных переменных знаменатели могут обратиться в нуль и возможна ошибка при выполнении операции деления. Как правило, пользователь, исходя из своего знания программы, алгоритма обработки данных, начальных данных, представляет, как изменяются значения знаменателей, в частности,пользователь может знать, когда знаменатели принимают значения нуль, и когда они не принимают этого значения. В случае, когда знаїленатель не принимает значения нуль, соответствующее сообщение игнорируется. Эти сообщения игнорируются, если знаменатель принимает значение нуль, но пользователь знает, что в этом случае операторы с этим знаменателем выполняться не будут. Во всех остальных случаях полученные сообщения свидетельствуют о возможности наличия ошибки. Для устранения такой возможности пользователю необходимо добавить в программу условные операторы, проверяющие значения DEL, (R2-DEL), (R2-R1), соответственно, и в случае их равенства нулю либо не выполнять (обходить) операторы с такими знаменателями, либо принудительно устанавливать значения знаменателей отличными от нуля, либо изменять вычисления.