An introduction to testing and quality assurance

By Mike Ritson

It’s human nature to make errors and therefore any developer working on a large piece of work will make errors along the way. Since the inception of high-level computer programming back in the 1950s, developers have been writing massive amounts of code to deliver a very specific function.

Ultimately errors will occur, bugs can and will slip into the code, and as a result defects may appear in the software delivered to the end user.

Shortly after the first systems were created using high-level computer code, it was inevitable that the role of the tester, whether known or unknown at the time, was about to be created.

What do testers do?

Developers deal in ‘how’. They are given a particular problem or requirement and they set out to fix the problem or deliver a solution in the most efficient and productive way possible.

Testers deal in ‘what’ and ‘why’. What does the system do? Why does it do it in a particular way? What happens if value x is used instead of value y? Why is the system configured with these particular values? Testers have a different way of thinking, different methodologies and different approaches to systems than other technical staff.

Developers operate at project level and perform their daily work at a machine level. System testers, however, can be seen as the interface between the end user and the project team and bring knowledge of business process, product/service, client operations and a general overview of the functionality of the delivered product. Testers can deliver additional information to both the end-user/customer and development team to bridge any gaps in their knowledge.

The role of the tester, however, is not just to find bugs, but also to provide expertise in particular systems, to pass on business knowledge and to provide information relevant to many areas of a given project. Testing does not and cannot detect every possible problem within a software release, but without testers it can almost be guaranteed that any code released will not be 100% useable by 100% of your end users.

Testers used to be relied upon to test everything, but as the whole software delivery life cycle has evolved, code-specific tests (unit tests, which test individual units of computer code, and integration tests, which test multiple modules of code) have been taken on by the software developer and the software tester has been allowed to focus on adding value into the process with:

  • Functional testing: testing the function of a system, or part of an overall system, to ensure that the specification is met, usually based on acceptance criteria.
  • Integration testing: testing a number of software modules in an integrated fashion as a group.
  • User experience testing: testing the main graphical user interface between the software system under development and the end user.
  • Exploratory testing: manually exploring the developed system whilst simultaneously learning about its functionality, designing tests as you go and observing any testable or unexpected behaviour.
  • Regression testing: testing designed to uncover any new bugs introduced to existing functionality as a result of changes to the code currently being deployed or environmental changes.
  • Acceptance testing: testing usually, although not always, performed on the customer side to ensure that the code/system being delivered meets acceptable standards and is as defined prior to commencing the project.
  • Smoke & sanity testing: testing performed at a high level to ensure that the main functionality of a system is as required prior to moving onto more granular tests.
  • Performance testing: the process of determining the performance of a system (speed, load, stress points, bottlenecks, etc.) based on a number of metrics and quite often measured against a baseline measurement prior to development.
  • Security testing: ensuring that the system security and data integrity are of the highest possible standard and any weaknesses or vulnerabilities are spotted prior to release.
  • Internationalisation and localisation testing: testing that all local languages, symbols, currencies and other regional variations are correctly applied to each local site.

Why does your business need testers?

Whether you are a start-up business, small to medium enterprise, large enterprise or developing internal applications, the focus should always be on quality. Delivering a quality product and service to your end user should be the ultimate aim, and finding bugs and defects prior to release will allow you to develop customer loyalty and repeat business.  

Risk is inherent in any change and although not desirable risk should be planned for, assessed, prioritised and mitigated. Once a plan is in place, risks eliminated or reduced to levels acceptable by your business, then the plan should be monitored at regular intervals and all risks tracked with a view to adapting quickly to any changes in the project.

Does your business REALLY need testers?

It’s been confirmed that Facebook doesn’t employ any testers, but does this mean that their end product is not tested? Of course not. Each developer within their business is responsible for the code that they or their team develop. This code then passes through a series of automated integration tests to weed out any bugs (hopefully!) prior to release.

Facebook has chosen this approach, one that probably works well for them and their current business structure, but is it necessarily right for your business?

Other businesses choose to release software via different methods and effectively allow the customer to ‘test’ things prior to rolling the changes out system-wide. This can be achieved through ‘beta’ releases (ones in which customers know they are not dealing with a finished product), or A/B split testing in which a certain number of customers are shown the newest version of the software. This is to identify any issues whilst the remainder of the customer base remain on the latest ‘stable’ version. Responses to the new software can be tracked and monitored and any problems resolved prior to a complete rollout of the change.

Ultimately, if you are delivering a quality product or service, you should not be asking your customers to test whether your code works or not. Whether something is performing as expected or whether your system is stable and performs well under load should be determined prior to releasing your software to a live environment.

Testers act as a final check prior to releasing software changes to your customers. Testers work on finding bugs/defects and providing feedback to developers, management and product owners. They can help maintain your business reputation within your given industry and act as advocates of quality within your enterprise.

The future of testing?

Testing as a business function has been present since the dawn of the first microchip and will continue to be so for many years to come, in one form or another.

Testing is continually adapting and evolving to ever-changing business needs and is responding to all that developments in technology and business demands can throw at it.

As technology changes and new processes are developed so do the tools available to the tester allowing them to further push the boundaries of quality assurance. Testing is a part of this technological progress and will embrace the changes as they arise and adapt to the technological environment of the future.

Businesses of all sizes should look at testing and quality assurance as enhancing their business, constantly improving their business software/systems and, ultimately, delivering quality, functioning systems to the customer, client or end user.