Введение к работе
Актуальность темы.
Для создания надежного программного обеспечения необходимы такие дисциплины разработки, которые содействовали бы корректности создаваемого ПО, либо обеспечивая определенную степень корректности за счет возможности ее проверки на каждом шаге разработки, либо автоматически применяя при каждом шаге разработки заведомо корректные методы доказательного программирования. Практические методы разработки программ однако, стремясь к обеспечению корректности содававемого ПО, заведомо не всегда достигают полной доказательности.
Структурное конструирование как раз и представляет собой реализацию такой дисциплины разработки, при которой достигается большая чем обычно, степень доверия к корректности создаваемого ПО, хотя и не обеспечивается полная доказательность. Структурное конструирование, таким образом не достигая идеала доказательности, является практическим движением к нему.
Дисциплина разработки программ, которую мы будем называть структурным конструированием, связана с построением собственно программного текста и не включает предшествующие этапы специфицирования и проектирования ПО. В термин "конструирование" мы вкладываем тот смысл, что процесс построения этого текста в большой степени автоматизирован и поддержан соответствующими инструментами - без постоянной связи с ЭВМ, в процессе такого построения, дисциплина невозможна. Прилагательное "структурное" подчеркивает то, что программный текст всегда в процессе разработки есть не строка, а структура.
Дисциплина эта заключается в следующем. Программный
текст(модули, процедуры, блоки) создается , как совокупность
фрагментов средствами структурного редактирования. На каждом
шаге построения любой фрагмент из этой совокупности представляет
собой синтаксически правильную конструкцию языка
программирования с тем допущением, что часть (или даже все) ее подконструкций - вложенных непосредственно или на следующих
уровнях иерархии - могут быть неопределенными в том смысле, что текст такой конструкции еще не сконструирован.
Структурный редактор является интегрирующией оболочкой. Он воспринимает программу (или ее фрагменты) как дерево, представляющее абстрактную синтаксическую структуру программы -абстрактное синтаксическое дерево (АСД).
При реализации программного модуля программист всегда представляет эту реализацию как совокупность некоторых взаимодействий (взаимосвязей) между объектами программы (структуры данных, структуры управления, часть которых еще не создана) соответствующую спецификации модуля. Он создает эти объекты и устанавливает (реализует) необходимые действия последовательно, шаг за шагом. На каждом шаге конструирования (или, может быть, через несколько шагов) он проверяет реализованный им процесс вычисления по существующему тексту и определяет, правильно ли он устанавливает эти связи. После этого намного правильнее определяются необходимые действия, которые требуется проделать над текстом, и таким образом, устанавливается очень важная взаимосвязь между текстом программы и разворачиваемым процессом по этому тексту. Важно и то, что эта взаимосвязь устанавливается на начальном этапе конструирования, а структурное конструирование как раз и поддерживает эти действия программиста, предоставляя необходимое множество инструментов.
Итак, структурное конструирование заключается в том, что программный текст создается как иерархия допустимых языком конструкций с возможностями статической и динамической проверок правильности этого текста в процессе создания. Следовательно, основными инструментами структурного конструирования являются структурный редактор и анализаторы статических и динамических свойств.
Целью работы является обеспечения среды структурного конструирования программ возможностями статического и динамического анализа программ в процессе конструирования, для достижения большей, чем обычно, степень доверия к корректности создаваемой программы. Достижения этой цели предполагает:
Разработку методов статического и динамического анализа программ имеющих незавершенные части;
Создание инструментов поддержки таких анализов в среде структурного конструирования.
Научная новизна диссертационной работы состоит в
разработке методов анализа неиспользуемых объектов и анализа информационных влияний для программ, имеющих незавершенные части и создании соответствующих анализаторов для включения в среду структурного конструирования;
разработке интерпретатора незавершенных программ, исполняющего программы (или ее фрагменты) содежашие незавершенные части с учетом для этих частей эффекта, вводимого пользователем, с возможностями просмотра состояния вычислительного процесса и изменения его в процессе исполнения.
- как следствие, обеспечение новой дисциплины разработки
программ - структурного конструирования, со следующими
возможностями:
а) Можно обнаружить неиспользуемые объекты, чаше всего
свидетельствующие о незавершенности или неправдоподобности
программ и тем самым стимулировать дальнейшие действия
программиста. Если действительно объект оказывается ненужным то
можно удалить описании такого объекта не нарушая семантику
языка;
б) Возможно посмотреть существующие информационно-
логические связи. Результат такого анализа определяет последующие
шаги конструирования для достижения желаемых информационно -
логических связей;
в) Можно анализировать динамические свойства программы, где
для незавершенных мест сам программист определает спецификацию
и дает эффект этого места посредством диалога во время исполнения.
Практическая ценность работы состоит в создании среды структурного конструирования, полезной при процессе разработки программ, требующих большей надежности.
Реализация результатов исследования. Как результат исследования реализованы анализатор неиспользуемых объектов для
ЭВМ КРОНОС с возможностью удаления описания выделенных неиспользуемых объектов. Реализован интерпретатор незавершенных программ и вместе с анализатором неиспользуемых объектов подключен в структурный редактор для ЭВМ КРОНОС. Эти инструменты перенесены в ЭВМ IBM PC согласно проекту СОКРАТ и дополнительно реализован анализатор информационных влияний. Эти инструменты подключены как выходной интерфейс front-end компилятора (переводчика).
Анализатор неиспользуемых обектов, информационных влияний и интерпретатор незавершенных программ интегрированы переводчиком для IBM PC.
Эти реализованные среды структурного конструирования используются при разработке программ в ЭВМ КРОНОС и IBM PC при создании ПО встроенных систем и для учебных целях.
Публикация и апробация работы. По теме диссертации опубликовано 5 работ. Основные результаты исследования докладывались на всесоюзном семинаре, посвяшенном реализации и применению языка Модула-2 (Новосибирск 89), Международной конференции по вычислительным системам и программному обеспечениию (Самарканд 1990), международном конгрессе по вычислительным системам и прикладной математике CSAM'93 (Санкт-Петербург, июль 19-23, 1993), Конференции по экологическим проблемам(Бухар*а 1992) и в семинарах и отчетах лаборатории системного программирования ИСИ СО РАН.
Структура и объем работы. Диссертация состоит из введения, двух глав, заключения и списка литературы из 76 наименований. Общий объем работы 126 страниц.