SWAG >> Research Topics

Reverse Engineering

For an existing large system that lacks proper documentation, extracting and analyzing software architecture helps ensure successful maintenance and prolonged system lifecycle. Reverse engineering is the process of analyzing a subject software system to identify the system's components and their interrelationships, and to create representation of the system in another form or at a higher level of abstraction. Our research in reverse engineering is focused on developing iterative, tool-supported frameworks for semi-automatic architecture recovery and analysis.

Software Evolution

Extracting and documenting software architecture of a particular system is not enough given that large systems consistently change. This change is generally unpredictable, and it needs to be contained. Software evolution is change in essential properties (attributes) of a product family over time. Our research in software evolution is focused on systematic extraction, preservation, and application of the software evolution knowledge.

Fact Extraction Tools

Extraction of facts from software is usually the first step in any effort to reverse engineer software or study its evolution over time. For design-recovery tool interoperability to become a reality, we need common software to extract facts from source code in a common format, and according to a common schema. To that end, the SWAG group has developed or co-developed several tools that extract facts from C or C++ code by hooking into various parts of the build process. These tools print out the facts the compiler finds out about software instead of (or in addition to) performing the work that a compiler or linker normally does. The output format is based on that of Bell Canada's Datrix project, and is usually stored in TA or RSF format, which is readily understood by many other reverse engineering tools.

All our extraction tools are available as free software (some of them in fact depend on GCC for semantic analysis).