201 principles of software development

  • Authors:
  • Alan M. Davis

  • Affiliations:
  • University of Colorado at Colorado Springs

  • Venue:
  • 201 principles of software development
  • Year:
  • 1995

Quantified Score

Hi-index 0.00

Visualization

Abstract

From the PrefaceIf software engineering is really an engineering discipline, itis the intelligent application of proven principles, techniques,languages, and tools to the cost-effective creation and maintenanceof software that satisfies users' needs. This book is the firstcollection of software engineering principles ever written in onevolume. A principle is a basic truth, rule, or assumption aboutsoftware engineering that holds regardless of the technique, tool,or language selected. With few exceptions, the principles publishedhere are not original. They have been extracted from the writingsof many software engineering practitioners and researchers. Theseindividuals have been unselfish enough to share their experiences,ideas, and wisdom with all of us. I make no claim that these 201principles are mutually exclusive. Unlike Boehm's seven "basic"software engineering principles, a combination of some of theseprinciples may imply another. I also make no claim that these 201principles are 100 percent compatible. The adages, "Absence makesthe heart grow fonder" and "Out of sight, out of mind" are eachtrue, and each can be applied to life, but they cannot both be usedto justify the same decision. The principles contained in thisvolume are all valid, and they can all be used to improve softwareengineering, but it may be impossible to apply some combinations ofthem on any one project.Manny Lehman [LEH80] has stated eloquently why principlesunderlying software engineering are inherently different fromprinciples underlying other areas of human exploration. He statesthere is no reason to expect such principles to have the same"precision and predictability of [say] the laws of physics." Thereason for this is that, unlike physics or biology, the process ofsoftware development is "managed and implemented by people; thus inthe long term [its behavior should] be expected to beunpredictable, dependent on the judgments, whims, and actions of[people]." On the other hand, software does seem to exhibit manyregular and predictable traits [LEH80]. These lead to many basicprinciples that can be enumerated and used by inexperienced andexperienced software engineers and managers to enhance the qualityof both the software engineering process and software products.The purpose of this book is to present in one volume theprinciples of software engineering as a reference guide. It isaimed at three classes of readers:1. Software engineers and managers. In this book you can findout what is good and what is not. If you are new at softwareengineering or software management, here is a place to find outwhat you need to know.2. Students of software engineering. For students, there are twoprimary uses of this book. First, here are the basic, nondogmatictenets that every software engineer should know. Second, thereferences in these pages point to some of the best papers andbooks ever written on software engineering. If you do nothing otherthan read the items referenced, this book will have beensuccessful, and you will have been exposed to a wealth ofknowledge.3. Software researchers. Researchers may often find it difficultto find the original source of an idea. I have provided referencesto publications that reflect either the original source or analternative, excellent work that refers to the original source.I sincerely hope that everybody who buys this book attempts toread as many of the referenced works as possible. My briefdescription of the principle is intended to be friendly,easy-to-read, and insightful. But for real appreciation you need toread the referenced works. These works are not necessarily theoriginal source of the idea (although in many cases they are). Noris the given principle necessarily a primary point of thereference. In every case, however, the referenced work contains awealth of helpful background, insight, justification, backup data,or information related to the principle.In summary, this book should be the first place for you to lookup any software engineering idea. However, this is a book ofprinciples, not techniques, languages, or tools. You will not findout how to use any techniques, languages, or tools which theprinciples described here transcend. Furthermore, this book triesto avoid all fads, good or bad! For the most part, fads are popularfor three to ten years, then lose favor. The underlying principlesthat might be behind a fad can be found in this volume, but not thefad itself. Thus, for example, you won't see any reference toobject-orientation per se here, but you will find many referencesto the principles underlying object-orientation, such asencapsulation.The principles are organized into general categories to aid infinding them and to aid in relating similar principles. Thesecategories correspond to primary phases of software development(that is, requirements, design, etc.) and to other critical"support" activities, such as management, product assurance, and soon, as shown in Fig. P-1.REFERENCES[BOE83] Boehm, B., "Seven Basic Principles of SoftwareEngineering," Journal of Systems and Software, 3, 1 (March 1983),pp. 3-24. doi:10.1016/0164-1212(83)90003-1[LEH80] Lehman, M., "On Understanding Laws, Evolution, andConservation in the Large-Program Life Cycle," Journal of Systemsand Software, 1, 3 (July 1980), pp. 213-221. doi:10.1016/0164-1212(79)90022-0[ROY70] Royce, W., "Managing the Development of Large SoftwareSystems," WESCON '70, 1970; reprinted in 9thInternational Conference on Software Engineering, Washington, D.C.:IEEE Computer Society Press, 1987, pp. 328-338.