Abstract
As defined in a seminal taxonomy by Chikofsky and Cross (Chikofsky and Cross II 1990) software reverse engineering is:
“the process of analyzing a subject system to (i) identify the systems components and their inter-relationships and (ii) create representations of the system in another form or at a higher level of abstraction.”
Such an analysis process pertains to artifacts that can be at an extremely low-level, e.g., binary files or system execution traces, or at intermediate-level, e.g., such as source code, patches, and defects, and the history and discussions associated to these artifacts.
Software reverse engineering is a mature research field with high practical relevance: often, the only way to get an understanding of a large and complex software system is through these lower-level artifacts, especially when higher-level artifacts are absent or outdated. In general, almost every time one has to evolve an existing software system - and especially when source code or binary is the only reliable source of documentation - reverse engineering becomes a key element of software evolution (Canfora and Di Penta 2007). Indeed, in such cases reverse engineering is highly recommended by the IEEE Std. 1219 (IEEE 1999) for software maintenance.
This special section features six papers on the topic of reverse engineering, using an array of techniques and data sources: some use very low-level artifacts, while some use higher-level ones and historical information.