Due to the need to reengineer and migrating aging software and legacy systems, reverse engineering has started to receive some attention. It has now been established as an area in software engineering to understand the software structure, to recover or extract design and features from programs mainly from source code. The inference of design and feature from codes has close similarity with data mining that extracts and infers information from data. In view of their similarity, reverse engineering from program codes can be called as program mining. Traditionally, the latter has been mainly based on invariant properties and heuristics rules. Recently, empirical properties have been introduced to augment the existing methods. This article summarizes some of the work in this area.
In this section, we first describe our work on empirical-based recovery and maintenance of input error correction features in information system (Ngo & Tan, 2006).We then discuss the use of empirical properties to infer the infeasibility of a program path (Ngo & Tan, 2007). This work on infeasible path detection is useful for all software engineering tasks which rely on static analysis especially testing and coverage analysis. Finally, we present an approach to extract all the possible database interactions from source code (Ngo, Tan, & Trinh, 2006).