Форум Сообщества Аналитиков

Общий раздел => ПО Аналитика => Тема начата: amDei от 04 Декабря 2007, 02:06:01

Название: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: amDei от 04 Декабря 2007, 02:06:01
Тов. Гуру!
Интересуюсь мнением профессионалов: приходилось ли вам когда-нибудь с пользой для дела использовать продукты с функциональностью генерации кода по модели? При том что возможность обновить модель по коду в этом продукте отсутствовала?

Сам использую RR. Девелопят люди на C++. Как и зачем использовать подобные инструменты без возможности  Reverse Engineering - для меня загадка.
Всё равно так детально прорисовать модель, чтобы код получился хотя бы компилируемым, требует больших трудозатрат. Всё равно его исправляют/модифицируют. И как только это произошло - модель становиться сама по себе, код - сам по себе. Ибо если попытаться его перегенерировать - исправления в коде будут утеряны.

Поэтому наличие функции генерации кода в том же PD, без наличия функции обратной операции (для С++) меня несколько удивляет.

Кто может привести вариант успешного использования такого половинчатого решения?
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: Galogen от 04 Декабря 2007, 08:12:02
Ну разве только какие-то древние средства либо уже просто ориентированные на графику не имеют обратного инжиниринга. Такой инструмент действительно мало полезен. Более того при обратном инжиниринги интересен не только реверс диаграммы классов, но и диаграмм состояний и диаграмм последовательностей!

Крэг Ларман в своей книге Применение UML 2 говорит, что выбор средств должен быть следующим: для первичного моделирования лучше иметь дешевые или бесплатные средства - идеальное средство - белая доска и фломастеры + цифровой фотоаппарат. Кодирование часто производится в ручную, но ...!

На определенном этапе код реинжинируется в модель и для этих целей, Ларман рекомендует использовать дорогие коммерческие системы (1 или 2 лицензии). Т.е. код реинжинируется в модель, модель используется и дорисовывается, затем код изменяется и т.д.

Хотя сейчас множество средств с round-trip инжинирингом и по моделм классов и по другим моделям, в том числе и по use cases.

В этом смысле интерес предстваляют решения от CodeGear 2007 c внедренным в среду разработки приложения поддержкой живого цикла - т.е. написание кода или рисование моделей происходит одновременно и взаимно влияет друг на друга.

Для анализа продуктов, все-таки желательно указывать версии. Для того же PD. Я практически не работаю с этим инструментом, однако отсутствие обратных операций по С++ удивляет.
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: bas от 04 Декабря 2007, 11:54:47
В общем, согласен с Эдуардом.

Хотел немного добавить.
Во-первых, мало кто в России делает round-trip инжириниг.
Во-вторых, иногда целесообразнее сделаешь модель, по ней сгенерить код, а потом что-то править уже в коде. В конце проекта получить актуальную модель данных.
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: amDei от 04 Декабря 2007, 16:16:22
Хотя сейчас множество средств с round-trip инжинирингом и по моделм классов и по другим моделям, в том числе и по use cases.
А нормальные, функциональные и удобные в работе есть? Кроме RSA и EA. Посоветуйте. А то все пробовать - тяжело и долго...
Для анализа продуктов, все-таки желательно указывать версии. Для того же PD. Я практически не работаю с этим инструментом, однако отсутствие обратных операций по С++ удивляет.
RationalRose - 2003. PowerDesigner - 12.
В PD генерация кода С++ была помоему и в 11. Но RE и в 12-й для C++ не появилось. Java, C# - пожалуйста, в обе стороны. C++ - только из модели в код.
Хотя генерация кода в PD мне нравиться местами больше чем в Rose. Чего чтоит хотя бы генерация структур по объектной модели. Конфетка!

Но кому она нужна без обновления модели по коду?
Для чего производители тратят время и другие ресурсы на реализацию функциональности, которая не будет востребована пользователями?
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: Galogen от 04 Декабря 2007, 17:16:39
amDei, мне очень понравился инструментарий Visual Paradigm. Там такие демонтсрационные материалы - сами все поймете. Правда удовольствие стоит денег. Но меньших чем другие подобные системы.

Telelogic уверяет, что она лучше всех. Вполне возможно, учитывая их хорошие цены.

Но можно пощупать и бесплатные системы StarUML, ArgoUML. Вообще зайдите на wikipedia и наберите UML Tools
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: bas от 04 Декабря 2007, 17:18:18
Telelogic уверяет, что она лучше всех. Вполне возможно, учитывая их хорошие цены.
Да кодогенерация у них на высоте. Причем в Рапсоди, например, создание и отладка кода происходит на уровне модели.
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: Galogen от 04 Декабря 2007, 17:20:34
Саша - это и называется round-trip собственно. Главное не  round-trip модели классов, а моделей состояний и взаимодействий
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: bas от 04 Декабря 2007, 17:21:41
Саша - это и называется round-trip собственно. Главное не  round-trip модели классов, а моделей состояний и взаимодействий
Я всегда думал, что round-trip - это генерация кода по моделям и реверс его обратно. Разве не так?
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: Galogen от 04 Декабря 2007, 17:22:45
Окей. Что ты понимаешь под отладкой кода прямо в модели?
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: bas от 04 Декабря 2007, 17:54:54
Окей. Что ты понимаешь под отладкой кода прямо в модели?
Нажимаешь F8 и Рапсоди ведет прямо по модели, по мере выполненяит программы/ф-ции
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: nvoynov от 04 Декабря 2007, 18:13:33
Рекомендуется посмотреть Borland Together, но только не тот что в поставке Delphi или для .Net, а именно как самостоятельный продукт. Что-то не особо им удаются клоны оригинального java-инструмента. Причем еще с версии 5.5, кажется он легко справлялся с C++, C#, Java.

"Отладка кода прямо в модели" - например в ERWin есть валидация, типа отсутствия ключей, определений типа для поля ... В Together можно установить граничные условия для различных вещей типа глубины вложенности классов. Тот же BPMN показывает некоторые ошибки модели. Конечно на отладку это не похоже ... Но вот тот же Together для Java позволяет все сразу что умеет Eclipse JDT - запускать приложение, модульные тесты ... Отлаживать, рефакторить
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: Galogen от 04 Декабря 2007, 18:14:11
Саша, зачем цитировать, то что на предыдущем посте?

Ясно, такое не знал, что возможно. Думаю в CodeGear Development Studio 2007 это реализовано.
надеюсь такое есть и в ЕА - там есть интеграция со средой разработки и в VP - там вообще целый комплекс интеграции к системам SDE
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: amDei от 05 Декабря 2007, 17:33:16
Нажимаешь F8 и Рапсоди ведет прямо по модели, по мере выполненяит программы/ф-ции
А для каких языков программирования такое возможно? С какими средами разработки интегрируется? Или там своя?
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: bas от 05 Декабря 2007, 18:58:28
А для каких языков программирования такое возможно? С какими средами разработки интегрируется? Или там своя?
C++ and Java. Но там своя специфика, лучше всего это работает на риал-тайм приложениях, т.к. свои темплейты есть для этого. Попрошу разъяснить ситуацию эксперта по Рапсоди.
Название: Re: Нужен ли CodeGeneration при отсутствующем Reverse Engineering?
Отправлено: dsryzhov от 06 Декабря 2007, 16:18:48
В первую очередь хочется сказать, что Rhapsody - это среда разработки, а не средство моделирования. Как следствие - её специализация на разработке встраиваемых систем и приложений реального времени.

Rhapsody предоставляет функцию динамической синхронизации модели и кода. Изменения в модели приводят к изменениям в коде и наоборот. Это не Reverse Engineering, а различные представления одной модели, которые позволяют её изменять. Модель - это объединение 3-х языков: русского, UML, языка программирования

RE конечно же есть, но не только. Есть ещё возможность RE внешний код с целью его визуализации на диаграммах. Для такого внешнего кода, Rhapsody не генерирует код на основе модели, а просто позволяет подключить уже существующий и отлаженный.

Поддерживается работа с 4-мя языками: С, С++, Java, Ada. Код генерируется на основе структурных и поведенческих диаграм, в том числе на основе диаграмм пакетов, компонентов, состояний, активности.

Rhapsody позволяет сгенерировать whitebox код, собрать на основе него исполняемое приложение и запустив его, управлять им из Rhapsody (отлаживаться) и видеть результаты его работы на уровне модели (на диаграммах состояний, диаграммах последовательности)

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

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

См. также
http://www.swd.ru/files/pdf/brochures/Telelogic_Rhapsody_Broschure.pdf
http://www.swd.ru/index.php3?pid=121