Разработка сложных программных изделий


Эволюция структурных методов


В начале 70-х годов в связи с разработкой сложных программ­ных систем наиболее известные специалисты-практики в области программотехники пришли к выводу о необходимости установле­ния строгого и формального порядка в разработке программ. Уже в 1972 г. Дейкстра утверждал, что "программы должны с самого начала правильно составляться, а не просто отлаживаться до тех пор, пока они не станут правильными",

Ситуация, получившая название кризиса в программировании, была обусловлена тем, что стало трудно проектировать, писать, тестировать и особенно понимать и сопровождать сложные про­граммные комплексы. Для преодоления возникших осложнений не­обходимо было создать технологию разработки программ. В ре­зультате работ Вирта, Дейкстры, Иодана, Хоара и др. в 70-е годы постепенно сложилась методология, получившая название струк­турного программирования. Это понятие впервые ввел Дейкстра в 1970 г., и вначале оно касалось только формы программы и процес­са ее кодирования. Был принят ряд соглашений, регламентировав­ших создание структурных программ:

1. Полное или частичное исключение операторов

GO TO.

2. Программирование только с использованием трех базовых структур: последовательности, выбора и цикла.

3. Применение соглашений структурного кодирования при на­писании программ на конкретном языке программирования.

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

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

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

Структурная теорема и работы, появившиеся в данной области в 70—80-е годы, расширили понимание структурного подхода. Если рассмотреть развитие структурных методов в программотехнике, то можно выделить несколько этапов.

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

Модульное программирование —

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

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


Появи­ лись работы Джексона, Йодана, Уорнье, Орра и др., посвященные структурным методам проектирования программных изделий на ос­нове потоков данных и структур данных.

В конце 70-х годов было установлено, что большинство про­блем при разработке программного обеспечения возникают из-за неточных и неполных исходных требований заказчика, а также из-за неправильного их понимания программистом-разработчиком. Для решения этих проблем была предложена структурная методо­логия анализа потоков данных в создаваемой автоматизированной системе, на основе которой удалось более точно и полно описывать требования к программному изделию и более строго и формализо­вано описывать требования пользователя. Было разработано не­сколько подходов к анализу, наиболее известный из них представ­лен в работах Гейна и Сарсона. Одновременно начали развиваться структурные методы, связанные с использованием технологии баз данных, пришедшей на смену файловой технологии обработки дан­ных. Структурные методы легли в основу моделирования структур баз данных; многие идеи были заложены в работах Кодда по нор­мализации реляционных баз данных.

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



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

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

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

Структурные методы —

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


Содержание раздела