Программная инженерия. Часть 2.

Структурное программирование. Начало бурному развитию структурного программирования как нового направления положила работа Дейкстры «GOTO считается вредным» (1968 г.). Первоначально к нему относили все, что ускоряло разработку ПО, делало его понятнее и надежнее. Сейчас в это направление принято включать концепции структурного кодирования, модульного программирования и дисциплинированного проектирования ПО.

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

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

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

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