2007-04-26

UML in Python projects

The UML (Unified Modeling Language) is a notation language to visualize software systems, originating from different languages invented by the three amigos et al and after some unification process later standardized by the OMG and since 2000 UML is even an ISO standard.

Long ago, during my time in individual software consultancy we used UML diagrams to handle domain-inherent complexity of some applications since UML is doing a good job in abstracting all the architecture and implementation details and visualize a target software in a notation that is not too difficult to understand even for domain experts who are unfamiliar with software development. The first diagrams I had to work with were implementation diagrams (those with the components) and the use-case diagrams, often describing them across components with detailed and structured use-case descriptions attached. As any other instrument which reduces complexity by abstraction UML itself adds some own complexity to a project. So, it is not surprising that UML is usually applied more in large and complex than in rather small and simple projects.

As mentioned we used UML to design the target software, resulting in plenty of diagrams and some boxes full of paper which a small army of developers has used to do the implementation. Of course there was some difference between what has been specified and what has been implemented, despite of the big efforts to keep specification and implementation synchronized. Not to mention the amount of bugs which likely find their way into growing code-bases. Of course many of the countless UML CASE tools avialable now are able to spit out some code fragments, e.g. in Python, from the UML model specified. I prefer to speak of passive generators and flat code-generations in these cases. You can consider these generation features often in the same dimension as practical as code completion or code templates. They can be handy by reducing the amount of common code fragments you need to type, e.g. the method signatures. But that's it.

However, these projects have been successful in the meaning that the resulting apps were impressing in fulfilling customer requirements, but I had the feeling that the high costs and the long time span it takes to create such ambitious individual software makes it difficult to be realized for any organizations that are not large corporations. Well, I haven't been alone with this view. Some years earlier OMG started to standardize a model-driven software development, the Model-Driven Architecture (MDA) and as far as I remember around 2002 Markus Hillebrand brought this emerging development to my attention. Different from me, this friend of mine is a real software-engineer and blessed with a rare coding talent.

Mean-while MDA is a widely spread standard in model-driven software projects. It can be considered as the missing stone in OMG's vision how to gain more benefit from UML usage. MDA describes how UML can be utilized to transform one model to another model, finally even to the implementation of such models, speak: generation of code, documentation, deployment artifacts and so on. There are plenty of MDA tools available, some of them are Free Software, and most of them are focused on the very complex target languages and platforms (guess, why).

What I have missed during the recent years is a Python tool that combines these standards with a Python-based architecture. Yes, I'm confident that Python can be used for complex software architectures (speak: n-tier architectures, distributed objects, business logic encapsulation etc.), PEAK and GNUenterprise proofed that this is technically possible. Maybe there is one project I have just overseen.

As far as I understand, the majority of Python users usually choose Python for smaller projects and, if I am not mistaken, in the cases where the task requires more abstraction and efficiency they often choose one of the pythonic frameworks. Nevertheless, I am pretty sure that there are Python users which use UML models at least for requirement engineering or the design and specification of a target software.

So, if you are one of these Pythonists I would like to learn which UML CASE tool(s) you use in Python projects, for which tasks you use them (spec, code-generation,...?) and which diagram types you use. In any case I'm curious to learn your opinion on UML in Python projects.

No comments: