Chapter 7. Software Engineering
Paul Vixie
Software engineering is a wider field than “writing programs.” Yet, in many Open Source projects, programs are simply written and given away. It’s clear from historical examples that software need not be engineered in order to be widely used and enjoyed. In this essay we’ll look at some general elements of software engineering, then at the Open Source community’s usual equivalents to these elements, and then finally at the implications of the differences between the two approaches.
The Software Engineering Process
The elements of a software engineering process are generally enumerated as:
Marketing Requirements
System-Level Design
Detailed Design
Implementation
Integration
Field Testing
Support
No element of this process ought to commence before the earlier ones are substantially complete, and whenever a change is made to some element, all dependent elements ought to be reviewed or redone in light of that change. It’s possible that a given module will be both specified and implemented before its dependent modules are fully specified—this is called advanced development or research.
It is absolutely essential that every element of the software engineering process include several kinds of review: peer review, mentor/management review, and cross-disciplinary review.
Software engineering elements (whether documents or source code) must have version numbers and auditable histories. “Checking in” a change to an element should require some form of review, ...