Эволюция структурных методов
В начале 70-х годов в связи с разработкой сложных программных систем наиболее известные специалисты-практики в области программотехники пришли к выводу о необходимости установления строгого и формального порядка в разработке программ. Уже в 1972 г. Дейкстра утверждал, что "программы должны с самого начала правильно составляться, а не просто отлаживаться до тех пор, пока они не станут правильными",
Ситуация, получившая название кризиса в программировании, была обусловлена тем, что стало трудно проектировать, писать, тестировать и особенно понимать и сопровождать сложные программные комплексы. Для преодоления возникших осложнений необходимо было создать технологию разработки программ. В результате работ Вирта, Дейкстры, Иодана, Хоара и др. в 70-е годы постепенно сложилась методология, получившая название структурного программирования. Это понятие впервые ввел Дейкстра в 1970 г., и вначале оно касалось только формы программы и процесса ее кодирования. Был принят ряд соглашений, регламентировавших создание структурных программ:
1. Полное или частичное исключение операторов
GO TO.
2. Программирование только с использованием трех базовых структур: последовательности, выбора и цикла.
3. Применение соглашений структурного кодирования при написании программ на конкретном языке программирования.
Согласно этим правилам, любая программа может быть реализована в языке, имеющем только две управляющих конструкции, а для построения программ достаточно трех блоков: функционального, цикла и принятия решения. Каждый блок при этом имеет один вход и один выход. Функциональный блок может представлять собой либо отдельный оператор, либо последовательность вычислений с единственным входом и единственным выходом.
Структурная теорема, сформулированная Бомом-Джакопини, гласит, что всякая программа, составленная из таких блоков, поддается последовательному преобразованию к единственному функциональному блоку.
Эта последовательность преобразований может быть использована для организации процесса проектирования программы и для доказательства ее правильности. Обратная последовательность преобразований применима для процесса нисходящего проектирования программ, начиная с единственного функционального блока, отражающего общее содержание решаемой задачи, который затем последовательно раскрывается в сложную многоуровневую иерархическую структуру более мелких функциональных блоков.
С идеей вложенности блоков связано понятие модульной программы. Программа, построенная путем применения указанной последовательности преобразований, является модульной в самом строгом смысле этого слова.
Структурная теорема и работы, появившиеся в данной области в 70—80-е годы, расширили понимание структурного подхода. Если рассмотреть развитие структурных методов в программотехнике, то можно выделить несколько этапов.
Вначале основное внимание уделялось проблемам программирования и повышению производительности труда программистов при разработке программ. Структурные методы на этом этапе позволили делать программы более понятными и более удобными для последующих модификаций. Ключевыми моментами здесь были идеи модульного программирования.
Модульное программирование —
это организация программы в виде совокупности небольших независимых блоков, называемых модулями, структура которых и взаимосвязи между ними определяются некоторой совокупностью правил. Стандартизация формы модульной программы, унификация самих модулей позволили систематизировать процесс разработки программ и повысить их качество.
Однако вскоре стало очевидным, что при создании сложных программных изделий гораздо большую опасность представляют не программные ошибки, а ошибки, допущенные при проектировании. Если на первом этапе структурные методы применялись к уровню операторов программы, то на втором они стали применяться для стандартизации общей архитектуры программного изделия.
Появи лись работы Джексона, Йодана, Уорнье, Орра и др., посвященные структурным методам проектирования программных изделий на основе потоков данных и структур данных.
В конце 70-х годов было установлено, что большинство проблем при разработке программного обеспечения возникают из-за неточных и неполных исходных требований заказчика, а также из-за неправильного их понимания программистом-разработчиком. Для решения этих проблем была предложена структурная методология анализа потоков данных в создаваемой автоматизированной системе, на основе которой удалось более точно и полно описывать требования к программному изделию и более строго и формализовано описывать требования пользователя. Было разработано несколько подходов к анализу, наиболее известный из них представлен в работах Гейна и Сарсона. Одновременно начали развиваться структурные методы, связанные с использованием технологии баз данных, пришедшей на смену файловой технологии обработки данных. Структурные методы легли в основу моделирования структур баз данных; многие идеи были заложены в работах Кодда по нормализации реляционных баз данных.
Начало 80-х годов ознаменовалось переходом к автоматизированным методам проектирования программ и появлением языков программирования непроцедурного типа (четвертого поколения). В конце 80-х годов появилось новое направление в информатике, получившее название CASE-технологии, т.е. автоматизированное проектирование систем. Постепенно отдельные разработки, обеспечивающие автоматизацию отдельных процессов в создании программного обеспечения, объединились в интегральную среду поддержки работы программиста. Широкое распространение персональных компьютеров позволило создать автоматизированное рабочее место программиста, оснащенное разнообразными CASE-средствами, предназначенными для реализации различных структурных методов.
Одновременно с развитием структурной методологии изменялось содержание понятия структурное программирование. Если на начальных этапах оно рассматривалось как структурное кодирование, то в настоящее время структурное программирование —
это методология, которая обеспечивает структуру и дисциплину (в процессе разработки программы, в форме программы, в процессах кодирования и тестирования программы), это методология программирования для создания иерархически упорядоченных модульных программ, использующих стандартные управляющие конструкции.
Структурное кодирование есть конструирование программ в соответствии с совокупностью правил, требующих строгого стиля написания программы, использования стандартных управляющих структур и ограниченного набора логических конструкций.
Структурные методы —
совокупность методов и средств, нацеленных на построение высококачественных и дешевых программных изделий. Они включают методологии структурного анализа, проектирования, кодирования и тестирования, методы управления проектированием программных изделий и их документирования.