uml tool see also list of unified modeling language tools a uml tool or uml modeling tool is a software application that supports some or all of the notation and semantics associated with the unified modeling language uml which is the industry standard general purpose modeling language for software engineering uml tool is used broadly here to include application programs which are not exclusively focused on uml but which support some functions of the unified modeling language either as an addon as a component or as a part of their overall functionality kinds of functionality uml tools support the following kinds of functionality diagramming diagramming in this context means creating and editing uml diagrams that is diagrams that follow the graphical notation of the unified modeling language the use of uml diagrams as a means to draw diagrams of mostly objectoriented software is generally agreed upon by software developers when developers draw diagrams of objectoriented software they usually follow the uml notation on the other hand it is often debated whether those diagrams are needed at all during what stages of the software development process they should be used and how if at all they should be kept up to date the primacy of software code often leads to the diagrams being deprecated roundtrip engineering roundtrip engineering refers to the ability of a uml tool to perform code generation from models and model generation from code aka reverse engineering while keeping both the model and the code semantically consistent with each other code generation and reverse engineering are explained in more detail below code generation code generation in this context means that the user creates uml diagrams which have some connected model data and the uml tool derives from the diagrams part or all of the source code for the software system in some tools the user can provide a skeleton of the program source code in the form of a source code template where predefined tokens are then replaced with program source code parts during the code generation process there is some debate among software developers about how useful code generation as such is it certainly depends on the specific problem domain and how far code generation should be applied there are well known areas where code generation is an established practice not limited to the field of uml the idea of completely leaving the code level and starting to do programming directly from the uml diagram level ie design level is quite debated among developers that is the vision for modeldriven architecture mda this idea is not in such widespread use compared to other software development tools like compilers or software configuration management systems an often cited criticism is that the uml diagrams lack the detail that is needed to contain the same information as is covered with the program source jack w reeves states that the final embodiment of the design lies in the source code his often quoted statement that the code is the design has been misinterpreted to mean that there is no need for intermediate and highlevel softwaredesign artifacts such as uml diagrams or softwarerequirements documents reverse engineering reverse engineering in this context means that the uml tool reads program source code as input and derives model data and corresponding graphical uml diagrams from it as opposed to the somewhat broader meaning described in the article reverse engineering some of the challenges of reverse engineering are the source code often has much more detailed information than one would want to see in design diagrams this problem is addressed by software architecture reconstruction diagram data is normally not contained with the program source such that the uml tool at least in the initial step has to create some random layout of the graphical symbols of the uml notation or use some automatic layout algorithm to place the symbols in a way that the user can understand the diagram for example the symbols should be placed at such locations on the drawing pane that they dont overlap usually the user of such a functionality of a uml tool has to manually edit those automatically generated diagrams to attain some meaningfulness it also often doesnt make sense to draw diagrams of the whole program source as that represents just too much detail to be of interest at the level of the uml diagrams there are language features of some programming languages like class or function templates of the c programming language which are notoriously hard to convert automatically to uml diagrams in their full complexity model and diagram interchange xml metadata interchange xmi is the format for uml model interchange xmi does not support uml diagram interchange which allows the importation of uml diagrams from one model to another model transformation a key concept associated with the modeldriven architecture initiative is the capacity to transform a model into another model for example one might want to transform a platformindependent domain model into a java platformspecific model for implementation it is also possible to refactor uml models to produce more concise and wellformed uml models it is possible to generate uml models from other modeling notations such as bpmn which is itself a uml profile the standard that supports this is called qvt for queriesviewstransformations one example of an opensource qvtsolution is the atl language built by inria software portal list of unified modeling language tools metamodeling modeldriven engineering qvt specification and description language sdl wikimedia commons has media related to uml tools uml tools at curlie uml tools directory uml examples for each type 