2.1 Bug History Analysis
Bug tracking systems are used by developers, quality as surance people, testers, and end users to provide feedback on software systems. They are also used in software evolution research to perform retrospective system analysis [3,8]. In this context bugs are linked to software artifacts (e.g., files, classes) using different heuristics, with the aim of detecting the most problematic parts of the system, i.e., the ones affected by many bugs. Some approaches model bugs as mere numbers (e.g., file x is affected by n bugs, file y by m), while others also model bug properties such as the description, the severity, the person assigned to fix it, etc. However, bugs are often considered as an unwanted “side dish” of the evolution phenomenon, and they are modeled as “static” entities affecting the source code. We have proposed an approach in which we consider bugs as first-level entities which can change and evolve over time. In particular we have focused on the bug life cycle, i.e., the history of a bug and the various states it traverses. Our hypothesis is that bug histories represent a valuable source of information that can lead to interesting insights about a system, that would be hard or impossible to obtain by modeling the bugs as static entities. Based on the information we recovered from Bugzilla (or Issuezilla), we have introduced two visualization techniques aimed at understanding bugs at two different levels of granularity:
1. System Radiography. This visualization renders bug information at the system level and provides indications about which parts of the system are affected by what kind of bugs at which point in time. It is a high-level indicator of the system health and serves as a basis for reverse engineering activities.
2. Bug Watch. This visualization provides information about a specific bug and is helpful to understand the various phases that it traversed. The view supports the characterization of bugs and the identification of the most critical ones, based on their histories. The proposed approach provided two main contributions: (1) introducing the concept of a bug’s life, i.e., bugs are con sidered as evolving entities which change over time. Study ing the history of bugs permits an accurate characterization of them. (2) Introducing a new criterion for bug criticality: besides the severity and priority we have also considered the life cycle. The underlying assumption is that bugs reopened several times are more critical.