Software Development

The Drawing Board

The software development process is divided into four main phases:

Requirements

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 ]

Design

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 ]

Implementation

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 ]

Testing

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.
[ BACK TO TOP ]

Maintenance

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.

[ BACK TO TOP ]

Project Management


"On Time, On Spec, On Budget"

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 ]

Project Development

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:

Project Management Phases

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.

[ BACK TO TOP ]