Results 1 -
8 of
8
Perracotta: mining temporal API rules from imperfect traces
- Ohio University
, 2006
"... Dynamic inference techniques have been demonstrated to provide useful support for various software engineering tasks including bug finding, test suite evaluation and improvement, and specification generation. To date, however, dynamic inference has only been used effectively on small programs under ..."
Abstract
-
Cited by 85 (2 self)
- Add to MetaCart
Dynamic inference techniques have been demonstrated to provide useful support for various software engineering tasks including bug finding, test suite evaluation and improvement, and specification generation. To date, however, dynamic inference has only been used effectively on small programs under controlled conditions. In this paper, we identify reasons why scaling dynamic inference techniques has proven difficult, and introduce solutions that enable a dynamic inference technique to scale to large programs and work effectively with the imperfect traces typically available in industrial scenarios. We describe our approximate inference algorithm, present and evaluate heuristics for winnowing the large number of inferred properties to a manageable set of interesting properties, and report on experiments using inferred properties. We evaluate our techniques on JBoss and the Windows kernel. Our tool is able to infer many of the properties checked by the Static Driver Verifier and leads us to discover a previously unknown bug in Windows.
Restructuring Programs By Tucking Statements Into Functions
, 1999
"... Changing the internal structure of a program without changing its behavior is called restructuring. This paper presents a transformation called tuck for restructuring programs by decomposing large functions into small functions. Tuck consists of three steps: Wedge, Split, and Fold. A wedge---a subse ..."
Abstract
-
Cited by 34 (2 self)
- Add to MetaCart
Changing the internal structure of a program without changing its behavior is called restructuring. This paper presents a transformation called tuck for restructuring programs by decomposing large functions into small functions. Tuck consists of three steps: Wedge, Split, and Fold. A wedge---a subset of statements in a slice---contains computations that are related and that may create a meaningful function. The statements in a wedge are split from the rest of the code and folded into a new function. A call to the new function is placed in the now restructured function. That tuck does not alter the behavior of the original function follows from the semantic preserving properties of a slice.
Application And User Interface Migration From Basic To Visual C++
- PROC. INT. CONF. ON SOFTWARE MAINTENANCE
, 1995
"... In this paper, an approach to reengineer BASIC PC legacy code into modern graphical systems is proposed. BASIC has historically been one of the first languages available on PCs. Based on it, small or medium size companies have developed throughout the time systems that represent valuable company ass ..."
Abstract
-
Cited by 12 (3 self)
- Add to MetaCart
In this paper, an approach to reengineer BASIC PC legacy code into modern graphical systems is proposed. BASIC has historically been one of the first languages available on PCs. Based on it, small or medium size companies have developed throughout the time systems that represent valuable company assets to be preserved. Our goal is the automatic migration from the BASIC character oriented user interface to a graphical environment which includes a GUI builder, and compiles event driven C/C++ code. For this purpose a conceptual representation in terms of abstract graphical objects and callbacks has been inferred from the original code, and a translator from BASIC to C has been developed. Moreover the GUI builder internal representation has been generated, so that the user interface can be interactively fine-tuned by the programmer. We will present and discuss BASIC peculiarities, with preliminary results on code translation. For the explanation of our approach to user interface migration an example will be used throughout the text.
Bringing Objects into COBOL: MOORE - A tool for migration from COBOL85 to object-oriented COBOL
, 1994
"... Object-orientation and reuse are two techniques, which, combined, can solve many problems in the maintenance of old software. MOORE combines these techniques as a reengineering tool, which helps the user to transform old programs from COBOL85 to object-oriented COBOL. A class library is created to b ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
Object-orientation and reuse are two techniques, which, combined, can solve many problems in the maintenance of old software. MOORE combines these techniques as a reengineering tool, which helps the user to transform old programs from COBOL85 to object-oriented COBOL. A class library is created to be used for transforming further programs and writing new objectoriented programs. The user should be familiar with the application field and the programs to be transformed. 1 Introduction A decision to renovate software which has been in use for many years must be made primarily on economic grounds. There is extensive literature about renovating old software [Big88], [Big89], [Boo91], [Sig92]. Even the combination of reengineering and object-oriented programming is nothing new; see ESPRIT II projects REDO [Bre91] and REBOOT [Sem93] and the project Software Factory of the EC. Renovation includes many preparatory phases, including inspection, analysis and restructuring of source programs, ide...
Restructuring Functions with Low Cohesion
- Sixth Working Conference on Reverse Engineering
, 1999
"... We present a technique for restructuring functions with low cohesion into functions with high cohesion. Such restructuring is desirable when re-architecting a legacy system into an object-oriented architecture. The restructured system has functions with higher cohesion and hence lower coupling. This ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
We present a technique for restructuring functions with low cohesion into functions with high cohesion. Such restructuring is desirable when re-architecting a legacy system into an object-oriented architecture. The restructured system has functions with higher cohesion and hence lower coupling. This enables finer-grained grouping of functions into objects.
Reverse Engineering and Abstraction of Legacy Systems
"... ion of Legacy Systems Margot Postema, and Heinz W. Schmidt Department of Software Development Monash University 900 Dandenong Road Caulfield East, VIC 3145, Australia Email: fmargot, hwsg@insect.sd.monash.edu.au Keywords: reverse engineering, legacy systems, transformation, abstraction Extremely l ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
ion of Legacy Systems Margot Postema, and Heinz W. Schmidt Department of Software Development Monash University 900 Dandenong Road Caulfield East, VIC 3145, Australia Email: fmargot, hwsg@insect.sd.monash.edu.au Keywords: reverse engineering, legacy systems, transformation, abstraction Extremely large software systems which have been developed and maintained by many different people are termed legacy systems. These legacy systems were traditionally developed using methods such as structured analysis and design, or even individual programming techniques and styles. Over time, maintenance has changed the original program structure and specifications. However, usually the specifications have not been maintained, and the current design and program understanding is lost. Maintenance of these systems becomes so costly, that they become candidate for reengineering. Reverse engineering of legacy systems aims at discovering design and specification of existing software programs. The recovered...
Reverse Engineering of COBOL Programs into Prolog Programs
- Proc. Workshop on Appl. of Logic Progr. to Software Engineering (in conjunction with ICLP'94), Santa Margherita Ligure
, 1994
"... . In this paper we examine how an executable logic specification can be obtained from COBOL programs via reverse engineering, which is semantically equivalent to the original source. For this purpose we define a specification language COPRA and show how various imperative constructs, such as GOTOs a ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
. In this paper we examine how an executable logic specification can be obtained from COBOL programs via reverse engineering, which is semantically equivalent to the original source. For this purpose we define a specification language COPRA and show how various imperative constructs, such as GOTOs and subroutine calls, can be handled in this language. This specification is generated automatically and may serve as a starting point for a higher-level modification of the source code. 1 Introduction 1.1 General Terms Today the development of new software systems is supported by a wide range of tools. The ultimate goal of such CASE 1 tools is to provide a uniform and integrated environment for designing, implementing and maintaining software applications. However in many companies, a high percentage ( up to two thirds) of development capacities is be expended on maintaining existing programs, which were not produced as part of modern CASE environments. Such programs may have evolved ove...

