
This is the most important phase of software development. Requirements are the basis of all software applications as they focus on what the application must do. They are elicited from the customer outlining what they wish the system to do, and recorded in a language the customer understands. A requirements document then becomes the contract between the customer and the software developers on the product that will be delivered.
Requirements can be described in many ways. For a formal
requirements document the most common division is into functional
and non-functional requirements.
- Functional requirements describe how a system interfaces with
its environment, i.e. the services the system provides, how to
react to inputs (both correct and incorrect), etc.
- Non-functional requirements describe restrictions on the
system. These include time constraints for certain activities
(especially important in real-time systems), security, and
privacy.
Other constraints on the system such as operating system,
programming language, or other incorporated software applications
are also included in a requirements document. Priorities can be
assigned to each requirement by the customer to help define
system development.
Use cases and user stories are also used to document system requirements. Use cases show the interaction between users and the different tasks of the system. User stories are short task descriptions written by the customer, and they are especially useful for defining development priorities and also to answer some of the main questions that come to mind when creating a software: Who is going to use the system? How will they use the system? What data should be input into the system? What data should be output by the system?
A requirements document produces a nice big list of functionality that the system should provide, which describes functions the system should perform, business logic that processes data, what data is stored and used by the system, and how the user interface should work. The overall result is the system as a whole and how it performs, not how it is actually going to do it.
[ BACK TO TOP ]It is an important aspect to the process of creating reliable and valid computer software in the most efficient manner possible. The software system design is produced from the results of the requirements phase. This is where the details on how the system will work are produced. Whether documented formally in a specification or informally on a white board, a clear and concise design aids software developers in creating a high-quality product. Design focuses on how the problem will be solved, whereas requirements engineering focus on the problem itself. The design of the system is the plan of implementation. Architecture, including hardware and software, communication, software design are all part of the deliverables of a design phase. All of these are shown on a UML diagram which shows how each part of the system is connected and how the system responds on certain inputs.
[ BACK TO TOP ]This is the longest phase of the software development process. For a developer, this is the main focus because this is where the code is produced and the software is created. Implementation may overlap with both the design and testing phases.
[ BACK TO TOP ]During testing, the implementation is tested against the requirements to make sure that the product is actually solving the needs addressed and gathered during the requirements phase.
There are several different levels of testing that are done throughout the software development process. These are outlined in the table below:
| Test Type | Description |
|---|---|
| Acceptance | Testing conducted by a customer to verify that the system meets the acceptance criteria of the requested application. |
| Integration | Tests the interaction of small modules of a software application. |
| Unit | Tests a small unit (i.e. a class) of a software application, separate from other units of the application. |
| Regression | Tests new functionality in a program. Regression testing is done by running all of the previous unit tests written for a program, if they all pass, then the new functionality is added to the code base. |
| Functional and System | Verifies that the entire software system satisfies the requirements. |
| Beta | Ad-hoc, third party testing. |
Software maintenance is done to correct faults, improve performance, or adapt a software system to a new environment.
The different types of maintenance are:
Corrective - Fixes a fault in the software without
changing or adding to the software's functionality.
Adaptive - Modifies software to preserve functionality in
a changed environment.
Perfective - Improves software performance,
maintainability, etc., and can extend the functionality of the
application.
Preventive - Changes are made to the system in order to
prevent further faults and to improve the structure and
maintainability of the system.
A project needs to be performed and delivered under certain constraints. These constraints are the scope, time and cost and they are interconnected, providing a result that has the best possible quality. If one of the constraints changes, then the other two have to be adjusted also, so as to assure the quality of the result.
[ BACK TO TOP ]When developing a project, careful consideration needs to be given to clarify surrounding project objectives, goals, and importantly, the roles and responsibilities of all participants and stakeholders. To do so, the development of a project is split into phases that allow the project manager to have a better control over the team.
Here are the most common development phases of a project:
.png)
Initiation:
The initiation stage determines the nature and scope of the
development. If this stage is not performed well, it is unlikely
that the project will be successful in meeting the
business’s needs. The key project controls needed here are
an understanding of the business environment and making sure that
all necessary controls are incorporated into the project. Any
deficiencies should be reported and a recommendation should be
made to fix them.
Planning and Design
After the initiation stage, the system is designed. Occasionally,
a small prototype of the final product is built and tested.
Testing is generally performed by a combination of testers and
end users, and can occur after the prototype is built or
concurrently. Controls should be in place to ensure that the
final product will meet the specifications of the project
charter. The results of the design stage should include a product
design that:
- Satisfies the project sponsor, end user, and business
requirements.
- Functions as it was intended.
- Can be produced within quality standards.
- Can be produced within time and budget constraints.
Executing
Executing consists of the processes used to complete the work
defined in the project management plan to accomplish the
project's requirements. Execution process involves coordinating
people and resources, as well as integrating and performing the
activities of the project in accordance with the project
management plan. The deliverables are produced as outputs from
the processes performed as defined in the project management
plan.
Monitoring and Controlling
Monitoring and Controlling consists of those processes performed
to observe project execution so that potential problems can be
identified in a timely manner and corrective action can be taken,
when necessary, to control the execution of the project. The key
benefit is that project performance is observed and measured
regularly to identify variances from the project management
plan.
Closing
Closing includes the formal acceptance of the project and the
ending thereof. Administrative activities include the archiving
of the files and documenting lessons learned. Closing phase
consists of two parts:
- Close project: to finalize all activities across all of the
process groups to formally close the project or a project
phase
- Contract closure: necessary for completing and settling each
contract, including the resolution of any open items, and closing
each contract applicable to the project or a project phase.