The Stages of Software Development
- Requirement Gathering: Talking to the client in order to find out what it is that they want and to find out what the system is going to do.
- Design Stage: Deciding how to create the system.
- Implementation: Doing the programming.
- Testing the requirements: Testing the program to see if it meets the customer’s requirements.
- Installation: Deployment of the software (system manager, analyst).
- Maintenance: Upkeep of the software, bug fixes, adding additional features, requires the most amount of time.
- Retirement: Phasing out outdated software.
What are the Requirements?
- It is important not to jump to conclusions and to adapt the system around the requirement, not the other way around (ie. don’t focus on what type of hardware, software, programming language, database, etc.).
- Requirements are the “what the system should do”.
- It is important to be able to balance competing requirements.
What is Design?
- Design defines how a system will be developed in order to fit its requirements.
- Design is the “how are we going to build the system”
- Design may implement solutions that don’t involve computers.
Why Two Separate Stages?
- If you don’t know what the system is going to do, how are you going to build it?
- You need to know the requirements of a system before you can build it; design cannot begin without requirements.
- Although it sounds straight forward, it can be difficult to gather the requirements; it can take multiple sessions with clients.
- Gathering the requirements requires a lot of probing to really understand what the client wants; the client may not know how to express or verbalize what they want or need.
- Iterations between and within the two steps can and will occur; you may need to reevaluate how you are going to design a system (important in development systems like agile).
- There is a balance between the two stages, certain sensitive applications like banking might require more information gathering,
- Making decisions too early can be a problem; you might develop the wrong solution or make it too complicated.
Examples
- “We need an SQL database” (design)
- “We need a system to organize inventory” (requirement)
- “Runs under Windows OS” (design)
- “Must be able to generate daily reports” (requirement)
- “Must be able to handle 100 transactions per second” (requirement)
- “Must run on our existing computer system” (requirement and design)
- “Make it as cheap as possible” (requirement)
- “We will want demos during development every two weeks” (requirement)
- “We need some software to solve our problem” (requirement)
- “Must be usable by someone with a grade six education” (requirement)