Summarizes the use of a program understanding taxonomy developed at Hewlett-Packard. The primary use of the taxonomy has been in the creation of a company internal document called the Software Tools Report. The Software Tools Report is a selection and evaluation guide to software tools that addresses key company software engineering areas which include program understanding. A description of the Report, how it was created, and how it is used is given.<>
{"title":"Use of a program understanding taxonomy at Hewlett-Packard","authors":"A. Padula","doi":"10.1109/WPC.1993.263905","DOIUrl":"https://doi.org/10.1109/WPC.1993.263905","url":null,"abstract":"Summarizes the use of a program understanding taxonomy developed at Hewlett-Packard. The primary use of the taxonomy has been in the creation of a company internal document called the Software Tools Report. The Software Tools Report is a selection and evaluation guide to software tools that addresses key company software engineering areas which include program understanding. A description of the Report, how it was created, and how it is used is given.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"87 3 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"134095223","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
A reverse engineering approach based on process algebras for system representation and understanding is presented. Process algebras offer both a formal framework for representing communicating processes and a proof theory for proving semantic equivalences between them. Programs and program fragments are denoted as concurrent agents and code behaviour is defined in terms of interactions among agents in a process algebra representation suitable for subsequent analysis. Semantic and behavioural equivalences between programming plans, which represent programming stereo-types, and code fragments can be defined in this formal system together with a deduction system to prove them. Several advantages and further research issues on the use of process algebra for reverse engineering and maintenance are identified and discussed.<>
{"title":"A process algebra based program and system representation for reverse engineering","authors":"E. Merlo, Renato DeMori, K. Kontogiannis","doi":"10.1109/WPC.1993.263910","DOIUrl":"https://doi.org/10.1109/WPC.1993.263910","url":null,"abstract":"A reverse engineering approach based on process algebras for system representation and understanding is presented. Process algebras offer both a formal framework for representing communicating processes and a proof theory for proving semantic equivalences between them. Programs and program fragments are denoted as concurrent agents and code behaviour is defined in terms of interactions among agents in a process algebra representation suitable for subsequent analysis. Semantic and behavioural equivalences between programming plans, which represent programming stereo-types, and code fragments can be defined in this formal system together with a deduction system to prove them. Several advantages and further research issues on the use of process algebra for reverse engineering and maintenance are identified and discussed.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131177567","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Tools to record the knowledge gained by maintainers engaged in understanding an existing program are described. These tools are based on a model of the comprehension process and of reverse engineering as a whole. They form a part of an integrated reverse engineering toolset based around a central repository. Using these tools new documentation for an existing software system may be built up incrementally by successive maintainers who work on the system.<>
{"title":"Model-based tools to record program understanding","authors":"E. Younger, K. Bennett","doi":"10.1109/WPC.1993.263902","DOIUrl":"https://doi.org/10.1109/WPC.1993.263902","url":null,"abstract":"Tools to record the knowledge gained by maintainers engaged in understanding an existing program are described. These tools are based on a model of the comprehension process and of reverse engineering as a whole. They form a part of an integrated reverse engineering toolset based around a central repository. Using these tools new documentation for an existing software system may be built up incrementally by successive maintainers who work on the system.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"39 6 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116416852","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
The authors describe a technique and a tool supporting partial evaluation of Fortran programs, i.e. their specialization for specific values of their input variables. They aim at understanding old programs, which have become very complex due to numerous extensions. From a given Fortran program and these values of its input variables, the tool provides a simplified program, which behaves like the initial one for the specific values. This tool uses mainly constant propagation and simplification of alternatives to one of their branches. The tool is specified in inference rules and operates by induction on the Fortran abstract syntax. These rules are compiled into Prolog by the Centaur/Fortran environment.<>
{"title":"Partial evaluation as an aid to the comprehension of Fortran programs","authors":"Sandrine Blazy, P. Facon","doi":"10.1109/WPC.1993.263907","DOIUrl":"https://doi.org/10.1109/WPC.1993.263907","url":null,"abstract":"The authors describe a technique and a tool supporting partial evaluation of Fortran programs, i.e. their specialization for specific values of their input variables. They aim at understanding old programs, which have become very complex due to numerous extensions. From a given Fortran program and these values of its input variables, the tool provides a simplified program, which behaves like the initial one for the specific values. This tool uses mainly constant propagation and simplification of alternatives to one of their branches. The tool is specified in inference rules and operates by induction on the Fortran abstract syntax. These rules are compiled into Prolog by the Centaur/Fortran environment.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"23 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125132792","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
P. Linos, Philippe Aubet, Laurent Dumas, Yann Helleboid, Patricia Lejeune, Philippe Tulula
A software environment called CARE (computer-aided re-engineering) that facilitates the comprehension of existing C programs is described. Program comprehension in CARE is accomplished by visualizing program dependencies (i.e. entities and their relations). A repository of such dependencies is maintained and displayed using a graphical model which combines control and data-flow information. Moreover, CARE entails transformation tools and abstraction mechanisms that support monolithic and multiple-view organization of program dependencies. Results from an experimental study with the CARE environment has shown that the productivity of its users was increased and the quality of the changes made during a software maintenance task was improving. Finally, the lessons learned from an empirical evaluation of the CARE environment indicated that its graphical model, transformation tools and abstraction mechanisms constitute a promising platform for the comprehension of C programs.<>
{"title":"Facilitating the comprehension of C-programs: an experimental study","authors":"P. Linos, Philippe Aubet, Laurent Dumas, Yann Helleboid, Patricia Lejeune, Philippe Tulula","doi":"10.1109/WPC.1993.263906","DOIUrl":"https://doi.org/10.1109/WPC.1993.263906","url":null,"abstract":"A software environment called CARE (computer-aided re-engineering) that facilitates the comprehension of existing C programs is described. Program comprehension in CARE is accomplished by visualizing program dependencies (i.e. entities and their relations). A repository of such dependencies is maintained and displayed using a graphical model which combines control and data-flow information. Moreover, CARE entails transformation tools and abstraction mechanisms that support monolithic and multiple-view organization of program dependencies. Results from an experimental study with the CARE environment has shown that the productivity of its users was increased and the quality of the changes made during a software maintenance task was improving. Finally, the lessons learned from an empirical evaluation of the CARE environment indicated that its graphical model, transformation tools and abstraction mechanisms constitute a promising platform for the comprehension of C programs.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"33 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122800762","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
An important aid to the problems of program comprehension has been the use of static analysis tools to provide useful and up to date information on a program. Through the use of different views a maintainer can gain a much clearer understanding of a program. A drawback of static analysis tools is that various representations of the code are required to construct the different views of the program. A solution is to devise a single combined representation containing sufficient information to allow construction of each required view. The paper describes research to extend an existing unified interprocedural graph to allow the representation of C programs. Techniques for the dependence analysis of pointer variables are described and the construction of interprocedural definition-use information in the presence of pointer parameters addressed. A fine grained program representation, the Combined C Graph (CCG), containing three new edge types is introduced.<>
{"title":"A combined representation for the maintenance of C programs","authors":"David A. Kinloch","doi":"10.1109/WPC.1993.263899","DOIUrl":"https://doi.org/10.1109/WPC.1993.263899","url":null,"abstract":"An important aid to the problems of program comprehension has been the use of static analysis tools to provide useful and up to date information on a program. Through the use of different views a maintainer can gain a much clearer understanding of a program. A drawback of static analysis tools is that various representations of the code are required to construct the different views of the program. A solution is to devise a single combined representation containing sufficient information to allow construction of each required view. The paper describes research to extend an existing unified interprocedural graph to allow the representation of C programs. Techniques for the dependence analysis of pointer variables are described and the construction of interprocedural definition-use information in the presence of pointer parameters addressed. A fine grained program representation, the Combined C Graph (CCG), containing three new edge types is introduced.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"38 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125163586","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Reverse engineering of concurrent real-time programs with timing constraints is a particularly challenging research area, because the functional behaviour of a program, and the non-functional timing requirements, are implicit and can be very difficult to discover. The authors present a significant advance in this area, which is achieved by modelling real-time concurrent programs in the wide spectrum language WSL. They show how a sequential program with interrupts can be modelled in WSL, and the method is then extended to model more general concurrent programs. They show how a program modelled in this way may subsequently be 'inverse engineered' by the use of formal program transformations, to discover a specification for the program.<>
{"title":"Understanding concurrent programs using program transformations","authors":"E. Younger, M. Ward","doi":"10.1109/WPC.1993.263895","DOIUrl":"https://doi.org/10.1109/WPC.1993.263895","url":null,"abstract":"Reverse engineering of concurrent real-time programs with timing constraints is a particularly challenging research area, because the functional behaviour of a program, and the non-functional timing requirements, are implicit and can be very difficult to discover. The authors present a significant advance in this area, which is achieved by modelling real-time concurrent programs in the wide spectrum language WSL. They show how a sequential program with interrupts can be modelled in WSL, and the method is then extended to model more general concurrent programs. They show how a program modelled in this way may subsequently be 'inverse engineered' by the use of formal program transformations, to discover a specification for the program.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"95 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125271270","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
The issue of program comprehension is addressed from the software reuse perspective. In particular the identification of abstract data types in existing program code is explored. A candidature criterion is presented and a prototype implementing it is described. The criterion is applied in an experiment that analyses five very different programs and the resulting output is discussed. The work described forms part of the RE/sup 2/ project that addresses the wider issues of software reuse through the exploration of reverse engineering and re-engineering techniques to identify and extract reusable assets from existing systems.<>
{"title":"Experiments in identifying reusable abstract data types in program code","authors":"G. Canfora, A. Cimitile, M. Munro, M. Tortorella","doi":"10.1109/WPC.1993.263908","DOIUrl":"https://doi.org/10.1109/WPC.1993.263908","url":null,"abstract":"The issue of program comprehension is addressed from the software reuse perspective. In particular the identification of abstract data types in existing program code is explored. A candidature criterion is presented and a prototype implementing it is described. The criterion is applied in an experiment that analyses five very different programs and the resulting output is discussed. The work described forms part of the RE/sup 2/ project that addresses the wider issues of software reuse through the exploration of reverse engineering and re-engineering techniques to identify and extract reusable assets from existing systems.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"46 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114692192","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
A major portion of the maintenance effort is spent understanding existing software. The authors present an integrated code comprehension model and experiences with it in an industrial setting. They use audio-taped, think-aloud reports to investigate how well this integrated code comprehension model works during industrial maintenance activities ranging from code fixes to enhancements, code leverage, and reuse. They analyze the tapes for information needs during maintenance activities and derive tool capabilities accordingly.<>
{"title":"From program comprehension to tool requirements for an industrial environment","authors":"A. Andrews, A. M. Vans","doi":"10.1109/WPC.1993.263903","DOIUrl":"https://doi.org/10.1109/WPC.1993.263903","url":null,"abstract":"A major portion of the maintenance effort is spent understanding existing software. The authors present an integrated code comprehension model and experiences with it in an industrial setting. They use audio-taped, think-aloud reports to investigate how well this integrated code comprehension model works during industrial maintenance activities ranging from code fixes to enhancements, code leverage, and reuse. They analyze the tapes for information needs during maintenance activities and derive tool capabilities accordingly.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"36 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116776408","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Jonathan E. Hazan, S. Jarvis, Richard G. Morgan, R. Garigliano
Traditional arguments concerning the comprehensibility of functional programs have been illustrated with trivial examples. The authors present the real-life example of a large system for natural language processing which has been programmed entirely in a lazy functional language. This system is undergoing constant change as new features are added to different areas. They present a series of case studies which illustrate various aspects of the maintenance task, including reuse of existing parts of the system and the integration of the new features. They explain how the choice of a functional language for programming the system has aided in the comprehension of the system by new programmers and how this in turn has led to the simplification of the maintenance task. They describe the ease with which new features have been integrated into the system and relate this to the careful design of abstractions within a functional programming framework.<>
{"title":"Understanding Lolita: program comprehension in functional languages","authors":"Jonathan E. Hazan, S. Jarvis, Richard G. Morgan, R. Garigliano","doi":"10.1109/WPC.1993.263909","DOIUrl":"https://doi.org/10.1109/WPC.1993.263909","url":null,"abstract":"Traditional arguments concerning the comprehensibility of functional programs have been illustrated with trivial examples. The authors present the real-life example of a large system for natural language processing which has been programmed entirely in a lazy functional language. This system is undergoing constant change as new features are added to different areas. They present a series of case studies which illustrate various aspects of the maintenance task, including reuse of existing parts of the system and the integration of the new features. They explain how the choice of a functional language for programming the system has aided in the comprehension of the system by new programmers and how this in turn has led to the simplification of the maintenance task. They describe the ease with which new features have been integrated into the system and relate this to the careful design of abstractions within a functional programming framework.<<ETX>>","PeriodicalId":151277,"journal":{"name":"[1993] IEEE Second Workshop on Program Comprehension","volume":"4 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-07-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"117083381","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}