What is your opinion about UML? [duplicate]
Is UML practical?
I heard many opinions about UML. Some people says that it is useless. Some people says that it is very helpful.
What was your experience on using UML? How does it effect on development process?
I find that I tend to use a subset of the complete UML standard.
Class diagrams: to show how components of a class are built and the members and functions they contain. Especially useful to show "isa" and "has a" relationships and even aggregation versus composition for the "has a" relationships which reflect on component lifetimes.
Sequence diagrams: to show how the classes interact with one another and show the flow of messages between the classes in the sequence of the message's use.
Activity diagrams: to show parallel processing.
If you want to use UML then I can't recommend Martin Fowler's book "UML Distilled" (sanitised Amazon link) highly enough. Seriously, forget all the other UML books! IMHO naturally
I think it is very helpful, if you use it in the right context.
In large projects,it's a very good idea to construct an overall plan for how the system is gonna look.
- Development process becomes clearer
- It helps you avoid design-mistakes, since you often think through the project more thorough
- It gives an good overview for people not directly involved in the development process
All of which helps you save time and money.
UML can be good or bad... too much of anything can be bad.
UML is a good tool to help you understand the concepts, as well as the domain in which you are working. It can become a very useful tool to communicate with the domain experts and the functional experts. It will also help you visualise your solution and greatly reduce the amount of headaches you will encounter as you build your solution.
Too much UML can also be a bad thing, the best way to go about it, is to model the parts of the solutions which are complicated to grasp or somewhat complex. Modeling the general solution will help give a bird’s eye view and a better understand as a whole of the solution. Then create a model of the areas where a deeper understanding is required. Small projects do not absolutely need to be modeled. Larger projects on the other hand may require modeling in order to be able to communicate the right information to others.
Very complete Models are often seen as bad because they are valid for a very short time. For models to be of value they need to be kept up to date with the code. In many cases this becomes an extra task no one wishes to fulfill. A good way to go about this is to use tools which synchronize the models to your code.
From the youngest age, we are extremely good at describing things by drawing them. Many of us loose this ability as we learn to read and write, but deep down we are often very visual. The fact is, when we say that when we are stuck on something, the best way to find a solution is to leave it alone for a while, or talk about your problem to someone else. The simple fact of explaining it to someone will often enough give you the answers because to explain something you need to understand it. Once something is understood and that you have taken in the subtleties, solutions seem simple. Modeling can be used to achieve the same result, by helping you sort out the ideas and concepts. Once it’s on paper it gets much simpler to explain.
Paper, Whiteboards and Napkins are often you best friend! They will help you remember and gain a deeper understanding of your ideas and concepts.
Let me elaborate. UML is supposed to communicate design ideas to others on the project. We used it seriously during a major development effort. Turned out the only one who could understand the diagrams and notes was the person who created them. I find that good screen mock ups and schema descriptions do a far better job than UML modeling in communicating design intent.
Personally I think UML should be used only in the case where it is generated from the code to make it possible for a programmer to get an overview of the actual system. Using it before coding is always a mistake, since then the code is not made the priority of the system.