Skip to content
Study Hall
Lesson 1 of 7Software Development & the CPT
Unit 7 · Lesson 1 of 7

The Software Development Life Cycle

The five stages every software project passes through, why requirements come before code, and why finding a defect early is so much cheaper.

5 min read10 practice questionsAsk AI about this →

Key things to remember

  1. 1The stages are analysis, design, implementation, testing and maintenance — in that order, and maintenance loops back to analysis.
  2. 2A requirement must be checkable: if you cannot name a test for it, rewrite it.
  3. 3Functional requirements say what the program does; non-functional say how well it must do it.
  4. 4Waterfall completes each stage once; iterative repeats all the stages on small slices to get feedback early.
  5. 5A defect found after release costs roughly 30 times what it costs at the analysis stage.
  6. 6Maintenance consumes the majority of a successful program's total effort.

Most first programs are written by opening the editor and starting to type. That works for twenty lines. Past a few hundred, the program that gets written stops matching the program that was wanted, and no amount of clever coding rescues it. The software development life cycle is the ordered set of stages professionals use to stop that happening: understand the problem, design a solution, build it, prove it works, and keep it working.

Software is built in a cycle, and the cycle never really stops.Analysewhat is neededDesignplan it outImplementwrite the codeTestfind the bugsMaintainfix and improvenew requirements and new bugs start the cycle againWhat it costs to fix one defect, by the stage it is caught in×1analyse×2design×5code×15test×60in useA mistake caught while planning costs a conversation. The same mistake caught after release costs a patch, a re-release and trust.
Fig 1The five stages, drawn as a cycle because maintenance feeds straight back into analysis.
StageThe question it answersWhat comes out of it
AnalysisWhat exactly is the problem, and what must the solution do?A written list of requirements
DesignHow will the solution be structured?Pseudocode, flowcharts, IPO charts, screen sketches
ImplementationWhat is the code?Working, commented source code
TestingDoes it do what the requirements said?Test cases, results, and a list of defects fixed
MaintenanceWhat needs changing now that people are using it?Fixes, improvements, updated documentation

The stages are not a ritual. Each one exists because skipping it is expensive. Analysis exists because the most common reason software fails is that it solves the wrong problem perfectly. Design exists because it is far quicker to move a box on a diagram than to rewrite a working module. Testing exists because a program that has only ever been run on the data its author imagined is not evidence of anything.

A requirement is a single, checkable statement about what the finished program must do. "The program should be user-friendly" is not a requirement, because nobody can ever prove it true or false. "The program must reject any mark below 0 or above 100 and display an error message" is a requirement: you can write a test for it and get a yes or a no. Vague requirements are the reason so many projects end in an argument about whether they are finished.

Vague wishUsable requirement
Keeps track of marksStores up to 30 marks per student and reports each student's average to one decimal place
Is fastDisplays the search result within one second for a list of 1000 records
Handles bad inputRejects non-numeric input and re-prompts, without stopping the program
Looks goodDisplays all output in a fixed-width table with column headings
A requirement you cannot test is not a requirement
Before you accept any line of a specification, ask what test would prove it had been met. If you cannot describe that test in one sentence, the requirement is still a wish and needs to be rewritten with a number, a limit or a specific behaviour in it.

Requirements come in two kinds. Functional requirements say what the program does: calculate, store, display, validate. Non-functional requirements say how well it must do it: how fast, how reliably, on what devices, how easy it is to learn. Both matter, and beginners almost always write only the first kind — which is how you end up with a program that produces the right answer after thirty seconds of waiting.

AWaterfall
  • Finish each stage completely, then move to the next
  • All requirements are settled before any code is written
  • Works when the problem is well understood and stable
  • Its weakness: a wrong requirement is not discovered until testing, by which point everything is built
BIterative / agile
  • Build a small working slice, review it, then build the next
  • Requirements are expected to change as people see the software
  • Works when the problem is fuzzy or the users are unsure
  • Its weakness: without discipline the design drifts and no version is ever declared finished

In plain terms: waterfall is one long trip through the stages, and iterative is many short trips. An iterative team still analyses, designs, builds and tests — they simply do all five on a two-week slice of the product rather than on the whole thing. The advantage is feedback. If the requirement was wrong, an iterative team finds out in two weeks instead of eight months, and has thrown away two weeks of work instead of eight months of it.

Which one to use for a school-sized project
Iterative, almost always. Get one small end-to-end piece working — read the data, do one calculation, print one result — and only then add features. A half-finished program that runs is worth far more than a complete design that has never been compiled.

The single strongest argument for doing the early stages properly is arithmetic. A mistake in a requirement costs almost nothing to fix while it is still a sentence in a document. The same mistake, discovered after the software has shipped, means re-analysing, re-designing, re-coding, re-testing, and re-distributing it to everyone who already has the old version. Every stage it survives multiplies what it costs to remove.

Defect found duringRoughly what it costs to fixWhy
Analysis1×Change one sentence in the requirements
DesignAbout 3×Redraw part of the design; nothing is built yet
ImplementationAbout 5×Rewrite code and the design behind it
TestingAbout 10×Rewrite, then re-run the whole test set
After release30× or moreAll of the above, plus redistribution and the cost of the damage already done
Relative costs, based on long-running industry studies. The exact numbers vary; the shape never does.
Maintenance is the longest stage, not the last one
Most of the effort ever spent on a successful piece of software is spent after its first release, on fixes, new requirements and changes to the world around it. That is why readable code and honest documentation are not politeness — they are what makes the biggest stage of the whole life cycle affordable.

Worked examples

Reveal one step at a time and try to beat it to the next line.

Example 1
A request arrives: "I want a program that keeps track of the club's fundraising." Turn it into four usable requirements and name the stage you are in.
Example 2
A requirement was misunderstood. Fixing it during design would have taken about one hour. The team found it after release instead. Using the relative cost table, estimate the repair effort, and explain where the extra time goes.
Example 3
A team is building a booking system for a problem nobody fully understands yet, and the users keep changing their minds. Recommend waterfall or iterative, and justify it.

Where marks get lost

  • Starting to code during the analysis stage, which locks in a design before the problem is even understood.
  • Writing requirements as wishes — "easy to use", "fast" — that no test can ever confirm.
  • Listing only functional requirements and ignoring speed, reliability and input validation.
  • Treating testing as a final glance rather than a planned stage with written test cases.
  • Assuming the project ends at release, and leaving code and documentation in a state nobody can maintain.

Flashcards 8

Name the five stages of the software development life cycle.
What is produced by the analysis stage?
What makes a requirement usable?
Functional vs non-functional requirement
+ 4 more

Practice

1
Order the stages of the software development life cycle.
  1. 1Maintenance
  2. 2Testing
  3. 3Implementation
  4. 4Analysis and requirements
  5. 5Design
2
Which of these is a usable requirement?
3
Using the relative cost table, how many times more expensive is a defect found after release than the same defect found during analysis?
4
During which stage would you produce pseudocode and a flowchart?
5
Match each stage to the output it produces.
Analysis
Design
Implementation
Testing
6
What is the main weakness of the waterfall model?
7
A team uses iterative development with two-week cycles on a project lasting 12 weeks. How many complete cycles do they run?
cycles
8
Which life cycle stage consumes the greatest share of a successful program's total effort?
9
"The search result must appear within one second for a list of 1000 records." What kind of requirement is this?
10
A programmer opens the editor and begins typing as soon as a project is described. What is the most likely consequence?

Spot a mistake on this page? Let us know