Индустрия программирования. Окончание
Индустрия программирования
Окончание, начало в №13
VantageTeamдля программиста Что же остается на долю программиста, осуществляющего разработку проекта с использованием Vantage Team.
1.Создание базы данных SQL-скрипт для создания базы со всеми необходимыми операторами CREATE TABLE (с указанием необходимых ограничений), ADD FOREIGN KEY и CREATE PROCEDURE генерируется автоматически. При этом для каждой таблицы создается описание трех хранимых процедур, обеспечивающих выполнение функций INSERT, UPDATE и DELETE. Использование процедур в приложении позволяет обеспечить выполнение требуемых политик поддержания целостности базы по ссылкам.
2.Генерация экранных форм Экранные формы генерируются автоматически в соответствии с диаграммами содержания экранных форм при переносе проекта в стадию программирования. Для Informix-4GL их ручная доработка в части более рационального или эстетичного размещения полей по экрану может осуществляться в любом текстовом редакторе.
3.Генерация кодов программ Включает следующие стадии: - дописывание необходимого кода в соответствии с описаниями соответствующих процессов обработки информации, выполненными в предыдущих фазах разработки. Этот код записывается в виде спецификаций для соответствующих элементов структурной схемы; - автоматическая генерация текста программных файлов, включая сбор и размещение в файле спецификаций элементов структурной схемы, а также генерацию текстов по шаблонам для библиотечных модулей.
4.Сборка программы VantageTeam Builder предлагает программисту достаточно удобные инструменты для описания зависимостей между файлами с исходными текстами программ и между другими входящими в приложение файлами. На основе этого описания для приложения автоматически генерируется makefile, управляющий компиляцией и сборкой программы. По желанию может быть собран файл как с интерпретируемым, так и с исполняемым кодом программы.
VantageTeam и техническая документация Все диаграммы, которые вы рисуете с помощью CASE, все тексты с описаниями и комментариями включаются по определенным шаблонам в документацию. Генерация такой документации производится автоматически. Она легко повторяется после внесения любых изменений. Кроме того, она может поддерживаться одновременно для нескольких версий проекта(например, продажной и тестируемой). По вашему желанию можно изменить состав и формы представления отдельных документов в документации либо включить в нее дополнительные документы, указав правила их формирования.
Промежуточные итоги Итак, CASE Vantage Team представляет собой единую среду, не выходя из которой вы проходите все стадии работы над проектом от формулировки замысла через анализ и проектирование до внесения последних изменений в текст программ и документацию.
Аналитику она предоставляет все необходимые инструменты для того, что раньше называлось разработкой эскизного проекта, а теперь называется реинженирингом бизнес-процессов. Вы умеете это делать и без CASE-средств? Ну и прекрасно! Значит, вы быстро освоите CASE и оцените, насколько проще рисовать соответствующие диаграммы на экране, чем на обратной стороне старых распечаток. И насколько графическое представление на данной стадии работы над проектом компактнее, нагляднее и строже текстового документа. И какую пользу могут принести встроенные в CASE средства контроля корректности проекта.
Реальный пример. Для учебных курсов по CASE-технологии мы использовали проект системы электронных платежей, подготовленный в Центробанке и выполненный как текстовой документ. Он представлял собой документ на нескольких десятках страниц. Чтобы прочитать его, требовалось не менее часа, а чтобы разобраться - много больше. После того как мы перевели его в CASE, он свелся к десятку весьма наглядных диаграмм с четкими пояснениями, в которых можно разобраться за пятнадцать минут.
Короче, в Центробанке уже налили воду в бассейн. CASE у них больше не лежит в коробке, а установлен на работающей машине. Это, обратите внимание, не в коммерческом банке, а в государственной фирме! Я хочу отметить несколько моментов, отличающих Vantage Team от большинства других CASE-средств, предназначенных для аналитика.
Первое. Это диаграмма архитектуры системы - уникальная диаграмма, которая позволяет вам привязать проект к вычислительному комплексу. Вы можете с ее помощью определить потребность в вычислительных средствах для реализации вашего проекта, оценить и выбрать наиболее адекватное решение в части распределения задач между клиентом, сервером и промежуточным слоем.
Второе. Vantage Team едва ли не единственный CASE, в котором предусмотрена возможность анализа структуры реальных данных с помощью диаграмм структуры данных. Причем CASE обеспечивает вам автоматическое сравнение этих диаграмм с диаграммами отношений сущностей, с помощью которых проектируется реальная база данных, и указывает на обнаруженные расхождения.
Третье. Диаграмма содержания экранной формы. Этот инструмент позволяет не только указать поля, содержащиеся в форме, но и очень четко описать возможности пользователя при работе со сложными экранными формами.
Программист (напомню, это тот, кто пишет библиотеки и - я однажды услышал прекрасный термин - "болванарий", то есть типовые фрагменты, болванки, которые потом переписываются кодировщиками для многочисленных конкретных таблиц и форм) получает в CASE прекрасный и очень мощный инструмент предопределенных модулей. Это модули, генерирующиеся автоматически по заранее написанному шаблону. То есть это болванка вместе с правилами ее заполнения. Один раз написанный шаблон может быть использован для различных экранных форм и для работы с различными таблицами базы данных. В Vantage Team входит набор шаблонов, достаточный для выполнения стандартных операций с таблицами базы данных при работе с довольно сложными экранными формами, включающими поля из нескольких таблиц с различными функциональными возможностями. Но главное, используя имеющийся набор функций доступа к проекту, вы можете легко разрабатывать свои шаблоны, то есть, если воспользоваться строительной аналогией, создавать панели по своему размеру и быстро собирать из них основной объем вашего приложения.
Шаблоны пишутся с использованием языка tcl, предоставляющего массу удобств при работе с текстом. В нем есть мощные функции для работы со строками и со списками. Также в полной мере используются преимущества интерпретатора: вы можете собрать очередную команду как строку и тут же выполнить ее.
Шаблоны можно использовать не только для кодогенерации на целевом языке, но и для усовершенствования или настройки генерации SQL-скрипта. Несколько примеров того, что мы сделали сами с использованием Vantage Team и что мы можем помочь сделать вам.
Поддержка архивной базы данных. При разработке своей информационной системы мы решили хранить в основной базе данных только актуальную информацию, а в архивной базе ВСЮ информацию. Реализация такого подхода в рамках СУБД Informix не представляет каких-либо трудностей, за исключением технических - необходимо написать по два триггера на каждую таблицу для операций Insert и Update соответственно. При этом надо помнить, что поиск и исправление ошибок, неизбежно возникающих при ручном написании хранимых процедур и триггеров, очень трудоемок. Достаточно простые шаблоны позволили полностью автоматизировать процесс и обойтись без ошибок вообще. При этом для части таблиц поддерживалось принудительное удаление из основной базы неактуальной информации, а для других таблиц оно было оставлено на усмотрение пользователя.
Поддержка ролей. Наиболее распространенный сервер Informix OnLine до версии 7.10 не поддерживал механизма ролей в явном виде. С помощью CASE мы, во-первых, просто и наглядно описали права нескольких ролей, необходимых для нашей системы, и, во-вторых, сгенерировали хранимые процедуры, позволяющие легко давать определенному человеку права, соответствующие произвольному набору его ролей.
При проектировании программы с помощью структурных схем легко выделить не только однотипные фрагменты, для которых можно использовать готовые или разработать дополнительные шаблоны, но и те нестандартные фрагменты, которые в любом случае приходится дописывать вручную. Принятая в CASE технология написания таких фрагментов опять-таки совмещает разработку и документирование. Вы рисуете соответствующую структурную схему и в ее уникальные элементы вписываете соответствующий код на языке программирования.
А где же кодировщики, этот основной источник ошибок? Ау...
И при этом степень документированности такова, что ввести в проект нового человека не составит никакого особого труда.
Индустриальной технологии - индустриального заказчика Итак, вы тщательно проработали проект, сгенерировали все, что можно сгенерировать, и дописали все, что надо было дописать. И, гордые собой, демонстрируете результат заказчику.
И тут заказчик, как это обычно и бывает, понимает, что вот здесь он забыл сказать о том, что должна быть еще вот такая опция меню, а вот здесь он о чем-то не подумал, а вот там вы его не точно поняли, и вообще он себе это представлял совсем иначе.
Короче говоря, вы скажете, что технология новая, а заказчики-то старые.
Но и здесь есть новые решения. CASE позволяет вам очень легко и быстро сгенерировать прототип, на котором заказчик поймет все проблемы и укажет на необходимые доработки. Для этого часто даже нет необходимости тщательно прорабатывать экранные формы. Достаточно для каждой экранной формы указать, с какой таблицей она должна работать. После этого вы получаете возможность достаточно быстро доработать те экранные формы, которые не устроили заказчика, и уточнить задание на те уникальные функции, которые необходимо написать. При работающем прототипе все это делается значительно эффективней.
Индустриализация,индустриализацияи еще раз индустриализация Решает ли Vantage Team все проблемы индустриализации программирования? На наш взгляд, нет. Что остается неавтоматизированным? Составление сложных форм. Вообще говоря, в проекте вы наверняка придете к каким-то достаточно простым (чтобы быть понятными пользователю) правилам формирования сложных экранных форм. Сложными я здесь называю формы для работы с несколькими таблицами. Шаблоны позволяют генерировать для них программный код, но сами диаграммы содержания экранных форм для них должны быть нарисованы вручную. Между тем это явно формализуемая и явно массовая операция, позволяющая, по нашим представлениям, создать не менее 90 процентов всех необходимых форм и не менее 80 процентов всего необходимого кода.
Что может быть положено в основу такой автоматической генерации? Мы выбрали принцип единого краткого представления для таблицы. То есть для каждой таблицы выбираются некоторые наиболее представительные поля, которыми записи из этой таблицы представляются в списках и в тех формах, где эта таблица не основная. Простейший пример. Таблица фирмы может содержать массу сведений о фирме, включая ее название, адрес, факс, банк и номер расчетного счета. Но для ввода и контроля ссылок на фирму практически во всех формах типа счет или платеж пользователю достаточно видеть ее название.
Что еще может быть автоматизировано? Генерация стандартных последовательностей экранных форм для работы с таблицей базы данных (и со связанными с ней словарями, конечно). Частично это есть. Вспомните Look Up формы для выбора словарных значений, о которых я вам говорил. Они создаются, но не отображаются на диаграмме последовательности экранных форм. Однако, на наш взгляд, для стандартных ситуаций там можно не разрисовывать детально и всю, скажем, последовательность экранных форм, которую мы заложили в качестве базисной в свою офисную систему. Как вы видите, она позволяет в начальном меню выбрать добавление новой записи либо поиск записей, удовлетворяющих определенному условию (фильтрацию). В любом случае результат представляется вам в виде списка, из которого вы можете выбирать одну или несколько записей для ввода по образцу или удаления. Туда, естественно, могут быть добавлены и специализированные опции для работы с конкретной таблицей. Причем форма ввода новой записи должна еще иметь приблизительно вот такой хвост для каждой словарной таблицы, который позволяет либо быстро выбрать нужную запись, задав условия выбора в исходной форме, либо задать сложный критерий выбора в форме поиска для словарной таблицы и выбрать из списка, либо сразу ввести нужную запись, если вы уверены, что ее нет в словарной таблице.
Для автоматизации решения этих задач мы решили разработать собственный кодогенератор. При этом захотели также расширить возможности кодогенератора, входящего в Vantage Team, и, насколько это возможно для Informix-4GL, осовременить интерфейс (окна, вертикальные меню и т.п.). Такой кодогенератор был нами создан. Это кодогенератор Grindery One-Step 4GL. Он генерирует и экранные формы, и функции для работы с ними. Его возможности в части работы со связанными таблицами значительно шире, чем в стандартном кодогенераторе. Он обеспечивает более гибкие возможности выбора из списка при любой операции поиска и, как вы видели, поддерживает проведение групповых операций с записями.
Принципиально новый механизм хранения вносимых вручную изменений в отдельном файле позволил значительно упростить, на наш взгляд, внесение изменений в автоматически сгенерированный файл. С одной стороны, все изменения могут быть легко просмотрены, а с другой, они автоматически воспроизводятся при перегенерации основного кода.
Написанный нами кодогенератор прошел серьезную практическую проверку как основной инструмент написания кода при разработке системы автоматизации коммерческой и производственной деятельности нашей фирмы. С его помощью было сгенерировано не менее 80% общего объема приложения (около 2 Мб исходных текстов программ) и почти все экранные формы. В целом он, по нашим оценкам, сократил в несколько раз время написания кода по сравнению с проектами, выполнявшимися вручную. А главное, существенно упростилась отладка и тестирование приложения, поскольку из автоматически сгенерированного кода для работы с примерно полусотней таблиц оказалось достаточно проверить один-два стандартных варианта, да и то после внесения изменений непосредственно в кодогенератор. Тщательного тестирования требуют лишь те 20% кода, которые написаны полностью или частично вручную.
Переносимость Еще одно из модных сегодня понятий - это портабельность, или переносимость проекта на различные платформы и средства разработки. Для нас, в частности, важно было иметь возможность предложить заказчику такие решения, когда в рамках одного проекта различные рабочие места оснащаются различными техническими и программными средствами в зависимости от тех конкретных задач, которые на них решаются.
Стандартно Vantage Team поддерживает возможность использования в качестве целевой СУБД Informix, Ingres и Oracle. Код программы при этом генерируется на соответствующем 4GL. Есть еще мост, позволяющий использовать для генерации интерфейса Uniface. Ясно, что этот набор явно недостаточен. На сегодняшний день представляется необходимым иметь возможность включать в индустриальную технологию программирования прежде всего различные средства класса билдеров. Однако это включение, на наш взгляд, должно несколько отличаться от включения процедурных языков типа Informix-4GL. Отличия касаются прежде всего уникальных форм и функций. Они могут создаваться непосредственно в билдере без стадии предварительного логического проектирования в CASE, хотя возможность их предварительного проектирования в CASE также желательно сохранить.
Вместе с тем традиционно предлагается использовать CASE для разработки и генерации базы данных, а далее все, в том числе и однотипные, экранные формы и функции создавать в билдере вручную. По-моему, это очень похоже на старый анекдот про математика, собирающегося выпить чаю: "А если в чайнике вода уже есть, то ее надо вылить, и задача сведется к предыдущей". В CASE уровня Vantage Team хранится достаточно много информации о модели данных, которая в явном виде может и не переходить в структуру базы данных. Например, поля, входящие в краткое представление. При знании их не представляет труда сгенерировать стандартные формы для любого билдера, как бы они в нем ни назывались - "окна", "диалоги" или еще как-нибудь.
Относительная простота написания генератора для нового средства разработки в Vantage Team определяется следующими моментами.
Во-первых, фазы анализа и архитектуры выполняются вообще без привязки к конкретной СУБД или средству разработки. Конечно, если это ясно заранее, вы скорее всего что-то такое специфическое заложите и в решения, которые вы принимаете. С другой стороны, если есть возможность выбора, то, представляя конкретные особенности проекта, его сделать легче.
Во-вторых, логические типы данных привязываются к конкретной СУБД через промежуточный слой - стандартные типы, общие для всех серьезных реляционных СУБД. Так что и здесь проблем не будет.
В-третьих, диаграммы последовательности и содержания экранных форм практически не привязаны к средствам разработки, поскольку основные элементы их алфавита могут быть реализованы практически любым современным средством.
В принципе возможно использовать для нового средства и структурные схемы программ. Сами диаграммы, разумеется, не привязаны к конкретному языку. Вызов функции, цикл или проверка условий есть практически во всех языках. Но необходимо переписать обработку их спецификаций на целевом языке.
На сегодняшний день мы можем предложить кодогенераторы NewEra/Yourdon и SuperNova/Yourdon для генерации типовых приложений в NewEra и SuperNova соответственно. Они решают задачи массовой генерации с учетом дополнительных атрибутов, задаваемых в Vantage Team.
При построении этих генераторов нам пришлось решать весьма принципиальный вопрос: как осуществить переход между богатыми возможностями графического интерфейса и значительно более ограниченными возможностями алфавитно-цифрового? В отличие от многих универсальных (позволяющих для одного приложения создавать и такой, и другой интерфейсы) средств разработки, мы пошли не по пути копирования экрана, а по пути реализации аналогичного по функциональным возможностям набора методов. В результате, как видно из образцов интерфейса, он несколько различается для NewEra и SuperNova, однако в сгенерированном приложении на любом из этих языков возможно выполнение всех тех действий, которые я перечислял для Informix-4GL.
Как показал наш опыт, генерация кода для билдера из CASE проще, чем для для процедурного языка. По крайней мере в том смысле, что значительная часть кода выносится в библиотеки классов (NewEra) или темплейты (SuperNova), а непосредственно на долю кодогенератора остается значительно меньше кода. В результате, например, кодогенератор для SuperNova был написан к исходу третьего месяца от первого знакомства с SuperNova. Причем кодогенератор для SuperNova на сегодняшний день обладает наибольшими возможностями в части разнообразия генерирующихся автоматически интерфейсов. Разумеется, срок этот может быть значительно сокращен, если сотрудничать с опытными разработчиками, готовыми представить свои "болванки" для генерации.
Поскольку управление кодогенерацией во всех трех кодогенераторах осуществляется одним и тем же ограниченным набором дополнительных атрибутов, вы можете для одного и того же проекта часть интерфейсов создать на Informix-4GL и реализовать соответствующие рабочие места с помощью алфавитно-цифровых терминалов, а часть - на NewEra или SuperNova и разместить их на графических рабочих местах под Windows или Motif.
На сегодня все эти кодогенераторы можно использовать и из ObjectTeam for OMT.
А нельзя ли подешевле и побольше? Увы, на сегодня потребители CASE в России это, в первую очередь, крупные банки. Фирмы поменьше просят чего-нибудь подешевле. Да и проекты у них пока еще не те, можно и в Word'е диаграммы нарисовать. Вот сгенерировать бы автоматически как в CASE...
А почему бы и нет? Технология, заложенная в основу нашей кодогенерации, предполагает определение для полей таблиц базы данных небольшого набора дополнительных атрибутов: альтернативный (предметный) ключ, участие поля в кратком представлении таблицы, наличие в детальных формах (не удивляйтесь, лучше подумайте, что там делать, например, сериальному полю) и еще буквально два-три.
Итак, проект у вас небольшой. Для создания базы данных вам хватило того же ERwin. Информация обо всех полях базы данных лежит в системных таблицах. Прочитать бы ее, обеспечить возможность задать еще по нескольку атрибутов и запустить кодогенератор. Тем более что tcl, на котором этот кодогенератор написан, теперь нередко входит в состав ОС UNIX (например, SCO-5), а tcl для Windows бесплатно распространяется по Internet. И такой инструмент действительно есть. Это Grindery Grabber. Grindery Grabber позволяет вам, не имея CASE-средств, прочитать структуру реальной базы данных, проставить необходимые атрибуты и сгенерировать код. И основная, индустриальная, часть вашего приложения готова.
Планы и перспективы Немного о наших планах. Развитие представленной вам технологии мы ведем по нескольким направлениям.
Это усовершенствование кодогенераторов для NewEra и SuperNova в части обеспечения возможности проектирования нетипичных форм и функций из Vantage Team. И здесь мы можем похвастаться почти готовым генератором форм для SuperNova. Завершение работ будет означать наличие полноценного моста между Vantage Team и SuperNova.
Это развитие Grindery NewEra/Yourdon и Grindery SuperNova/Yourdon в части расширения их библиотек стандартных правил построения отдельных экранных форм и последовательностей экранных форм, с тем чтобы сделать их еще более гибкими и универсальными инструментами.
Это развитие линии Grindery Grabber до простого в освоении и дешевого инструмента, в той или иной степени перекрывающего жизненный цикл проекта. Для этого прежде всего необходимо придать ему возможности не только считывать, но и изменять структуру созданной базы данных (поскольку мы хотим оставить его максимально дешевым, предполагается минимальное использование графических редакторов, а без них генерация большой базы данных с нуля вряд ли рациональна). Кроме того, мы предполагаем значительное развитие его возможностей по документированию проекта и по управлению генерацией отдельных форм. И это, конечно, расширение числа поддерживаемых средств разработки.
И, возвращаясь к самому началу, скажу в заключение, что перевод программирования на индустриальные технологии вполне возможен и реален, а главное направление такого перехода - использование CASE-средств, поддерживающих весь жизненный цикл проекта.
А. В. Закис, руководитель aналитической группы Data X/FLORIN, Inc.
Окончание, начало в №13
VantageTeamдля программиста Что же остается на долю программиста, осуществляющего разработку проекта с использованием Vantage Team.
1.Создание базы данных SQL-скрипт для создания базы со всеми необходимыми операторами CREATE TABLE (с указанием необходимых ограничений), ADD FOREIGN KEY и CREATE PROCEDURE генерируется автоматически. При этом для каждой таблицы создается описание трех хранимых процедур, обеспечивающих выполнение функций INSERT, UPDATE и DELETE. Использование процедур в приложении позволяет обеспечить выполнение требуемых политик поддержания целостности базы по ссылкам.
2.Генерация экранных форм Экранные формы генерируются автоматически в соответствии с диаграммами содержания экранных форм при переносе проекта в стадию программирования. Для Informix-4GL их ручная доработка в части более рационального или эстетичного размещения полей по экрану может осуществляться в любом текстовом редакторе.
3.Генерация кодов программ Включает следующие стадии: - дописывание необходимого кода в соответствии с описаниями соответствующих процессов обработки информации, выполненными в предыдущих фазах разработки. Этот код записывается в виде спецификаций для соответствующих элементов структурной схемы; - автоматическая генерация текста программных файлов, включая сбор и размещение в файле спецификаций элементов структурной схемы, а также генерацию текстов по шаблонам для библиотечных модулей.
4.Сборка программы VantageTeam Builder предлагает программисту достаточно удобные инструменты для описания зависимостей между файлами с исходными текстами программ и между другими входящими в приложение файлами. На основе этого описания для приложения автоматически генерируется makefile, управляющий компиляцией и сборкой программы. По желанию может быть собран файл как с интерпретируемым, так и с исполняемым кодом программы.
VantageTeam и техническая документация Все диаграммы, которые вы рисуете с помощью CASE, все тексты с описаниями и комментариями включаются по определенным шаблонам в документацию. Генерация такой документации производится автоматически. Она легко повторяется после внесения любых изменений. Кроме того, она может поддерживаться одновременно для нескольких версий проекта(например, продажной и тестируемой). По вашему желанию можно изменить состав и формы представления отдельных документов в документации либо включить в нее дополнительные документы, указав правила их формирования.
Промежуточные итоги Итак, CASE Vantage Team представляет собой единую среду, не выходя из которой вы проходите все стадии работы над проектом от формулировки замысла через анализ и проектирование до внесения последних изменений в текст программ и документацию.
Аналитику она предоставляет все необходимые инструменты для того, что раньше называлось разработкой эскизного проекта, а теперь называется реинженирингом бизнес-процессов. Вы умеете это делать и без CASE-средств? Ну и прекрасно! Значит, вы быстро освоите CASE и оцените, насколько проще рисовать соответствующие диаграммы на экране, чем на обратной стороне старых распечаток. И насколько графическое представление на данной стадии работы над проектом компактнее, нагляднее и строже текстового документа. И какую пользу могут принести встроенные в CASE средства контроля корректности проекта.
Реальный пример. Для учебных курсов по CASE-технологии мы использовали проект системы электронных платежей, подготовленный в Центробанке и выполненный как текстовой документ. Он представлял собой документ на нескольких десятках страниц. Чтобы прочитать его, требовалось не менее часа, а чтобы разобраться - много больше. После того как мы перевели его в CASE, он свелся к десятку весьма наглядных диаграмм с четкими пояснениями, в которых можно разобраться за пятнадцать минут.
Короче, в Центробанке уже налили воду в бассейн. CASE у них больше не лежит в коробке, а установлен на работающей машине. Это, обратите внимание, не в коммерческом банке, а в государственной фирме! Я хочу отметить несколько моментов, отличающих Vantage Team от большинства других CASE-средств, предназначенных для аналитика.
Первое. Это диаграмма архитектуры системы - уникальная диаграмма, которая позволяет вам привязать проект к вычислительному комплексу. Вы можете с ее помощью определить потребность в вычислительных средствах для реализации вашего проекта, оценить и выбрать наиболее адекватное решение в части распределения задач между клиентом, сервером и промежуточным слоем.
Второе. Vantage Team едва ли не единственный CASE, в котором предусмотрена возможность анализа структуры реальных данных с помощью диаграмм структуры данных. Причем CASE обеспечивает вам автоматическое сравнение этих диаграмм с диаграммами отношений сущностей, с помощью которых проектируется реальная база данных, и указывает на обнаруженные расхождения.
Третье. Диаграмма содержания экранной формы. Этот инструмент позволяет не только указать поля, содержащиеся в форме, но и очень четко описать возможности пользователя при работе со сложными экранными формами.
Программист (напомню, это тот, кто пишет библиотеки и - я однажды услышал прекрасный термин - "болванарий", то есть типовые фрагменты, болванки, которые потом переписываются кодировщиками для многочисленных конкретных таблиц и форм) получает в CASE прекрасный и очень мощный инструмент предопределенных модулей. Это модули, генерирующиеся автоматически по заранее написанному шаблону. То есть это болванка вместе с правилами ее заполнения. Один раз написанный шаблон может быть использован для различных экранных форм и для работы с различными таблицами базы данных. В Vantage Team входит набор шаблонов, достаточный для выполнения стандартных операций с таблицами базы данных при работе с довольно сложными экранными формами, включающими поля из нескольких таблиц с различными функциональными возможностями. Но главное, используя имеющийся набор функций доступа к проекту, вы можете легко разрабатывать свои шаблоны, то есть, если воспользоваться строительной аналогией, создавать панели по своему размеру и быстро собирать из них основной объем вашего приложения.
Шаблоны пишутся с использованием языка tcl, предоставляющего массу удобств при работе с текстом. В нем есть мощные функции для работы со строками и со списками. Также в полной мере используются преимущества интерпретатора: вы можете собрать очередную команду как строку и тут же выполнить ее.
Шаблоны можно использовать не только для кодогенерации на целевом языке, но и для усовершенствования или настройки генерации SQL-скрипта. Несколько примеров того, что мы сделали сами с использованием Vantage Team и что мы можем помочь сделать вам.
Поддержка архивной базы данных. При разработке своей информационной системы мы решили хранить в основной базе данных только актуальную информацию, а в архивной базе ВСЮ информацию. Реализация такого подхода в рамках СУБД Informix не представляет каких-либо трудностей, за исключением технических - необходимо написать по два триггера на каждую таблицу для операций Insert и Update соответственно. При этом надо помнить, что поиск и исправление ошибок, неизбежно возникающих при ручном написании хранимых процедур и триггеров, очень трудоемок. Достаточно простые шаблоны позволили полностью автоматизировать процесс и обойтись без ошибок вообще. При этом для части таблиц поддерживалось принудительное удаление из основной базы неактуальной информации, а для других таблиц оно было оставлено на усмотрение пользователя.
Поддержка ролей. Наиболее распространенный сервер Informix OnLine до версии 7.10 не поддерживал механизма ролей в явном виде. С помощью CASE мы, во-первых, просто и наглядно описали права нескольких ролей, необходимых для нашей системы, и, во-вторых, сгенерировали хранимые процедуры, позволяющие легко давать определенному человеку права, соответствующие произвольному набору его ролей.
При проектировании программы с помощью структурных схем легко выделить не только однотипные фрагменты, для которых можно использовать готовые или разработать дополнительные шаблоны, но и те нестандартные фрагменты, которые в любом случае приходится дописывать вручную. Принятая в CASE технология написания таких фрагментов опять-таки совмещает разработку и документирование. Вы рисуете соответствующую структурную схему и в ее уникальные элементы вписываете соответствующий код на языке программирования.
А где же кодировщики, этот основной источник ошибок? Ау...
И при этом степень документированности такова, что ввести в проект нового человека не составит никакого особого труда.
Индустриальной технологии - индустриального заказчика Итак, вы тщательно проработали проект, сгенерировали все, что можно сгенерировать, и дописали все, что надо было дописать. И, гордые собой, демонстрируете результат заказчику.
И тут заказчик, как это обычно и бывает, понимает, что вот здесь он забыл сказать о том, что должна быть еще вот такая опция меню, а вот здесь он о чем-то не подумал, а вот там вы его не точно поняли, и вообще он себе это представлял совсем иначе.
Короче говоря, вы скажете, что технология новая, а заказчики-то старые.
Но и здесь есть новые решения. CASE позволяет вам очень легко и быстро сгенерировать прототип, на котором заказчик поймет все проблемы и укажет на необходимые доработки. Для этого часто даже нет необходимости тщательно прорабатывать экранные формы. Достаточно для каждой экранной формы указать, с какой таблицей она должна работать. После этого вы получаете возможность достаточно быстро доработать те экранные формы, которые не устроили заказчика, и уточнить задание на те уникальные функции, которые необходимо написать. При работающем прототипе все это делается значительно эффективней.
Индустриализация,индустриализацияи еще раз индустриализация Решает ли Vantage Team все проблемы индустриализации программирования? На наш взгляд, нет. Что остается неавтоматизированным? Составление сложных форм. Вообще говоря, в проекте вы наверняка придете к каким-то достаточно простым (чтобы быть понятными пользователю) правилам формирования сложных экранных форм. Сложными я здесь называю формы для работы с несколькими таблицами. Шаблоны позволяют генерировать для них программный код, но сами диаграммы содержания экранных форм для них должны быть нарисованы вручную. Между тем это явно формализуемая и явно массовая операция, позволяющая, по нашим представлениям, создать не менее 90 процентов всех необходимых форм и не менее 80 процентов всего необходимого кода.
Что может быть положено в основу такой автоматической генерации? Мы выбрали принцип единого краткого представления для таблицы. То есть для каждой таблицы выбираются некоторые наиболее представительные поля, которыми записи из этой таблицы представляются в списках и в тех формах, где эта таблица не основная. Простейший пример. Таблица фирмы может содержать массу сведений о фирме, включая ее название, адрес, факс, банк и номер расчетного счета. Но для ввода и контроля ссылок на фирму практически во всех формах типа счет или платеж пользователю достаточно видеть ее название.
Что еще может быть автоматизировано? Генерация стандартных последовательностей экранных форм для работы с таблицей базы данных (и со связанными с ней словарями, конечно). Частично это есть. Вспомните Look Up формы для выбора словарных значений, о которых я вам говорил. Они создаются, но не отображаются на диаграмме последовательности экранных форм. Однако, на наш взгляд, для стандартных ситуаций там можно не разрисовывать детально и всю, скажем, последовательность экранных форм, которую мы заложили в качестве базисной в свою офисную систему. Как вы видите, она позволяет в начальном меню выбрать добавление новой записи либо поиск записей, удовлетворяющих определенному условию (фильтрацию). В любом случае результат представляется вам в виде списка, из которого вы можете выбирать одну или несколько записей для ввода по образцу или удаления. Туда, естественно, могут быть добавлены и специализированные опции для работы с конкретной таблицей. Причем форма ввода новой записи должна еще иметь приблизительно вот такой хвост для каждой словарной таблицы, который позволяет либо быстро выбрать нужную запись, задав условия выбора в исходной форме, либо задать сложный критерий выбора в форме поиска для словарной таблицы и выбрать из списка, либо сразу ввести нужную запись, если вы уверены, что ее нет в словарной таблице.
Для автоматизации решения этих задач мы решили разработать собственный кодогенератор. При этом захотели также расширить возможности кодогенератора, входящего в Vantage Team, и, насколько это возможно для Informix-4GL, осовременить интерфейс (окна, вертикальные меню и т.п.). Такой кодогенератор был нами создан. Это кодогенератор Grindery One-Step 4GL. Он генерирует и экранные формы, и функции для работы с ними. Его возможности в части работы со связанными таблицами значительно шире, чем в стандартном кодогенераторе. Он обеспечивает более гибкие возможности выбора из списка при любой операции поиска и, как вы видели, поддерживает проведение групповых операций с записями.
Принципиально новый механизм хранения вносимых вручную изменений в отдельном файле позволил значительно упростить, на наш взгляд, внесение изменений в автоматически сгенерированный файл. С одной стороны, все изменения могут быть легко просмотрены, а с другой, они автоматически воспроизводятся при перегенерации основного кода.
Написанный нами кодогенератор прошел серьезную практическую проверку как основной инструмент написания кода при разработке системы автоматизации коммерческой и производственной деятельности нашей фирмы. С его помощью было сгенерировано не менее 80% общего объема приложения (около 2 Мб исходных текстов программ) и почти все экранные формы. В целом он, по нашим оценкам, сократил в несколько раз время написания кода по сравнению с проектами, выполнявшимися вручную. А главное, существенно упростилась отладка и тестирование приложения, поскольку из автоматически сгенерированного кода для работы с примерно полусотней таблиц оказалось достаточно проверить один-два стандартных варианта, да и то после внесения изменений непосредственно в кодогенератор. Тщательного тестирования требуют лишь те 20% кода, которые написаны полностью или частично вручную.
Переносимость Еще одно из модных сегодня понятий - это портабельность, или переносимость проекта на различные платформы и средства разработки. Для нас, в частности, важно было иметь возможность предложить заказчику такие решения, когда в рамках одного проекта различные рабочие места оснащаются различными техническими и программными средствами в зависимости от тех конкретных задач, которые на них решаются.
Стандартно Vantage Team поддерживает возможность использования в качестве целевой СУБД Informix, Ingres и Oracle. Код программы при этом генерируется на соответствующем 4GL. Есть еще мост, позволяющий использовать для генерации интерфейса Uniface. Ясно, что этот набор явно недостаточен. На сегодняшний день представляется необходимым иметь возможность включать в индустриальную технологию программирования прежде всего различные средства класса билдеров. Однако это включение, на наш взгляд, должно несколько отличаться от включения процедурных языков типа Informix-4GL. Отличия касаются прежде всего уникальных форм и функций. Они могут создаваться непосредственно в билдере без стадии предварительного логического проектирования в CASE, хотя возможность их предварительного проектирования в CASE также желательно сохранить.
Вместе с тем традиционно предлагается использовать CASE для разработки и генерации базы данных, а далее все, в том числе и однотипные, экранные формы и функции создавать в билдере вручную. По-моему, это очень похоже на старый анекдот про математика, собирающегося выпить чаю: "А если в чайнике вода уже есть, то ее надо вылить, и задача сведется к предыдущей". В CASE уровня Vantage Team хранится достаточно много информации о модели данных, которая в явном виде может и не переходить в структуру базы данных. Например, поля, входящие в краткое представление. При знании их не представляет труда сгенерировать стандартные формы для любого билдера, как бы они в нем ни назывались - "окна", "диалоги" или еще как-нибудь.
Относительная простота написания генератора для нового средства разработки в Vantage Team определяется следующими моментами.
Во-первых, фазы анализа и архитектуры выполняются вообще без привязки к конкретной СУБД или средству разработки. Конечно, если это ясно заранее, вы скорее всего что-то такое специфическое заложите и в решения, которые вы принимаете. С другой стороны, если есть возможность выбора, то, представляя конкретные особенности проекта, его сделать легче.
Во-вторых, логические типы данных привязываются к конкретной СУБД через промежуточный слой - стандартные типы, общие для всех серьезных реляционных СУБД. Так что и здесь проблем не будет.
В-третьих, диаграммы последовательности и содержания экранных форм практически не привязаны к средствам разработки, поскольку основные элементы их алфавита могут быть реализованы практически любым современным средством.
В принципе возможно использовать для нового средства и структурные схемы программ. Сами диаграммы, разумеется, не привязаны к конкретному языку. Вызов функции, цикл или проверка условий есть практически во всех языках. Но необходимо переписать обработку их спецификаций на целевом языке.
На сегодняшний день мы можем предложить кодогенераторы NewEra/Yourdon и SuperNova/Yourdon для генерации типовых приложений в NewEra и SuperNova соответственно. Они решают задачи массовой генерации с учетом дополнительных атрибутов, задаваемых в Vantage Team.
При построении этих генераторов нам пришлось решать весьма принципиальный вопрос: как осуществить переход между богатыми возможностями графического интерфейса и значительно более ограниченными возможностями алфавитно-цифрового? В отличие от многих универсальных (позволяющих для одного приложения создавать и такой, и другой интерфейсы) средств разработки, мы пошли не по пути копирования экрана, а по пути реализации аналогичного по функциональным возможностям набора методов. В результате, как видно из образцов интерфейса, он несколько различается для NewEra и SuperNova, однако в сгенерированном приложении на любом из этих языков возможно выполнение всех тех действий, которые я перечислял для Informix-4GL.
Как показал наш опыт, генерация кода для билдера из CASE проще, чем для для процедурного языка. По крайней мере в том смысле, что значительная часть кода выносится в библиотеки классов (NewEra) или темплейты (SuperNova), а непосредственно на долю кодогенератора остается значительно меньше кода. В результате, например, кодогенератор для SuperNova был написан к исходу третьего месяца от первого знакомства с SuperNova. Причем кодогенератор для SuperNova на сегодняшний день обладает наибольшими возможностями в части разнообразия генерирующихся автоматически интерфейсов. Разумеется, срок этот может быть значительно сокращен, если сотрудничать с опытными разработчиками, готовыми представить свои "болванки" для генерации.
Поскольку управление кодогенерацией во всех трех кодогенераторах осуществляется одним и тем же ограниченным набором дополнительных атрибутов, вы можете для одного и того же проекта часть интерфейсов создать на Informix-4GL и реализовать соответствующие рабочие места с помощью алфавитно-цифровых терминалов, а часть - на NewEra или SuperNova и разместить их на графических рабочих местах под Windows или Motif.
На сегодня все эти кодогенераторы можно использовать и из ObjectTeam for OMT.
А нельзя ли подешевле и побольше? Увы, на сегодня потребители CASE в России это, в первую очередь, крупные банки. Фирмы поменьше просят чего-нибудь подешевле. Да и проекты у них пока еще не те, можно и в Word'е диаграммы нарисовать. Вот сгенерировать бы автоматически как в CASE...
А почему бы и нет? Технология, заложенная в основу нашей кодогенерации, предполагает определение для полей таблиц базы данных небольшого набора дополнительных атрибутов: альтернативный (предметный) ключ, участие поля в кратком представлении таблицы, наличие в детальных формах (не удивляйтесь, лучше подумайте, что там делать, например, сериальному полю) и еще буквально два-три.
Итак, проект у вас небольшой. Для создания базы данных вам хватило того же ERwin. Информация обо всех полях базы данных лежит в системных таблицах. Прочитать бы ее, обеспечить возможность задать еще по нескольку атрибутов и запустить кодогенератор. Тем более что tcl, на котором этот кодогенератор написан, теперь нередко входит в состав ОС UNIX (например, SCO-5), а tcl для Windows бесплатно распространяется по Internet. И такой инструмент действительно есть. Это Grindery Grabber. Grindery Grabber позволяет вам, не имея CASE-средств, прочитать структуру реальной базы данных, проставить необходимые атрибуты и сгенерировать код. И основная, индустриальная, часть вашего приложения готова.
Планы и перспективы Немного о наших планах. Развитие представленной вам технологии мы ведем по нескольким направлениям.
Это усовершенствование кодогенераторов для NewEra и SuperNova в части обеспечения возможности проектирования нетипичных форм и функций из Vantage Team. И здесь мы можем похвастаться почти готовым генератором форм для SuperNova. Завершение работ будет означать наличие полноценного моста между Vantage Team и SuperNova.
Это развитие Grindery NewEra/Yourdon и Grindery SuperNova/Yourdon в части расширения их библиотек стандартных правил построения отдельных экранных форм и последовательностей экранных форм, с тем чтобы сделать их еще более гибкими и универсальными инструментами.
Это развитие линии Grindery Grabber до простого в освоении и дешевого инструмента, в той или иной степени перекрывающего жизненный цикл проекта. Для этого прежде всего необходимо придать ему возможности не только считывать, но и изменять структуру созданной базы данных (поскольку мы хотим оставить его максимально дешевым, предполагается минимальное использование графических редакторов, а без них генерация большой базы данных с нуля вряд ли рациональна). Кроме того, мы предполагаем значительное развитие его возможностей по документированию проекта и по управлению генерацией отдельных форм. И это, конечно, расширение числа поддерживаемых средств разработки.
И, возвращаясь к самому началу, скажу в заключение, что перевод программирования на индустриальные технологии вполне возможен и реален, а главное направление такого перехода - использование CASE-средств, поддерживающих весь жизненный цикл проекта.
А. В. Закис, руководитель aналитической группы Data X/FLORIN, Inc.
Компьютерная газета. Статья была опубликована в номере 14 за 1997 год в рубрике программирование :: разное