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