The Experience Factory: Packaging Software Experience

Since software deals with man-made artifacts, we need to view software development as an experimental science and build models of the artifacts and the processes by which they are manufactured. To do this we need to isolate and categorize the components of the discipline, define notations for representing these components, and specify the interrelationships among these components as they are manipulated. The components of the discipline consist of various processes (e.g. We need to build descriptive models of the discipline components to better understand (1) the nature of the processes and products and their various characteristics, (2) the variations among them, (3) the weaknesses and strengths of both, and (4) mechanisms to predict and control them. Models exist for some components, for example there are several mathematical models of programs and modules, there are parametrized cost models that attempt to predict the cost of a project based upon past experience, there are informal descriptions of the life cycle process. However many more models are needed and those models that do exist need to be more formally defined and further analyzed and integrated to provide a deeper understanding of the components and their interactions. Based upon analysis of these descriptive models, we need to build prescriptive models that improve both products and and the processes for creating them relative to a variety of qualities, provide feedback for project control, and allow the packaging of successful experience. Because the overall solutions are both technical and managerial, model building requires the support of a variety of disciplines both within and outside the discipline. The overall approach requires an approach, similar to the scientific method, that allows us to experiment, measure, learn, build better models, and reuse past experiences. For the past 15 years, we have been applying such an approach, the Quality Improvement Paradigm,in the Software Engineering Laboratory (SEL) at NASA/GSFC. It adapts the scientific method to software development. As stated in the first chapter, the basic steps involve: Planning: an iterative process involving characterizing the current project and its environment, setting the quantifiable goals for successful project performance and improvement, and choosing the appropriate process model and supporting methods and tools for this project. Execution: a closed-loop project cycle which involves executing the processes, constructing the products, collecting and validating the prescribed data ,and analyzing it in real-time to pride feedback for corrective action on the current project.

[1]  Victor R. Basili,et al.  A Methodology for Collecting Valid Software Engineering Data , 1984, IEEE Transactions on Software Engineering.

[2]  Victor R. Basili,et al.  Finding relationships between effort and other variables in the SEL , 1985 .

[3]  Victor R. Basili,et al.  The TAME Project: Towards Improvement-Oriented Software Environments , 1988, IEEE Trans. Software Eng..

[4]  Victor R. Basili,et al.  Evaluating Software Development by Analysis of Changes: Some Data from the Software Engineering Laboratory , 1985, IEEE Transactions on Software Engineering.

[5]  Victor R. Basili,et al.  Tailoring the software process to project goals and environments , 1987, ICSE '87.

[6]  Victor R. Basili,et al.  Comparing the Effectiveness of Software Testing Strategies , 1987, IEEE Transactions on Software Engineering.

[7]  Victor R. Basili,et al.  An Evaluation of Expert Systems for Software Engineering Management , 1989, IEEE Trans. Software Eng..

[8]  Victor R. Basili,et al.  Validating the TAME resource data model , 1988, Proceedings. [1989] 11th International Conference on Software Engineering.

[9]  Victor R. Basili,et al.  Analyzing the test process using structural coverage , 1985, ICSE '85.

[10]  Victor R. Basili,et al.  Iterative enhancement: A practical technique for software development , 1975, IEEE Transactions on Software Engineering.

[11]  Victor R. Basili,et al.  Evaluation of a software requirements document by analysis of change data , 1981, ICSE '81.

[12]  William W. Agresti SEL (Software Engineering Laboratory) Ada experiment: Status and design experiences , 1986 .

[13]  Marvin V. Zelkowitz,et al.  Analyzing medium-scale software development , 1978, ICSE '78.

[14]  Victor R. Basili,et al.  Reusing Existing Software , 1988 .

[15]  Victor R. Basili,et al.  Analyzing Error-Prone System Coupling and Cohesion , 1988 .

[16]  Victor R. Basili,et al.  Characterization of an Ada Software Development , 1985, Computer.

[17]  Victor R. Basili,et al.  Viewing maintenance as reuse-oriented software development , 1990, IEEE Software.

[18]  W. W. Royce,et al.  Managing the development of large software systems: concepts and techniques , 1987, ICSE '87.

[19]  Victor R. Basili,et al.  Monitoring Software Development Through Dynamic Variables , 1985, IEEE Transactions on Software Engineering.

[20]  Victor R. Basili,et al.  Experimentation in software engineering , 1986, IEEE Transactions on Software Engineering.

[21]  Victor R. Basili,et al.  Cleanroom Software Development: An Empirical Evaluation , 1987, IEEE Transactions on Software Engineering.

[22]  Barry W. Boehm,et al.  Software Engineering Economics , 1993, IEEE Transactions on Software Engineering.

[23]  H. D. Rombach,et al.  Towards a comprehensive framework for reuse: A reuse-enabling software evolution environment , 1988 .

[24]  Victor R. Basili,et al.  A meta-model for software development resource expenditures , 1981, ICSE '81.

[25]  Victor R. Basili,et al.  Software errors and complexity: an empirical investigation , 1993 .

[26]  Barry W. Boehm,et al.  A spiral model of software development and enhancement , 1986, Computer.

[27]  Victor R. Basili,et al.  Can the Parr curve help with manpower distribution and resource estimation problems? , 1981, J. Syst. Softw..

[28]  Harlan D. Mills,et al.  Cleanroom software development , 1981 .

[29]  C. V. Ramamoorthy,et al.  Proceedings of the 22nd international conference on Software engineering , 1976 .

[30]  Victor R. Basili,et al.  Programming measurement and estimation in the software engineering laboratory , 1981, J. Syst. Softw..

[31]  Victor R. Basili,et al.  Lessons learned in use of Ada-oriented design methods , 1987, WADAS '87.