A healthy software organization produces all sorts of artifacts in addition to raw executable code. These artifacts include (but are not limited to)
Requirements
Architecture
Design
Source code
Project plans
Tests
Prototypes
Releases
Depending on the development culture, some of these artifacts are treated more or less formally than others. Such artifacts are not only the deliverables of a project, they are also critical in controlling, measuring, and communicating about a system during
its development and after its deployment.
The UML addresses the documentation of a system‘s architecture and all of its details. The UML also provides a language for expressing requiremens and for tests. Finally, the UML provides a language for modeling the activities of project planning and release
management.