Domain and Requirement Analysis for Programming Languages

 
Analysis
Requirements & Principles architecture:
Paradigms
substance:
Abstractions
structure:
Domains
building blocks: Features surface:
Syntactics
Defining PLs Language
List
foundational safety flexibilized

  1. Domains in Programming Language Development
  2. Requirements Analysis
  3. What Happens to Programs?
  4. Programm Development Processes
  5. What Kind of Changes Occur in the Design/Programm?
  6. The Program Design/Implementation Boundary
  7. Some Design Patterns

 
If you know further references, please don't hesitate to tell me (Ulf Schünemann), likewise if you have any suggestions.

Compare this: Scot A. Becker's Perspective and Abstraction (JCM Dec. 2000): There are two orthogonal classifications of models:

  • at what abstraction/detail level they model: conceptual (e.g. ORM) vs. logical (e.g. ER) vs. physical -- each notation is engineered for one level.
  • from which development phase perspective they model: analysis vs. design vs. implementation (or construction) -- not all notations are useful for all phases.

    Domains in Programming Language Development

    For comparison: A program development process produces a program. Application domain: A program is applied as a tool for a large variety of activities. Examples include operating systems, text processing, parallel processes distributed applications, databases, real-time systems. Problem domain: The problem domain of the program development process is the application domain of the to-be-developed program.
    A PL development process produces a programming language.
    (1) Application domain: PLs are applied as tools for a variety of activities: (2) Problem domain: The problem domain of the language development process is the application domain of the to-be-developed language.
     _____________
    | language    | problem (domain)       prototyping
    | development |--------------+.......> teaching
    | processes   |              |         language research
    |_____________|              |         intermediate representation
        | solution               |         computer communication
        | (domain)               |         ...
        |                    ____V________
      __V__                 | implement.  |
     /      \  prog. lang.  | activities  |
    | implem.| application  | during      | problem (domain)
    | prog.  |------------->|(different   |----------------.
    | langs. | (domain)     | sorts of)   |                |
     \______/               | program     |                |
       :  :                 | development |                |
       :  :                :| processes   |                |
       :  :               : |_____________|                |
       :  :              :       | solution                |
       :  :             :        | (domain)                |
       :  :            :         |                         |
       :  V           :       ___V____   program       ____V_______
       :  CASE       :       /        \  application  |            |
       :  developers        |          | (domain)     |(different  |
       :                    | programs |------------>#| sorts of)  |
       :                    |          |    \ /     / | activities |
       V                     \________/      |     |  |____________|
     compiler/                               |     |
     interpreter ..................\    program   application
     developers                    / processing   interface
    

    Requirements Analysis

    What do we want to achieve with a programming language? It should support program development!
    Requirements for programming languages are like requirements for any other product, e.g., software: «A requirement states desired relationships in the environment [aka. problem domain] to be brought about by the hardware/software machine that will be constructed and installed in the environment.» [SfR] Jackson, Zave: Deriving Specifications from Requirements: an Example; ACM/IEEE ICSE-17; ACM 1995.

    Many requirements will depend on specific characteristics of the targeted program development process. Some requirements are always of concern (but with different relative importance and with different importance relative to additional requirements).

    • It should be possible in principle for the program development process to arrive at a program which can be used to solve the given problem.
    • The user should be able to use the delivered program to solve most aspects of the problem even if the program is not a complete solution (because 100% solutions are improbable).
    • Development progress towards a solution should be predicatable.
    • Program development should not require excessively many or scarce resources (team training, team size, special-purpose experts, development time, development environment).
    • Program use (execution) should not require excessively many or scarce resources (user/operator training, operators, execution time, execution environment).
    • Development processes (including maintainance) and delivered programs (including upgrades) improve with repeated use of the language in more and more projects.
    • etc ...
    In the following we look at some classifications on different levels:
    On the
    program application level: What is the intended application of programs in your PL?
    On the application interface level: What is the intended interface between the program and it application domain?
    On the program processor level: Note that only an executing program can be applied to solve a problem. What is our idea of how the (source-code) program becomes executed?
    On the programming language application level: What are the intended programming processes in which the language is used?

    What Happens to Programs?

    Written programms are applied to some application domain, communicating with it through some application interface, after they have been or while they are processed by a program processor (see diagram).

    Intended Program Application Domain

    [CPL] Linda Weiser Friedman: Comparative Programming Languages: generalizing the programming function; Prentice-Hall, 1991.

    Compare that to programs: A general purpose program supports several different sorts of activities, i.e. can be applied in different (program) application domains. E.g. an operating system package with utility programs (Windows), a general purpose macro scripting tool, shells/environments (Netscape Communicator, Emacs, Oberon, Norton Commander) ... [you know other, better examples?].
    The opposite is an application that supports just one sort of activity (application domain).

    The program application domain can also influence the software process which in turn might influence what the most suitable language is. «Control systems indicate an area of significant use [of formal methods] ... Some applications [of formal methods] are traditional computer science areas such as databases, language processors, and arithmetic units. Timing specification and analysis remains an outstanding problem ...» [FormalInInd]

    Intended Program Application Interface

    The interface of the running program with the application domain can have different forms: Caveat: combinations are possible.

    Intended Program Processors

    «High-level programming languages and their translators transform bare hardware into abstract, high-level computers ... Every level of software provides an additional layer of abstraction, thereby raising the level of the perceived virtual computer.» [CPL 53+] Caveat: This distinction is not as clear-cut as it might seem: There can also be interpreters for languages which are usually compiled, but they are not as evolved as the interpreters for languages which are not compiled; when Sun introduces a Java chip, then Java could be called a machine language, and the JVM becomes an ``emulator'' for a genuine Java machine.

    Programm Development Processes

    [SAIA] Dilip Soni, Robert L. Nord, Christine Hofmeister: Software Architecture in Industrial Applications; 196-207 in SE'95.

    Program development processes can differ in the following ascpects that might or might not be supported by a programming language.

    «The Programming Process: It is advantagerous to consider the programming process as a kind of modelling. Seen form a certain viewpoint a computer program is a concrete model of some system of phenomena. It is concrete because it can be manipulated directly (using a computer to execute it); it is a model because it has been created in order to give some answers to some problem that exists outside the computer (or at least outside the program itself).
    ...
    From a slightly different viewpoint, a computer program is a form of communication. One way to consider this is that a program is a way to communicate the needs of the programmer and his or her client to a computer.» [DAOOC++, 21]

    [DAOOC++] Joseph Bergin: Data Abstraction: the object-oriented approach using C++; McGraw-Hill, 199?.

    Intended Programmers' Background

    Different understandings by the programmers of what a program is/how it should be viewed/what one wants to express by it will lead to different PL-requirements (see Paradigms). Oft-disussed is whether experience with certain programming languages has an influence in learning a certain style of new language/of programming.

    [C Liu, S Goetze, B Glynn: What Contributes to Successful Object-Oriented Learning? OOPSLA'92] analyzed the learning success of 495 students after 4 1/2 day introductory courses on object-oriented programming and design with Smalltalk as vehicle in an uncontrolled experiment (observation). The subjective score given by the instructors to the subjects was correlated to several criteria (Attention: Without statistical evaluation, you cannot tell how significant the differences between different criteria's coefficient is):
    Experience indicator coefficient (simple linear regression) significance p (likelyhood of random correlation)
    lifetime lines of code (<100 ... >100k) .1873 < .00005
    largest program (? ... ?) .1739 < .00005
    months since last programming (<1 ... >120) -.1654 < .00005
    most weeks spent writing a program (<1 ... >104) .1381 .0003
    number of PL families (pradigms) programmed in (0 ... 6) .1284 .0002
    number of PLs known (0 ... 14) .0857 < .00005
    Language L mean score of subjects most familiar w. L (and their number) mean score of others difference significance p (likelyhood of difference by chance)
    PL/I-dialects
    (used for systems programming)
    3.44 (28) 3.00 -.44 .0031
    C 3.28 (160) 2.91 -.37 < .00005
    PL/I 2.86 (73) 3.06 +.20 .0422
    assembly lang. 2.79 (42) 3.05 +.26 .0368
    Cobol 2.64 (26) 3.05 +.41 .0095
    Basic 2.57 (12) 3.04 +.47 .0384
    Language L mean score of subjects w. largest program in L (and their number) mean score of others difference significance p (likelyhood of difference by chance)
    C++ 4.25 (2) 3.02 -1.32 .0246
    C 3.29 (121) 2.94 -.37 < .00005
    assembly lang. 2.79 (52) 3.05 +.26 .0175
    Cobol 2.75 (33) 3.05 +.30 .0334
    Language L mean score of subjects knowing L (and their number) mean score of others difference significance p (likelyhood of difference by chance)
    C++ 3.54 (42) 2.98 -.56 < .00005
    Smalltalk 3.52 (33) 2.99 -.53 .0001
    Pascal 3.22 (254) 2.82 -.40 < .00005
    C 3.15 (342) 2.76 -.39 < .00005
    Fortran 3.13 (187) 2.96 -.17 .0175
    Cobol 3.05 (168) 3.01 -.04 .6398
    assembly lang. 3.03 (237) 3.02 -.01 .8768
    Paradigm P mean score of subjects knowing L in paradigm P mean score of others difference significance p (likelyhood of difference by chance)
    Procedural 3.04 (484) 2.42 (only 11!)-.62 .0085
    OO 3.39 (103) 2.93 -.46 < .00005
    Functional 3.24 (119) 2.96 -.28 .0004
    Application generators 2.86 (81) 3.06 +.20 .0345
    «[W]e believe that the strong, and perhaps unexpected, association between C experience and object learning arises from our observation that C programmers tend to be more sophisticated programmers. They are often those who have wrestled with demanding programming problems, sometimes in the context of a formal computer science curriculum. ... [P]eople who have C experience are just likely to also be those with the software sopistiphication to be successful with objects.»

    Architecture

    See Decomposition / Structuring / Code Management features in PLs.

    a. Architectural Style

    b. Architectural Perspectives used in the SW development for thinking about the system structure: [quotes from SAIA]

    Which perspective of software architectur is supported by language constructs? Are different perspectives separated or forced to coincide?
    Note: «Many of the reported successes of the surveyed systems resulted from allowing the different architectures to develop independently while maintaining the relationship between them. Similarly, some of the problems they reported were a direct result of merging or intermingling these architectures.»
    «[C]ombining module and execution architecture can group together functional components that are not logically related. ... Porting often requires changes in the execution architecture. When the module architecture is made to mirror the execution architecture, the module architecture must change in response to changes in the execution architecture. ... Careful separation of [decisions on the different perspectives] faciliates the adaption of reusable components to different execution architectures.» [SAIA]

    More ...