Just checking if ‘everything’s fine’ or trying to break an application in all possible ways? Software testing and QA may seem the most obvious parts of software development to non-programmers, but defining them has been problematic. Let’s approach both and examine their roles.
When you visit Quora and type in “software testing” into its search engine, instead of finding an accurate definition, you will be given a whole lot of them, sometimes contradictory.
Things get even more confusing when you start thinking about the relationship between software testing and quality assurance (QA). Are they the same? Yes? No? Don’t know? Read on!
Software testing vs. QA
“Software testing is a subset of QA activities, and QA is much more than that” - says Marcin Pakuła, QA specialist at Prograils.
“Testing is working with use cases and scenarios, and checking if a given functionality or change in design is compliant with the specs, whereas QA has a bigger picture in mind, checks if it fits the overall design and the rest of functionalities” - explains Mateusz Zieliński, who also handles QA.
QA, then, is a kind of approach that aims at providing the best possible products and services, by improving processes in accordance with quality standards set for building software. QA encompasses all stages of software development cycle and besides answering questions like:
- 'does it work?'
- and 'how does it work?'
has some more general concerns in mind:
- 'can this problem be solved better?',
- 'is it good enough?' and
- 'is it all we can do about it?'.
Usually, the term “software testing” pertains to manual tests made whenever a functional part of the code is released to the test server. But prior to that, developers at Prograils are obliged to test their code automatically for any flaws.
We demand the code to have as full test coverage as possible. Whereas 100% coverage is possible only for a very simple code, we make sure that the pieces that are being released to the test server have been tested in all possible ways. Read more about our internal testing principles.
Types & levels of software testing
Software tests can be divided into types and levels. Two main types which can be distinguished are:
functional tests - which are supposed to show IF a certain functionality or a system as a whole works in line with a client’s and end user’s requirements,
non-functional tests - these are expected to verify HOW a system or specific functionality works in terms of non-functional criteria.
This division gives a rather general picture of what software tests are supposed to check. Both types, however, can be examined at different levels.
Four main levels of functional tests are:
- unit testing - its goal is to make sure that individual, smallest parts of source code (called units) work. As it’s the most initial phase, unit testing is usually done by developers or their teammates and checked via pull requests. Even though it’s the very beginning of the testing pathway, there may be a lot of automated unit tests to be ran. Just because they check short, often quickly typed fragments of code. It is no surprise when a relatively simple application is tested even over 100 times on the unit level.
Unit tests are fundamental, as it’s simply easier and cheaper to fix a bug during this stage than later on.
integration testing - different than unit tests, this stage determines if the units are able to perform when combined together.
system testing - on this level, all components are well-integrated and examined as a whole system. Not only in terms of performance, but also compliance with functional/technical specs and quality standards of an organization. Carried out from an end user’s point of view, under conditions resembling those, to which the software will be deployed.
acceptance tests - from cosmetic looks of an application to the system’s inner workings. Crucial from the point of view of contractual and legal standards for the software to be accepted by the client. Consist of: user, operation, contact, regulation acceptance testing as well as alpha and beta testing.
Non-functional tests usually focus on the following criteria:
- reliability - if a system is able to work as expected within boundary conditions (e.g. Usual number of queries per second ranges between 1,000 and 5,000. The reliability test will examine if the application is able to handle them without flaws),
- performance - a system's ability to run smoothly under standard conditions (e.g. 2,500 queries per second) in the long time perspective,
- stress - how the system works or fails beyond boundary conditions (e.g. 6,000 queries per second),
- portability - an app's behavior on various operational systems and web browsers (in cases of web apps),
- maintainability - the ease with which software can be modified to correct defects, meet new requirements, make future maintenance easier or adapt to a changed environment,
What makes a good tester?
Testers analyze what software does as well as report on the quality level and the bugs they find.
A bug is an error within a system or a module.
But what makes a good tester? First of all, the attitude. A good tester just... tests a lot, usually with the assumption that there is more than meets the eye in terms of bugs.
The intent of finding more errors in the system, sometimes even breaking it and not just “checking if everything is fine” may seem controversial at first glance, but obviously pays off in the long run.
Inquisitiveness, passion for detail, but also imagination, wit and finesse are the tools of the trade here.
Marcin Pakuła from Prograils' QA team compares a software tester's job to a sort of hare-and-hounds play with developers:
"Whereas a dev aims at building something totally bulletproof, a software tester's role is to outwit all safety measures, find an application's weak spots and, simply, do things a programmer didn't even think of", he smiles.
Software testing belongs to the realm of quality assurance (QA) which is an approach accompanied by certain activities that ensure that produced software meets the highest standards.
While QA takes a bigger picture into account, focusing on processes that have to ensure the highest quality of product or service, testing can be considered such process itself. It lays emphasis on detection and elimination of bugs, demanding a highly inquisitive mindset.
‘If programming and project management can be considered heart & brain of a web or mobile app, software testing provides additional pairs of eyes, hands and ears to the project’ - finishes Aleksandra Świstek of the Prograils QA team.
Interested in building bulletproof software? Drop us a line. With Prograils, no bug gets out alive.