Do you want your software to deliver value to its users? Then, it should be intuitive, accessible, powerful enough, and perform the intended functions well. But, even if you get the best software developers, without software testing experts your project has a big chance to fail. Software Testing and Quality Assurance is an integral part of the software development process. Waverley Software has been developing software solutions for almost three decades, and none of the projects has ever passed without involving the QA engineers. In this article, the company is sharing their organization of the QA process and approaches to the delivery of high-quality software testing polished by years of practice. Dive in and note down.
The QA Process
In Agile software development, the entire product development team delivers iteratively in sprints – usually two-week to month-long periods of time dedicated to completing a set of specific small-scale tasks. Continuous communication during a sprint is key in making clear if there are any changes or adjustments to be made, no team member is facing blockers, and everyone is on the same page. The QA engineers are an indispensable part of the team and work closely with software engineers during each sprint. By default, software testing specialists have a standard list of QA activities to be included in each iteration. Let’s take a closer look at their work.
QA engineers must carefully learn the product requirements before they get down to software testing itself. Experienced QA specialists can spot inadequacies even at this early stage of product development. Requirement analysis is also the prerequisite for the definition of testing scope on a project.
This is a key step of any efficient and productive activity. Having learned and analyzed the list of requirements, testing specialists create a list of software aspects to be tested. Also, most tests must follow a detailed description of inputs, execution conditions, testing procedure, and expected results – the test cases. Other crucial planning activities include the preparation of the test environment and test data.
When the software testers have analyzed the project requirements and visualized how the future software product is expected to function, they can get down to the test design stage. The main goal of this phase is to work out the most suitable testing strategy for a specific product, create proper test scenarios, test cases and structure the QA routines.
Following the developed plan and the designed test cases/test scenarios, QA specialists execute a range of test types, depending on the product development stage and capabilities. There are a variety of ways a software product can be tested. For example, typically there’s black-box testing to check the system’s functionality (functional testing), usability (UI/UX testing), stability and performance (load testing). Complementing the black-box testing, white-box testing aims to check the product’s security and code quality. This includes unit tests and integration tests. These tests require the good knowledge of the system build and how it is designed to function separately (unit tests) and in conjunction with other parts (integration tests).
When a bug is found and fixed or any changes take place within the system or its part, it’s time for regression testing to make sure that the part of software which was previously debugged or changed works properly.
Similarly to other software development activities, software testing needs tracking and reporting. QA specialists typically use test management tools such as Xray, Zephyr, TestLink, TestRail, to organize the testing process, collaborate with other team members, and make their activities trackable for the stakeholders. In addition to that, mature development and testing teams keep testing documentation as an integral element of the Software Testing Life Cycle.
The Best Practices
The Manifesto for Agile Software Development that is now widely followed by the development community proclaims four core values:
- Individuals and interactions over processes and tools;
- Working software over comprehensive documentation;
- Customer collaboration over contract negotiation;
- Responding to change over following a plan.
For Quality Assurance, this means quality control from the very project start, instant feedback exchanges, bugs found and fixed as soon as at the time of coding.
Decades of practice in Agile software development have formed a set of principles or “laws” that apply to software testing and contribute to the best practices of Quality Assurance.
For instance, one of the key software testing principles is that exhaustive testing is not possible. As software is in continuous transformation, you can never provide a 100% test coverage for it – you can only provide the optimal amount of tests based on the risk assessment of the product.
Out of this principle, it follows that software testing will always show the presence of defects. In the long run, the goal of testing is to make sure the software product meets the requirements and functions as intended.
Consequently, absence-of-error is a fallacy. If no defects are found by the existing test cases, this does not mean there are no defects – there hasn’t been a corresponding test scenario yet.
Also, testing is context-dependent. QA activities should be adjusted to the specifics of an application.
Defects tend to cluster. Typically, bugs get found in some specific application elements, such as parts of old code, new features, or third-party integrations, for example. Experienced QA specialists rely on a data-driven approach and know where to look.
The latter point leads to the Pesticide Paradox: the same test cases run over and over will eventually yield no result. Thus, best practices of software testing require that test cases should be regularly reviewed and updated.
Finally, early testing is not a whim, it’s a must. Starting the testing process as early as at the requirements analysis stage may reveal flaws in the parts of the product that haven’t even been developed yet.
Waverley’s QA Lab continuously uses their practical software testing experience and learns from their own software development cases to create internal rules and tricks that improve the customer experience with the team. For example:
- Releases never take place on Fridays and in case of critical bugs – no urgency can justify the slightest probability of something going wrong during the off-hours forcing the client to ask the team to work overtime and incurring additional expenses.
- For REST API architecture, API testing approaches should be used, such as early testing before the UI is ready, testing with Postman, thorough verification of how requests and responses get processed.
- Repetitive test cases can and should be automated – this saves a ton of time and helps avoid silly mistakes by excluding the human factor.
- Starting off with a small QA team and growing it gradually helps better evaluate the actual need in resources, without the overestimation of your demands. Plus, getting new team members on board per request is way easier than trying to find work and overpay for the idle ones.
Granted that the QA team has access to practically all elements of the software to ensure thorough quality check, adequate security measures implemented at various levels are important for customers.
- Data Security: data security firewalls, strong password policy, role-dependent access rights, independent data center for mail and web servers, and encrypted emails are just a few of the basic must-haves to keep your and customer’s data safe.
- Network Security: offshore and offsite client’s processes should be run on separate VLAN/VPN, with client-authorized access rights, anti-virus protection, spam filters, and live network monitoring.
- Physical Security: make sure the premises are accessible to the team members only by providing them with ID cards and registered access as well as constant guard and/or surveillance.
- Information Security: typically, every team member is expected to sign an individual NDA, agreeing not to disclose any proprietary information, as well as a Contractor Agreement specifying the parties’ rights to intellectual property.
You can find plenty of ways to cooperate with software development companies or Quality Assurance agencies providing the full spectrum of QA services. There are four basic engagement models in the provision of QA services out there:
- QA Outsourcing (QA specialists form a unified QA team that functions as a part of a development team working on a software development project. This engagement model is good for those business owners who’d like to outsource the hiring and people management processes as well).
- QA Outstaffing (You get access to a pool of QA specialists to choose from, review their CVs, conduct job interviews, pick the candidates you liked, and know the people you’ll be working with by name. This model gives clients the most control over their software development projects, starting with hiring and face-to-face communication, ending with work progress and time tracking).
- QA-as-a-Service (This engagement model lets you focus entirely on your product and the QA tasks that must be fulfilled, without the hassle of HRM processes, endless meetings, flooding approval requests for every small detail, and the pain of decision making).
- QA Consulting (A comprehensive QA research that will help you prioritize the system elements and functions to be tested for quality, find bottlenecks in the process, refine the testing strategy, and define the best tools to use on a specific product).
We cannot use this title in its full sense when speaking about Software Testing. Quality Assurance is a never-ending process, to tell you the truth. As we said before, it’s impossible to ensure 100% test coverage – this would be simply unreasonable. Software testing is always there for you to tackle issues as they arise, cooperating with your software maintenance and support teams. And don’t forget that the community of your product’s users is an indispensable part of your QA team – listen to them, collect and analyze their feedback, and continuously update your product to lead the competition in your market niche.