The UML allows us to specify models in a precise, complete and unambiguous manner. In particular, the UML addresses the specification of all important decisions regarding analysis, design and implementation. Although UML is not a visual programming language, its models can be directly connected to a vast variety of programming languages. This enables a dual approach to software development: the developer has a choice as to the means of input. UML can be used directly, from which code can be generated; or on the other hand, that which is best expressed as text can be entered into the program as code. In an ideal world, the UML tool will be able to reverse-engineer any direct changes to code and the UML representations will be kept in sync with the code. However, without human intervention this is not always possible. There are certain elements of information that are lost when moving from models to code. Even then, there are certain aspects of programming language code do seem to preserve more of their semantics and therefore permits automatic reverse-engineering of code back to a subset of the UML models.