|
| ||||||||||||
| ||||||||||||
Технология быстрой разработки приложений на основе CASE-средств фирмы CADREА.В.Закис, М.И.Макаров, Н.И.Приезжий, DataX/FLORIN, Inc. VantageTeam Builder фирмы CADRE (известный ранее как WESTMOUNT I-CASE Yourdon) - одно из наиболее мощных на Российском рынке средств разработки информационных систем. Основанный на структурном подходе, он позволяет вести разработку параллельно по трем направлениям - построение модели данных, разработка модели поведения системы (функциональной модели) и проектирование интерфейса системы. В нашей предшествующей статье [1] мы описали основные возможности продукта. Также весьма обстоятельно они описаны в статье Вендрова [2]. Поэтому в настоящей статье мы ограничимся весьма кратким общим обзором продукта, а основное внимание уделим более детальному анализу инструментов кодогенерации. В частности, мы поделимся некоторыми результатами собственного использования VantageTeam Builder для быстрой генерации приложений, в том числе, для разработки собственного генератора GRINDERY. В силу ограниченности опыта авторов в статье рассматривается генерация приложений только для СУБД Informix, хотя VantageTeam Builder позволяет вести разработку приложений для различных СУБД, в том числе для Sybase, Oracle и Ingres. 1. Общая характеристика CADRE VantageTeam Builder
CASE-технология (Computer Aided Software/System Engineering), как это и следует из названия,
предполагает использование вычислительных средств в качестве инструмента для разработки и
реализации крупных проектов информационных систем. В основе CASE - средств заложена, как
правило, одна из традиционных (по крайней мере на Западе) методологий проектирования. Входящие
в состав CASE - средств инструменты позволяют с той или иной степенью полноты реализовать
соответствующие методы разработки и в той или иной степени контролируют правильность
применения этих методов. 2. VantageTeam Builder как инструмент аналитика и дизайнера
В соответствии с реализованным в VantageTeam Builder методом работа над проектом разбивается на
четыре фазы: Анализ, Архитектура (в соответствии с отечественными традициями Глобальное
проектирование), Дизайн (соответственно, Детальное проектирование) и Программирование.
В фазе анализа VantageTeam Builder предоставляет средства разработки диаграмм Потоков данных,
используемых как для описания взаимодействия системы с внешним миром (контекстная диаграмма),
так и для определения структуры процесса обработки информации (диаграммы потоков данных
более низких уровней). При желании возможно формализованное задание требований к
разрабатываемой системе в виде Списка событий. В этом случае обеспечивается контроль
соответствия контекстной диаграммы и Списка событий. Кроме того обеспечивается контроль
правильности декомпозиции диаграмм при переходе с уровня на уровень.
С использованием оригинальных диаграмм Архитектуры системы вы можете разработать архитектуру
вычислительного комплекса и уточнить аппаратное оснащение рабочих мест системы. Определяется
распределение задач между вычислительными средствами, а также потоки данных между
вычислительными средствами, задачами (отдельными исполняемыми модулями) и процессами
обработки информации в составе одной задачи. Создаются спецификации (формализованные
описания) процессов обработки информации нижнего уровня. При необходимости возможно введение
управляющих потоков между процессами обработки информации и разработка их структуры с
помощью специальных диаграмм. Для описания воздействий управляющих потоков возможно
использование диаграмм Изменения состояний.
Фаза дизайна завершается, по словам разработчиков CASE'а, за один шаг до программы. Здесь
осуществляется окончательная отработка модели данных, функциональной модели и проектирование
интерфейса системы с помощью уже упоминавшихся диаграмм, а также ряда специальных типов
диаграмм, позволяющих однозначно сформулировать требования к интерфейсу и программе. 3. VantageTeam Builder для программиста.
Рассмотрим основные действия программиста, осуществляющего разработку проекта с
использованием VantageTeam Builder.
SQL-скрипт для создания базы со всеми необходимыми операторами CREATE TABLE (с указанием
необходимых ограничений), ADD FOREIGN KEY и CREATE PROCEDURE генерится
автоматически. При этом для каждой таблицы создается описание трех хранимых процедур,
обеспечивающих выполнение функций INSERT, UPDATE и DELETE. Использование процедур в
приложении позволяет обеспечить выполнение требуемых политик поддержания целостности базы
по ссылкам.
Экранные формы генерятся автоматически в соответствии с диаграммами Содержания экранных
форм при переносе проекта в фазу Программирования. Их ручная доработка в части более
рационального или эстетичного размещения полей по экрану может осуществляться в любом
текстовом редакторе.
Включает следующие стадии:
VantageTeam Builder предлагает программисту достаточно удобные инструменты для описания
приложения, как совокупности программных, объектных и библиотечных файлов, зависимостей
между файлами с исходными текстами программ и между другими входящими в приложение файлами.
На основе этого описания для приложения автоматически генерится makefile, управляющий
компиляцией и сборкой программы. По желанию может быть собран как файл с интерпретируемым,
так файл с исполняемым кодом программы. 4. Средства ускорения разработки приложений
Как видно из предыдущего описания, VantageTeam Builder позволяет вести разработку проектов
весьма высокой сложности. Графические редакторы и средства контроля существенно упрощают
анализ задачи и проектирование приложения, упрощая и ускоряя работу аналитиков и
проектировщиков. Программист же получает на первый взгляд не так уж много:
В VantageTeam Builder поддерживаются библиотечные модули для реализации и вызова базовых SQL-
функций доступа к таблицам базы данных. Разработчик может пользоваться этим инструментом для
создания собственных, личных (или проектных) библиотек модулей. Каждый такой модуль является
атомарным (детально не раскрываемым) элементом структурной схемы программы. Они
предназначены для выполнения двух задач.
INPUT BY NAME p_record.*
--начало библиотечного модуля
ON KEY (ESC)
LET INT_FLAG = true
EXIT INPUT
--конец библиотечного модуля
Вторая - это создание библиотеки шаблонов, используемых для генерации параметризуемых
фрагментов текста, например (имя таблицы и имена полей определяются в данном примере
параметрически):
--начало библиотечного модуля
INPUT BY NAME p_{имя таблицы}.*
ON KEY (ESC)
LET inf_flag = true
EXIT INPUT
ON KEY(CONTROL-U)
--для всех импортированных полей
IF INFIELD({имя поля}) THEN
CALL find_{имя таблицы}(p_{имя таблицы}.{имя поля})
RETURNING p_{имя таблицы}.*
END IF
END INPUT
--конец библиотечного модуля
Соответственно дизайнер может использовать один и тот же библиотечный модуль на различных
схемах, а программист один раз пишет необходимый код или шаблон. Шаблоны представляют собой
текст программы, содержащий вызовы специальных функций, написанных на языке Tool Command
Language (TCL), и обеспечивающих чтение информации из формируемых с помощью VantageTeam
Builder моделей (диаграмм) и запись сформированного текста в соответствующие разделы
генеримого файла с кодом программы или SQL-скрипта. Например, шаблон для приведенного
выше примера выглядит следующим образом:
--начало шаблона
INPUT BY NAME p_~${current_table}.*
ON KEY (ESC)
LET inf_flag = true
EXIT INPUT
ON KEY(CONTROL-U)
~[ foreach col [gen_col_list $current_table "FKEY"] {
set master_table [get_master $col]
set col_name [get_uniq_name $col]
expand_text $current_section {
IF INFIELD(~$col_name) THEN
CALL find_~${master_table}()
returning p_~$current_table.~$col_name
END IF
END INPUT
--конец шаблона
Здесь:
Таким образом, если ваша новая программа повторяет структуру одной из ваших старых программ, а для всех фрагментов кода, содержащих имена полей и таблиц, вы разработали соответствующие шаблоны, вы можете просто указать на диаграмме Последовательности экранных форм для всех форм, в которых необходимо выполнить однотипные действия, имя одной и той же структурной схемы программы. В результате вы получите автоматически сгенеренную программу "по старому образцу" для нового набора полей и таблиц. Причем операция подстановки в старую программу новых имен полей и таблиц будет выполнена весьма быстро и заведомо корректно без досадных пропусков и опечаток.
В стандартную поставку VantageTeam Builder входит набор библиотечных модулей для генерации
меню по диаграмме последовательности экранных форм и для выполнения стандартных действий
(insert, update, delete) для базовых таблицы определенной экранной формы. Поэтому вы можете
ограничиться следующей последовательностью действий для получения полностью функционального
приложения (обеспечивающего выполнение всех необходимых действий с таблицами базы данных), с
единообразным интерфейсом.
Описанная выше технология позволяет использовать VantageTeam Builder как средство ускоренной
разработки приложений с однотипным интерфейсом и функциональными возможностями для
различных таблиц. Однако, она не свободна от ряда недостатков, существенно снижающих ее
достоинства. Одним из них является выбранный для разработки шаблонов эталон интерфейса и
программного кода. Он:
С учетом соотношения цен вряд ли целесообразно использовать VantageTeam Builder при разработке относительно простых приложений. В более сложных же проектах неизбежно возникает проблема доработки автоматически сгенеренных кодов программ с целью выполнения специфических требований заказчика касательно работы с конкретными таблицами. Причем чем крупнее проект, тем больше таких специфических таблиц и тем лучше эти изменения должны быть задокументированы. При выбранной же структуре шаблонов внесение даже таких мелких изменений, как использование дополнительных опций оператора INPUT (например, BEFORE INPUT или BEFORE FIELD), означает либо незадокументированное и, следовательно, не воспроизводимое при необходимости повторной генерации текста ручное внесение исправлений в автоматически сгенеренный текст, либо отказ от использования шаблонов и переход на практически ручное (хотя и структурное) программирование. 5. Генератор GRINDERY On-Step 4GL
Перечисленные выше недостатки стандартных шаблонов VantageTeam Builder заставили нас
задуматься о разработке собственных шаблонов. При этом необходимо отметить, что произошло это
еще при использовании CASE'а версии 3.1. В отличии от версии 3.2. он не позволял использования
одной и той же структурной схемы для различных экранных форм (в библиотечных модулях было
необходимо явно указывать, для какой таблицы необходимо сгенерить код) и не поддерживал
диаграмм Содержания экранных форм. Поэтому для реализации идеи автоматической генерации
значительной части кода приложения с достаточно большими функциональными возможностями
было необходимо строго формализовать не только принципы формирования программного кода, но и
принципы построения экранной формы.
Проведенный анализ нескольких разнохарактерных приложений, разработанных ранее как фирмой
DataX/FLORIN, так и некоторыми другими (среди них можно упомянуть научную информационную
систему FLORIN, прикладную медицинскую систему, бухгалтерские системы) привел нас к следующей
модели работы с отдельной таблицей и ее словарями, позволяющей в определенной мере преодолеть
ограничения алфавитно-цифрового интерфейса.
При формировании полноэкранной формы для работы с таблицей и ее словарями поля базовой таблицы разбиваются на видимые и невидимые (но поддерживаемые программой). К последним, как правило, относятся уже упоминавшееся сериальное поле, импортированные из словарей (master- tables) их сериальные поля, а также (в нашей разработке, реализуемой с помощью генератора) поля с логнеймом внесшего последнее изменение в данную запись и временем этого изменения. Все словари единообразно представляются на экране одним "вычисляемым" полем, которое мы традиционно используем для "строчного" представления записи, получаемого конкатенацией наиболее важных для пользователя полей таблицы. Импортированные ключевые поля словарей используются в программе для определения связи между таблицами. Одним из принципиальных моментов интерфейса является то, что строковое представление для таблицы единственно и используется как в полях для словарных значений, так и при формирование списков с отметками и списков для выбора. Хотя это является явным "ограничением общности", принятое решение представляется нам весьма разумным, ибо приучает пользователя к единообразному представлению записи, где бы она не появилась.
Рис.1. Диаграмма последовательности экранных форм при обращении к таблице как к словарю.
Рис.2. Основная диаграмма последовательности экранных форм для отдельной таблицей.
Одним из инструментов VantageTeam Builder, поддерживающих генерацию по шаблону, являются
задаваемые пользователем атрибуты для любых элементов любых типов диаграмм. Детальный анализ
эталонного интерфейса показал, что его реализация требует задания для каждой таблицы и ее
полей некоторых дополнительных атрибутов, среди которых основными являются признак видимого
поля, признак вхождения поля в альтернативный ключ, признак вхождения поля в строковое
представление, тип вычисляемого поля для представления словарной таблицы. Перечисленные выше
атрибуты наиболее естественным образом могут быть введены на ER-диаграммах, поскольку при
принятой нами логике построения приложения, их значения единственны для всех форм, имеющих
отношение к данной таблице.
Написанный нами кодогенератор прошел серьезную практическую проверку как основной инструмент
написания кода при разработке системы автоматизации коммерческой и производственной
деятельности нашей фирмы. С его помощью было сгенерено не менее 80% общего объема приложения
(около 2 Мб исходных текстов программ) и почти все экранные формы. В целом он, по нашим
оценкам, сократил в несколько раз время написания кода по сравнению с проектами, выполнявшимися
вручную. Существенно упростилась отладка и тестирование приложения, поскольку из автоматически
сгенеренного кода для работы с примерно полусотней таблиц достаточно проверить один-два
стандартных варианта. Тщательного тестирования требуют лишь те 20% кода, которые написаны
полностью или частично вручную. 6. VantageTeam Builder и GRINDERY как средства разработки приложений для NewEra и SuperNOVA
Получив такие результаты в части генерации 4GL приложений мы задумались над тем, нельзя ли
приспособить кодогенератор к разработке приложений с использованием других средств разработки,
прежде всего NewEra и SuperNOVA. Дело в том, что эти средства являются объектно-
ориентированными и поддерживающими графический интерфейс. Теоретически разработка
приложений для средств такого класса (также, как и приложений на С++) должна вестись с помощью
CASE-средств, поддерживающие объектно-ориентированный подход, например, с помощью
VantageTeam OO Builder той же фирмы CADRE. Однако такие средства разработки пока не
пользуются в России заметной популярностью, что связано, видимо, с относительной новизной
подхода и меньшей наглядностью проектов, выполненных с помощью какой-либо из объектно-
ориентированных методологий. Фактически многие разработчики предпочли бы выполнять анализ и
проектирование на основе структурного подхода, а разработку интерфейса и генерацию приложения
вести с помощью объектно-ориентированных инструментов. И, как показал наш анализ, VantageTeam
Builder вполне может справиться с этой задачей. Для этого его достаточно оснастить соответствующей
версией нашего генератора GRINDERY NewEra/Yourdon или GRINDERY SuperNOVA /Yourdon Несколько выводов
Если попытаться сделать выводы из всего описанного выше, то необходимо прежде всего отметить
следующее:
Литература
|
|
CITForum © 1997–2025