Supporting Reuse and Evolution in Software Design

Abstract

Program design is an area of programming that can benefit significantly from machine-mediated assistance. A proposed tool, called the Design Apprentice (DA), can assist a programmer in the detailed design of programs. The DA supports software reuse through a library of commonly-used algorithmic fragments, or cliches, that codifies standard programming. The cliche library enables the programmer to describe the design of a program concisely. The DA can detect some kinds of inconsistencies and incompleteness in program descriptions. It automates detailed design by automatically selecting appropriate algorithms and data structures. It supports the evolution of program designs by keeping explicit dependencies between the design decisions made. These capabilities of the DA are underlaid by a model of programming, called programming by successive elaboration, which mimics the way programmers interact. Programming by successive elaboration is characterized by the use of breadth-first exposition of layered program descriptions and the successive modifications of descriptions. A scenario is presented to illustrate the concept of the DA. Techniques for automating the detailed design process are described. A framework is given in which designs are incrementally augmented and modified by a succession of design steps. A library of cliches and a suite of design steps needed to support the scenario are presented. (kr)

Open PDF

Document Details

Document Type
Technical Report
Publication Date
Oct 01, 1990
Accession Number
ADA228782

Entities

People

  • Yang M. Tan

Organizations

  • Massachusetts Institute of Technology

Tags

Communities of Interest

  • Materials and Manufacturing Processes

DTIC Thesaurus Topics

  • Artificial Intelligence
  • Artificial Intelligence Computing
  • Automatic Programming
  • Computer Programming
  • Computer Programs
  • Computer Science
  • Computers
  • Engineering
  • Formal Languages
  • Grammars
  • High Level Languages
  • Language
  • Lisp Programming Language
  • Lists (Data Structures)
  • Programming Languages
  • Software Design
  • Software Development

Fields of Study

  • Computer science
  • Engineering

Readers

  • Artificial Intelligence
  • Database Systems and Applications
  • Systems Analysis and Design