Опубликован: 25.07.2012 | Уровень: специалист | Доступ: платный
Лекция 9:

Организация процесса разработки и применения генераторов

Обучение пользователей

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

  1. Возможности генератора кода. Что и как может делать генератор.
  2. Ограничения при применении генератора. Информация о том, чего не следует ждать от него.
  3. Преимущества применения генерации кода. Возможные недостатки.
  4. Архитектура генератора. Дать представление о том, как работают метаданные, о правилах предметной области, о шаблонах в данном конкретном генераторе. Дать информацию об используемой технологии генерации кода.
  5. Процесс подготовки и запуска генерации. Объяснить и показать как идет процесс генерации. Как заполняются метаданные, создаются и изменяются шаблоны, как запускается генератор, как с ним работать. Какая используется схема взаимодействия ручного и сгенерированного кода. Как работает сгенерированный код и как управлять им.
  6. Показать возможности дальнейшего усовершенствования генератора. Здесь главное не переусердствовать и быть реалистичным, давать только ту информацию, которая в конкретные сроки практически может быть реализована.
  7. Необходимо ознакомить с документацией генератора и инструкциями пользователя.
  8. Предубеждения против применения генераторов. Надо рассказать, какие предубеждения могут возникать касательно применения генераторов, почему не все из них верны, как преодолеть другие. Это нужно сделать обязательно.

Обучение проводится в виде семинаров, тренингов, бесед, составления и раздачи учебных материалов.

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

По этим причинам хорошее обучение и равноценное вовлечение как можно большего числа программистов в разработку и использование генератора является очень важным.

Простота в использовании

Если генератор неудобно использовать, устанавливать, настраивать, либо он работает ненадежно, это будет серьезным препятствием к тому, что генератор вообще будет применяться. Особенно это касается добавления и изменения метаданных и шаблонов. Нет смысла в избавлении от рутинной работы путем применения генератора, если это впоследствии оборачивается затрудненной и проблематичной настройкой самого генератора. Даже если такой генератор дает выигрыш во времени, недоверие к его работе может привести к прекращению его использования. Тот факт, что генератор кода применяется преимущественно программистом, не значит, что необязательно уделять много внимания удобству, простоте применения и восприятия работы генератора. Наоборот, удобный интерфейс увеличит эффективность работы программиста. А это не может не сказаться положительно на проекте. С точки зрения практического применения генератор должен обладать следующими свойствами:

  • простота использования,
  • удобство пользовательского интерфейса,
  • надежность установки и работы.

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

Генерация одним нажатием клавиши

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

  • применять вложенные иерархические шаблоны,
  • разработать скрипт для последовательного применения шаблонов ко всем метаданным.

Вложенные шаблоны удобно применять, так как становится возможным вызывать одни шаблоны из других. Эти шаблоны-потомки могут применяться также внутри других больших шаблонов. Если возникнет необходимость сделать одинаковые изменения в нескольких похожих шаблонах, достаточно идентичные места в них сделать вложенным шаблоном и делать изменения только в нем.

Программным путем можно пройтись в цикле по всем метаданным и применить соответствующие шаблоны. Это позволит сэкономить существенное количество времени по сравнению с одиночным применением шаблона (генерирующим один блок кода) и делает возможным генерацию кода всего приложения одним нажатием клавиши.

Документация

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

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

Кроме того нужны инструкции пользователя по выполнению частых операций:

  • запуска генератора,
  • обновления и заполнения метаданных,
  • обновления шаблонов,
  • установки генератора,
  • описания методов решения возникающих проблем.

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

Ключевые моменты в построении генераторов

Рассмотрим моменты, которые важно соблюдать при проектировании, разработке, внедрении и применении генераторов:

  1. В самом начале написать код вручную и протестировать его. Перед разработкой шаблонов и структуры метаданных надо создать стандартный код вручную - как минимум по два варианта на создаваемый шаблон. После успешного завершения тестирования на основе этого кода будут создаваться шаблоны и структура метаданных. Которые впоследствии могут корректироваться.
  2. Создать систему контроля изменений кода. Сгенерированный код не должен заменяться ручным и наоборот.
  3. Уделять должное внимание ручному кодированию, не перестараться с генерацией.
  4. Язык реализации генератора должен выбираться независимо от языка кода приложения. Генератор решает совсем иную задачу и является другим проектом.
  5. Интегрировать генератор в среду разработки. Эффективное взаимодействие генератора и среды разработки позволит программисту получить еще больше преимуществ. В некоторых случаях есть возможность разрабатывать генератор таким образом, чтобы он мог подключаться в виде модуля в среду разработки, либо использовать классы и разного рода файлы, которые применяются в среде разработки. Можно также генерировать такие файлы.
  6. Интерфейс сделать дружественным для более удобного и быстрого применения.
  7. Создать документацию для того, чтобы всем заинтересованным лицам было ясно, что ожидать от генератора и как с ним работать.
  8. Уделять достаточное внимание обучению применения генератора всех заинтересованных лиц.
  9. Поддерживать генератор для долгосрочного использования. Разработка генератора - это только начало дела, дальнейшая поддержка работы генератора является длительной и постоянной деятельностью.
  10. Стараться внедрить генератор на как можно более ранней стадии.
  11. Для хорошей стандартизации важно сформировать удобные и логически понятные правила именования всего в приложении - начиная от переменных, объектов и методов и заканчивая классами, модулями, файлами и папками. Также аналогичная функциональность в разных методах должна реализовываться максимально сходным образом.

Покупать или разрабатывать?

Генератор можно не только разработать, но и приобрести, либо применять генератор с открытым исходным кодом. Рассмотрим плюсы и минусы самостоятельной разработки в сравнении с покупкой генератора.

Самостоятельная разработка. Плюсы:

  • вы имеете полный контроль над генератором,
  • свободное управление развитием генератора.

Минусами самостоятельной разработки являются:

  • нужны ресурсы на обучение пользователей;
  • нужны ресурсы на дальнейшую поддержку генератора;
  • версия генератора должна находиться в соответствии с версией среды разработки, т.к. они могут меняться и развиваться;
  • нужны время и усилия разработчиков.

Покупка генератора. Плюсами являются:

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

Минусами при покупке генератора являются:

  • может потребоваться значительное количество времени и ресурсов на приведение настроек генератора в соответствие с требованиями;
  • генератор может работать не так как ожидалось. Есть риск непредвиденного поведения;
  • нет контроля за развитием генератора. Если поставщик выпускает новую версию своего продукта, то предыдущие два пункта вновь могут оказаться актуальными.
  • затраты бюджета на приобретение генератора;
  • может оказаться, что генератор спроектирован и разработан не слишком удачно для приведения его в соответствие с требованиями проекта. На выяснение этого факта может уйти неприемлемое количество времени.

Также рассмотрим плюсы и минусы применения бесплатного генератора с открытым исходным кодом. Они практически те же, что и при покупке генератора, но имеются дополнительные плюсы и минусы.

Плюсы применения бесплатного генератора с открытым исходным кодом:

  • можно самостоятельно изменять генератор для своих нужд,
  • нет затрат бюджета на приобретение генератора.

Минусы применения бесплатного генератора с открытым исходным кодом:

  • для самостоятельного изменения потребуется детально разобраться в коде генератора;
  • новая версия генератора может вступить в противоречие с собственноручно измененной версией генератора.

Заключение

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

И хотя многое сделано в этом направлении, надо пройти еще больший путь к полной автоматизации программирования. Неизвестно сколько времени на это уйдет, какие препятствия и подводные камни еще встретятся.

Дмитрий Клочков
Дмитрий Клочков
Россия, Рубцовск
Волков Олег
Волков Олег
Украина, Днепропетровск