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").
Reverse engineering encloses the problematic, that 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 don't overlap. Usually, the user of such a functionality of an UML tool has to manually edit those automatically generated diagrams to attain some meaningfulness. It also often doesn't 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 also language features of some
programming languages, like
class- or
function templates of the programming language
C++, which are notoriously hard to convert automatically to UML diagrams in their full complexity.