Royce70's Seven Phases

[Royce 1970] describes the base software process as consisting of seven phases.

(Double-click to enlarge)

System requirements come first. Since Royce was working in combined hardware/software systems, this phase explained what the whole spacecraft should do. The next phase, Software Analysis, specializes the system requirements to just the software component. Then comes analysis, as described above. Analysis doesn’t lead directly into coding, though. There’s a Program Design phase between them. This phase starts by dividing the work. There will be N parts to the software. Those have to be named and their interfaces with each other defined. Then each part has to be designed. Nowadays, we’d do that design by writing code in Java or C or Elixir or whatever, and let the compiler translate our files full of classes or exported functions or whatever into executable code. Back in those days, though, actual code was a thin veneer over raw machine instructions. So people would write a “detailed design” that would look – extremely roughly – like modern code. And then some person (perhaps a different one) gets to play compiler and fill in the details. That happens in the “Coding” phase. Then you do testing. Royce leans heavily on visual inspection and manual analysis because, for some things quote “the computer is too expensive.” For example, it seems he wants people to hand-execute quote “every logic path in the computer program at least once with some kind of numerical check.” Testing on actual hardware – trying out the program – is a shorter process, which he describes as “checkout” – implying that it’s on the cursory side. Then the system exits development and goes into operations. There’s no mention of anyone ever touching the code again. Nowadays, software isn’t usually finished: immediately after releasing code, you expect to turn around and modify the same code for the next release, which might come the next day. Back then, you’d generally move on to a new project or switch from making the product to running it throughout its life. That might involve debugging and patching (as has been made famous by the Voyager probes, which have been kept running by hook or by crook far beyond their expected lives), but it’s not really new development.

---

Development and Maintenance – such a weird anachronism