Что такое структурные карты Константайна?
Структурные карты Константайна используют при проектировании ПО. Они показывают, как продукт будет выполнять системные требования и описывает отношения между модулями.
Зачем нужны структурные карты Константайна?
Карты позволяют продемонстрировать структуру системы, модулей, и их связи друг с другом. На основе структурных карт можно оценивать и улучшать качество проекта.
С помощью какой программы можно построить структурную карту Константайна?
В векторном графическом редакторе Microsoft Visio
Структурные карты Константайна
Структурные карты Константайна используют при проектировании программного обеспечения. Они показывают, как продукт будет выполнять системные требования и описывает отношения между модулями.
Зачем нужны структурные карты Константайна
Сама по себе структурная карта Константайна ничего не скажет о качестве реализации проекта. Но этот инструмент позволяет продемонстрировать структуру системы, модулей, входящих в нее и то, как оно связаны друг с другом. На основе структурных карт можно оценивать и улучшать качество проекта.
Структурное проектирование основано на принципе, что большую систему можно расчленить на модули. Причем так, чтобы модули были как можно более независимы друг от друга. А еще так, чтобы каждый модуль выполнял только одну функцию.
Построить структурную карту Константайна можно, например, в векторном графическом редакторе Microsoft Visio.
Из чего состоит структурная карта Константайна
Структурная карта состоит из разных элементов:
- Модули
- Вызов модуля
- Связь по данным
- Связь по управлению.
Модули — ключевой элемент структурной карты Константайна. Они бывают разных типов: детализированный модуль, совокупность подпрограмм в модуле (библиотека), модули с областями глобальных или распределенных данных.
Объекты структурной карты Константайна
- Структурный блок. Это блок кодов с одним входом и выходом.
- Процедурный блок. Представляет собой вызов процедуры, определенной ранее.
- Библиотечный блок. Представляет собой вызов библиотечного модуля.
Чтобы увязывать блоки между собой используют связи:
- последовательная связь — последовательное выполнение слева направо;
- параллельная связь — блоки выполняются одновременно;
- условная связь — можно выбрать одну из альтернатив;
- итерационная связь — блоки выполняются в цикле.
Модули в структурной карте Константайна
Структуру любой программной системы составляют модули. У них есть определенные общие свойства:
- у модуля есть имя, по нему к нему можно обращаться как к единому фрагменту;
- состоит модуль из разных операторов языка программирования, которые последовательно записаны;
- модуль может передавать и принимать данные.
Структурные карты Джексона
Структурные карты Джексона нужны для описания внутренней структуры модулей и во–многом схожи со структурными картами Константайна.
Метод Джексона включает шесть шагов. Три первых шага выполняются на этапе анализа продукта. Остальные три шага выполняются на этапе проектирования продукта.
- Шаг объект–действие. Здесь определяют объекты — источники или приемники информации и действия — это внешние события из реального мира, которые воздействуют на объекты.
- Шаг объект–структура. Описывает последовательность действий над объектами. Здесь для отображения действий над объектами используют диаграммы Джексона.
- Шаг начальное моделирование. Здесь определяют связи между моделью продукта и реальными миром/пользователями.
- Шаг доопределение функций. На этом этапе определяют и описывают сервисные функции продукта.
- Шаг учета системного времен. Здесь планируют время будущих процессов.
- Шаг реализации. Здесь про согласование с системной средой и разработку аппаратной платформы.
Шаг первый — объект действие — начинают с определения проблемы. На втором шаге — объект–структура — создают структуру объектов, которая будет описывать последовательность действий над ними.
Сцепление модулей в структурных картах Константайна Джексона
Оценить качество проекта помогает анализ сцепления модулей. Сцепление отражает зависимость модулей друг от друга. И в удачном проекте сцепления должно быть минимальным. Точнее говоря, модули должны слабо зависеть друг от друга, быть независимыми насколько возможно.
Почему слабое сцепление модулей — это признак хорошо спроектированной системы? На то есть несколько причин:
- Чем меньше соединений между двумя модулями, тем меньше «волнового эффекта», когда одна ошибка тянет за собой другие в связанных модулях.
- Уменьшается риск «эффекта ряби», когда внесли изменения в одном модуле и нужно делать то же самое с другими, иначе исправление ошибок в одном месте может привести к появлению таковых в другом модуле.
- Не придется волноваться о внутренних деталях других моделей при сопровождении одного модуля.
- Проще понять и разобраться с системой.
Чтобы добиться такого минимального сцепления модулей, нужно:
- удалить необязательные связи между модулями;
- уменьшить число обязательных связей между модулями, насколько это возможно;
- упростить обязательные связи.
Как на практике ослабить сцепление модулей в структурной карте Константайна
На практике проектировщики системы применяют три основных типа сцепления модулей:
- нормальное сцепление — оно же приемлемое с позиции структурного проектирования. Можно назвать два модуля (А и Б) нормально сцепленными, если А вызывает Б, затем Б возвращает управление модулю А. Вся информация между ними представлена параметрами при вызове.
- сцепление по общей области — неприемлемое с позиции структурного проектирования;
- сцепление по содержимому — запрещенное с позиции структурного проектирования.
Чтобы на практике ослабить сцепление модулей в структурной карте Константайна нужно:
- Создавать минимальные по числу параметров связи между модулями.
- Создавать прямые, а не косвенные, связи между модулями. Ведь интерфейс между двумя модулями достаточно понятен, несложен. А это значит, что пользователь сможет понять его сразу. Без ссылок на другие информационные объекты.
- Создавать очевидные связи между модулями.
- Использовать гибкие связи, чтобы облегчать модификацию.
Типы нормального сцепления в структурных картах Константайна
Различают три типа нормального сцепления модулей в структурных картах:
- Сцепление по данным
- Сцепление по образцу
- Сцепление по управлению.
На практике чаще всего используют сцепление по данным — data coupling. Оно отлично подходит, когда нужно передавать небольшое количество параметров. Модули взаимодействуют через передачу параметров. Каждый параметр — это информационный объект.
При сцеплении по образцу — stamp coupling — один модуль посылает другому объект с внутренней структурой. Например, это может быть информация о клиенте с названием организации, почтовым адресом, номером счета.
При сцеплении по управлению — control coupling — один модуль отправляет другому информационный объект. Это как флаг для управления внутренней логикой. Флаги бывают двух видов: описательные и управляющие.
- Описательный флаг помогает описать ситуацию, которая произошла, например, конец файла или введенная кредитная карта.
- Управляющий флаг указывает на определенные действия в модуле. Например, установить в начало или читать предыдущую запись.
Флаги усиливают сцепление. А как мы помним, это не очень хорошо может сказаться на качестве проекта.
Связность в структурных картах Константайна
Еще один способ оценить качество проектируемой системы — это связность. Она контролирует как действия в одном модуле связаны друг с другом. Это как измеритель прочности соединения функциональных и информационных объектов внутри модуля. Если размещать сильно связанные объекты в одном модуле, то межмодульные связи и влияние уменьшатся.
Различают несколько уровней связности:
- Функциональная. Такой модуль содержит объекты, которые предназначены для выполнения одной задачи. К примеру, расчет зарплаты, считывание кредитки. То есть у каждого такого модуля есть одна четко определенная цель. При его вызове будет выполняться лишь одна задача.
- Последовательная связность. Здесь выходные данные одной задачи служат входными для следующей. На примере все просто: открыть файл — прочитать текст — закрыть файл.
- Информационная. Связный модуль содержит объекты, которые используют одни и те же входные или выходные данные. Представим, что вам нужно узнать информацию о книге: название, автор, цена в онлайн–магазине. Знаете вы только ее уникальный номер ISBN. Входной информационный объект тут будет ISBN. А ваши вопросы — тремя связанными подзадачами.
- Процедурная связность. В таком модуле объекты включены в разные подзадачи. Они не всегда могут быть связными. И управление переходит от одной подзадачи к другой. Разберемся на простом допандемичном примере: сделать утром зарядку, сходить в душ, сварить себе кофе, одеться, пойти на работу.
- Временная связность. Здесь схема схожая с процедурной, но объекты включены в подзадачи, которые связаны временем выполнения. Опять же смотрим на примере: поужинать, почистить зубы, поставить будильник, лечь спать. Все эти действия не связаны друг с другом ничем, кроме времени, когда их выполняют. Вечером, в конце дня.
- Логическая. В модуле с такой связностью объекты содействуют решению общей подзадачи, для которой они и были отобраны изначально. Объекты при этом не связаны потоками данных или потоками управления. А подзадачи относятся к одной категории. Например, способы перемещения в путешествии: полететь на самолете, поехать на автомобиле, поплыть на корабле, сесть на поезд. Но тут важно, что с большой долей вероятности будет выбрано только одно действие — один способ передвижения, а не все разом.
- Случайная связность. Объекты в таком модуле соответствуют подзадачам, которые почти не связаны друг с другом. Этот модуль похож на логически связный, но подзадачи будут из разных категорий. Например, гулять с собакой, заниматься спортом, смотреть сериал.