автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.11, диссертация на тему:Анализ и интерпретация незавершенных программ при структурном конструировании

кандидата физико-математических наук
Болтаев, Тельман Бакоевич
город
Новосибирск
год
1994
специальность ВАК РФ
05.13.11
Автореферат по информатике, вычислительной технике и управлению на тему «Анализ и интерпретация незавершенных программ при структурном конструировании»

Автореферат диссертации по теме "Анализ и интерпретация незавершенных программ при структурном конструировании"

РГБ Ой

^ Российская академия наук

Сибирское отделение Институт Систем Информатики

На правах рукописи

Болтаев Тельман Бакоевич

Анализ и интерпретация незавершенных программ при структурном конструировании

05.13.11. — математическое и программное обеспечение вычислительных машин, комплексов, систем и сетей

Автореферат диссертации на соискание ученой степени кандидата физико-математических наук

Новосибирск 1994

Работа выполнена в Новосибирском Государственном университете.

Научный руководитель: И.В.Поттосин,

доктор физико-математических наук

Официальные оппоненты: ВА.Евстигнеев,

доктор физико-математических наук М.М.Бежаноаа,

кандидат физико-математических наук Ведущая организация: Вычислительный центр АН Беларуси

Защита диссертации состоится "_" _ 1994 г. в 14.30 на

заседании специализированного совета К003.93.01 в Институте систем информатики Сибирского отделения РАН по адресу:

630090, Новосибирск, пр. ак. Лаврентьева, 6.

С диссертацией можно ознакомиться в читальном зале библиотеки ВЦ СО РАН (пр. ак. Лаврентьева, 6).

Автореферат разослан "

Ученый секретарь

специализированного совета K003.93.0t

к.ф.-м.н. М.А.Бульонков

Общая характеристика работы

Актуальность темы.

Для создания надежного программного обеспечения необходимы такие дисциплины разработки, которые содействовали бы корректности создаваемого ПО, либо обеспечивая определенную степень корректности за счет возможности ее проверки на каждом шаге разработки, либо автоматически применяя при каждом шаге разработки заведомо корректные методы доказательного программирования. Практические методы разработки программ однако, стремясь к обеспечению корректности содававемого ПО, заведомо не всегда достигают полной доказательности.

Структурное конструирование как раз и представляет собой реализацию такой дисциплины разработки, при которой достигается большая чем обычно, степень доверия к корректности создаваемого ПО, хотя и не обеспечивается полная доказательность. Структурное конструирование, таким образом не достигая идеала доказательности, является практическим движением к нему.

Дисциплина разработки программ, которую мы будем называть структурным конструированием, связана с построением собственно программного текста и не включает предшествующие этапы специфицирования и проектирования ПО. В термин "конструирование" мы вкладываем тот смысл, что процесс построения этого текста в большой степени автоматизирован и поддержан соответствующими инструментами - без постоянной связи с ЭВМ, в процессе такого построения, дисциплина невозможна. Прилагательное "структурное" подчеркивает то, что программный текст всегда в процессе разработки есть не строка, а структура.

Дисциплина эта заключается в следующем. Программный текст(модулн, процедуры, блоки) создается . как совокупность фрагментов средствами структурного редактирования. На каждом шаге построения любой фрагмент из этой совокупности представляет собой синтаксически правильную конструкцию языка программирования с тем допущением, что часть (или даже все) ее подконструкций - вложенных непосредственно или на следующих

уровнях иерархии - могут быть неопределенными в том смысле, что текст такой конструкции еще не сконструирован.

Структурный редактор является интегрирующией оболочкой. Он воспринимает программу (или ее фрагменты) как дерево, представляющее абстрактную синтаксическую структуру программы -абстрактное синтаксическое дерево (АСД).

При реализации программного модуля программист всегда представляет эту реализацию как совокупность некоторых взаимодействий (взаимосвязей) между объектами программы (структуры данных, структуры управления, часть которых еще не создана) соответствующую спецификации модуля. Он создает эти объекты и устанавливает (реализует) необходимые действия последовательно, шаг за шагом. На каждом шаге конструирования (или, может быть, через несколько шагов) он проверяет реализованный им процесс вычисления по существующему тексту и определяет, правильно ли он устанавливает эти связи. После этого намного правильнее определяются необходимые действия, которые требуется проделать над текстом, и таким образом, устанавливается очень важная взаимосвязь между текстом программы и разворачиваемым процессом по этому тексту. Важно и то, что эта взаимосвязь устанавливается на начальном этапе конструирования, а структурное конструирование как раз и поддерживает эти действия программиста, предоставляя необходимое множество инструментов.

Итак, структурное конструирование заключается в том, что программный текст создается как иерархия допустимых языком конструкций с возможностями статической и динамической проверок правильности этого текста в процессе создания. Следовательно, основными инструментами структурного конструирования являются структурный редактор и анализаторы статических и динамических свойств.

Целью работы является обеспечения среды структурного конструирования программ возможностями статического и динамического анализа программ в процессе конструирования, для достижения большей, чем обычно, степень доверия к корректности создаваемой программы. Достижения этой цели предполагает:

- Разработку методов статического и динамического анализа программ имеющих незавершенные части;

- Создание инструментов поддержки таких анализов в средэ структурного конструирования.

Научная новизна диссертационной работы состоит в

разработке методов анализа неиспользуемых объектов и анализа информационных влияний для программ, имеющих незавершенные части и создании соответствующих анализаторов для включения в среду структурного конструирования;

разработке интерпретатора незавершенных программ, исполняющего программы (или ее фрагменты) содежашие незавершенные части с учетом для этих частей эффекта, вводимого пользователем, с возможностями просмотра состояния вычислительного процесса и изменения его в процессе исполнения.

- как следствие, обеспечение новой дисциплины разработки программ - структурного конструирования, со следующими возможностями:

а) Можно обнаружить неиспользуемые объекты, чаше всего свидетельствующие о незавершенности или неправдоподобности программ и тем самым стимулировать дальнейшие действия программиста. Если действительно объект оказывается ненужным то можно удалить описании такого объекта не нарушая семантику языка;

б) Возможно посмотреть существующие информационно-логические связи. Результат такого анализа определяет последующие шаги конструирования для достижения желаемых информационно -логических связей;

в) Можно анализировать динамические свойства программы, где для незавершенных мест сам программист определает спецификацию и дает эффект этого места посредством диалога во время исполнения.

Практическая ценность работы состоит в создании среды структурного конструирования, полезной при процессе разработки программ, требующих большей надежности.

Реализация результатов исследования. Как результат исследования реализованы анализатор неиспользуемых объектов для

ЭВМ КРОНОС с возможностью удаления описания выделенных неиспользуемых объектов. Реализован интерпретатор незавершенных программ и вместе с анализатором неиспользуемых объектов подключен в структурный редактор для ЭВМ КРОНОС. Эти инструменты перенесены в ЭВМ IBM PC согласно проекту СОКРАТ и дополнительно реализован анализатор информационных влияний. Эти инструменты подключены как выходной интерфейс front-end компилятора (переводчика).

Анализатор неиспользуемых обектов, информационных влияний и интерпретатор незавершенных программ интегрированы переводчиком для IBM PC.

Эти реализованные среды структурного конструирования используются при разработке программ в ЭВМ КРОНОС и IBM PC при создании ПО встроенных систем и для учебных целях.

Публикация и апробация работы. По теме диссертации опубликовано 5 работ. Основные результаты исследования докладывались на всесоюзном семинаре, посвяшенном реализации и применению языка Модула-2 (Новосибирск 89), Международной конференции по вычислительным системам и программному обеспечениию (Самарканд 1990), международном конгрессе по вычислительным системам и прикладной математике CSAM'93 (Санкт-Петербург, июль 19-23, 1993), Конференции по экологическим проблемам(Бухара 1992) и в семинарах и отчетах лаборатории системного программирования ИСИ СО РАН.

Структура и объем работы. Диссертация состоит из введения, двух глав, заключения и списка литературы из 76 наименований. Общий объем работы 126 страниц.

Содержание работы

Во......введении-р (глава 1) рассматривается эволюция технологии

конструирования программ с точки зрения использования компьютера в процессе разработки программ. Особое внимание уделяется структурным редакторам и окружениям программирования, а также

таким развитым его видам как рабочее место программиста и турбо-система.

Описывается концепция нового стиля программирования -структурного конструирования, как дальнейшего развития в направлении использования ЭВМ в процессе разработки программ. Рассматривается понятия анализа программ, их разновидности, инструменты - анализаторы и нх место и предназначение в жизненном цикле программы. Расматривается функциональные возможности некоторых существующих анализаторов.

При структурном конструировании программ важными являются не все виды анализа, а те, которые помогают программисту в процессе конструирования. Это обычно анализ неправдоподобностей, который указывает различные аномалии, существующие в программе, и анализ таких свойств программных объектов, который показывает информационно-логическую структуру создаваемой программы. Это анализ управляющих и информационных связей (влияний).

Базовой информацией для второго вида анализа является аргументы, результаты и обязательные результаты операторов. Рассматривается два подхода вычисления множеств аргументов и ргзультатов.

Межпроцедурный потоковый анализ используется как основной метод решения потоковых проблем и в частности анализа аргументов и результатов. Говорится о функциональном подходе и подходе цепочки вызовов при осуществлении межпроцедурного анализа.

С развитием модульного подхода к программированию изменился принцип обработки программ от независимого характера к квазинезазисимому (раздельному). По аналогии с раздельной трансляцией можно говорит о квазинезависимой (раздельной) оптимизации и анализе. В данной главе введется понятие контекст анализа - информация, учитывающая межмодульные связи при анализе, объясняется его отличия от контекста оптимизации и специфика, связанная со структурным конструированием.

В среде структурного конструирования программ программа может подвергаться анализу после каждых, скорее всего не очень больших, изменении в программе. Следовательно, можно

предполагать, что результат анализа измененной программы немного отличается от предыдущего. Поэтому можно не анализировать заново всю программу, а только корректировать результат предыдушего анализа с учетом внесенных изменений в текст программы. Такой анализ называется инкрементальным.

Алгоритмы анализа, поддерживающие инкрементальный подход, основываются на идее ответной реакции на соответствующие изменения программы. Здесь рассматривается различные типы изменений и реакция анализатора на эти изменения.

Формулируется научная новизна и практическая ценность диссертации.

Во второй главе рассказывается о статическом анализе программ и об инструментах, осуществляющих статический анализ в среде структурного конструирования.

В рамках созданной среды структурного конструирования, в качестве методов статического анализа были реализованы анализ неиспользуемых объектов, который является представителем анализа неправдоподобностей, и анализ информационных влияний из класса анализов, вычисляющих текущие характеристики программ.

Обнаружение неиспользуемых объектов и оптимизирующие преобразования, основанные на этом анализе, заключающиеся в том, чтобы удалить описания неиспользуемого объекта, возникли как один из разновидностей анализа неправдоподобностей.

Этот анализ заключается в том, чтобы найти те объекты в программе, которые были описаны, но для которых нет их использующих вхождений. Такие объекты часто встречается при

конструировании. Действительно, когда программист, например,

V

реализует процедуру или модуль, предполагая в дальнейшем их использовать, он может описать некоторые объекты, а далее забыть об этом, или он может удалить из операторной части некоторый фрагмент, забыв скорректировать описания объектов, связанных с этим фрагментом. Тогда результаты такого анализа напоминают программисту об объектах, которые нуждаются в подключении к ним необходимых действий, или лишних, подлежащих удалению объектах. В первом случае автоматически синтезировать предполагаемые

действия невозможно, то есть программист сам должен ввести эти действия. Но во втором случае, когда надо удалить описания неиспользуемых объектов, используя данный анализ, этот процесс можно автоматизировать и при этом не нарушать семантику языка. Таким образом этот анализ способствует повышению эффективности программы (за счет уменьшения памяти под данные) и понимаемости программы. При структурном конструировании это очень важно потому, что при таком конструировании недоопределенность фрагментов программы - это обычная ситуация. Программист, обычно ' описывает некоторое множество объектов и потом последовательно, шаг за шагом конструирует действия, соответствующие этим описаниям. Данный анализатор поддерживает и помогает именно в этом процессе, то есть информация о неиспользуемых объектах здесь скорее напоминает о некоторой незавершенности того фрагмента, который должен был бы использовать этот объект. Такая информация направляет дальнейшие действия программиста, каждый раз напоминая об этом, а не только в конце конструирования, когда уже программист с трудом вспоминает о чем он думал, когда описывал эти объекты.

Потребность в таком инструменте увеличивается при модульном программировании на языках с высокими возможностями типизации, где простым просмотром обнаружить эти объекты очень трудно, а при создании больших программ даже невозможно.

В данной главе рассматривается метод обнаружения и удаления неиспользуемых объектов в программах на модула-2 и инструмент, который был создан для такого анализа в среде структурного конструирования.

Опысывается общая модель модульной программы, которая подлежит анализу. Такая программа обычно состоит из нескольких модулей - единиц компиляций, каждая из которых состоит из части описания и части операторов (тело модуля). В части описания могут быть описаны данные, подлежащие обработке (константы, переменные, типы), и, кроме того, локальные модули и процедуры, которые в свою очередь содержат части описания и операторов. В

части операторов описывается разворачиваемый процесс обработки этих и других данных.

Анализ неиспользуемых объектов в основном опирается на части описания, и считает неважными отношения между операторами, то есть операторная часть в данной модели есть средство задания множества используемых вхождений имен.

Все те сущности, которые описываются в части описания некоторого модуля или процедуры, мы называем объектами. Существуют два вида объектов: объекты-данные (константа, переменная, тип, поле записи) и объекты-блоки (процедура и модуль). Программа представляется как некоторая иерархия объектов-блоков, которые состоят из двух частей: первая - множество локальных объектов, которые описаны в части описания этого объекта-блока, а вторая - множество используемых имен - имен объектов, используемые вхождения которых встретились в части операторов объекта-блока.

Для объекта а и блока р введется отношение использованности объекта а в блоке р ( (Зр(а) )

Определим множество используемых объектов для объекта-блока р( обозначим через иэе(р)): Ще(р) = { а: (Эр(а) }. н множество неиспользуемых объектов объекта-блока р (обозначим через Ве!(р)): Ве1(р) = М(р) \ Ше(р)

где М(р) - локальные объекты блока р.

Задача анализа заключается в вычислении множества Се!(р) для заданного р и удалении описания некоторых из них по команде программиста так, чтобы после удалении программа осталась семантически верной.

В данной главе описывается метод обнаружения и удаления неиспользуемых объектов опирающийся на зту модель. Говорится и об особенности реализации. Такой анализатор реализован в двух вариантах: Первый - независимый инструмент, входной информацией для которого является завершенная программа. Второй вариант реализован как инструмент среды структурного конструирования.

Информация о статических свойствах программы может быть использована на всех этапах ее жизненного цикла, и в частности при

конструировании она помогает добится большой надежности. Характеристики уже сконструированного программного текста помогают лучше осмыслить последующие шаги конструирования и поддержать желаемые информационно - логические связи и потому получение подобных характеристик оказывается существенным для структурного конструирования.

Анализ информационных влияний между операторами программы является одним из основных видов статического анализа. Он устанавливает отношение "влияние" по данным между операторами. Результаты этого анализа используются при конструировании, при оптимизирующих преобразованиях, при документировании, сопровождении н т.д.

В данной среде целью анализа информационных влияний (имеется ввиду инструмент для этого анализа) является улучшение инструментальной поддержки системы структурного конструирования дополняя ее возможностью визуализации информационного потока между программными объектами. С помощью такого инструмента можно анализировать программу на любой стадии ее конструирования.

Информационный поток между операторами программы говорит программисту, насколько совпадает его представление(каким должно быть) взаимоотношения операторов по данным и какова это взаимоотношение в действительности, и тем самым помогает программисту сконструировать программу, хорошо осмысляя на каждом шаге конструирования фрагмента разворачиваемый процесс обработки.

Так как при структурном редактировании предполагается повторные запуски анализатора при небольшой модификации конструируемой программы, здесь был использован алгоритм инкрементального анализа потока данных, который учитывает и процедурную структуру программы. В случае если новая процедура включается заново, то она анализируется полностью, если она была только модифицирована, то только модифицируется уже накопленная информация.

В АСД отражена структура и основные семантические свойства программы, с абстрагированием от синтаксических деталей.

Пусть Х- множество переменных программы, Б- множество ее операторов, В={(з,х): эеБ; хеХ};

Будем говорит что оператор $1 еБ информационно влияет на оператор 52 е Б по переменной хеХ, если существует такое исполнение программы, при котором оператор б2 во время своего исполнения использует значение переменной х, присвоенное ей оператором ¿1. Оператор в] ев (вообще) информационно влияет на Э2 еБ если он информационно влияет на в2 по некоторым хеХ.

Задача анализа информационных влияний состоит в том, чтобы для любого ее Б найти множество операторов, которые информационно влияют на ь (1-я задача) и множество операторов, на которых информационно влияет в (2-задача).

Задача приводится к задаче анализа свойств состояний и решается методом разметки.

Определим множество свойств Ь= , введем в нее отношение частичного порядка следующим образом. Пусть а.ЬеЬ. а £ Ь, если азЬ. Легко проверить, что в Ъ нет бесконечных цепей и (Ь,11) составляет полурешетку с 0=0, 1=0, так как операция объединения идемпотентная, ассоциативная и коммутативная.

Полурешетка (Ь,и) имеет следующий содержательный смысл. Если оператору 8 сопоставлено свойство аеЬ, то в момент передачи управления в в не сохраняются определения из Б\а. Таким образом, множество операторов, которым сопоставлено свойство а, содержит множество операторов, которым сопоставлено свойство Ь ^ а. Операция а I) Ь найдет лучшую аппроксимацию свойств а и Ь.

Каждой дуге и уграфа й сопоставим эффект дуги следующим образом:

Ги(а)={(ч.х)еа: хеОге(нач(и)} и {(нач(и),х):хеНе5(нач(и))}. где нач(и)- начало дуги и; Нев(э)- множество результатов оператора в; Оге^)- множество обязательных результатов оператора е.

Можно показать, что функции !и дистрибутивны, а для таких функций достаточно найти насыщающую разметку. Для процедурных языков более удобным является межпроцедурный анализ, который по

геологии является факторизованным алгоритмом (процедурная программа уже факторизована по процедурам) нахождения насыщающей разметки, где дополнительно учитывается специфика процедуры, например, передача параметров. Межпроцедурный анализ осуществляется в два шага: восходящий и нисходящий.

При восходящем шаге анализа вычисляются множества аргументов, результатов и обязательных результатов процедуры одновременно с вычислением этих множеств для операторов процедуры. В главе дается алгоритм, который обрабатывает вершину, входящую в состав некоторой бикомпоненты Ь, | Ь | раз, а остальных вершин - 1 раз. Кроме того дается итеративный алгоритм нахождения насыщающей разметки, вычисляющий объязательные результаты .

После осуществления разметки берется пометка выходной вершины процедуры и от нее удаляется информация, связанная с локальными переменными; полученное множество используется как обязательные результаты процедуры.

Во втором проходе (нисходящий шаг анализа) вычисляется пометки операторов процедуры в насыщающей разметке. После того как процедура проанализирована, для каждой точки вызова пометка этой точки добавляется к начальной пометке вызываемой процедуры.

Так как ' внутреннее преставление сохраняется на всем протяжении конструирования, легко можно узнавать какие изменения произошли в конструируемой программе в текущем сеансе редактирования. Тогда семантический анализ может только корректировать созданные таблицы. Исходя из этого и можно более эффективно реализовать анализ в следующем вызове анализатора. Надо только корректировать информацию для тех узлов, для которых изменились искомые отношения влияния.

Если обнаруживаемое свойство является структурным (состоящим из нескольких компонент разного типа), то инкрементальный анализ упрощается разделением потоковой проблемы на кластеры (для каждой переменной). В главе дается критерий разделяемости потоковой проблемы на кластеры и показывается, что данная потоковая проблема является разделяемой.

Все пользовательские изменении делятся на отдельные типы. Для каждого типа изменений дается алгоритм корректировки, используя разделяемость проблемы по переменным. .

В третей главе рассмативается различные методы исполнения и средства осуществления таких исполнений программ. Говорится о роли и предназначении исполнителя в жизненном цикле программы -при сопровождении, отладке и тестировании. Описывается особенности исполнителя - интерпретатора в среде структурного конструирования.

Сравнивается процесс исполнения в среде структурного конструирования и в некоторых существующих системах.

В среде структурного конструирования функция интерпретатора расширяется. Он должен(вместе с другими инструментами) поддерживать весь этап конструирования программы. Здесь существенно больше интегрированы такие этапы конструирования программы как создание, отладка и тестирование. Другими словами, результаты интерпретации могут использоваться при создании программы.

Объектом интерпретации здесь является скорее всего незавершенные программы или отдельные фрагменты таких программ. Цель интерпретации - это показать поведение этой незавершенной программы(или фрагмента программы), когда для пустых фрагментов существует некоторая реакция самого программиста, то есть некоторая нереализованная, неформальная спецификация.

Если незаЕершеная часть соответствует подфрашенту реализованного фрагмента то при интерпретации ставится вопрос правильно ли поведение фрагмента, если правильно поведение подфрагмента, В противном случае исследуется вопрос - если состояние вычислительного процесса правильно, то правильно ли влияние эффекта подфрагмента на это состояние. Такой принцип конструирования поддерживает различные стратегии, например при нисходящей стратегии всегда ставятся вопросы первого вида, а при восходящем - вопросы второго вида. Но обычно в чистом виде таких стратегий не придерживаются, и интерпретации подлежит некоторый фрагмент, содержащий пустые подфрагменты.

Такой принцип пригоден и в объектно-ориентированном подходе, где проверяется поведение множества взаимодействующих объектов, считая, что поведение конкретного объекта(еще несозданного) или его реакция на данное сообщение(метод которого еще не реализован) правильно. Или же, обратно, проверяется поведение конретного объекта, считая поведение остальных объектов правильным.

Так как интерпретатор должен более гибко подходить к интерпретации при встрече незавершенных операторов, более подходящим является создание внутреннего представления в виде АСД. Программа-интерпретатор управляет размещением данных в памяти и передачей управления между операторами интерпретируемой программы. Создается некоторый интерфейс с внешними (не входящими в группу конструируемых модулей) модулями для работы с внешными данными, интерпретация внешних вызовов, доступ к глобалам интепретируемого модуля из внешних модулей м для интерпретации внутренних вызовов из внешних модуле». Кроме того, интерпретатор имеет такие функции, как работа с контрольными точками, трассировка данных и передач управления, которые должен иметь любой отладчик.

В данной главе рассматривается функциональные возможности интерпретатора незавершенных программ: порядок исполнения незавершенных оперзторов, просмотр и изменения состояния вычислительного процесса и управление памятью при интерпретации. Говорится об особенности подключения интерпретатора к среде структурного конструирования, особенности реализации внешних гизозог., доступа к внешним данным, вызовов внутренних процедур из внешних модулей.

В заключении (глава 4) говорится о системе СОКРАТ, в рамках которой осуществляется дальнейшее развитие системы.

Одной из важных характеристик системы является обеспечение надежности разрабатываемого ПО. Роль окружения в повышении степени надежности заключается в инструментальной (тем самым автоматизированной) поддержке дисциплин программирования, при которой создание программы распадается на последовательность

шагов, каждый из которых нетрудно осмыслить и для каждого из которых можно проверить его корректность.

Анализаторы статических свойств вместе с интерпретатором незавершенных программ входит в эту группу поддержки. Кроме этих инструментов в системе СОКРАТ существует структурный редактор, составляющий ядро группы, семантический анализатор, и возможно другие языково-зависимые анализаторы. Средства структурного конструирования системы СОКРАТ базируются на едином внутреннем представлении - АСД. Система открыта, с одной стороны, для дополнения новыми инструментами анализа и, с другой - включения других модула-подобных языков.

Данная работа началась для создания среды структурного конструирования на ЭВМ КРОНОС. Реализован анализатор неспользуемых объектов и интерпретатор незавершенных программ. Анализатор неиспользуемых объектов существует и как отдельный независимый инструмент. Надо сказать, что анализатор как отдельный инструмент используется для окончательной проверки созданной программы и удаления неиспользуемых объектов.

После того, как была начата работа по проекту СОКРАТ, анализатор неиспользуемых объектов и интерпретатор незавершенных программ перенесены на ЭВМ IBM PC. Дополнительно реализован анализатор информационных влияний.

Все инструменты, описанные в данной работе, кроме внутреннего представления еще опираются и на информацию, предоставляемую семантическим анализатором. Все связи с семантической информацией локализованы в модуль связи с семантическим анализом.

Интерпретатор незавершенных программ имеет машинно-зависимые и системно-зависимые части. Они локализованы в отдельных модулях и при переносе меняются только эти модули. В данной главе говорится об особенности реализации этих частей интерпретатора в обеих вариантах

В ЭВМ КРОНОС объектные модули связываются динамически (динамическим загрузчиком) и легко найти область глобальных данных каждого модуля по номеру в списке импорта

интерпретируемого модуля. Для IBM PC это усложняется статическим редактированием межмодульных связей и сложной организацией моделей памяти. Для этого здесь использован механизм динамического именования. Используя этот механизм можно динамически связывать имя (строка) какого-то'программного объекта с его адресом и регистрировать эту связь в глобальный список. Позже можно по этому списку найти адрес объекта через идентификацию имени.

Основные результаты работы:

1) На основании общей идеологии структурного редактирования выработаны функциональные требования к инструментам статического и динамического анализа в среде структурного конструирования и разработаны спецификации инструментов поддержки этого анализа.

2) Для целей статического анализа модульных программ создана модель программы, имеющей модульную структуру, на этой модели сформулирована задача обнаружения неиспользуемых и удаляемых объектов и разработаны алгоритмы такого обнаружения, визуализации удаляемых объектов и их удаления.

3) Проведен анализ базовых алгоритмов, определяющих информационное влияние в модульных программах, обоснован выбор базовых алгоритмов и их модификация применительно к среде структурного конструирования.

4) Создана алгоритмическая основа анализатора информационных влияний, разработаны двухпроходный алгоритм межпроцедурного анализа этих влияний и алгоритм корректировки результатов, обеспечивающий эффективность анализа и основанный на методе инкрементального анализа.

5) Определен метод интерпретации незавершенных программ с учетом человеко-машинного взаимодействия . в процессе динамического анализа для целей структурного конструирования.

6) На основе выше указанных спецификаций, методов и алгоритмов были разработаны анализатор неиспользуемых объектов, анализатор информационных влияний в качестве инструментов

статического анализа. Разработан интерпретатор незавершенных программ в качестве инструмента динамического анализа.

7) Завершено создание той части среды структурного конструирования, которая позволяет в процессе конструирования уточнять и модифицировать неформальные спецификации, что способствует дисциплине, повышающей надежность

программирования.

Публикации по теме диссертации:

1. Болтаев Т.Б. Обнаружение и удаление неиспользуемых объектов в Модула-2 программ //Язык Модула-2, его реализация и использование. -Новосибирск, 1989. -С. 102-110.

2. Болтаев Т.Б. Интерпретатор незавершенных программ / /Среда программирования: методы и инструменты. -Новосибирск, 1992. -С.38-50.

3. Болтаев Т.Б. Анализ информационных влияний в модула-программах / / Оптимизация и конструирование программ. Новосибирск, 1992.-С.35-51.

4. Болтаев Т.Б., Кузьминов Т.В., Поттосин И.В. О структурном конструировании и инструментах его поддержки. //Среда программирования: методы и инструменты. -Новосибирск, 1992. -С.22-38.

5. The Structured Constructing as a Discipline of Safe Programming and Instruments Supporting It/ Aniskov M.I., Boltaev T.B., Kochetov D.V. et. al.// International Congress on Computer Systems and Applied Mathematics CSAM'93, St.Petersburg, July 19-23, 1993.