According to Wikipedia, one definition of the UML is:
“In the field of software engineering, the Unified Modeling Language (UML) is a standardized specification language for object modeling. UML is a general-purpose modeling language that includes a graphical notation used to create an abstract model of a system, referred to as a UML model.”
Wikipedia (at least the German version) names a criticism on the UML, namely that UML does not contain the details that are necessary to cover source code information.
This seems sort of logical as a general and at the same time unified language with quite low complexity (compared to source code, e.g.) cannot cover all necessary aspects of a complex system (like source code) formally.
A formal notation is essential, in my eyes, to give UML some sense. This is because UML is used for modeling, and to generate something from the model. Generators normaly work only on formal constructs as input for obvious reasons (natural language processing is still not possible in a satisfying way). Sometimes UML is used to document the desired behaviour or architecture of a system or parts of it.
I want to give a personal review of the UML. My review is based on numerous software projects in the commercial sector. Technologies that were involved are SAP, Java (without connection to SAP) and Borland Delphi (also no connection to SAP). The projects were of different types, i.e. mostly bigger ones, sometimes middle size, very seldom small ones.
Often the business side was involved, sometimes only technical staff built the team. Sometimes the requirements of the software system to build were quite clear, sometimes they were vague. The business processed to be implemented covered a huge variety over all projects, including completely different industries.
Additionally, my former activities include publishing academic papers in the field of software development. There I used UML diagrams sometimes. To be honest, I used it because I know no better de-facto standard and others seem to expect one to use UML.
I understand that there are other projects that are different from what I experienced and that this may have an impact on the usefulness of UML regarding the specific project.
My observations from the mentioned projects and publications are:
- UML is not used very often to generate code in commercial software projects, and if, then restricted to initial code generation (which does not help a lot when requirements change – which was almost always the case in my projects).
- Business users (competent department) are often not able to use UML.
- Business users often do not understand UML diagrams.
- Developers often do not use UML diagrams and if, only without generating something from them.
- Creating UML class diagrams directly (e.g. in an UML tool) seems to have no advantage compared to creating an empty class source code from which a class diagram can be generated at a fingertip.
- Custom stereotypes are informal and express the need for expressing something that is not expressable by UML standard means.
- Sequence diagrams make sense sometimes. However, if someone who does not know the UML is asked to visualize a sequence of communcation steps between processes, this person would be able to do so easily without the UML.
- In academics, UML is used quite often, including generation of code.
- Even for developers, UML diagrams are not always easy to understand. I could never manage to remember all the types of arrows and connections that can be used in class diagrams.
- There never was a use case were UML itself really did make sense from my observation, except state diagrams (e.g. petri nets) or sequence diagrams. Even for documentation UML was used quite rarely, although I can imagine that state or sequence diagrams may be helpful for documentation.
Class diagrams seem the most popular UML diagrams to be. Sometimes when a class diagram is given it seems sufficient to display dependencies between classes. However, this is of very limited usage, compared to looking at the source code directly.
Besides, the terms “class” and “object” should normally not be in the scope of business users. They should not need to know what a Java class is, e.g.
On the other side I know no concept that is really suited for “unified/error-less” communication of requirements between business users and the development department.
When it comes to working with product-lines or domain-specific software systems, I can imagine that using UML or a modified version of it may be useful (e.g. automotive). In this field I don’t have enough experience to state something competent. But I like to point out that the Automotive sector or the development of embedded systems is not what I would call general-purpose commercial software development. There seems to be a big difference.
So, my questions to you are:
A) Can you name a use case where the UML maked sense to you? If yes, what type of environment is it (embedded, product line…)?
B) Do you create UML diagrams yourself? if yes in which role (developer, business person…)? Which diagram types do you use most? Which don’t you use at all?
C) What do you think about the UML personally? Is UML sufficient from your oppinion? Is there an alternative to UML?
D) Do you know about companies using Aris for generating productive code (or something else in production) in SAP? There are a lot of references on the IDS Scheer site, but I don’t trust them (some insiders told me their opinion about these references).
E) Do you agree with my 10 observations above?
My dissertation covering an alternative to UML can be found on my website,
Thanx a lot for your valuable contribution and for sharing your thoughts.