A significantly large fraction of time during developmentand maintenance is spent on understanding unfamiliarparts of software systems. The existence of software documentation,such as software architecture design documentation cansignificantly reduce the amount of time spent on this task.However in reality, few software systems have an up-to-date documentationbecause project time pressure makes it impractical todo so. During comprehension therefore, software engineers oftentry to recover these lost design documentation through reverseengineering. However, current reverse engineered diagrams showonly one perspective of a software system; the components thatexist in the system and the relationship between them. Often,software engineers require additional perspectives in order tounderstand how a system works. In this research, we aim tosolve this problem by providing one such perspective on topof reverse engineered diagrams. We provide a framework andtool for automatically identifying common system concerns thatare found in modern software systems, and then map themback to the software components in the system that implementthem. An example of such system concerns are user interfaces,persistence, security etc. A regular question that comes upduring comprehension is which software components in a systemimplement these concerns. We propose a taxonomy of thesecommon concerns, and a framework and tool for automaticallyidentifying and labelling system components that implementthem. Our framework is based one lightweight static analysis. Itcalculates three metrics that are then used during identification.An evaluation of the Concern Detector tool (and in essence theframework) on 4 software systems showed that, authors of thesystems agreed 65.5% - 76.8% with the tool’s classification ofcomponents in their systems. This indicates that, the tool isuseful for describing the roles of these components in terms ofimplementing these concerns. The current implementation is forthe java programming language; however the approach is designedto be generalizable for most object oriented programminglanguages.
展开▼