References of Program_Plan_Assignment_by_Parsing

    Documenting Programs Using a Library of Tree Structured Plans, Salwa K. Abd-El-Hafiz and Victor R. Basili
    @InProceedings{	  abd-el-hafiz.basili:documenting,
      author	= {Salwa K. Abd-El-Hafiz and Victor R. Basili},
      title		= {Documenting Programs Using a Library of Tree Structured
    		  Plans},
      pages		= {152-161},
      booktitle	= {Proceedings of the  International Conference on Software
    		  Maintenance ~1993},
      year		= {1993},
      publisher	= {IEEE Computer Society Press},
      month		= sep,
      abstract	= {This paper presents an overview of knowledge-based
    		  approach which helps in the mechanical documentation and
    		  understanding of computer programs. This approach performs
    		  mechanical annotation of loops by first decomposing them
    		  into fragments, called events. It then recognizes the
    		  high-level concepts, represented by the event, based on
    		  patterns, called plans, stored in a knowledge-base. We
    		  focus on the design and utilization of the plans and
    		  discuss how to generalize their structure. The generalized
    		  tree structure can facilitate plan recognition and reduce
    		  the size of the knowledge-base. A case study on a real
    		  program of some practical importance, containing a set of
    		  77 loops, has been performed. Results concerning the plans
    		  designed for this case study are given.},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Toward a Framework for Conceptual and Formal Outlines of Programs, F. Balmas
    Available as
    .
    @InProceedings{	  balmas:toward,
      author	= {F. Balmas},
      title		= {Toward a Framework for Conceptual and Formal Outlines of
    		  Programs},
      booktitle	= {Fourth Working Conference on Reverse Engineering},
      publisher	= {IEEE Computer Society },
      year		= {1997},
      pages		= {226 - 235},
      address	= {Amsterdam, The Netherlands},
      month		= {October},
      url		= {http://www.ai.univ-paris8.fr/~fb/},
      abstract	= {In this paper, we propose to re-document programs with
    		  outlines. The interest of outlines is that they allow to
    		  contract, as in a zoom, the amount of information necessary
    		  to understand programs, easing walking through them to
    		  localize given computations or to identify the role of a
    		  piece of code. As a first stage toward a framework of
    		  program outlines, we have defined a model suited to the
    		  representation of computations performed within loops. The
    		  main feature of our outlines is that they are both formal
    		  and conceptual: they are represented within frames which
    		  are semantically equivalent to the outlined loops and help
    		  understanding what is computed by revealing how this is
    		  computed. In order to re-document loops, we implemented a
    		  system, PRISME, able to automatically construct outlines of
    		  a subset of Lisp looping functions. PRISME allowed us to
    		  validate the implementation of our model. Currently, we use
    		  it intensively to experiment the role of outlines for
    		  debugging and reverse specification of programs. },
      keywords	= {re-documentation, program representation, outlines},
      class		= {Knowledge-Based_Concept_Assignment
    		  Software_Reverse_Engineering Others Reverse_Design
    		  Functional_Abstraction
    		  Fundamental_Methods_in_Reverse_Design
    		  Program_Plan_Assignment_by_Parsing
    		  Intermediate_Representations_of_Source_Code }
    }
    
    
    Software Reengineering Position Statement, E. Bush
    @InProceedings{	  bush:software,
      author	= {E. Bush},
      title		= {Software Reengineering Position Statement},
      booktitle	= {Proceedings of the 12th  International Conference on
    		  Software Engineering },
      pages		= {121},
      month		= mar,
      year		= {1990},
      abstract	= {Software reengineering work can be divided into three
    		  classes of activity: (1) choosing a calculus (it is
    		  suggested that the predicate calculus is a more promising
    		  medium than a data/control flow graph calculus because it
    		  is easier to prove equivalence between two expressions in
    		  the former); (2) building an industry standard library of
    		  primitive expressions in this calculus that will cover the
    		  domain of interest at its most abstract level; (3) building
    		  a system to recognize and prove equivalences between these
    		  high-level primitives and lower level expressions in the
    		  calculus that directly express the primitive operators of
    		  the original implementation.},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    A Knowledge-Based Approach to the Analysis of Code and Program Design Language (PDL), Bikas K. Das
    @InProceedings{	  das:knowledge-based,
      author	= {Bikas K. Das},
      title		= {A Knowledge-Based Approach to the Analysis of Code and
    		  Program Design Language (PDL)},
      booktitle	= {Proceedings of the  International Conference on Software
    		  Maintenance ~1989},
      year		= {1989},
      pages		= {290-296},
      organization	= {IEEE},
      publisher	= {IEEE Computer Society Press},
      abstract	= {This paper presents a knowledge-based technique for
    		  understanding programs (program design language (PDL) and
    		  the corresponding code) in terms of their plans. The
    		  technique has been used successfully to enhance PDL's role
    		  in maintaining and modifying code. This success is
    		  illustrated by an example in this paper. The methodology
    		  from which this technique evolved was derived from an
    		  earlier approach we used in developing a knowledge-based
    		  prototype that inspects and quality assures software
    		  components. The prototype model offers a unified
    		  representation of the components that have been used here
    		  to represent PDL and code segments. Recent approaches to
    		  program analysis and understanding for use in software
    		  maintenance are discussed. The authors argue that unlike
    		  other research advances in this area, the authors' approach
    		  is more realistic and takes advantage of a structured
    		  environment (standards for PDL, for example) commonly
    		  practiced in a software community. Yet the methodology is
    		  fairly general and immediately applicable in other software
    		  activities. Interesting directions for future work are
    		  outlined also.},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Concept Recognition-Based Program Transformation, Andre Engberts and Wojtek Kozaczynski and Jim Q. Ning
    @InProceedings{	  engberts.kozaczynski.ea:concept,
      author	= {Andre Engberts and Wojtek Kozaczynski and Jim Q. Ning},
      title		= {Concept Recognition-Based Program Transformation},
      booktitle	= {Proceedings of the  International Conference on Software
    		  Maintenance ~1991},
      year		= {1991},
      pages		= {73-82},
      organization	= {IEEE},
      publisher	= {IEEE Computer Society Press},
      abstract	= {Traditionally, program transformation has been used mostly
    		  for forward program development: the generation of
    		  executable code from specifications. This paper describes
    		  an approach that applies a transformation paradigm to
    		  automate software maintenance activities. A very unique
    		  characteristic of this approach is its use of concept
    		  recognition, the understanding and abstraction of
    		  high-level programming and application domain entities in
    		  programs, as the basis for transformations. A program
    		  transformation tool has been developed to support the
    		  migration of a large manufacturing control system written
    		  in COBOL. },
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Knowledge-Based Program Analysis, Mehdi T. Harandi and Jim Q. Ning
    @Article{	  harandi.ning:knowledge-based,
      author	= {Mehdi T. Harandi and Jim Q. Ning},
      title		= {Knowledge-Based Program Analysis},
      journal	= {IEEE Software},
      year		= {1990},
      volume	= {7},
      number	= {1},
      pages		= {74-81},
      month		= jan,
      inhalt	= {Es gibt vier Ebenen, auf denen Programme betrachtet werden
    		  können: 1) Implementierungsebene, z.B. abstrakte
    		  Syntaxbäume 2) Strukturebene, z.B. - Daten- oder
    		  Kontrollflu\3graphen - Daten- oder
    		  Kontrollabhängigkeitsgraphen - interprozedurale
    		  Aufrufrelationen - ripple-effect-Graphen - Petrinetze -
    		  Strukturdiagramme 3) Funktionsebene Abstrakte
    		  Repräsentation einer Klasse von funktional äquivalenter,
    		  aber strukturell unterschiedlicher Implementierungen. 4)
    		  Domänen-Ebene abstrahiert die Funktionsebene durch
    		  Ersetzung deren algorithmischer Natur mit Konzepten der
    		  Anwendungs-Domäne; z.B. statt Löschen eines Elementes aus
    		  einer Liste, das Verabschieden eines Mitarbeiters aus dem
    		  Unternehmen.
    		  
    		  In diesem Artikel geht es um die Funktionsebene. Es wird
    		  beschrieben, wie in einem Programm bestimmte
    		  Programmierkonzepte erkannt werden können. Die
    		  Programmierkonzepte sind in einer Planbasis enthalten und
    		  werden mit den Informationen über das Programm (Events)
    		  abgeglichen. Die Events sind in einer Klassenhierarchie
    		  gegliedert. Die gefundene Abgleichung wird
    		  natürlich-sprachlich paraphrasiert. },
      note		= { Automatic program analysis with a tool called PAT is used
    		  to understand programs on a high level. The applications
    		  are maintenance for large complex programs},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Automatic Control Understanding for Natural Programs, John Hartman
    @PhDThesis{	  hartman:automatic,
      author	= {John Hartman},
      title		= {Automatic Control Understanding for Natural Programs},
      school	= {University of Texas at Austin},
      year		= {1991},
      month		= may,
      abstract	= {Program understanding involves recognizing abstract
    		  concepts like ``read-process-loops'' in existing programs.
    		  Programmers spend much of their time understanding
    		  programs, so studying and automating the process has many
    		  benefits.
    		  
    		  Programming plans are units of programming knowledge
    		  connecting abstract concepts and their implemenations.
    		  Existing research assumes that plan instances can be
    		  recognized to recover the programmer's abstract concepts
    		  and intentions, but this approach has not been confirmed
    		  empirically.
    		  
    		  We present a practical method for bottom-up control concept
    		  recognition in large, unstructured imperative programs.
    		  Control concepts are abstract notions about interactions
    		  between control flow, data flow and computation, such as
    		  ``do loop'', ``read-process-loop'', and ``bounded linear
    		  search''. They are recognized by comparing an abstract
    		  program representation against a library of standard
    		  implementation plans. The program representation is a
    		  hierarchical control flow/data flow graph decomposed into a
    		  tree of sub-models using propers (single entry/exit conrol
    		  flow sub-graphs). Plans are represented by similar graphs
    		  with added qualifications. Recognition is based on simple
    		  matching between sub-models and plans. The method was
    		  implemented in the UNPROG program understander and tested
    		  with Cobol and Lisp source programs.
    		  
    		  This method is robust, efficient and scalable. The program
    		  represenation can be formed for all language construct
    		  which permit static determination of control and data flow.
    		  Comparing sub-models and plans is efficient because
    		  sub-models are small; have restricted, canonical control
    		  flow; and focus recognition on criterial program features.
    		  The number of sub-models and comparisions increases
    		  linearly with program size.
    		  
    		  UNPROG has been applied to automatic Cobol restructuring.
    		  Knowledge associated with plans and concepts permits more
    		  specific and insightful transformation, code generation,
    		  and documentation than is possible with syntactic methods.
    		  Control understanding can similarly raise the level of
    		  other reverse engineering and re-engineering tools for
    		  applications like analysis, documentation, and translation.
    		  
    		  We also showed how our method and UNPROG can be used for
    		  empirical study of programs at the conceptual level.
    		  Results can be used to improve recognizer performance,
    		  acquire plans, catalog natural plans and concepts, test the
    		  hypothesis that programs are planful, and characterize
    		  program populations. },
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing, UNPROG}
    }
    
    
    Understanding Natural Programs Using Proper Decomposition, John Hartman
    @InProceedings{	  hartman:understanding,
      author	= {John Hartman},
      title		= {Understanding Natural Programs Using Proper
    		  Decomposition},
      booktitle	= {Proceedings of the 13th  International Conference on
    		  Software Engineering },
      pages		= {62--73},
      month		= may,
      year		= {1991},
      abstract	= {The author presents a practical method for automatic
    		  control concept recognition in large, unstructured
    		  imperative programs. Control concepts are abstract notions
    		  about interactions between control flow, data flow, and
    		  computation, e.g., read-process loops. They are recognized
    		  by comparing a language-independent abstract program
    		  representation against standard implementation plans.
    		  Recognition is efficient and scalable because the program
    		  representation is hierarchically decomposed by propers
    		  (single entry/exit control flow subgraphs). A recognition
    		  experiment using the UNPROG program understander shows the
    		  method's performance, the role of proper decomposition, and
    		  the ability to use standard implementations in a sample of
    		  programs. How recognized control concepts are used to
    		  perform Cobol restructuring with quality not possible with
    		  existing syntactic methods is described.},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing, UNPROG}
    }
    
    
    PROUST: knowledge-based program understanding, W. L. Johnson and Elliot Soloway
    @InProceedings{	  johnson.soloway:proust,
      author	= {W. L. Johnson and Elliot Soloway},
      title		= {{PROUST}: knowledge-based program understanding},
      pages		= {369--380},
      booktitle	= {Proceedings of the 7th  International Conference on
    		  Software Engineering },
      year		= {1984},
      publisher	= {IEEE Computer Society Press},
      month		= mar,
      abstract	= {This paper describes a program called PROUST which does
    		  on-line analysis and understanding of Pascal written by
    		  novice programmers. PROUST takes as input a program and a
    		  nonalgorithmic description of the program requirements and
    		  the code. This mapping is in essence a reconstruction of
    		  the design and implementation steps that the programmer
    		  went through in writing the program. A knowledge base of
    		  programming plans and strategies, together with common bugs
    		  associated with them, is used in construction this mapping.
    		  Bugs are discovered in the process of relating plans to the
    		  code; PROUST can therefore give deep explanations of
    		  program bugs by relating the buggy code to its underlying
    		  intentions.},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    PROUST: knowledge-based program understanding, W. Johnson and E. Soloway
    @Article{	  johnson.soloway:proust*1,
      title		= {{PROUST}: knowledge-based program understanding},
      author	= {W. Johnson and E. Soloway},
      journal	= {IEEE Transactions on Software Engineering},
      volume	= {{SE}-11},
      number	= {3},
      pages		= {267--275},
      year		= {1985},
      note		= { This paper describes a tool to help novice programmers to
    		  learn how to program. It is based on a knowledge base and
    		  has also a tutoring aspect. The tool is not intended for
    		  large scale program understanding but the ideas underlying
    		  this paper may very well be applicable to it},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Localization of Design Concepts in Legacy Systems, K. Kontogiannis and R. DeMori and M. Bernstein and E. Merlo
    @InProceedings{	  kontogiannis.demori.ea:localization,
      author	= {K. Kontogiannis and R. DeMori and M. Bernstein and E.
    		  Merlo},
      title		= {Localization of Design Concepts in Legacy Systems},
      pages		= {414-423},
      booktitle	= {Proceedings of the  International Conference on Software
    		  Maintenance ~1994},
      year		= {1994},
      publisher	= {IEEE Computer Society Press},
      month		= sep,
      abstract	= {Complete automation of design recovery of large systems is
    		  a desirable but impractical goal due to complexity and size
    		  issues, so current research efforts focus on
    		  redocumentation and partial design recovery.
    		  
    		  Pattern matching lies at the center of any design recovery
    		  system. In the context of a larger project to develop an
    		  integrated reverse engineering environment, the authors are
    		  developing a framework for performing clone detection, code
    		  localization, and plan recognition. This paper discusses a
    		  plan localization and selection strategy based on a dynamic
    		  programming function that records the matching process and
    		  identifies parts of the plan and code fragment that are
    		  most 'similar'. Program features used for matching are
    		  currently based on data flow, control flow, and structural
    		  properties. The matching model uses a transition network
    		  and allows for the detection of insertions and deletions,
    		  and it is targeted for legacy C-based systems.},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Delocalized Plans and Program Comprehension, Stanley Letovsky and Elliot Soloway
    @Article{	  letovsky.soloway:delocalized,
      author	= {Stanley Letovsky and Elliot Soloway},
      title		= {Delocalized Plans and Program Comprehension},
      journal	= {IEEE Software},
      year		= {1986},
      pages		= {41-40},
      month		= may,
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Understanding and debugging programs, F. J. Lukey
    @Article{	  lukey:understanding,
      author	= {F. J. Lukey},
      title		= {Understanding and debugging programs},
      journal	= {Journal of Man Machine Studies},
      year		= {1980},
      volume	= {12},
      number	= {1},
      pages		= {189-202},
      abstract	= {A theory of program understanding and debugging is
    		  proposed. The theory is discussed with reference to a
    		  computer system that embodies many aspects of the theory.
    		  Program understanding is viewed as the construction of
    		  program description. The theory's approach to debugging is
    		  based on the use of these descriptions. The role of
    		  programming knowledge is stressed},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    A Quality-Based Analysis of Architecture Recovery Environments, Nabor C. Mendonça and Jeff Kramer
    @InProceedings{	  mendonça.kramer:quality-based,
      author	= {Nabor C. Mendonça and Jeff Kramer},
      title		= {A Quality-Based Analysis of Architecture Recovery
    		  Environments},
      booktitle	= {1st  European Conference on Software Maintenance and
    		  Reengineering 97},
      month		= mar,
      year		= {1997},
      publisher	= {IEEE Computer Society Press},
      abstract	= {Architecture recovery is a recent research area which aims
    		  at providing reverse engineering technologies to extract
    		  high-level architectural information from the source code
    		  of legacy systems. In this paper we review the main (only?)
    		  architecture recovery environments proposed thus far. The
    		  environments are analyzed with respect to different quality
    		  attributes, and their features and limitations are
    		  discussed. This allows us to highlight problems yet to be
    		  addressed in the area and, for some of them, suggest
    		  possible alternatives. We believe that this analysis is
    		  useful for the design of more effective architecture
    		  recovery tools. },
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    A hybrid approach to recognizing programming plans, A. Quilici
    @InProceedings{	  quilici:hybrid,
      author	= {A. Quilici},
      title		= {A hybrid approach to recognizing programming plans},
      booktitle	= {Proceedings of the 1st  Working Conference on Reverse
    		  Engineering },
      pages		= {126--133},
      year		= {1993},
      note		= { Based on an experiment regarding human understanding of a
    		  given C program, a new organization for a plan library is
    		  presented. It consists of a plan definition, a plan
    		  recognition rule, and specialized constraints. Extends the
    		  plan library developed by Andersen Consulting},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    A Memory-Based Approach to Recognizing Programming Plans, Alex Quilici
    @Article{	  quilici:memory-based,
      author	= {Alex Quilici},
      title		= {A Memory-Based Approach to Recognizing Programming Plans},
      journal	= {Communications of the ACM},
      volume	= {37},
      number	= {5},
      pages		= {85-93},
      year		= {1994},
      month		= may,
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Reverse Engineering of Legacy Systems: A Path Toward Success, Alex Quilici
    @InProceedings{	  quilici:reverse,
      author	= {Alex Quilici},
      title		= {Reverse Engineering of Legacy Systems: A Path Toward
    		  Success},
      booktitle	= {Proceedings of the 17th  International Conference on
    		  Software Engineering },
      publisher	= {IEEE Computer Society Press},
      pages		= {333-336},
      year		= {1995},
      month		= apr,
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    The Programmer's Apprentice, C. Rich and R.C. Waters
    @Book{		  rich.waters:programmers,
      author	= {C. Rich and R.C. Waters},
      title		= {The {P}rogrammer's {A}pprentice},
      publisher	= {Addison-Wesley},
      year		= {1990},
      note		= { This book, named after the project it reports on, is
    		  intended both to serve as an example of a general method to
    		  the builders of many and diverse computer-aided design
    		  tools and to study how software is analyzed, modified,
    		  verified, and documented with the goal to automate such
    		  typically software engineering tasks. A demonstration
    		  system has been completed within the Programmer's
    		  Apprentice project that illustrates most of the key
    		  capabilities of it, albeit that this system is restricted
    		  to the task of program implementation},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Recognizing a Program's Design: A Graph-Parsing Approach, Charles Rich and Linda M. Wills
    @Article{	  rich.wills:recognizing,
      author	= {Charles Rich and Linda M. Wills},
      title		= {Recognizing a Program's Design: A Graph-Parsing Approach},
      journal	= {IEEE Software},
      year		= {1990},
      volume	= {7},
      number	= {1},
      pages		= {82-89},
      month		= jan,
      inhalt	= {Ein prototypisch implementierter Recognizer erkennt
    		  sogenannte Cliches im Programmcode. Cliches sind häufig
    		  verwandte Programmiermuster wie binäre Suche oder
    		  Listenverarbeitung. Die Cliches sind als Plangraphen in
    		  einer Datenbasis abgelegt. Der Programmcode wird
    		  gleichfalls anhand des Kontroll- und Datenflusses in einen
    		  Plangraphen umgewandelt. Der Recognizer versucht
    		  Plangraphen der Datenbasis mit dem Plangraphen des
    		  Programmcodes zur Deckung zu bringen, um so Cliches zu
    		  entdecken. Bei gefundener Deckung wird das Programmstück
    		  natürlichsprachlich (mittels Schablonen) beschrieben.},
      note		= {In this paper it is assumed that most programmers use
    		  similar structures to program. Such so-called cliches can
    		  be recognized automatically and can then be used to
    		  generate the documentation of the program},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing, Recognizer}
    }
    
    
    Empirical Studies of Programming Knowledge, Elliot Soloway and Kate Ehrlich
    @Article{	  soloway.ehrlich:empirical,
      author	= {Elliot Soloway and Kate Ehrlich},
      title		= {Empirical Studies of Programming Knowledge},
      journal	= {IEEE Transactions on Software Engineering},
      year		= {1984},
      volume	= {SE-10},
      number	= {5},
      pages		= {595-609},
      month		= sep,
      abstract	= { We suggest that expert programmers habe and use two types
    		  of programming knowledge: 1) programming plans, which are
    		  generic program fragments that represent stereotypic action
    		  sequences in programming and 2) rules of programming
    		  discourse, which capture the conventions in programming and
    		  govern the composition of the plans into programs. We
    		  report here on two empirical studies that attempt to
    		  evaluate the above hypothesis. Results from these studies
    		  do in fact support our claim. },
      keys		= {Cognitive models of programming, novice/expert
    		  differences, program comprehension, software psychology.},
      class		= {Software_Reverse_Engineering,
    		  Cognitive_Processes_in_Human_Program_Understanding,
    		  Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Abstracting Plan-like Program Information: a Demonstration, Eng-Siong Tan and Henry G. Dietz
    @InProceedings{	  tan.dietz:abstracting,
      key		= {Tan \& Dietz, 1994},
      author	= {Eng-Siong Tan and Henry G. Dietz},
      title		= {Abstracting Plan-like Program Information: a
    		  Demonstration},
      pages		= {262-271},
      booktitle	= {Proceedings of the  International Conference on Software
    		  Maintenance ~1994},
      year		= {1994},
      publisher	= {IEEE Computer Society Press},
      month		= sep,
      abstract	= {Most programmers spend far more time understanding and
    		  modifying existing programs than they spend developing new
    		  programs. Current program views used for understanding
    		  programs seek to support understanding mainly at the
    		  program analysis level. That is, many views are often
    		  graphical representations of program analysis concepts,
    		  such as the program's data and control dependence graphs,
    		  abstract syntax trees of call graphs. However, it may be
    		  tedious to understand a program using only such
    		  analysis-centered views that support a more abstract level
    		  of program understanding, by describing plan-like program
    		  information. In this paper, we show how our views can
    		  succinctly present widely-scatteres but logically-related
    		  program information to describe how certain program effects
    		  (e.g. the pattern of occurrrence of a global variable) are
    		  implemented in a program, and how programmers can
    		  interactively manipulate these program views, through view
    		  composition and refinement.},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Augmenting Pattern-Based Architectural Recovery with Flow Analysis: Mosaic - A Case Study, P. Tonella and R. Fiutem and G. Antoniol and E. Merlo
    @InProceedings{	  tonella.fiutem.ea:augmenting,
      author	= {P. Tonella and R. Fiutem and G. Antoniol and E. Merlo},
      title		= {Augmenting Pattern-Based Architectural Recovery with Flow
    		  Analysis: Mosaic - A Case Study},
      booktitle	= {Working Conference on Reverse Engineering},
      publisher	= {IEEE Computer Society},
      year		= {1996},
      abstract	= {Understanding the overall organization of a software
    		  system, i.e. its software architecture, is often required
    		  during software maintenance: tools can help maintainers in
    		  managing the evolution of legacy systems, by showing them
    		  architectural information. In this paper, the analysis of a
    		  medium-sized application using a pattern based
    		  architectural recovery environment is presented. The
    		  results obtained give useful information about the system
    		  architecture but also show some limitations of a purely
    		  pattern based approach. To overcome such limitations,
    		  architectural analysis algorithms have been augmented with
    		  information about control and data flow and the case study
    		  application has been re-analyzed. Complementing pattern
    		  matching with flow information has allowed to detect
    		  architectural constructs also when they are spread over
    		  different procedures in source code and to extract useful
    		  additional information through the use of constant
    		  propagation and slicing. },
      keywords	= {program understanding, software architectures, reverse
    		  engineering, pattern matching, flow analysis, Mosaic.},
      class		= {Knowledge-Based_Concept_Assignment
    		  Software_Reverse_Engineering Reverse_Design
    		  Program_Plan_Assignment_by_Parsing }
    }
    
    
    Program Translation via Abstraction and Reimplementation, R. C. Waters
    @Article{	  waters:program,
      key		= {Waters},
      author	= {R. C. Waters},
      title		= {Program Translation via Abstraction and Reimplementation},
      journal	= {IEEE Transactions on Software Engineering},
      pages		= {1207--1228},
      volume	= {14},
      number	= {8},
      month		= aug,
      year		= {1988},
      abstract	= {Essentially all program tranlators (both source-to-source
    		  translators and compilers) operate via transliteration and
    		  refinement. The source program is first tranliterated into
    		  the target language on a statement-by-statement basis.
    		  Various refinements are then applied in order to improve
    		  the quality of the output. Although acceptable in many
    		  situations, this approach is fundamentally limited in the
    		  quality of the output it can produce. In particular, it
    		  tends to be insufficiently sensitive to global features of
    		  the source program and too sensitive to irrelavant local
    		  details.
    		  
    		  This paper presents an alternate translation paradigm -
    		  abstraction and reimplementation. Using this paradigm, the
    		  source program is first analyzed in order to obtain a
    		  programming-language-independent understanding of the
    		  computation performed by the program as a whole. The
    		  program is then reimplemented in the target language based
    		  on this understanding. The key to this approach is the
    		  abstract understanding obtained. It allows the translator
    		  to see the forest for the trees, benefiting from an
    		  appreciation of the global features of the source program
    		  without being distracted by irrelevant details.
    		  
    		  Translation via abstraction and reimplemenation is one of
    		  the goals of the Programmer's Aprprentice project. A
    		  translator which translates Cobol programs into Hibol (a
    		  very-high-level business data processing language) has been
    		  constructed. A compiler which generates extremly efficient
    		  PDP-11 object code for Pascal programs has been designed.
    		  Currently, work is proceeding toward the implementation of
    		  a general-purpose, knowledge-based translator.},
      location	= {CMU E\&{}S Library},
      class		= {Alteration, Re-Code, Source-to-Source-Translation,
    		  Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing},
      note		= { The translation paradigm of abstraction and
    		  reimplementation, which is one of the goals of the
    		  Programmer's Apprentice project \cite{RiWa90} is presented.
    		  A translator has been constructed which translates Cobol
    		  programs into Hibol (a very high level, business data
    		  processing language)}
    }
    
    
    Automated Program Recognition by Graph Parsing, Linda Mary Wills
    @TechReport{	  wills:automated,
      author	= {Linda Mary Wills},
      title		= {Automated Program Recognition by Graph Parsing},
      institution	= {Massachusetts Intitute of Technology - Artificial
    		  Intelligence Laboratory},
      year		= {1992},
      type		= {Technical Report},
      number	= {1358},
      month		= jul,
      abstract	= {The recoginition of standard computational structures
    		  (clich\'es) in a program can help an experienced programmer
    		  understand the program. Based on the known relationships
    		  betwwen the clich\'es, a hierarchical description of the
    		  program's design can be recovered. We develop and astudy a
    		  graph parsing approach to automating program recognition in
    		  which programs are represented as attributed dataflow
    		  graphs and a library of clich\'es in the code.
    		  
    		  We demonstrate that this graph parsing approach is feasible
    		  and useful way to automate program recognition. In studying
    		  this approach, we have experimented with two medium-sized,
    		  real-world simulator programs. There are three aspects of
    		  our study. First, we evaluate our representation's ability
    		  to suppress many common forms of program variation which
    		  hinder recognition. Second, we investigate the
    		  expressiveness of our graph grammar formalism for capturing
    		  programming clich\'es. Third, we empirically and
    		  analytically study the computational costs of our
    		  recognition approach with respect to the real-world
    		  simulator programs.},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Flexible control for program recognition, L. Wills
    @InProceedings{	  wills:flexible,
      author	= {L. Wills},
      title		= {Flexible control for program recognition},
      booktitle	= {Proceedings of the 1st  Working Conference on Reverse
    		  Engineering },
      pages		= {134--143},
      year		= {1993},
      note		= { Uses chart parsing (a graph-based parsing technique) for
    		  recognizing program plans. The GRASPR tool implements this
    		  technique and can be applied to Common Lisp programs (less
    		  than 1000 lines)},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    
    
    Flexible Control for Program Recognition, Linda M. Wills
    @InProceedings{	  wills:flexible*1,
      author	= {Linda M. Wills},
      title		= {Flexible Control for Program Recognition},
      booktitle	= {Working Conference on Reverse Engineering},
      address	= {Baltimore, Maryland},
      year		= {1993},
      month		= may,
      pages		= {134-143},
      abstract	= {Recognizing commonly used data structures and algorithms
    		  is a key activity in reverse engineering. Systems developed
    		  to automate this recognition process have been isolated,
    		  stand-alone systems, usually targeting a specific task. We
    		  are interested in applying recognition to multiple tasks
    		  requiring reverse engineering, such as inspecting,
    		  maintaining, and reusing software. This requires a
    		  flexible, adaptable recognition architecture, since the
    		  tasks vary in the amount and accuracy of knowledge
    		  available about the program, the requirements on
    		  recongnition power, and the resources available. We have
    		  developed a recognition system based on graph parsing. It
    		  has a flexible, adaptable control structure that can accept
    		  advice from external agents. Its flexibility arises from
    		  using a chart parsing algorithm. We are studying this graph
    		  parsing approach to determine what types of advice can
    		  enhance its capabilities, performance, and scalability.},
      ftp		= {ftp.cc.gatech.edu//pub/groups/reverse/repository/flexible.ps}
    		  ,
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing, Recognizer}
    }
    
    
    Using Attributed Flow Graph Parsing to Recognize Programs, Linda M. Wills
    @InProceedings{	  wills:using,
      author	= {Linda M. Wills},
      title		= {Using Attributed Flow Graph Parsing to Recognize
    		  Programs},
      booktitle	= {Int. Workshop on Graph Grammars and Their Application to
    		  Computer Science},
      address	= {Williamsburg, Virginia},
      year		= {1994},
      month		= nov,
      ftp		= {ftp.cc.gatech.edu//pub/groups/reverse/repository/ggram.ps}
    		  ,
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing, Recognizer}
    }
    
    
    Some Experiments Toward Understanding How Program Plan Recognition Algorithms Scale, Steven Woods and Alex Quilici
    @InProceedings{	  woods.quilici:some,
      author	= {Steven Woods and Alex Quilici},
      title		= {Some Experiments Toward Understanding How Program Plan
    		  Recognition Algorithms Scale},
      booktitle	= {Proceedings of the third Working Conference on Reverse
    		  Engineering},
      pages		= {21--30},
      year		= {1996},
      class		= {Software_Reverse_Engineering, Reverse_Design,
    		  Knowledge-Based_Concept_Assignment,
    		  Program_Plan_Assignment_by_Parsing}
    }
    

koschke@informatik.uni-stuttgart.de (Feedback).
Copyright © 1998-2000 University of Stuttgart, Germany. $Revision: 1.5 $
Date: Sun Nov 22 00:29:43 CET 2009