Fundamental Principles of Software Reuse

James W. Moore

The MITRE Corporation, W534
1820 Dolley Madison Blvd., Reston, VA 22102
Tel: (703) 883-7396
Email: moorej@acm.org

Abstract

A number of efforts in the software engineering standards community are intended to identify and articulate fundamental principles of software engineering as a means of unifying the corpus of software engineering practice standards. A planning group of the IEEE Computer Society Software Engineering Standards Committee (SESC) has recommended initiating a standards effort to write a document providing principles of reuse. This paper surveys related efforts regarding fundamental principles and proposes an initial candidate set of software reuse principles.

Keywords: software reuse, software engineering, standards, fundamental principles

Workshop Goals: Develop a candidate set of principles for software reuse.

Working Groups: Reuse and product lines.

1 Background

My involvement in software reuse dates to 1988 when I was appointed as the original System Architect for IBM's participation in the DARPA STARS (Software Technology for Adaptable, Reliable Software) program. Our reuse efforts primarily focused on library technology and I was the IBM lead in founding the ASSET reuse library in cooperation with DARPA and SAIC. An interest in library interoperability led to the formation of the Reuse Library Interoperability Group (RIG) which I served as Chair for five years. The RIG's mission was completed earlier this year (1996) when it completed the transfer to the IEEE SESC of a complete body of proposed standards for effecting library interoperability. As a member of the Management Board of the SESC, I was tasked to chair a Reuse Planning Group consisting of 35 members from twelve countries to chart a course for software engineering practice standards related to reuse. One of the recommendations of the group's Action Plan was to initiate a standards effort to articulate the fundamental principles of software reuse.

I was honored to be the recipient of the "Best Paper" award at the Third International Conference on Software Reuse and I hold one United States patent in the area of software reuse.

2 Position

An oft-cited desideratum for the development of a standard is that it be solidly grounded in existing practice. The presumption of prior practice underlies many of the applications of standards. For example, courts of law often take the view that the diligent application of appropriate standards is strong evidence refuting allegations of irresponsible practice.

Grounding standards in practice serves well in disciplines that are solidly rooted on a broadly accepted body of knowledge built, in turn, on mathematical, scientific and engineering principles. The existence of the principled body of knowledge implicitly imposes order, organization and rationalization upon the practices of the discipline.

Unfortunately, software engineering does not yet benefit from the existence of an organized and principled body of knowledge. Lacking this implicit organizing force, standards for software engineering practice have suffered serious disadvantages, including:

Ad hoc nature: It's not at all apparent if or why many software engineering standards really do represent best practice. It is merely asserted on the authority of the developing organization.

Lack of integration: Too many software engineering standards are islands, written in isolation from other useful practices and without apparent relation to them.

Unnecessary overlap: Lacking overall organizing principles, too many software engineering standards treat the same subject matter from accidentally different viewpoints, complicating issues of conformance.

Contradiction: There are instances where different software engineering standards provide conflicting advice on the same subject, rendering dubious their claims of "best" practice.

It does not suffice to view software engineering standards as merely records of practice; instead they should be viewed as vehicles for reconciling successful practice with the underlying principles of the profession. It is desired that the fundamental principles of software engineering should be specialized cases of general engineering principles, supplemented by principles (if any) unique to software engineering. Software Engineering Standards should describe best practice validated by successful patterns of usage, but rationalized, organized and explained in terms of the fundamental principles.

Software engineering standards developers have begun to perceive the crucial role for explicitly articulated fundamental principles:

1. The responsible international organization, ISO/IEC JTC1/SC7, has initiated a proposal to develop a Technical Report describing Software Engineering Principles and Guidelines on their Application [4].

2. The Business Planning Group of the IEEE SESC has written a White Paper on Underlying Principles for IEEE Software Engineering Standards [2].

3. A workshop on Fundamental Principles of Software Engineering was conducted at the 1996 Forum on Software Engineering Standards Issues, 21-25 October 1996, Montréal, Québec [7].

4. The Reuse Planning Group of the IEEE SESC has recommended the initiation of an IEEE standards effort to articulate principles of software reuse [3].

The last two of these efforts will be described in this paper.

2.1 Fundamental Principles of Software Engineering

The Montréal workshop reached a number of conclusions regarding the characteristics of fundamental principles, criteria for evaluation of candidates, and a beginning list of candidates [5]. The conclusions of the workshop, published under the collective name of "Jabir" are closely paraphrased below:

Characteristics: Jabir specified some characteristics of fundamental principles, partly by a priori reasoning and partly through experience in examining candidate principles.

* Any particular statement of a fundamental principle is imperfect (but this should not be regarded as an embarrassment or an obstacle to use).

* At any time, some fundamental principles are tacit.

* Software engineering's fundamental principles are derived by "multiple inheritance" from other disciplines by adopting them as is, by specializing them, restating them, combining them, etc.

* Jabir is willing to believe (for working purposes) that software engineering may have some unique principles. (This may be regarded as a consequence of the observation that the previously listed three characteristics may profoundly obscure the perception of the relationship to more general principles.)

In the examination of candidate principles, Jabir developed some criteria for the recognition of fundamental principles (FP):

* FPs are less specific than methodologies and techniques.

* FPs are more enduring than methodologies and techniques.

* FPs should be selected or abstracted from practice.

* Software engineering FPs should not contradict more general FPs ...

* ... but, there may be tradeoffs in the application of FPs.

* An FP should not conceal a tradeoff.

* An FP should be precise enough to be capable of support or contradiction.

* An FP should relate to one or more underlying concepts. (See next section.)

Underlying Concepts versus Fundamental Principles: In its search for fundamental principles, Jabir discovered that they are easily confused with something that came to be characterized as "underlying concepts." Underlying concepts are to be regarded as scientific statements describing the nature of the world in which we live. They must be capable of validation by experiment and are judged on the basis of their correctness when subjected to experiment. On the other hand, fundamental principles are to be regarded as engineering statements which prescribe the solution to problems. They should be rigorously evaluated, but in practice rather than in the laboratory, and judged by whether they provide useful and substantial contributions to the successful solution of real problems of significant size and scope. In general, we would expect fundamental engineering principles to be strongly related to underlying scientific concepts.

Candidate Fundamental Principles of Software Engineering: Jabir lists the following as candidates for further consideration as fundamental principles. Each is a confirmation or a restatement of a candidate submitted to the Montréal workshop.

"Pattern the solution after prior solutions to similar problems."

"Control complexity with multiple perspectives and multiple levels of abstraction."

"Software engineering, as part of a large system design process, must recognize the ill-defined and fluid nature of software requirements and take appropriate steps to ensure that the resulting products faithfully meet the user's true needs." [1]

"Maintainers should establish criteria for re-engineering as an alternative to fixing."

"Articulate the desired characteristics of quality and explicitly trade among them."

"Evolutionary concerns should be built into the life cycle."

"Plan for evolution. Document whatever is necessary for the planned evolution."

"Select a combination of tools and techniques suitable to the job."

2.2 The Planned Standard for Principles of Software Reuse

State of Reuse Standards: After surveying twenty-nine available or in-process normative documents regarding software reuse, the SESC Reuse Planning Group reached some conclusions regarding software reuse, closely paraphrased in the remainder of this section [3].

In reviewing the data regarding software reuse techniques and the body of existing normative works, the study group made the following general observations regarding the practice of software reuse:

* There is sparse evidence regarding the effectiveness of specific reuse techniques.

* The principal drivers and obstacles to successful reuse are non-technical in nature.

* Even though the requirement for reuse is contemporary, much of the technology is still emerging.

These observations argue for a conservative approach, standardizing only what is necessary to permit the continued evolution of the field. Those necessary items might include a framework for the discussion of reuse processes and practices, terminology, acquirer/supplier provisions, and library interfaces.

Among other recommendations, the group determined that the SESC collection should articulate principles for software reuse. These principles should be traceable to a set of fundamental principles of software engineering and based upon successful patterns of usage. This would ensure that the standards are both principled and based on actual practice.

2.3 Candidate Principles of Software Reuse

The Reuse Planning Group listed a set of candidate principles for software reuse in the hope that a working group could use them as a point of departure [6]:

* Build a software domain architecture as a framework for reuse activities.

* Use a software development process that promotes and controls reuse.

* Reuse more than just code.

* Practice domain engineering.

* Integrate reuse into project management, quality management and software engineering activity.

* Organize the enterprise to facilitate partnering to achieve reuse across product boundaries.

* Use automation to support reuse.

* Couple modern reuse theory and technology with natural, traditional organizational reuse practices.

3 Summary and Future Work

ISO/IEC JTC1/SC7 will next consider the issue of fundamental principles at a Strategic Planning Workshop and at its annual plenary meeting, both occurring 7-13 June 1997, in Walnut Creek, California.

A member of the Jabir group, Robert Dupuis, has agreed to organize and conduct a Delphi study using a panel of software engineering experts to further expand and refine the list of fundamental principles of software engineering created at the Montréal workshop. The Jabir group plans to meet next at the International Symposium for Software Engineering Standards, 2-6 June 1997 in Walnut Creek, California.

To implement the Action Plan of the Reuse Planning Group, SESC has formed a Reuse Steering Committee (RSC) under the leadership of Tim Niesen, tmn@swl.msd.ray.com, of Raytheon. The RSC will coordinate and manage all of the IEEE's standards efforts related to software reuse, including the effort to articulate fundamental principles of reuse. Interested individuals are invited to join the RSC by contacting Niesen.

References

[1] Watts Humphrey, "Software Engineering", in Anthony Ralston, Encyclopedia of Computer Science, 1993.

[2] IEEE Software Engineering Standards Committee, Underlying Principles for IEEE Software Engineering Standards, 21 August 1996. Available from the Chair, Leonard L. Tripp, leonard.l.tripp@boeing.com.

[3] IEEE Software Engineering Standards Committee, Reuse Planning Group, Action Plan, 17 September 1996. Available at URL: " http://www.sesc-rpg.mews.org/".

[4] ISO/IEC JTC1/SC7, Design Specification for the Structure and Content: Software Engineering Principles and Guidelines on their Application, ISO/IEC JTC1/SC7/BPG/N103.

[5] Jabir, A Search for Fundamental Principles of Software Engineering: Report of a Workshop conducted at the Forum on Software Engineering Standards Issues, Montréal, Quebec, Canada, 21-25 October 1996 (forthcoming).

[6] Proprietary, 1996. The candidate principles noted in [3] were adapted from a proprietary corporate report that was shared with the group.

[7] 1996 Forum on Software Engineering Standards Issues, 21-25 October 1996, Montréal, Québec. Proceedings are available at URL:" http://saturne.info.uqam.ca/Labo_Recherche/Lrgl/ses96.htm".

Biography

James W. Moore is a Senior Principal Engineer at The MITRE Corporation in Reston, Virginia following a career of twenty-five years with IBM. At MITRE, his role is Special Assistant for the Application of Software Standards and Reuse, involving among other tasks, the job of coordinating MITRE's corporate involvement in software standardization. As might be expected, he participates in a number of standardization activities including the efforts to adopt and adapt the international life cycle process standard, ISO/IEC 12207, for use in the United States, thereby serving as a member of the U. S. delegation to ISO/IEC JTC1/SC7 and to a joint EIA/IEEE committee formulating the U. S. standard. He is the convener of ISO/IEC JTC1/SC22/WG9 (Ada), a member of the Management Board of the IEEE Software Engineering Standards Committee, and the Chair of the ACM's Technical Standards Committee. Recently, he was honored as a member of the Golden Core of the IEEE Computer Society. He holds degrees from Syracuse University and the University of North Carolina.