Wednesday, February 21, 2007

When will 'Software Modeling' catch big time attention?

From last one year, I'm working on a modeling tool featuring support for UML2 and BPMN1.0 specifications. Well, this tool is not envisioned just like "yet another modeling tool" allowing you to draw basic elements (and strange visual manipulations) and generate structural code and documentation (which is not impressively useful!).

It's commonly known that modeling is good for visualizing and documenting a system. Well, I've heavily used UML for documenting and I found it useful for communicating software blueprints to those who don't understand the technology well.

Contemporary tools can do better apart from visualizing, Typically a modeling tool doesn't sponsor full blown generation of an application for target platform, say J2EE; Not that it's insane attempt but it's simply too much of work. They generate structural code (skeletal) from model (say, classes from Class Diagrams) ; this is commonly known as forward engineering. Tools also support round trip engineering for regenerating the code from model while maintaining the manual customizations.

How redundant, Why to model and code at the same time and why maintain both?

The tool I'm working on is supposed to generate "typical application" end-to-end (heh, really?!). Also, Tool has a special language(sort of BASIC dialect) , that can be used to write business logic for the application which might, otherwise, result in tedious micro modeling (boy, you will require incredible mouse capabilities for that level of modeling). This language is customized implementation of OMG(tm) Action Semantics Language (ASL) and Object Constraint Language (OCL); The logic in this language is translated in to platform specific code during transformation and code generation.

Technically, this is enough for generating entire application. Recently, tool vendors are trying to avoid the ASL approach altogether and use supplemental UML models (like activity and state machines) to specify behavioral aspect of system; but this approach has usability problems, although it is an interesting technical challenge (umm... given enough beer and I'll even admit that I wrote a state machine compiler for money to generate behavioral code..).

How bad again, Why I want to learn UML, a dumb ASL language and still struggle with generated code to customize it?

I agree that the tool can generate "student projects" like applications, but still keeps me skeptical about *serious* applications which involve complexities of security, performance and integration. It's not impossible to do that either, however, supporting multiple security/persistence/application frameworks/third party interfaces for multiple platforms, in its entirety, would be a non-trivially huge attempt ever made.

Lately, I'm observing generative methods in regular development; these days, most applications are combination of generated + hand written code(in some reasonable combination), people manage both code as well as model. Generative Technologies are gaining acceptance gradually, especially because support from Eclipse projects like EMF, GEF, GMF and other Modeling subprojects apart from rising community interest, hundreds of modeling tools are available and major players are investing in this technologies.

We have witnessed the transitions in technologies; Transitions from Hardware specific Assembly code to C code, C code to C++/Java/RoR code.., these transisions are fine and gradual, but with modeling being a paradigm shift in the way we see software development (its not just about learning new language, right?), modeling imposes the steep learning curve, and understanding the mammoth specifications. It's always difficult to adopt a different way of doing things.

With the current state of tooling and specifications, it is difficult to offer "Generate everything, Write Nothing" jargon feature, and its pain in a**e to maintain both model and code in sync (tools are improving though). I'm sure of one thing, generative development is going to be the next generation of software development, not sure how many more years...

6 comments:

Rafael Chaves said...

Hi Nirav,

I am working on a tool like that myself, and I really believe in the translational approach's promise (complete models, leading to full code generation).

Initially, I thought you were going to promote the approach, but in the end it looks more like you are bitter for having to work on the tool.

Care to share more about the tool? Is it being sold yet? Or is it open source?

Thanks!

Nirav Thaker said...

Rafael,

Well, I'm not demoting the approach, and I'm really happy to work on the tool, But we require lots of resources to achieve the vision.

The tool I'm working on is still under development (beta), we were about to make community release and wanted to open source it, but...

It's based on GEF, EMF and UML2; deployed as RCP as well as plug-ins, Well It supports MDA style development life cycle, i.e. PIM to PSM to PSC (Platform Specific Code).

My dissatisfaction is with the specifications which are difficult to comply fully.

Would like to know about the tools you are developing..

Rafael Chaves said...

Nirav, you basically described the tool I am working on (UML + textual ASL), although I believe I might be behind you guys. I am employing the same technologies (UML2 and OCL, GEF for visualization), and have the same complaints about how hard it is to comply with the specs (for instance, ExpansionRegion is too generic to be useful, lack of alignment between OCL and UML).
The only thing that I have that you haven't mentioned is support for running models (maybe you do have or plan to have too).

I too considered the idea of making the basic platform open source, as extensibility (additional front end languages, profiles and templates) is inherent to this type of tool.

If you want to talk in private, feel free to contact me by e-mail (rafael dot chaves at gmail). Maybe there is an opportunity for collaboration.

Nirav Thaker said...

Rafael,

Well, I've done some research on executable uml models few months back...

My next post would be on executable models(not just UML models), I went through some model compilers(bridge point etc.) and UML VMs and it's quite interesting topics I would want to explore in near future.

Would surely be in communication..

Sriram Narayanan said...

Interesting post (as are the others :)

MDA is much maligned, especially by Agile advocates. I've used the Visual Modelling that IBM's Visual Age for Java offered, and I fell in love with it. It had it's own means of displaying sequence diagrams, but one could essentially develop complete applications with it. These were not just student project apps, btw.

What I say below is purely as a programmer, and as a long time Visual Modelling tool user.

I agree that supporting various popular UML notations, and having to implement the spec for MDA compliance would indeed be intensive.

As an end user who is comfortab le with expressing intent via visually modelled interactions, I'd perhaps stretch Visual Modelling tools to their limits very soon and very easily.

I believe that the various MDA specs cover situations that companies such as IBM have had to face and deal with. Also, these are important for inter-operability too.

Implementing the spec would doubtless be tedious. However, getting it right would also require to stand back every once in a while, look at the big picture, see whether we're getting there, and then diving back into the implementation.

So, will Software Modelling catch on ? Not until there's some really good open source / freely downloadable tool that lets the average developer compose his code visually. Once that is in place, Visual Modelling will definitely take off.

However, it's adoption would be limited to people who can focus on the big picture and not just on code for the sake of typing out code.

Nirav Thaker said...

Thanks for avid response.
I've also used WASAD's modeling facilities and that's really cool. Implementing spec. is always a pain, fun at times though. I'm not sure an open source tool will change the way we develop, atleast none attempted and succeeded so far; but ofcourse, it's up to people, people like us...