Last updated on 2012-12-10
I’m teaching this semester a course on software analysis and design, with special emphasis on software system modeling. Obviously this means that I am teaching UML, because it is the standard in the industry… But the more I’m teaching the more I’m learning, and the more I’m learning the more I’m despising UML.
My first lecture is on Use Cases, a subject that haven’t touched for quite a while. I remembered learning use cases some 12 years ago when I was an undergraduate and it was fairly simple: you have a stick man, you have an ellipse which is the use case and you have lines that connect between them. Just a very simple, pictographic way to show that we roughly understood what the system must do and who interacts with them… But suddenly use-cases can have generalization, actors can be generalized, use cases can be included one in another and they can also extend one another. This is all OK but it just kills away the only use I ever saw of a use case: to be a simple explanation of the basic functionality of the system! I mean, if you now have to understand what is inheritance in use cases to be able to understand one, this is greatly beyond simple. My students are fairly intelligent, although more on the analysis side that on the programming side, and they had a difficult time understanding the differences between
extend means (“What do you mean the extending use case is optional?, you just drew it on the diagram!”). And my students are not alone, check this example (scroll to the end, titled “Missing Use Case Relationship”).
It still astonishes me that there are guys out there who think that UML is the best thing that happened to software development after coffee. Worse yet, they think it is somehow useful… But maybe I’m the one who’s missing something. We will see.