Полная версия

Главная arrow Информатика arrow Архитектура и проектирование программных систем

  • Увеличить шрифт
  • Уменьшить шрифт


<<   СОДЕРЖАНИЕ   >>

Анализ требований и определение спецификаций. Структурный подход

Спецификации

Слово «спецификация» буквально означает «описание» или «получение описания», а «специфицировать» значит «описывать» [27]. Отметим, что в Единой системе программной документации (ЕСПД) спецификацией называется совсем другая вещь - перечень документов, относящихся к программе (ГОСТ 19.202-78). Вместо термина «спецификация» и наряду с ним часто употребляют термин «требования» (requirements). Иногда эти термины различают. В [9] «соглашением о требованиях» называется документ, содержащий «описание программного изделия, цели, стратегию и тактику его создания» (в него входят две спецификации - внешняя и внутренняя).

Полный набор спецификаций будем обозначать SPs, причем в соответствии с выражением (4.1) он может быть получен в результате преобразований требований TRS, предъявляемых к ПС, по некоторой процедуре 77?з в соответствии с выражением

TRS ^PRi -> SPs или SPs = PR} (TRS). (5.1)

Внешние спецификации будем обозначать SP”, внутренние обозначим как SP™. Таким образом,

SPs = sp; u SP™. (5.2)

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

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

Компоненты, независимые от рабочего цикла

I

Шаблон

артефакте

Шаблон

артефакте

Выбирается дгм

рабочего цикла

і

Компоненты, зависимые от

эабачего цикле

Компоненты., зависимые от

эебочего цикле

Компоненты, зависимые от

рабочего цикле

Рис. 5.3. Трансформация моделей на основе шаблонов

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

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

Еще одно отличительное свойство спецификаций называют понятностью, ясностью или читабельностью. Точность и понятность являются двумя основными свойствами спецификации, причем второе должно отличать типичную спецификацию от типичной программы. В общем случае спецификация должна быть более понятным описанием задачи, чем программа, ее должно быть легче написать и легче прочитать. Однако важно отметить относительность понятия спецификации: имея дело с одной и той же задачей, одни люди в данной обстановке (включающей их знания, языки и т.д.) будут склонны считать спецификацией одно, а другие люди в другой обстановке - совсем другое. Понятность спецификации, легкость ее написания и чтения зависят от того, какими знаниями и средствами описания располагает данный человек.

Третье, основное и часто неявно подразумеваемое, свойство спецификации - это полнота описания задачи: ничто существенное не должно быть упущено. Следует отличать спецификацию от менее полного и точного, более эскизного и предварительного описания, которое будем называть требованиями к программе. Они упоминаются в ЕСПД (ГОСТ 19.201-78) в качестве раздела технического задания. То, что называется формализованным техническим заданием, соответствует понятию спецификации.

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

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

Первые языки спецификаций, или языки проектирования программ, появились, по-видимому, в конце 60-х - начале 70-х гг. XX в. Языки делятся на два основных класса: графические и текстовые. В первом главную роль играет представление в виде графов и диаграмм (например, HIPO, LOGOS и SA). Во втором классе спецификации представляют собой тексты, последовательности символов (например, псевдокод, PSL и PDL) и делятся на три подкласса в зависимости от того, как в них используется естественный язык: неограниченно, с ограниченным синтаксисом и семантикой, с дополнительной символикой.

Выделяются такие классы языков [27]:

  • • языки описания подсистем обработки данных (например, AXES и SA);
  • • языки для детального описания (например, алгебраические спецификации абстрактных типов данных) и языки, ориентированные на описание архитектуры;
  • • языки, ориентированные на данные (например, HIPO и PSL);
  • • языки, ориентированные на управление (например, LOGOS и RSL);
  • • языки для общего описания системы в целом (называемые языками описания заданий);
  • • языки для описания конкретного функционирования на уровне подсистем (называемые языками описания проектов).

Ранее были выделены три класса спецификаций и, соответственно, средства их построения: алгебраические, аксиоматические, модельные. Представляет интерес рассмотрение в основном модельных спецификаций, т.е. средств явного построения математических моделей. Их можно упорядочить в виде следующих классов: таблицы; равенства и системы подстановок; логические средства; графы, сети и диаграммы; математические структуры и модули, типы, схемы и фреймы; операции, процедурные средства; средства именования; средства описания исключительных и ошибочных ситуаций.

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

  • • ориентирован на определенную предметную или проблемную область и может использовать разные и разнородные средства (например, язык описания АСУ в конкретной отрасли);
  • • основан на определенном средстве, методе описания и может использоваться в разных областях (например, язык, основанный на таблицах, или язык, основанный на равенствах).

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

К первым относятся языки описания систем реального времени (или оперативной обработки информации), асинхронных и параллельных систем, ко вторым - языки описания задач обработки данных относительно сложной структуры. Во вторых, в отличие от первых, основную роль играет структура обрабатываемых данных, а не взаимодействие процессов обработки. В принципе, можно представить себе задачи, объединяющие черты задач обоих этих классов, но реально языки специализируется либо в ту, либо в другую сторону. Кроме этих двух классов, особый интерес для программирования представляют задачи проектирования трансляторов и задачи проектирования баз данных (или систем управления базами данных). Языки последнего класса тоже ориентированы на данные, как и языки упомянутого выше класса, но существенно иначе. Все остальные предметно- и проблемно-ориентированные языки - это, по существу, многочисленные языки разнообразных пакетов или систем, прикладных программ.

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

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

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

В табличном описании конечной функции Р(Х,, X}, ..., Хп) строка (или столбец) таблицы состоит из значений аргументов и соответствующего значения функции. Имена столбцов (или, соответственно, строк) -это имена аргументов и самой функции. Язык таблиц решений, очевидно, специализирован по средствам и может применяться в самых различных областях. Кроме того, его можно считать языком программирования, так как таблицы решений легко и эффективно реализуются. Средства описания конечных функций являются существенной частью ряда универсальных языков спецификаций, например С1Р-Ь и УЭМ, где определены специальные операции над конечными функциями.

В табличном описании конечного отношения /?(А), X/, ..., Х„), где Хь X..., Х„- имена компонентов (аргументов или областей) отношения, строкой таблицы является кортеж элементов. Конечные отношения играют главную роль в языках описания и манипулирования данными реляционных баз данных. В некоторых реляционных языках определен ряд операций над отношениями. Табличные структуры данных, не интерпретируемые явно как функции или отношения, используются в программировании давно - в частности, в форме двумерных массивов многих языков программирования. По существу, одним из первых языков спецификации является РПГ, в основе которого лежит табличное описание задач генерации отчетов. Матрицы и операции над ними используются, естественно, при спецификации пакетов программ для задач линейной алгебры, а также в языке АПЛ. Разного рода таблицы - одна из основных форм представления данных в языках, ориентированных на задачи обработки административных и экономических документов. Это делает таблицы удобным средством специфицирования очень многих задач.

 
<<   СОДЕРЖАНИЕ   >>