In any project carried out, quality is a very important objective. However, the objective of achieving quality is hampered by the lack of a clear definition of quality. Measurement of quality is necessary in order to make gainful improvements in quality. The definition of quality varies widely depending on the context in which it is applied. When thinking about software projects, the following are considered as important quality aspects.
- An exhaustive coverage of unit tests
- The number of recorded bugs is minimal
- Complexity that does not result in functionality in the software should be eliminated
- The metrics that have been put forward should be complied with
- Characteristics that are essential at run time such as security and performance, should be complied with. These characteristics are just examples and they are in no way exhaustive. Every project should have its specific objectives.
- Characteristics that are not essential at run time such as the ability to modify, port and test code should be complied with.
- Characteristics related to business objectives such as costing and marketability of the software need to be considered
The quality characteristics of a software project can be considered as essential or auxiliary. When the DevOps approach is applied in a software project, there is an objective of exhaustively covering what is important to both development and operations. By having common attributes to both development and operations cooperation is enhanced.
In the DevOps approach, the attributes that are used need to be measurable. When you measure your attributes you are able to know if you have achieved your set targets and efforts that need to be put in place to bridge any inadequacies. In the DevOps approach, there is an interrelationship between the different attributes of a system. For example, lack of system stability will have a negative effect on revenue from the product.
When thinking about system quality you need to have the following in mind.
- You need a very clear definition of quality that is well understood by the team
- You need to clearly differentiate between essential and auxiliary attributes.
- You need to place quality in the context of your software project
- You need to be aware the different quality attributes are related
- You need to clearly point out the attributes that are essential for the project to be considered successful
- You need to inculcate a quality culture into all the activities of the operations and development teams.
A clear definition of quality is just the beginning; the long term focus should be on continuously improving the quality of your software. When continuously improving software; there are several patterns that can be relied on. In this section of the article, we will discuss some of the patterns that can be used. When thinking about quality you need to consider both the external and internal quality characteristics of a project. There are different ways of improving the external and internal quality attributes. Because internal quality is concerned with code, best practices in coding are the best way of ensuring good internal quality. External quality is concerned with the functionality provided by the software.
The first way of ensuring that the software is of high quality is using settings to clearly community quality requirements. For example, a user who queries a system needs an immediate response. If the user has to wait for an unacceptable amount of time to get a response then quality is degraded. Such an example will communicate clearly to the development and operations team what is important for project success.
The second way of quality improvement is thinking about quality as an integral part of the project. Quality needs to be built into the project and it should never come as an afterthought. Quality attributes that were not designed into a project at the beginning will be very difficult if not impossible to integrate into later stages of the project. When using the DevOps approach both development and operations teams have a responsibility towards ensuring desired quality is achieved. Quality assurance is not a one-time activity rather it should be carried out in all stages of the project.
The third approach to software quality is giving required attention to quality as the project moves along. When quality is neglected, defects accumulate which negatively affects the overall quality of the project. Quality defects that negatively impact the project include inadequate quality, and absence of monitoring among others. It is important for the DevOps team to make note of all attributes in the software project and work towards ensuring that the attributes have the desired quality level.
Another approach to ensuring software is of high quality is implementing testing at the earliest opportunity to identify any defects and code bugs. By automating testing, you are able to understand quality status and have information to feed to quality improvement initiatives. It is very important that development and operations are involved in software testing. When using an automation strategy it is important to know what can benefit from automated testing and what cannot benefit from automated testing.
A successful testing strategy is composed of a pyramid like approach with unit tests at the base followed by service tests and user interface tests at the apex. Unit testing is concerned with testing single components that do not have any relationship to other components. Service testing is concerned with testing the working of related components but it does not concern itself with testing the functioning of the user interface. User interface testing is concerned with testing if the application behaves as expected. Unit testing forms the largest part while user interface is the smallest part of the testing.
In this article we introduced quality in the context of software projects. We noted that quality differs depending on the context applied. We noted the importance of having a clear definition of quality. We discussed some of points to keep in mind when thinking about quality. We noted there are external and internal quality characteristics and the importance of distinguishing the two in a software project. Finally we discussed some of the approaches that can be used in improving software quality.