Progress Report on the Fundamental Principles of Software Engineering
Authors: Robert Dupuis, Pierre Bourque, Alain Abran, Sybille Wolff, James Moore
Venue: Proceedings of the 4th IEEE International Symposium and Forum on Software Engineering Standards (1999)

In the 50 year history of software development, various methodologies, methods and techniques have been proposed to facilitate the development of software responsive to needs. Most have proved to be more specific to the then-current state of technology than has been understood at the time. As a result, most have proved to be less universally applicable than originally intended. At this point in software engineering history, enough such examples have accumulated that we can begin to perceive underlying principles that may, in fact, be fundamental, hence enduring in applicability. In fact, it is hoped that the identification of a set of fundamental principles will promote the recognition of software engineering as a well established engineering discipline. It will also provide a broader and richer framework for establishing relationships among groups of software engineering practice standards.This talk will report on a series of efforts undertaken to try and identify these fundamental principles'. A first workshop was held at the Forum on Software Engineering Standards Issues of 1996 (SES96) to establish what a fundamental principle is and which criteria it should conform to. Based on the results of this workshop, it was stated that a fundamental principle is less specific and more enduring than methodologies and techniques. It should be phrased to withstand the test of time. It should not contradict a more general engineering principle and should have some correspondence with "best practice." It should be precise enough to be capable of support and contradiction and should not conceal a tradeoff. It should also relate to one or more computer science or engineering concepts.A Delphi study was then conducted in 1997 over the Internet among 14 renowned personalities of the software engineering community, to identify a first candidate list of fundamental principles of software engineering. A second workshop was held at the International Symposium on Software Engineering Standards of 1997 (ISESSP7) to eliminate or reformulate some of the principles and the criteria.Subsequently, a second Delphi study was conducted in 1998 among 3 1 IEEE software engineering officials in order to improve the principles. From these studies, a list of fifteen candidate fundamental principles of software engineering has been compiled. Finally, an electronic survey is currently being conducted among the membership of the Technical Council on Software Engineering to help verify the relevance of these candidate principles for practitioners and to help determine which of these fifteen candidate principles are indeed fundamental.The current list of Fundamental Principles is (in alphabetical order): A. Apply and use quantitative measurements in decision-making B. Build with and for reuse C. Control complexity with multiple perspectives and multiple levels of abstraction D. Define software artifacts rigorously E. Establish a software process that provides flexibility F. Implement a disciplined approach and improve it continuously G.Invest in the understanding of the problem H.Manage quality throughout the life cycle as formally as possible I. Minimize software components interaction J. Produce software in a stepwise fashion K. Set quality objectives for each deliverable product L. Since change is inherent to software, plan for it and manage it M. Since tradeoffs are inherent to software engineering, make them explicit and document them N. To improve design, study previous solutions to similar problems 0. Uncertainty is unavoidable in software engineering. Identify and manage it For more detailed information, please see http://www.lrgl.uqam.ca/fpse