Cтраница 3
Для определения принципов построения, а именно следования или итерации, здесь используется рекурсия, Следование и итерация встречаются настолько часто, что обычно их считают фундаментальными образами строения данных и поведения программ. [31]
Вопросы, связанные с тем, как тестировать программу на Прологе, как искать в ней изъяны в том случае, когда она дает ошибочные результаты, а также как описывать поведение программы, так или иначе затрагивались на протяжении всей части 1 данной книги. [32]
И тем не менее такие утверждения все еще можно анализировать ( например, для оценки корректности того, что в них говорится о решаемой задаче), совершенно не учитывая их влияние на поведение программы в период исполнения. Именно эта возможность анализировать по отдельности декларативные и операционные свойства утверждений придает логике как языку программирования ее отличительные качества. [33]
Под контролем понимается процесс выполнения прог раммы с целью определения содержащихся в ней ошибок Проверка есть попытка обнаружить ошибки в программе без учета условий и режимов, в которых эта программа будет выполняться Технические приемы такой проверки включают формулирование утверждений о поведении программы при ее выполнении и определении правильности программы на основе этих сформулированных положений. Такую проверку можно считать одной из форм контроля, хотя она и не предполагает непосредственного выполнения программы. Многие исследователи рассматривают проверку как альтернативу контроля, однако такой взгляд в значительной степени неверен. [34]
Для того чтобы промоделировать поведение одного испытуемого в эксперименте с двоичным выбором, модель поведения должна быть представлена в виде машинной программы. Если поведение программы является приемлемой копией поведения испытуемого, то программа является по меньшей мере удовлетворительным объяснением поведения испытуемого. [35]
Структурная сложность программных модулей определяется числом взаимодействующих компонентов программы, числом и сложностью связей между ними. Сложность поведения программы определяется совокупностью маршрутов, по которым она исполняется. [36]
В системе Windows используется огромное количество сообщений различных типов. Чтобы избежать некорректного поведения программы в случае прихода неожиданного сообщения, в конце процедуры WndProc следует помещать обращение к системной процедуре DefWindowProc, таким образом, позволяя обработчику по умолчанию позаботиться обо всех остальных случаях. [37]
Определение требований к программе - один из важнейших этапов, на котором подробно описывается исходная информация и формулируются требования к результату. Кроме того, описывается поведение программы в особых случаях. [38]
Все технологии прогнозирования ветвления, которые обсуждались до сих пор, являются динамическими, то есть выполняются во время работы программы. Они также приспосабливаются к текущему поведению программы, и это их положительное качество. Отрицательной стороной этих технологий является то, что они требуют специализированного и дорогостоящего аппаратного обеспечения, а также наличия очень сложных микросхем. [39]
Для foro чтобы разобраться в поведении программы, т.е. в вопросах, которые ставит программа, и в потоке управления, пользователю нужен доступ к стратегии диагностирова-ййя, которую использует программа. Основные принципы организации системы NEOMYCIN следующие. [40]
Вместе с упрощением тонкостей программирования благодаря аппаратному управлению перезагрузкой модулей и ( возможно) вводом-выводом, виртуальная память вводит новый набор дисциплин программирования и стилей. Структура и стиль программирования влияют на поведение программ в среде с механизмом листания. Методы программирования, хорошие в прошлом, могут стать плохими при использовании листания. Например, переходы к подпрограммам могут увеличивать листание, если эти подпрограммы располагаются вне тех листов, из которых были обращения к подпрограммам. Таким образом, там, где используется листание, предпочтительнее копирование кода в строку. Возможно, программист захочет учесть листание в своей организации структур данных, для чего спланирует модули и связи. [41]
Следует заметить, что not, как он здесь определен с использованием неуспеха, не полностью соответствует отрицанию в математической логике. Эта разница может породить неожиданности в поведении программы, если оператором not пользоваться небрежно. Этот вопрос будет рассмотрен в данной главе позже. [42]
Что же следует из упомянутого случая самого плохого поведения программы 2.11. Мы ее построили так, что каждое разделение заканчивается образованием правой части, состоящей лишь из единственного элемента, и требование последующей сортировки этой части заносится в стек. Конечно, как правило, эта граница не достигается. Заметим, что с рекурсивной версией программы дело обстоит не лучше, а даже хуже, поскольку системы, допускающие рекурсивные обращения к процедурам, автоматически сохраняют значения локальных переменных и параметров всех активаций таких процедур. Для этого используют некоторый неявный стек. [43]
Доказательство ( proof) - попытка найти ошибки в программе безотносительно к внешней для программы среде. Большинство методов доказательства предполагает формулировку утверждений о поведении программы и затем вывод и доказательство математических теорем о правильности программы. Доказательства могут рассматриваться как форма тестирования, хотя они и не предполагают прямого выполнения программы. Многие исследователи считают доказательство альтернативой тестированию - взгляд во многом ошибочный; более подробно это обсуждается в гл. [44]
Во время выполнения программы пользуйтесь диалоговым окном Evaluate / Modify, чтобы временно изменять значение переменной. Это позволит вам увидеть, как влияют на поведение программы различные значения без многократной перекомпиляции кода. [45]