GUPRO: Generic Understanding of Programs -- an Overview
---
paper_title: Graph Based Modeling and Implementation with EER/GRAL

paper_content:

This paper gives a cohesive approach to modeling and implementation with graphs. This approach uses extended entity relationship (EER) diagrams supplemented with the Z-like constraint language GRAL. Due to the foundation of EER/GRAL on Z a common formal basis exists. EER/GRAL descriptions give conceptual models which can be implemented in a seamless manner by efficient data structures using the GraLab graph library.
---
paper_title: Playing Detective: Reconstructing Software Architecture from Available Evidence

paper_content:

Because a system‘s software architecture strongly influences its quality attributes such as modifiability, performance, and security, it is important to analyze and reason about that architecture. However, architectural documentation frequently does not exist, and when it does, it is often “out of sync” with the implemented system. In addition, it is rare that software development begins with a clean slates systems are almost always constrained by existing legacy code. As a consequence, we need to be able to extract information from existing system implementations and utilize this information for architectural reasoning. This paper presents Dali, an open, lightweight workbench that aids an analyst in extracting, manipulating, and interpreting architectural information. By assisting in the reconstruction of architectures from extracted information, Dali helps an analyst redocument architectures, discover the relationship between “as-implemented” and “as-designed” architectures, analyze architectural quality attributes and plan for architectural change.
---
paper_title: The software bookshelf

paper_content:

Legacy software systems are typically complex, geriatric, and difficult to change, having evolved over decades and having passed through many developers. Nevertheless, these systems are mature, heavily used, and constitute massive corporate assets. Migrating such systems to modern platforms is a significant challenge due to the loss of information over time. As a result, we embarked on a research project to design and implement an environment to support software migration. In particular, we focused on migrating legacy PL/I source code to C++, with an initial phase of looking at redocumentation strategies. Recent technologies such as reverse engineering tools and World Wide Web standards now make it possible to build tools that greatly simplify the process of redocumenting a legacy software system. In this paper we introduce the concept of a software bookshelf as a means to capture, organize, and manage information about a legacy software system. We distinguish three roles directly involved in the construction, population, and use of such a bookshelf: the builder, the librarian, and the patron. From these perspectives, we describe requirements for the bookshelf, as well as a generic architecture and a prototype implementation. We also discuss various parsing and analysis tools that were developed and integrated to assist in the recovery of useful information about a legacy system. In addition, we illustrate how a software bookshelf is populated with the information of a given software project and how the bookshelf can be used in a program-understanding scenario. Reported results are based on a pilot project that developed a prototype bookshelf for a software system consisting of approximately 300K lines of code written in a PL/I dialect.
---
paper_title: GraX-an interchange format for reengineering tools

paper_content:

Current research in software reengineering offers a great amount of tools specialized on certain reengineering tasks. The definition of a powerful common interchange format is a key issue to provide interoperability between these tools. This paper discusses aspects of data interchange formats for exchanging reengineering related data. It proposes a graph-based format to exchange both application specific concepts and data by XML documents.
---
paper_title: Analyzing XFIG with GUPRO

paper_content:

GUPRO (Generic Unit for Program Understanding, http://www.gupro.de) provides an adaptable and extensible workbench for program understanding and software reengineering. GUPRO is strongly based on graph technology, i.e. source code is parsed into graph structures which are accessible by graph algorithms and a general graph query language GReQL. In GUPRO, these base technologies are combined into reengineering tools like source code browsers, cross referencers or slicers. This paper describes the application of GUPRO on the XFIG Bake-Off, a reverse engineering problem for a tool demonstration at the Working Conference on Reverse Engineering WCRE 2000.
---
paper_title: Graph Based Modeling and Implementation with EER/GRAL

paper_content:

This paper gives a cohesive approach to modeling and implementation with graphs. This approach uses extended entity relationship (EER) diagrams supplemented with the Z-like constraint language GRAL. Due to the foundation of EER/GRAL on Z a common formal basis exists. EER/GRAL descriptions give conceptual models which can be implemented in a seamless manner by efficient data structures using the GraLab graph library.
---
paper_title: Program comprehension in multi-language systems

paper_content:

This paper presents an approach to program comprehension in multi-language systems. Such systems are characterized by a high amount of source codes in various languages for programming, database definition and job control. Coping with those systems requires the references crossing the language boundaries to be analyzed. Using the EER/GRAL approach to graph-based conceptual modeling, models representing relevant aspects of single language are built and integrated into a common conceptual model. Since conceptual modeling focusses on specific problems, the integrated model presented here is especially tailored to multi-language aspects. Software systems are parsed and represented according to this conceptual model and queried by using a powerful graph query mechanism. This allows multi-language cross references to be easily retrieved. The multi-language conceptual model and the query facilities have been developed in cooperation with the maintenance programmers at an insurance company within the GUPRO project.
---
paper_title: Exchanging Graphs with GXL

paper_content:

GXL (Graph eXchange Language) is designed to be a standard data exchange format for graph-based tools. GXL is defined as an XML sublanguage, which offers support for exchanging instance graphs together with their appropriate schema information in a uniform format. Formally, GXL is based on typed, attributed, directed, ordered graphs which are extended by concepts to represent hypergraphs and hierarchical graphs. Using this general graph model, GXL offers a versatile support for exchanging nearly all kinds of graphs.
---
paper_title: Program comprehension in multi-language systems

paper_content:

This paper presents an approach to program comprehension in multi-language systems. Such systems are characterized by a high amount of source codes in various languages for programming, database definition and job control. Coping with those systems requires the references crossing the language boundaries to be analyzed. Using the EER/GRAL approach to graph-based conceptual modeling, models representing relevant aspects of single language are built and integrated into a common conceptual model. Since conceptual modeling focusses on specific problems, the integrated model presented here is especially tailored to multi-language aspects. Software systems are parsed and represented according to this conceptual model and queried by using a powerful graph query mechanism. This allows multi-language cross references to be easily retrieved. The multi-language conceptual model and the query facilities have been developed in cooperation with the maintenance programmers at an insurance company within the GUPRO project.
---
paper_title: Folding: an approach to enable program understanding of preprocessed languages

paper_content:

Since the early days of programming, preprocessors have been used to increase the expressiveness of programming languages. As a prominent example, the C Preprocessor cpp even allows low level configuration management through conditional compilation. But preprocessors significantly complicate the task of program understanding because "what the user sees is not what the compiler gets". There is a need for bridging the gap between preprocessor input and preprocessor output. The authors propose the use of folding for explicitly representing preprocessor replacements within a program understanding environment. The approach presented has been implemented as part of the GUPRO program understanding workbench. The user is enabled to individually choose the level of detail from the programmer's view to the compiler's view on the source code.
---
paper_title: Analyzing XFIG with GUPRO

paper_content:

GUPRO (Generic Unit for Program Understanding, http://www.gupro.de) provides an adaptable and extensible workbench for program understanding and software reengineering. GUPRO is strongly based on graph technology, i.e. source code is parsed into graph structures which are accessible by graph algorithms and a general graph query language GReQL. In GUPRO, these base technologies are combined into reengineering tools like source code browsers, cross referencers or slicers. This paper describes the application of GUPRO on the XFIG Bake-Off, a reverse engineering problem for a tool demonstration at the Working Conference on Reverse Engineering WCRE 2000.
---
paper_title: Exchanging Graphs with GXL

paper_content:

GXL (Graph eXchange Language) is designed to be a standard data exchange format for graph-based tools. GXL is defined as an XML sublanguage, which offers support for exchanging instance graphs together with their appropriate schema information in a uniform format. Formally, GXL is based on typed, attributed, directed, ordered graphs which are extended by concepts to represent hypergraphs and hierarchical graphs. Using this general graph model, GXL offers a versatile support for exchanging nearly all kinds of graphs.
---
paper_title: Querying as an enabling technology in software reengineering

paper_content:

It is argued that different kinds of reengineering technologies can be based on querying. Several reengineering technologies are presented as being integrated into a technically oriented reengineering taxonomy. The usefulness of querying is pointed out with respect to these reengineering technologies. To impose querying as a base technology in reengineering, examples are given with respect to the EER/GRAL approach to conceptual modeling and implementation. This approach is presented, together with GReQL as its query part. The different reengineering technologies are finally reviewed in the context of the GReQL query facility.
---

Title: GUPRO: Generic Understanding of Programs -- an Overview
Section 1: Introduction
Description 1: This section introduces the paper, emphasizing the importance of understanding and reworking legacy programs and the objectives and underlying technologies of GUPRO.

Section 2: Representing Source Code
Description 2: This section discusses issues with software documentation and the use of graphs to represent source code structures.

Section 3: Graphs
Description 3: This section elaborates on the types of graph models required for different program analysis techniques and introduces TGraphs.

Section 4: Graph-Classes
Description 4: This section describes the different TGraph structures necessary for various reverse engineering tasks and the EER/GRAL approach used in GUPRO for graph-based conceptual modeling.

Section 5: Extracting Facts from Source Code
Description 5: This section explains the importance of accurately populating the repository with data extracted from source code, detailing the multi-step parsing approach and handling of preprocessed languages.

Section 6: Abstracting From Source Code
Description 6: This section covers the querying mechanism used in GUPRO for reverse engineering, focusing on the GReQL Graph Repository Query Language and its application in program analysis.

Section 7: Conclusion
Description 7: This section provides a summary of the GUPRO system, its goals, achievements, and current work focusing on the integration with other reengineering tools.