Abstract:
The constant modification of software systems, the increasing size of the software
and the expensive development process are the factors that are responsible for the
increase in the amount of the effort that is being expended on the maintenance phase.
Mostly each maintenance cycle is performed to achieve a specific goal, for instance
improving the efficiency of a procedure, provision of new application features,
assembling existing components into the new software and so on. A programmer will
not be able to achieve any of the above goals unless he understands the particular
software at a sufficient level of detail that allows him to implement the desired change
in the system. The process of exploring the software and its associated artifacts with
the aim to gain knowledge about the inner workings of the system for carrying out the
necessary changes in the system is termed as program comprehension.
The process of building an understanding of the existing system is time consuming
and takes around 40% of the allocated time for a maintenance task. How a new
software developer proceeds to build an initial acquaintance with the original software,
differs a lot and depends on a number of factors like the experience of the individual,
the size and type of the software, the level of detail required to modify the system and
so on. Numerous efforts have been made to reduce the time consumed in the program
comprehension process by providing support to the programmer during this phase. The
key contribution of this thesis is a heuristic approach that can aid the programmer in
searching the key classes of software that are ideal nominees for the initial stages of
the program comprehension process.
Full automation of the process of developing an understanding of the program is not
possible since it involves human learning activity. Therefore, it has been suggested
that the specialized tools should help the programmer discover the software amicably.
The segments of the program that can be attractive from the comprehension viewpoint
must be brought into the notice of the programmer by the exploration tools. In our case
the program discovery tool should pinpoint the key classes of the object-oriented
system that are fundamental to its design.