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

Общий раздел => ПО Аналитика => Тема начата: singleton от 12 Сентября 2007, 21:33:17

Название: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: singleton от 12 Сентября 2007, 21:33:17
...a помимо Enterprise Architect за борт были выкинуты:



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

1. Class Diagrams, UML2
2. Good Associations Support, 1:1 / 1:n / qualifiers
3. Contemporary code generator, type safe java 1.5 generics

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

 - - - to be continued - - -

 
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: singleton от 12 Сентября 2007, 22:46:21
- - -
ПАРА СЛОВ В НАЧАЛЕ

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

Во-первых, захотелось обратить внимание комьюнити на беспрецедентный кризис в области средств поддержки uml моделирования. Заявления типа "Full UML 2.1 support",  "XMI 2.1 support" или "sophisticated round-trip engineering" это пустой звук, вранье, маркетинг - называйте как хотите. Поразительно, но программисты именитых фирм не в состоянии написать нормальные средства поддержки uml, которые будут делать то, что от них ожидается. Это при том, что потребители находятся  в том же домэйне, что и создатели: те же, по-сути, программисты.

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

 - - -
КАК ТЕСТИРОВАЛ:

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


Свойства ассоциаций (для удобства последующей оценки) я поделил на три функциональные группы



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

Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: singleton от 13 Сентября 2007, 05:20:55
- - - РЕЗУЛЬТАТЫ ТЕСТА - - -


Sparx Enterprise Architect 7.0 Score: 9.5 points from 16




Rational RSD 7. score 10 points from 16





Visual Paradigm 6.1 Enterprise score: 6 points from 16





Borland Together 2006 R2 Score: 5.5 points from 16





Poseidon 6.0 и ArgoUML Score: 4 points from 16




MagicDraw 14. score: 4 points from 16









Fujaba 5.0.4 Score: 3 points from 16




Netbeans UML Plugin Score: 1.5 points from 16



 
 

Eclipse Omondo Plugin "EclipseUML" Score: not rated





Soyatec eUML2 Score: 12 points from 16



модель:

(http://www.soyatec.com/euml2/documentation/com.soyatec.euml2.doc/jdk15/generic-type/generic-type00.gif)

результат (free edition):

/**
 * @uml.property name="project"
 * @uml.associationEnd multiplicity="(0 -1)"
 *       inverse="person:model.Company"
 *       qualifier="key:java.lang.Object model.Project"
 */
private Map<Object, Collection<Project>> projectMap;

/**
 * Getter of the property <tt>project</tt>
 * @return Returns the project.
 * @uml.property name="project"
 */
public Map<Object, Collection<Project>> getProject()
{
return projectMap;
}

/**
 * Setter of the property <tt>project</tt>
 * @param company The project to set.
 * @uml.property name="project"
 */
public void setCompany(Map<Object, Collection<Project>> project) {
this.projectMap = project;
}

Результат возможный с помощью Velocity Templates (тока за дэнги)


/**
 * @uml.property name="project"
 * @uml.associationEnd multiplicity="(0 -1)"
 *      inverse="company:model.Project" qualifier="key:java.lang.Object model.Project"
 */
private Map<Object, Collection<Project>> projectMap;

/**
 * Getter of the property <tt>project</tt>
 * @return  Returns the projectMap.
 * @uml.property name="project"
 */
public Map<Object, Collection<Project>> getProject() {
return projectMap;
}

/**
 * Returns a set view of the keys contained in this map.
 * @return  a set view of the keys contained in this map.
 * @see java.util.Map#keySet()
 * @uml.property name="project"
 */
public Set<Object> projectKeySet() {
return projectMap.keySet();
}

/**
 * Returns a collection view of the values contained in this map.
 * @return  a collection view of the values contained in this map.
 * @see java.util.Map#values()
 * @uml.property name="project"
 */
public Collection<Collection<Project>> projectValues() {
return projectMap.values();
}

/**
 * Returns <tt>true</tt> if this map contains a mapping for the specified key.
 * @param key key whose presence in this map is to be tested.
 * @return  <tt>true</tt> if this map contains a mapping for the specified key.
 * @see java.util.Map#containsKey(Object)
 * @uml.property name="project"
 */
public boolean projectContainsKey(Object object) {
return projectMap.containsKey(object);
}

/**
 * Returns <tt>true</tt> if this map maps one or more keys to the specified value.
 * @param value  value whose presence in this map is to be tested.
 * @return  <tt>true</tt> if this map maps one or more keys to the specified value.
 * @see java.util.Map#containsValue(Object)
 * @uml.property name="project"
 */
public boolean projectContainsValue(Collection<Project> project) {
return projectMap.containsValue(project);
}

/**
 * Returns the value to which this map maps the specified key.
 * @param key key whose associated value is to be returned.
 * @return the value to which this map maps the specified key, or
 *      <tt>null</tt> if the map contains no mapping for this key.
 * @see java.util.Map#get(Object) 
 * @uml.property name="project"
 */
public Collection<Project> getProject(Object object) {
return (Collection<Project>) projectMap.get(object);
}

/**
 * Returns <tt>true</tt> if this map contains no key-value mappings.
 * @return <tt>true</tt> if this map contains no key-value mappings.
 * @see java.util.Map#isEmpty() 
 * @uml.property name="project"
 */
public boolean isProjectEmpty() {
return projectMap.isEmpty();
}

/**
 * Returns the number of key-value mappings in this map.
 * @return the number of key-value mappings in this map.
 * @see java.util.Map#size() 
 * @uml.property name="project"
 */
public int projectSize() {
return projectMap.size();
}

/**
 * Setter of the property <tt>project</tt>
 * @param value the projectMap to set.
 * @uml.property name="project"
 */
public void setProject(Map<Object, Collection<Project>> project) {
projectMap = project;
}

/**
 * Associates the specified value with the specified key in this map
 * (optional operation).
 * @param key key with which the specified value is to be associated.
 * @param value value to be associated with the specified key.
 * @return  previous value associated with specified key, or <tt>null</tt>
 * @see java.util.Map#put(Object,Object) 
 * @uml.property name="project"
 */
public Collection<Project> putProject(Object object, Collection<Project> project) {
return (Collection<Project>) projectMap.put(object, project);
}

/**
 * Removes the mapping for this key from this map if it is present
 * (optional operation).
 * @param key key whose mapping is to be removed from the map.
 * @return  previous value associated with specified key, or <tt>null</tt>
 *   if there was no mapping for key.
 * @see java.util.Map#remove(Object) 
 * @uml.property name="project"
 */
public Collection<Project> removeProject(Object object) {
return (Collection<Project>) projectMap.remove(object);
}

/**
 * Removes all mappings from this map (optional operation).
 * @see java.util.Map#clear() 
 * @uml.property name="project"
 */
public void clearProject() {
projectMap.clear();
}

 

до следующего раза. поправляйте и дополняйте :)

Ваш Dimitri Alexeev a.k.a. singleton
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: Galogen от 13 Сентября 2007, 08:57:02
до следующего раза. поправляйте и дополняйте :)
Ваш Dimitri Alexeev a.k.a. singleton
Дмитрий очень интересный и содержательный анализ.

Поскольку в дискуссиях форума частенько звучало негативное отношение к автогенерации кода. Мол зачем она нужна, она все равно кривая и косая. Теперь становится понятно, где и что кривое и косое.

Вопрос: А Вы в своей практике активно стараетесь использовать автогенерацию? Если да, то насколько это облегчает Вам жизнь? Насколько это вообще актуально?
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: singleton от 15 Сентября 2007, 22:55:40
Вопрос: А Вы в своей практике активно стараетесь использовать автогенерацию? Если да, то насколько это облегчает Вам жизнь? Насколько это вообще актуально?

Все мои предыдущие попытки использовать uml на стадии дизайна не только как нотацию я рассматриваю как поражение. Отвечая на второй вопрос, жизнь в итоге становилась только сложнее. Но давайте оставаться оптимистами: чем крупнее разрабатываемая система, чем качественнее используемый инструментарий, тем актуальнее использование автогенерации. Безусловно, речь не идет о генерации готового кода. Но надежда на создание статического и функционального каркаса приложения, который не надо корректировать, а только заполнять - эта надежда еще не умерла. Тем более что uml case продукты медленно, но верно выходят на качественно новый уровень. Вместо того, чтобы просто сетовать на недостатки тех или иных решений, в последнее время пытаюсь устанавливать контакт (http://www.soyatec.com/forum/viewtopic.php?t=663) с разработчиками Может это сподвигнет их к улучшениям...

з.ы. Жаль что никто пока не поделился своим критическим мнением касательно справедивости результатов моего теста... Тот же MagicDraw, например, хоть и не в состоянии генерировать нормальный java-код (за что и получил только четверть пунктов), но ребята не поленились сделать экспорт в EMF2, а это открывает широкие возможности для внешних кодогенераторов на базе eclipse framework.
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: Galogen от 15 Сентября 2007, 23:28:51
Дмитрий, я думаю, дело в том, что окружающее большинство не доходит до кодогенерации. По крайней мере, про себя могу сказать точно. Имею небольшой опыт использования трансформации кода из Rose-модели в дельфи-проект через BOLD-компоненты.

Буду изучать вопросы качества скелетного кода под Дельфи из Enterprise Architect.

Однако уже сейчас прогнозирую негативный результат, если уже под Java (которая как стандарт встречается во всех UML инструментах) возникают столь большие сложности, то что говорить о Дельфи...
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: Юрий Булуй от 15 Сентября 2007, 23:54:46
А по правильному (точнее желаемому) коду не пробовали сгенерировать UML диаграммы (reverse engineering)?
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: bas от 17 Сентября 2007, 11:45:53
Dimitri Alexeev,

Мне кажется правильнее переименовать тему во что-то более вразумительное, например, Сравнение CASE средств для кодогенерации.
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: MasterZiv от 21 Ноября 2007, 20:55:17
Разрешите встрять.

Поскольку в дискуссиях форума частенько звучало негативное отношение к автогенерации кода. Мол зачем она нужна, она все равно кривая и косая. Теперь становится понятно, где и что кривое и косое.

Это просто кощунство так говорить! Модель нужна тогда и только тогда, когда она актуальна и поясняет существующий код. А актуальна она только когда по ней код и генерируется.

Вопрос: А Вы в своей практике активно стараетесь использовать автогенерацию? Если да, то насколько это облегчает Вам жизнь? Насколько это вообще актуально?

Если это не аналитический проект с USE-CASE-ами и прочей лабуденью, а программистский, то -- очень актуально. Всегда пользуюсь генерацией.
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: Denis Beskov от 21 Ноября 2007, 21:33:57
Если это не аналитический проект с USE-CASE-ами и прочей лабуденью, а программистский, то -- очень актуально. Всегда пользуюсь генерацией.
MasterZiv, у нас здесь не SQL.ru, потому попрошу выбирать выражения.
Название: Re: Поставил eUML2 - стер Enterprise Architect
Отправлено: Galogen от 22 Ноября 2007, 09:37:35
Разрешите встрять.

Это просто кощунство так говорить! Модель нужна тогда и только тогда, когда она актуальна и поясняет существующий код. А актуальна она только когда по ней код и генерируется.
Речь шла не о генерации кода как таковом, а о автогенерации оного. Дискуссии показали, что к автогенерации есть осторожное отношение. Речь вовсе не идет об качестве и актуальности модели. Все это прекрасно понимают.
Генерация кода может осуществляться и вручную и грамотно.

В этой же ветке проведен анализ на очень простом примере и показаны очевидные проблемы автогенерации.

Если Вам удается это делать - делитесь опытом, а не занимайтесь критикантством. Пока, кроме Ваших неаргументированных заявлений, ничего нет.
Название: Re: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: Юрий Булуй от 22 Ноября 2007, 23:15:32
Вообще забавно мне смотреть на "войну аналитиков и программистов". Я такое наблюдаю периодически в своей практике, причем исключительно у инхаузеров, в частности в банках. Как правило вызвано это не столько тем, что аналитики пишут "USE-CASE-ами и прочей лабуденью", а скорее потому-что не как раз их не пишут :-). Еще меня радует термин "программистский проект" ... это наверное когда делается некий фреймворк, библиотека контролов визуальных ... и что-то в этом духе? ... Да в этом случае не факт что юзкейсы нужны :-)
 
Название: Re: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: Dennis от 23 Ноября 2007, 08:30:53
Еще меня радует термин "программистский проект" ... это наверное когда делается некий фреймворк, библиотека контролов визуальных ... и что-то в этом духе? ... Да в этом случае не факт что юзкейсы нужны :-)
А мне кажется что как раз в таких случаях варианты использования моглы бы помочь (особенно если речь идет о визуальных контролах).

Программистский проект - это наверное такой, который делается без анализа (без подробного). Просто несколько (или один) программистов собираются, и давай писать по принципу "Ввяжемся в бой - а там разберемся".
Название: Re: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: RuZzz от 30 Марта 2011, 01:14:45
Поставил eUML2 но он мне не позволяет создать диаграммы, просто потому что мой проект не имеет отношения к Java. хотелось бы добиться классов PHP из диаграмм, до сих пор не понимаю как это сделать в Eclipse, но куда двигаться понятно. пока по прежнему использую UML2 Tools, код не генерирую. впечатление от обоих плагинов хорошее(удобный интерфейс). В пакете с eUML2 установил удобный инструмент для моделирования БД, очень много настроек, называется Eclipse Database но судя по всему продукт платный. И на сегодняшний день обновленный платный плагин Omondo ещё жив.

           Eclipse 3.6    Документация     Диаграммы ВИ     Диаграммы активности   Кодогенерация  Интерфейс   OpenSource
Omondo          +               +                           +                    +                               ?                 средний          -
eUML2             +               +                           ?                    ?                                 +               удобный           +
UML2 Tools       ?        мало                            +                    +                      через EMF            удобный           +
ArgoUML           -        незаконченная           +                    +                                +                 убогий             +



Может я слепой, но я не нашёл в eUML2 диаграмм кроме последовательности и классов. радует политика фирмы

                               Free Edition          Studio Edition         Quality Assurance Edition
Professional license             free                     590€                           1600€
Academic license                free                      free                               N/A


Название: Re: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: bas от 11 Апреля 2011, 10:30:45
Сравнение EA+AMUSE vs. Rhapsody (http://blog.lieberlieber.com/2011/03/15/eaamuse-vs-rhapsody/).
Название: Re: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: Andrey@Modelio от 10 Октября 2011, 20:29:46
Попробуйте Java designer на modelio.org
Это генератор и реверс Java. Поддерживается генерация, реверс, синхронизация и round-trip. Есть простенький встроенный редактор, но лучше использовать совместно с Eclipse.

Польностью бесплатен. И по моему наилучший генератор в нижнем ценовом сегменте.

У нас он пользуется хорошим успехом на системах в 1M LOC

Могу кинуть статейку от наших клиентов.
Название: Re: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: Galogen от 10 Октября 2011, 20:31:10
Попробуйте Java designer на modelio.org
Это генератор и реверс Java. Поддерживается генерация, реверс, синхронизация и round-trip. Есть простенький встроенный редактор, но лучше использовать совместно с Eclipse.

Польностью бесплатен. И по моему наилучший генератор в нижнем ценовом сегменте.

У нас он пользуется хорошим успехом на системах в 1M LOC

Могу кинуть статейку от наших клиентов.
Обязательно скиньте ;)
Название: Re: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: Andrey@Modelio от 11 Октября 2011, 11:43:18
Вот презентация от клиентов http://www.slideshare.net/MDDAY/dcns-mdday2010 (http://www.slideshare.net/MDDAY/dcns-mdday2010)
Диаграммы и генерация кода из Modelio.

Статейку ищу.
Название: Re: Сравнение CASE-средств для кодогенерации ( от eUML2 до Enterprise Architect)
Отправлено: Andrey@Modelio от 19 Июля 2013, 12:30:55
Привет от разработчиков Modelio

Было бы интересно провести сравнение с Modelio open source (modelio.org)

Уверен наш Java генератор на высоком уровне. По нашим тестам значительно выше EA.