Функциональными называют диаграммы, в первую очередь отражающие взаимосвязи функций разрабатываемого программного обеспечения. В каче-стве примера функциональной модели рассмотрим активностную модель, предложенную Д. Россом в составе методологии функционального модели-рования SADT (Structured Analysis and Design Technique - технология структурного анализа и проектирования) в 1973 г.
Методология SADT предполагает, что модель может основываться либо на функциях системы, либо на ее предметах (данных, оборудовании, информации и т. п.). В обо¬их случаях используют схожие графические нотации, но в первом случае блок соответствует функции, а во втором - элементу данных. Соответствующие модели принято называть активностными моделями и моделями данных.
Полная модель включает построение обеих моде¬лей, обеспечивающих более полное описание программного обеспечения, однако широкое распространение получили только активностные (функциональные) модели. На основе мето¬дологии SADT в дальнейшем была построена известная методология описания сложных сис¬тем IDEFO (Icam DEFinition - нотация ICAM), которая является основной частью программы ICAM (Integrated Computer-Aided Manufacturing - интегрированная компьютеризация произ-водства), проводимой по инициативе ВВС США.
Отображение взаимосвязи функций активностной модели осуществля-ется посредством построения иерархии функциональных диаграмм, схемати-чески представляющих взаимосвязи нескольких функций. Каждый блок та¬кой диаграммы соответствует некоторой функции, для которой должны быть определены: исходные данные, результаты, управляющая информация и ме-ханизмы ее осуществления - человек или технические средства.
Все перечисленные выше связи функции представляются дугами, при¬чем тип связи и ее направление строго регламентированы. Дуги, изображаю¬щие каждый тип связей, должны подходить к блоку с определенной стороны (рисунок 7.6), а направление связи должно указываться стрелкой в конце дуги.
Рисунок 7.6 - Функциональный блок и интерфейсные дуги
Физически дуги исходных данных, результатов и управления представ-ляют собой наборы данных, передаваемые между функциями. Дуги, опреде-ляющие механизм выполнения функции, в основном используются при описании спецификаций сложных информационных систем, которые вклю¬чают как автоматизированные, так и ручные операции. Блоки и дуги марки¬руются текстами на естественном языке.
Блоки на диаграмме размещают по «ступенчатой» схеме в соответствии с последовательностью их работы или доминированием, которое понимается как влияние, оказываемое одним блоком на другие. В функциональных диа-граммах SADT различают пять типов влияний блоков друг на друга:
Дуги могут разветвляться и соединяться вместе различными способами. Разветвление означает, что часть или вся информация может использоваться в каждом ответвлении дуги.
Рисунок 7.7 - Типы влияний блоков:
а - вход; б - управление; в - обратная связь по входу; г - обратная связь по управлению; д - выход-исполнитель
Ду¬га всегда помечается до ветвле¬ния, чтобы идентифицировать передаваемый набор данных. Ес¬ли ветвь дуги после ветвления не помечена, то непомеченная ветвь содержит весь набор данных. Каждая метка ветви уточняет, что именно содержит данная ветвь (рисунок 7.8).
Рисунок 7.8 - Пример обозначения дуг при ветвлении
Построение иерархии функциональных диаграмм ведется поэтапно с увеличением уровня детализации: диаграммы каждого следую¬щего уровня уточняют структуру родительского блока. Построение модели начинают с единственного блока, для которого определяют исходные дан¬ные, результаты, управление и механизмы реализации. Затем он последова¬тельно детализируется с использованием метода пошаговой детализации. При этом рекомендуется каждую функцию представлять не более чем 3-7-ю блоками. Во всех случаях каждая подфункция может использо¬вать или продуцировать только те элементы данных, которые использова¬ны или продуцируются родительской функцией, причем никакие элементы не могут быть опущены, что обеспечивает непротиворечивость построенной модели.
Стрелки, приходящие с родительской диаграммы или уходящие на нее, нумеруют, используя символы и числа. Символ обозначает тип связи: I -входная, С - управляющая, М - механизм, R - результат. Число - номер свя¬зи по соответствующей стороне родительского блока, считая сверху вниз и слева направо.
Все диаграммы связывают друг с другом иерархической нумерацией блоков: первый уровень - АО, второй - А1, А2 и т. п., третий - А11, А12, А13 и т. п., где первые цифры - номер родительского блока, а последняя - номер конкретного субблока родительского блока.
Детализацию завершают после получения функций, назначение кото¬рых хорошо понятно как заказчику, так и разработчику. Эти функции описы¬вают, используя естественный язык или псевдокоды.
В процессе построения иерархии диаграмм фиксируют всю уточняю-щую информацию и строят словарь данных, в котором определяют структу¬ры и элементы данных, показанных на диаграммах.
Таким образом, в результате получают спецификацию, которая состоит из иерархии функциональных диаграмм, спецификаций функций нижнего уровня и словаря, имеющих ссылки друг на друга.
Словарь в этом случае должен содержать описание всех данных, исполь¬зуемых в системе.
Функциональную модель целесообразно применять для определения спецификаций программного обеспечения, не предусматривающего работу со сложными структурами данных, так как она ориентирована на декомпози¬цию функций.