The Model Driven Software Network

Raise your level of abstraction

MDA implementations on large projects using AndroMDA

This is my first blog post, but one I hope to update regularly. I want to share my experiences with model driven development, code generation, and the entire development life cycle from a practical implementation perspective - getting things to work together on actual implementation projects, helping projects be successful, automating the lifecycle including code generation.

 

A little about myself and the tools I use...

 

I work at Walt Disney World, Orlando FL in Information Technology (Application Architecture). We have about a thousand developers and consultants involved  in all parts of the Theme Parks and Resorts business segment (WDPR): park operations, ticketing, sales offers, reservations, integrations with travel companies and airlines, resort availability/booking, retail (point of sale), dining, Disney vacation club, cruise line, etc. Plus a project that I can't talk about (google NGE: Next Generation Experience, for more information). We are a lot more than just theme parks. We have used every development platform imaginable over the years: dotNet, Java, C++, PHP. My main focus has been on Java development using Eclipse/Rational tools. See linkedIn for additional details.

My main passion as an architect is in finding ways to improve the software development process through automation. I have championed the adoption of Apache Maven at WDPR, but much work remains before we have full adoption and integration over all phases of the lifecycle. I am the main internal support person for the Rational Development tools (Application Developer and Modeler) and the Eclipse-based tools. I am a strong supporter and advocate for open source tools and frameworks.

 

I led the effort to adopt an MDA tool several years ago. After investigating a number of alternatives (two no longer exist: OptimalJ and ArcStyler), we settled on the open source tool AndroMDA because of the maven implementation plus the mature output capabilities using velocity templates: Java, Spring, Hibernate, EJB, EJB3/JPA, Struts, JSF, WebServices, jBPM/Drools, dotNet NSpring/NHibernate/ASP. Other tools we considered included Rational Software Architect and openArchitectureWare (now part of Eclipse XText). The Rational Tools were very difficult to use, seemed like a lot of work to get a very little bit of code, and required low-level coding to populate and use the templates. openArchitectureWare was OK but there was very little out-of-the-box outputs available unlike AndroMDA, and it was not easy to integrate into an overall development lifecycle. Since then, they have joined the Eclipse foundation and gained a lot of traction, and a number of standard outputs have been developed by the fornax group. I still believe we made the right decision then, and would probably make the same decision today, though.

 

AndroMDA did about 80% of what we needed, but I had to add some missing functionality: Support for UML2 2.x, and support for CXF JAX-WS webservices. They already had support for UML2 1.x and Axis webservices, so we could modify what was there. I offered to contribute the new functionality back to the AndroMDA project, and was eventually accepted as a committer on the project. I have since contributed a large number of fixes and improvements to the project, but a large number of things remain to be done. My main focus in writing this blog is to get more people to use AndroMDA.

 

Topics I plan to blog about in the future include:

- How to promote both internal and external adoption of the tools and processes.

- What are the most useful ways to create and structure useful documentation. This is probably our biggest impediment to adoption right now, besides visibility under a large organization.

- How to automate the software testing process through code generation

- Specific implementation patterns, focused mainly on Spring, CXF, and JPA

- Code quality best practices: metrics, adoption, and enforcement.

- Experiences (both good and bad) with Maven

- Experiences with various UML modeling tools such as Rational Software Architect, MagicDraw, and Eclipse-based tools such as Papyrus. Validations and interoperability.

- Experiences with various development tools (i.e. Eclipse) and frameworks (CXF, Hibernate, Spring) maven/eclipse plugins

 

Let me know what topics you want to hear about. As always, comments, dialog, and encouragement are most welcome.

Views: 1548

Add a Comment

You need to be a member of The Model Driven Software Network to add comments!

Join The Model Driven Software Network

Comment by Luis Molina on July 20, 2011 at 11:24
Hi Bob, I think can be interesting to see a small example, I mean a screencast, one of the problems with Andromda is the lack of information, reading the documentation its not clear what you get with andromda, can you make an screencast with a very simple sample ? or do you have links to screencasts ?
Comment by Vincent Hanniet on July 18, 2011 at 16:40

Thanks Bob.

From what I have experienced, you are using a low level MDA/MDD style. I am looking forward to heard of your ROI analysis, and I particularly appreciate your last sentence about complaining managers: it's a very hard hurdle and I'm curious how you jump it!

Comment by Bob Fields on July 11, 2011 at 20:36

Some of these I can answer pretty quickly, others (ROI, Tools) will require another blog post....

 

Pros of AndroMDA: maven-based, mature template implementations for various widely-used software frameworks (i.e. Spring/Hibernate/JAX-WS/EJB3), velocity templates for code implementation, support for both UML14 and UML2 (EMF), support for Rational Modeler (which we use internally). Mature implementation patterns was the main selling point.

Cons: Documentation/Tutorials need to be updated. Technology frameworks are a moving target (need lots of additional help to keep up to date), MDA itself is not widely practiced, AndroMDA does not fall under an umbrella organization (such as Eclipse, Apache, CodeHaus) so visibility to a wide audience is very limited.

 

We use it mainly for web service interface definition and implementation and Spring/Hibernate persistence implementation, whole iterative lifecycle development with a clear separation of generated and implementation code. There are many other features (i.e. dotNet, EJB3, JSF development) which we have not yet taken advantage of. It's best to pick a smaller subset of some known technology, to start with.

 

We have done many many models which are not used as MDA inputs, but my experience is that they are outdated as soon as development begins, they are not updated in any iterative development process. Our models are just class and sequence diagrams, though AndroMDA also supports State/Transition and Activity diagrams. Many developers, especially on the dotNet side, are resistant to doing any modeling at all.

 

Modeling tools comparison will be another blog post. We use Rational internally, AndroMDA uses MagicDraw internally and for samples. I have used Papyrus and the older Eclipse UMLTools a little bit (I need to add a tutorial section dealing specifically with Papyrus), they are Eclipse-based and look very similar to the Rational tools. In general I am a big advocate of the open source tools, to target the largest possible audience (including rogue developers learning on their own time), but you also wind up answering a lot of questions from inexperienced software developers unfamiliar with the underlying technologies, i.e. 'Why doesn't my maven work?'.

 

ROI will also be another blog post. In general it is very hard to measure, and we typically don't have time for full-blown side by side comparisons. My advice if you do such a comparison is to declare it successful if you save any time or money at all, compared to your current way of doing things, and the savings will come on the second or third time you go through the process. As with any new technology there can be a significant learning curve the first time. My additional advice is to make sure your house is in order as far as lifecycle maturity - full automation / continuous build, test-driven development, quality metrics/enforcement, process improvement over time, management support for Agile development processes. You should also be very familiar with how the underlying software frameworks work, it's never as easy as 'Your code goes here'. Have existing manual implementation patterns that you want to turn into an automated pattern to be applied to new projects, with an idea of how the values can be pulled from a model (including optional configuration values from profiles and other sources). And we still have managers who complain about a couple days lost (dealing with issues with the tools themselves, or outputs that don't exactly mirror what is wanted) after we just saved them 30+ days of development time, by the original estimate.

Comment by Vincent Hanniet on July 4, 2011 at 9:34

Hi Bob, sounds like to be a very intersting experience feedback. The main points I would like to hear about are:

1) Pros/cons about AndroMDA and how you use it: whole life-cycle (including maintenance)

2) What do you model? What not? Do you use any model that is not an input for AndroMDA?

3) Your experience with the modeling tools you mentioned, and among them with Eclipse Papyrus

4) How would you rate MDD ROI?

Comment by Rafael Chaves on July 3, 2011 at 8:12
Thanks for this introduction, Bob, looking forward to learning from your experiences.

Badge

Loading…

© 2017   Created by Mark Dalgarno.   Powered by

Badges  |  Report an Issue  |  Terms of Service