Results 1 - 10
of
13
Case Study of Feature Location Using Dependence Graph
- In Proceedings of the 8th International Workshop on Program Comprehension
, 2000
"... Software change requests are often formulated as requests to modify or to add a specific feature or concept. To implement these changes, the features or concepts must be located in the code. In this paper, we describe the scenarios of the feature and concept location. The scenarios utilize a compute ..."
Abstract
-
Cited by 71 (11 self)
- Add to MetaCart
Software change requests are often formulated as requests to modify or to add a specific feature or concept. To implement these changes, the features or concepts must be located in the code. In this paper, we describe the scenarios of the feature and concept location. The scenarios utilize a computer-assisted search of software dependence graph. Scenarios are demonstrated by a case study of NCSA Mosaic source code. 1. Introduction In software maintenance and evolution, change requirements are often formulated as requests to modify or to add specific program concepts or features [2, 26]. An example of such a request is "Add a new external viewer to Mosaic web browser". Before any actual change can be made to the system, software programmers must locate the implementation of the concepts ("external viewer") in the source code. Concept location is a process that maps domain concepts to the software components. The input is the maintenance request, expressed in natural language and usin...
Efficient Construction of Program Dependence Graphs
- ACM International Symposium on Software Testing and Analysis
, 1993
"... We present a new technique for constructing a program dependence graph that contains a program’s control flow, along with the usual control and data dependence information. Our algorithm constructs a program dependence graph while the program is be-ing parsed. For programs containing only structured ..."
Abstract
-
Cited by 28 (8 self)
- Add to MetaCart
We present a new technique for constructing a program dependence graph that contains a program’s control flow, along with the usual control and data dependence information. Our algorithm constructs a program dependence graph while the program is be-ing parsed. For programs containing only structured transfers of control, our algorithm does not require in-formation provided by the control flow graph or post dominator tree and therefore obviates the construction of these auxiliary graphs. For programs cent aining explicit transfers of control, our algorithm adjusts the partial control dependence subgraph, constructed dur-ing the parse, to incorporate exact control dependence information. There are several advantages to our ap-proach. For many programs, our algorithm may result in substantial savings in time and memory since our construction of the program dependence graph does not require the auxiliary graph. Furthermore, since we incorporate control and data flow as well as ex-act control dependence information into the program dependence graph, our graph has a wide range of ap-plicability. We have implemented our algorithm by incorporating it into the Free Software Foundation’s GNU C compiler; currently we are performing experi-ments that compare our technique with the traditional approach.
Static Analysis for a Software Transformation Tool
, 1997
"... Software is difficult and costly to modify correctly. Automating tiresome mechanical tasks such as program restructuring is one approach to reducing the burden of software maintenance. Several restructuring tools have been proposed and prototyped, all centered on the concept of meaning-preserving tr ..."
Abstract
-
Cited by 14 (2 self)
- Add to MetaCart
Software is difficult and costly to modify correctly. Automating tiresome mechanical tasks such as program restructuring is one approach to reducing the burden of software maintenance. Several restructuring tools have been proposed and prototyped, all centered on the concept of meaning-preserving transformations similar in spirit to compiler optimizations. Like optimizing compilers, these tools rely on static analysis to reason about the correctness of program changes. However, the cost (in both time and space) of static analysis serves as the limiting factor for transformation tools, resulting in slow, complex tool designs that scale poorly for use on large systems. To reduce these costs, this thesis proposes efficient, demand-driven flow analysis techniques as an alternate to traditional, compiler-based methods. These techniques operate directly on the abstract syntax tree (AST), the data structure most appropriate for use in a source-to-source tool architecture. By eliminating the need for other program representations such as the standard control flow graph (CFG) or program dependence graph (PDG), this approach greatly simplifies program modification. A key contribution of this work is the idea of virtual control flow, a method for computing the control successors or predecessors of individual AST expressions on demand. This method handles all types of structured and unstructured jumps found in an imperative programming language such as C. Virtual control flow couples well with demand-driven data flow analysis to minimize the cost of determining semantic information. To conservatively estimate data flow relationships, the effects of aliasing between memory locations can be inexpensively approximated using flow-insensitive points-to analysis based on type inference. These techniques were implemented in a prototype tool called Cstructure to support a simple restructuring transformation for reordering program statements. To check that this transformation does not change the program's behavior requires syntax, control flow and data dependence analysis. Experimental results on three programs ranging in size from 72,000 to 213,000 lines of code demonstrate the performance advantages of such aggressive demand-driven approaches. For the largest program, gcc, check times for the average statement were 50 milliseconds on a desktop workstation.
Program Slicing: An Application of Object-oriented Program Dependency Graphs
, 1994
"... A considerable amount of work has been done in the area of representing programs with single and multiple procedure bodies. A complete study of the latter requires both intra and interprocedural analysis. In the analysis of an object-oriented program, it is all the more important due to the existenc ..."
Abstract
-
Cited by 12 (0 self)
- Add to MetaCart
A considerable amount of work has been done in the area of representing programs with single and multiple procedure bodies. A complete study of the latter requires both intra and interprocedural analysis. In the analysis of an object-oriented program, it is all the more important due to the existence of numerous classes and methods within the classes. Object-oriented design is based on the philosophy of data encapsulation and controlled access to the encapsulated data. There are different representations available for object-oriented design. These representations do not give a complete picture of the programs thus restricting code analysis and preventing many testing techniques from using them. This paper discusses the issues involved in representing object-oriented programs. A representation based on the Program Dependency Graphs is designed. Different concepts of the paradigm are represented, including polymorphism, dynamic binding and the class inheritance hierarchy. Message exchang...
An Extensible Program Representation for Object-Oriented Software
- ACM SIGPLAN Notices
, 1994
"... An extensible representation for object-oriented programs is presented. It is based on the concept of a program dependency graph and elaborated to include both control flow and data flow information. The representation takes advantage of the basic incremental philosophy of the object-oriented approa ..."
Abstract
-
Cited by 11 (0 self)
- Add to MetaCart
An extensible representation for object-oriented programs is presented. It is based on the concept of a program dependency graph and elaborated to include both control flow and data flow information. The representation takes advantage of the basic incremental philosophy of the object-oriented approach to develop a more compact representation that is useful with practical programs. The basic approach reported here provides a static view of an object-oriented program. The approach can be expanded to provide dynamic information for tools such as interactive debuggers and other runtime tools. The outline of this extension is also presented. 1 Introduction A number of software support tools and program analysis tools have been constructed using a program dependency graph (PDG) as the underlying representation for the program being analyzed. In this work we adapt the basic concept of a PDG to a representation for object-oriented software. This paper presents several contributions. Most impo...
Interprocedural Analyses of Fortran Programs
- Parallel Computing
, 1997
"... Interprocedural analyses (IPA) are becoming more and more common in commercial compilers. But research on the analysis of Fortran programs is still going on, as a number of problems are not yet satisfactorily solved and others are emerging with new language dialects. This paper presents a survey ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
Interprocedural analyses (IPA) are becoming more and more common in commercial compilers. But research on the analysis of Fortran programs is still going on, as a number of problems are not yet satisfactorily solved and others are emerging with new language dialects. This paper presents a survey of the main interprocedural analysis techniques, with an emphasis on the suitability of the analysis framework for the characteristics of the original semantic problem. Our experience with the pips interprocedural compiler workbench is then described. pips includes a make-like mechanism, PipsMake, which takes care of the interleavings between top-down and bottom-up analyses and allows a quick prototyping of new interprocedural analyses. Intensive summarization is used to reduce storage requirements and achieve reasonable analysis times when dealing with real-life applications. The speed/accuracy tradeoffs made for pips are discussed in the light of other interprocedural tools. Key ...
Program Comprehension in a Reuse Reengineering Environment
- Durham University, UK
, 1995
"... Program comprehension is the most expensive activity of software maintenance. The different phases of a reuse reengineering process involves comprehension activities for understanding the structure of existing systems, the functionality implemented by a reuse-candidate module and the reengineering e ..."
Abstract
-
Cited by 4 (1 self)
- Add to MetaCart
Program comprehension is the most expensive activity of software maintenance. The different phases of a reuse reengineering process involves comprehension activities for understanding the structure of existing systems, the functionality implemented by a reuse-candidate module and the reengineering effort. We present an integrated environment implemented in Prolog for reuse reengineering existing C systems. Different tools developed in the RE 2 project are integrated in the environment through sharing a fine-grained representation for C program, the Combined C Graph (CCG). Different views of a system can be abstracted and visualised from the data-base of Prolog facts implementing its CCG representation. Software metric tools evaluate the reengineering costs, while reengineering operations are expressed as transformation rules and a symbolic executor allows the production of the module's specification. Keywords: Program Comprehension, Reverse Engineering, Reengineering, Reuse, Program...
Issues in Visualization for the Comprehension of Parallel Programs
- In Proceedings, Workshop on Program Comprehension
, 1994
"... Parallel and distributed computers are becoming more widely used. Thus, the comprehension of parallel programs is increasingly important. Understanding parallel programs is more challenging than understanding serial programs because of the issues of concurrency, scale, communications, shared resourc ..."
Abstract
-
Cited by 3 (0 self)
- Add to MetaCart
Parallel and distributed computers are becoming more widely used. Thus, the comprehension of parallel programs is increasingly important. Understanding parallel programs is more challenging than understanding serial programs because of the issues of concurrency, scale, communications, shared resources, and shared state. In this article, we argue that the use of visualizations and animations of programs can be an invaluable asset to program comprehension. We present example problems and visualizations, showing how graphical displays can assist program understanding. We also describe the Animation Choreographer, a tool that helps programmers better comprehend the temporal characteristics of their programs. 1 Introduction The comprehension of a program or its design is an important component of the coding, debugging, maintaining, testing, and reuse of software. Maintenance, in particular, is an expensive and difficult process. This difficulty is exacerbated by the fact that the maintain...
An Overview of Structural and Specification Driven Candidature Criteria for Reuse Reengineering Processes
, 1995
"... One of the most promising ways to make the population of a repository of reusable assets cost effective and to obtain useful results in the short time is by extracting and reengineering them from existing software. A reuse reengineering process consists of the set of activities for identifying softw ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
One of the most promising ways to make the population of a repository of reusable assets cost effective and to obtain useful results in the short time is by extracting and reengineering them from existing software. A reuse reengineering process consists of the set of activities for identifying software components implementing abstractions, reengineering them according to a predefined template, associating them with their interface and functional specification and populating a repository with the reusable assets so obtained. Code scavenging consists in searching existing software systems for source code components that implement software abstractions. We present an overview of code scavenging techniques with reference to the first phase of the RE 2 project reference paradigm for setting up reuse reengineering processes. Several program representations proposed in the literature for software maintenance and in particular useful for reverse engineering and reengineering are also describ...
Building an Efficient Software Manipulation Tool
, 1998
"... Introduction This extended abstract reports on the progress made to date on the Cstructure project. The goal of this project is to develop efficient techniques for building software maintenance and evolution tools. In the initial phase of this research, I have focused on developing compact data str ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
Introduction This extended abstract reports on the progress made to date on the Cstructure project. The goal of this project is to develop efficient techniques for building software maintenance and evolution tools. In the initial phase of this research, I have focused on developing compact data structures and demand-driven analysis algorithms to support automated restructuring or refactoring of C source code [16]. In later phases, I plan to study the design of efficient interactive transformations based on these techniques, and to explore other uses for demand-driven static analysis in software development environments. The motivation for automating certain mechanical tasks involved in software evolution is clear: computers are faster and better at bookkeeping than software engineers. As a system evolves and programmers make unforeseen changes, structural reorganization of the implementation could simplify unanticipated enhancement

