Recently I joined a small company as their test lead and we have been looking at ways to improve the quality of our products. It got me thinking about all the factors that influence quality. This blog will be about my observations and lessons learnt as we go about creating high quality products for our customers.
Improving the quality of a product relies on so much more than just testing. It involves a diverse range of factors including the process we use to develop the product, how the software is designed and coded, and of course how it is tested. It is not possible to test quality into a product. Instead, quality must be considered right from the start.
So what are some of the factors that influence quality?
- It all starts with requirements and how they are written. Do they make crystal clear to both the developers and the testers what is being created? We have found it very valuable to document high level customer requirements as user stories with acceptance criteria. The acceptance criteria then make clear what is to be developed and testers test against them. There is no need for a separate set of test cases; i.e. we have only source of truth. The acceptance criteria are written in the Given, When, Then syntax:
Given provides context for the behaviour
When specifies the set of actions that triggers the behaviour, such as user or subsystem actions
Then specifies the expected result of the behaviour
- It's also very useful to have a customer available to answer questions such as: "what exactly did you mean by that requirement?", or "is this issue we keep coming across a known issue in the third party system?". Otherwise you are often guessing which leads to miscommunications and building the wrong product.
- The next big factor is the product development process. Adopting an agile process can make a big difference to product quality, provided it's done well. If the current process is waterfall then adopting Kanban can be an easier transition to make, rather than going directly to a full blown agile approach such as Scrum or Extreme Programming.
- Another important factor is coding practices. Are developers aware of ways to write software that promotes quality, and are they given enough time to produce good quality software? Are code reviews part of the process?
- Testing the product is only one part of the quality equation but it's obviously an important part. While the acceptance criteria cover expected behaviour, we still need to do exploratory testing to examine areas of high risk and see how the system operates as an integrated whole. Another important quality measure is running automated checks as part of a continuous integration pipeline. I'm in favour of developers writing unit and integration tests as part of their development. Test Driven Development (TDD) is an excellent practice that drives the design of the software by thinking about how to test it first.
As you can see, a large number of factors contribute to creating a quality product and all must be in place before you will see major improvements. Your aim should be to build quality into the product from the start and not rely on testing at the end to find bugs. Ideally, we would get to a point where most defects have been prevented or detected by the time we reach a formal testing phase.
In my next blog posts I'll delve into these factors in more detail.