CS 372 Spring 2016 > Notes for February 3, 2016
CS 372 Spring 2016
Notes
for February 3, 2016
The Software Development Process
Overview
We will discuss seven aspects of the software development process.
- Requirements
- Design
- Construction
- Testing
- Debugging
- Deployment
- Maintenance
Note that the above are not phases of the development process that necessarily occur in order. Indeed, various software-developement methodologies collectively known as agile software development specificially specify processes in which gathering of requirements occurs concurrently with other activities listed above.
Requirements
Definition
A requirement is
- something that needs to be true about software
[a condition]
OR - somethat that software needs to be able to do [a capability]
in order for
- a user to be able to solve a problem or achieve an objective
OR - a specification/contract to be met.
We use “contract” above in the sense of design by contract: preconditions, postconditions, etc.
Requirements are divided into functional requirements—what software needs to be able to do—and nonfunctional requirements. A good rule of thumb is that a functional requirement is something you could implement in a single function.
An important part of the software development process involves gathering requirements: determining precisely what properties the software needs to have and what it needs to do. Requirements are then analyzed and recorded.
Project Definition & Scope
When gathering and analyzing requirements, we need to consider what the project is, what activities and features are included in it, and whether proposed requirements are relevant to it.
The project definition tells what the project is. For example, a project might be defined as follows.
The project consists of software implementing a two-player Battleship game, to be played on a desktop/laptop computer.
The project scope is what the project encompasses.
For example, Milton Bradley at one time sold a dedicated, single-purpose computer that supported a two-player Battleship game. The Battleship software for this computer would have needed to deal with various low-level issues; it may have included device drivers and low-battery warnings. On the other hand, if we were to write a web-based Battleship game today, we would not deal with anything remotely like such issues: device drivers would not be part of the project scope.
It is possible for requirements and project definition/scope to affect each other. For example, we may reject requirements that lie outside the project scope. On the other hand, demand for requirements that lie outside the current scope may suggest that the scope needs to be expanded.
Stakeholders
The stakeholders of a software project are people who
- have an interest in the project, and
- have input into the project requirements.
Requirements are gathered through discussions with stakeholders.
Possible stakeholders include the following.
- The people who will use the software (users).
- The people who will pay for the software (customers).
- The people who will maintain the software.
- The people who will develop the software.
Ways of Gathering Requirements
One way to gather requirements is simply to ask stakeholders what the requirements are. However, since stakeholders are often not software developers, they may have little idea what software-project requirements are like, what is feasible, what needs to be specified, etc.
One solution to this is to deal with use cases: lists of actions indicating how the software would interact with the outside world (perhaps with a user) to accomplish some objective. After discussing use cases with stakeholders, developers can then write requirements.
An even more stakeholder-friendly idea is the user story: one or more sentences in everyday language that captures what a user does with the software. User stories originated with Extreme Programming (XP), one of the agile methodologies.
Analyzing & Recording
Once requirements are gathered, they need to be analyzed. Here, we consider issues like the following.
- Do the requirements make sense?
- Are all requirements relevant to the project definition and within the project scope?
- Are any of the requirements contradictory?
- Is it feasible to develop software that meets all the requirements?
- Do the requirements leave out any major issues?
Lastly, at every stage in the software development process, requirements must be recorded: put them in a file somewhere, where they can be referred to, edited, etc.
The Software Development Process will be continued next time.