Well, the answer depends on who you ask and what they are trying to model, but the following five models have proven to be essential to me on almost every project since I started using UML:
- Activity
- Use Case
- Class
- Component
- Deployment
Class models are obviously the most important ones since I can directly generate code from them. Others help me generate artifacts that I feel are essential for project documentation.
While I have used several modelling tools in the past, since I started using Sparx Systems Enterprise Architect (EA), I have not looked back. This is a great tool (for the most part) with a reasonable price tag. What I do wish this tool could do better is provide CodeSmith type support for code generation. EA does have reverse and forward code engineering support, of course, but forward engineering is not exactly very intuitive. It does however provide a COM API that one can tap into in order to extend the tool in more suitable ways.