I. Introduction
Software comprehension is one of the most crucial tasks in software maintenance. It consumes a lot of time and effort, especially for large and complex systems. The documentation of software architecture or design is a highly useful artefact for system comprehension. However, it is common that this artefact is not kept up-to-date. Reverse engineering is one of the best options for recovering software architecture design information from the implementation code. Current reverse engineering methods suffer from several problems; one of them is that these methods reverse engineer the complete design, without focusing on what is more important, resulting into diagrams with too much information. Recent Computer Aided Software Engineering (CASE) tools offer to leave out several properties in a class diagram such as attributes and parameters. However, these tools do not identify which classes are more and which are less important, making it hard for the developer to focus or quickly understand the design at various levels of abstraction. A study by Fernandez-Saez et al.4] found that many subjects in their controlled experiment did not consider reverse engineered diagrams to be helpful in maintaining software, which might be caused by the information overload in these class diagrams.