UML isn't really modelling... so what is it for?
It's interesting that Anonymous Coward brings up the "programming" vs. "software engineering" distinction.
A engineering model is a simplification of a system (aircraft, bridge, office block) that ignores unimportant aspects of the system so that the the engineer can easily and cheaply prove that the system as designed will have certain desired properties (fly, handle expected traffic volumes, not fall over in high winds).
UML cannot be used for creating engineering models. You can't prove interesting runtime characteristics from UML models.
So what is UML good for?
Maybe for visualising ideas on a whiteboard or paper, but it's a piss poor notation for software visualisation.
Maybe as a notation for software blueprints, but if you have enough detail in the diagram to mechanically produce code, you have code and you need all the testing tools as well as refactoring tools, to work with it.
What else...?