Software construction using components

It is the thesis of this work than many computer software systems being built today are similar and should be built out of reusable software components. The appropriate use of software components is investigated by analogy to the classical engineering question of whether to build an object out of custom-made parts or standard parts and assemblies. The same analogy is used to explain some of the problems with previous work on reusable software. The result of reasoning with the engineering analogy is that the reuse of software results only from the reuse of analysis, design, and code; rather than just the reuse of code. The concept of domain analysis is introduced to describe the activity of identifying the objects and operations of a class of similar systems in a particular problem domain. A domain analysis is represented by a domain-specific language, a prettyprinter, source-to-source transformations, and software components. A domain's software components map statements from the domain into other domains which are used to model the objects and operations of the domain. Software components represent implementation choices. The components are managed using a module interconnection language to insure usage constraints. The source-to-source transformations represent domain-specific optimizations, independent of any implementation, which are used to optimize statements in the domain. The transformations are useful primarily when the domain is used as a modeling domain. A method of automatically producing metarules for a set of transformations is described. The metarules remove the burden of having to suggest individual transformations from the user. A formal model of the usage constraints and modeling possibilities of a set of domains is presented. It is shown that the reusability question ("Can a particular domain-specific program be refined into an executable language using a given a set of domains?") can be answered using the formal model. Experiments using a prototype system, Draco 1.0, which embodies the concepts described, are presented and the results discussed. The largest example results in approximately 20 pages of source code and uses eight modeling domains. Each object and operation in the resulting program may be explained by the system in terms of the program specification. Related work in the areas of automatic programming, program generation, programming languages, software engineering, and transformation systems is presented. Finally, some future work in this area is outlined.

[1]  Brian Randell,et al.  Software Engineering: Concepts and Techniques , 1976 .

[2]  Infotech,et al.  Structured analysis and design , 1978 .

[3]  Evan L. Ivie The programmer's workbench—a machine for software development , 1977, CACM.

[4]  Chin-Liang Chang DEDUCE 2: Further Investigations of Deduction in Relational Data Bases , 1977, Logic and Data Bases.

[5]  David B. Loveman,et al.  Program Improvement by Source-to-Source Transformation , 1977, J. ACM.

[6]  Gerald Estrin,et al.  SARA aided design of software for concurrent systems , 1978, AFIPS National Computer Conference.

[7]  Craig Schaffert,et al.  Abstraction mechanisms in CLU , 1977, Commun. ACM.

[8]  Gregory Lawrence Chesson Synthesis techniques for transformations on tree and graph structures. , 1977 .

[9]  Zohar Manna,et al.  Synthesis: Dreams - Programs , 1979, IEEE Trans. Software Eng..

[10]  E. B. Swanson,et al.  Software maintenance management , 1980 .

[11]  John B. Goodenough,et al.  The Effect of Software Structure on Software Reliability, Modifiability, and Reusability: A Case Study and Analysis, , 1974 .

[12]  George E. Heidorn,et al.  English as a very high level language for simulation programming , 1974, SIGPLAN Symposium on Very High Level Languages.

[13]  James E. Emery Small-scale software components , 1979, SOEN.

[14]  Richard C. T. Lee,et al.  An improved program-synthesizing algorithm and its correctness , 1974, CACM.

[15]  Joan M. Morrissey,et al.  On Software Engineering-An Economic Perspective , 1979, ICSE.

[16]  Patrick Alan Blosser,et al.  An automatic system for application software generation and portability. , 1976 .

[17]  Lee Wendell Cooprider The representation of families of software systems. , 1978 .

[18]  Allen Newell,et al.  Computer Structures: Readings and Examples, , 1971 .

[19]  J. V. Phillips Program Inference from Traces using Multiple Knowledge Sources , 1977, IJCAI.

[20]  Ernest A. Hershey,et al.  PSL/PSA: A Computer-Aided Technique for Structured Documentation and Analysis of Information Processing Systems , 1976, IEEE Transactions on Software Engineering.

[21]  Douglas T. Ross,et al.  Structured Analysis (SA): A Language for Communicating Ideas , 1977, IEEE Transactions on Software Engineering.

[22]  Jerry R. Hobbs From English descriptions of algorithms into programs , 1977, ACM '77.

[23]  William J. Long A Program Writer. , 1977 .

[24]  Gregory R. Ruth Protosystem I - An automatic programming system prototype , 1899, AFIPS National Computer Conference.

[25]  C. Cordell Green,et al.  Application of Theorem Proving to Problem Solving , 1969, IJCAI.

[26]  Carl Hewitt,et al.  A Universal Modular ACTOR Formalism for Artificial Intelligence , 1973, IJCAI.

[27]  Daniel Teichroew,et al.  A survey of languages for stating requirements for computer-based information systems , 1972, AFIPS '72 (Fall, part II).

[28]  L. Hawkinson The Representation of Concepts in OWL , 1975, IJCAI.

[29]  David R. Barstow A Knowledge-Based System for Automatic Program Construction , 1977, IJCAI.

[30]  Jerome A. Feldman Automatic programming. , 1972 .

[31]  Fred P. Brooks,et al.  The Mythical Man-Month , 1975, Reliable Software.

[32]  William A. Woods,et al.  Computational Linguistics Transition Network Grammars for Natural Language Analysis , 2022 .

[33]  Jack C. Wileden DREAM - an approach to designing large scale, concurrent software systems , 1979, ACM '79.

[34]  Jay F. Nunamaker,et al.  Computer-aided analysis and design of information systems , 1976, CACM.

[35]  Victor Weinberg,et al.  Structured Analysis , 1978 .

[36]  Donald E. Knuth,et al.  Structured Programming with go to Statements , 1974, CSUR.

[37]  Robert Balzer A Gobal View of Automatic Programming , 1973, IJCAI.

[38]  John McCarthy,et al.  Recursive functions of symbolic expressions and their computation by machine, Part I , 1960, Commun. ACM.

[39]  Elaine Kant The selection of efficient implementations for a high-level language , 1977, SIGART Newsl..

[40]  Thomas E. Cheatham,et al.  A System for Program Refinement , 1979, ICSE.

[41]  Noah S. Prywes Automatic Generation of Computer Programs , 1977, Adv. Comput..

[42]  Ben Wegbreit Goal-Directed Program Transformation , 1976, IEEE Trans. Software Eng..

[43]  Donald E. Knuth,et al.  The Art of Computer Programming, Volume I: Fundamental Algorithms, 2nd Edition , 1997 .

[44]  David R. Barstow A knowledge base organization for rules about programming , 1977, SGAR.

[45]  Peter Szolovits,et al.  An Overview of OWL, a language for knowledge representation , 1977 .

[46]  Richard Roderick Burton Semantic grammar: a technique for efficient language understanding in limited domains. , 1976 .

[47]  Jack R. Buchanan,et al.  A study in automatic programming. , 1974 .

[48]  Christopher Alexander Notes on the Synthesis of Form , 1964 .

[49]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[50]  Brian P. McCune The PSI Program Model Builder - synthesis of very high-level programs , 1977 .

[51]  Alan W. Biermann,et al.  Approaches to Automatic Programming , 1976, Adv. Comput..

[52]  John Darlington,et al.  A system which automatically improves programs , 1973, Acta Informatica.

[53]  Allen Newell,et al.  A Model for Functional Reasoning in Design , 1971, IJCAI.

[54]  Gerald Estrin,et al.  Specialization of SARA for software synthesis , 1977, DAC 1977.

[55]  Christopher W. Fraser A knowledge-based code generator generator , 1977, SIGART Newsl..

[56]  Herbert A. Simon,et al.  Experiments with a Heuristic Compiler , 1963, JACM.

[57]  Richard C. T. Lee,et al.  PROW: A Step Toward Automatic Program Writing , 1969, IJCAI.

[58]  Ben Wegbreit,et al.  Mechanical program analysis , 1975, CACM.

[59]  Richard L. Tenney,et al.  The decidability of the reachability problem for vector addition systems (Preliminary Version) , 1977, STOC '77.

[60]  Amir Pnueli,et al.  Use of a Nonprocedural Specification Language and Associated Program Generator in Software Development , 1979, TOPL.

[61]  Peter Wegner,et al.  Supporting a flourishing language culture , 1978, SIGP.

[62]  Robert Balzer,et al.  Automated derivation of program control structure from natural language program descriptions , 1977, SIGART Newsl..

[63]  John Darlington,et al.  A Transformation System for Developing Recursive Programs , 1977, J. ACM.

[64]  Mary Shaw,et al.  Abstraction and verification in Alphard: Defining and specifying iteration and generators , 1977 .

[65]  Burt M. Leavenworth Structured debugging using a domain specific language , 1977, Softw. Pract. Exp..

[66]  Harvey Bratman,et al.  The Software Factory , 1975, Computer.

[67]  Hans H. Kron,et al.  Programming-in-the-Large Versus Programming-in-the-Small , 1975 .

[68]  Nelleke Aiello,et al.  AGE (Attempt to Generalize): A Knowledge-Based Program for Building Knowledge-Based Programs , 1979, IJCAI.

[69]  Susan L. Gerhart,et al.  Correctness-preserving program transformations , 1975, POPL '75.

[70]  Gerald J. Sussman,et al.  A Computational Model of Skill Acquisition , 1973 .

[71]  Elaine Kant,et al.  Efficiency considerations in program synthesis : a knowledge-based approach , 1979 .

[72]  R. R. Willis,et al.  Computer Aided Design of Software Systems , 1979, ICSE.

[73]  M. E. E. Warren Program generation by questionnaire , 1968, IFIP Congress.

[74]  David R. Barstow,et al.  On Program Synthesis Knowledge , 1978, Artif. Intell..

[75]  L. Flon A Unified Approach to the Specification and Verification of Abstract DataTypes , 1978 .

[76]  Dennis F. Kibler,et al.  Program manipulation via an efficient production system , 1977, SIGART Newsl..

[77]  George E. Heidorn Automatic Programming Through Natural Language Dialogue: A Survey , 1976, IBM J. Res. Dev..

[78]  Michael Hammer,et al.  A very high level programming language for data processing applications , 1977, Commun. ACM.

[79]  Peter Wegner,et al.  Research directions in software technology , 1978, ICSE '78.

[80]  Robert Balzer,et al.  On the Transformational Implementation approach to programming , 1976, ICSE '76.

[81]  David R. Barstow,et al.  Observations on the interaction between coding and efficiency knowledge in the PSI Program Synthesis System , 1976, ICSE '76.

[82]  David E. Shaw,et al.  Inferring LISP Programs From Examples , 1975, IJCAI.

[83]  StrongJ.,et al.  The problem of programming communication with changing machines , 1958 .

[84]  D. V. Schorre META II a syntax-oriented compiler writing language , 1964 .

[85]  Wil Plouffe,et al.  An asynchronous programming language and computing machine , 1978 .

[86]  Walter F. Tichy Software Development Control Based On System Structure Description , 1980 .

[87]  Joseph Wilson Thomas Module interconnection in programming systems supporting abstraction. , 1976 .

[88]  Charles H. Moore,et al.  The FORTH approach to operating systems , 1976, ACM '76.

[89]  R. Goodman,et al.  A Software Laboratory Preliminary Report. , 1971 .

[90]  David Lorge Parnas,et al.  Review of David L. Parnas' "Designing Software for Ease of Extension and Contraction" , 2004 .

[91]  Paul Edward Rutter Improving programs by source-to-source transformation , 1977 .

[92]  Randall Davis,et al.  An overview of production systems , 1975 .

[93]  Robert Balzer,et al.  Principles of good software specification and their implications for specification languages , 1981, AFIPS '81.

[94]  Neil M. Goldman,et al.  A Relational Data Base Foundation for Process Specification , 1979, ER.

[95]  Douglas B. Lenat,et al.  BEINGS: Knowledge as Interacting Experts , 1975, IJCAI.

[96]  Richard C Waters,et al.  A System for Understanding Mathematical FORTRAN Programs , 1976 .

[97]  Donald Ervin Knuth,et al.  The Art of Computer Programming , 1968 .

[98]  N. P. Edwards,et al.  A look at characterizing the design of information systems , 1974, ACM '74.

[99]  Stephen Fickas,et al.  Automatic Goal-Directed Program Transformation , 1980, AAAI Conference on Artificial Intelligence.

[100]  Thomas E. Cheatham,et al.  A laboratory for the study of automating programming , 1971, AFIPS '72 (Spring).

[101]  Jack C. Wileden,et al.  Behavior Modeling During Software Design , 1978, IEEE Transactions on Software Engineering.

[102]  C. Cordell Green The design of the PSI program synthesis system , 1976, ICSE '76.

[103]  Anders Haraldsson A program manipulation system based on partial evaluation , 1977 .

[104]  Walter F. Tichy Software development control based on module interconnection , 1979, ICSE 1979.

[105]  Daniel Teichroew,et al.  The impact of problem statement languages on evaluating and improving software performance , 1972, AFIPS '72 (Fall, part II).

[106]  Daniel G. Bobrow,et al.  On Overview of KRL, a Knowledge Representation Language , 1976, Cogn. Sci..

[107]  Michel Hack,et al.  Decidability Questions for Petri Nets , 1975, Outstanding Dissertations in the Computer Sciences.

[108]  Robert Balzer,et al.  Informality in Program Specifications , 1899, IEEE Transactions on Software Engineering.

[109]  Walter Stewart Scacchi The process of innovation in computing: a study of the social dynamics of computing , 1981 .

[110]  Maurice H. Halstead,et al.  Elements of software science , 1977 .

[111]  Christopher W. Fraser,et al.  Automatic generation of code generators. , 1977 .

[112]  Richard C. Waters,et al.  Overview of the Programmer's Apprentice , 1979, IJCAI.

[113]  David Robbins Barstow,et al.  Automatic construction of algorithms and data structures using a knowledge base of programming rules , 1977 .

[114]  Thomas A. Standish Extensibility in programming language design , 1975, AFIPS '75.