The Iceberg of Quality Assurance

The Iceberg of Quality Assurance

Introduction

A Software Tester or Quality Assurance (QA) Engineer can be likened to the role of an iceberg - the visible skills and tasks are above the surface of the water, while many skills and knowledge are beneath. These unsung heroes make sure the software we rely on works flawlessly, without hidden defects.

Quality assurance is crucial to making your application ideal for your target audience. Using quality assurance at Theory and Principle to make sure your application meets the pre-defined requirements, both internally and externally with the clients. Many companies don't have dedicated QAs and leave it to developers. Others wait until the development is done before testing. It depends on the company's products, the type and size of markets for those products, how easy it is to update the product once it's out, budget, etc.

Quality Assurance

Is there a quality assurance definition? In essence, it is a process which ensures the developed software meets the quality specifications and goals of your business. In software development, QA is a process that checks and prevents any issues occurring across the whole project. Basically it is making sure that something works as it is intended. After all, isn’t it better to find out if something is broken before your users do? It is all about preventative activities. Quality Assurance ensures that end-users get a functional user interface and the best user experience when using a web app or website.

In most product companies, QAs are often the gatekeepers in determining whether or not the feature is ready for release. QA or Test Engineers are involved from project launch to post deployment support. In QA, a defect is any element of the software that’s not in line with the client’s requirements. Sometimes developers fail to understand such a requirement fully, and that leads to design errors.

Verification and validation are the two keywords used in software testing. Sometimes they are used interchangeably, but they are different from each other. Both the terms are a part of the V / V&V model (Verification and Validity) and they try to achieve two main tasks —

  • Check the product from the developer’s point of view: It checks if the product complies with the requirement. It also shows what a developer thinks about the final product.

  • Check the product from the consumer’s point of view: It checks if the product befits the customer’s use. It checks how a consumer looks at the final product.

Both the activities are usually measured against functional and non-functional requirements. They are used to ensure that a product or system meets the required standards and specifications. Both verification and validation are crucial for ensuring product quality and customer satisfaction.

Verification

Software Engineering standard IEEE-STD-610 defines verification as —

“A test of a system to prove that it meets all its specified requirements at a particular stage of its development.”

It ensures that the software is built to match predefined specifications. It answers the question: “Are we building the system right?” OR "building the product correctly".

It involves checking the work products, such as documents, design specifications, and code, to ensure they meet the intended specifications and standards. In simple terms, Verification is all about testing whether your software product satisfies the conditions you specified in the initial stages of development. It includes all actions taken to build the desired software product, like going through the specification documents, ensuring it complies with the code logic, checking code reviews, doing narrow inspections, design analysis, walk-through, static testing, etc. The verification process eliminates bugs at the beginning stages of development to ensure the reliability of the product.

Validation

The definition of validation through IEEE-STD-610 —

“An activity that ensures that an end product stakeholder’s true needs and expectations are met.”

It means that the Validation process is performed once a part of the product or the entire application is built completely. It checks whether the software meets the end-users’ needs and expectations. It answers the question: “Are we building the right system?” OR "building the correct product".

It involves dynamic testing and may include activities such as functional testing, system testing, user acceptance testing (UAT), regression testing and performance testing. Validation activities often occur towards the end of development and involve testing in real-world scenarios or simulated environments.

Understanding with an example —

Suppose we are creating a food delivery application. The purpose of this application is to allow a user to order his food from a restaurant near him. By verification, we can verify whether the components of the application like searching restaurants, selecting food, payment, tracking orders, etc. features are working fine. By validation, we can validate whether the application is serving its purpose i.e., a user is getting the food from the place he had ordered.

Always remember, Verification happens first and then Validation.

QA Practices

Mentioning it on a very high-level —

  1. Manual Testing: Done by humans.

  2. Automated Testing: The traditional approach of manual testing has been replaced by automated testing, which has increased the efficiency and effectiveness of the process. Automated testing uses scripts and tools to automate test case execution. QA employs some test automation tools to automate the repetitive test processes.

QA Process

Almost all QA Engineers will tell you testing is their main job function. There's manual testing, automated testing, exploratory testing, functional testing, performance testing, load testing, mobile device testing, etc. They're all aimed at finding bugs. These bugs get logged in bug tracking systems or communicated to the development team to be fixed before a release or scheduled to be fixed later. But, this whole process of identifying bugs in software has some stages that it needs to go through —

Main Stages in QA Process

  1. Review of requirements

QA requires planning. It should start at the very beginning of the project to ensure the most effective processes are put in place and that issues are identified as early as possible. Nowadays, QA starts right in the ‘requirement analysis’ stage. QA professionals must review the requirements of the product before starting work, so that they can be clear on what needs to be done. It is important because the later errors are found, the more difficult, expensive, and time-consuming it is to fix them.

  1. Planning phase

After testers have understood the requirements, they can start developing a test strategy and begin the test planning phase. At this stage, they define the scope of the work, the budget, they decide which approach to take at each stage of the software’s development, they’ll also decide what types of testing will be needed, and finally, which tools will be used during the actual testing.

  1. Developing test cases

Design test cases, create checklists, prepare the environment for test execution, and create automated testing scenarios.

  1. Test execution

The QA team starts to execute different types of tests, and testers start to report any and all of the discovered bugs.

  1. Verifying fixes

Once the development team fixes an issue, QA professionals retest the functionality of the product, and perform regression testing to ensure that the software still works correctly after all of the changes have been made.

  1. Test cycle closure

Once all of the fixes have been changed, and all planned tests have been executed, it is time to prepare the test closure document. This document is a summary of all the tests performed during the software development life cycle.

Day-to-day activities of a QA Engineer

Every company and business has its own way of handling quality assurance and assigning responsibility for it.

  1. Review product specifications and business requirements

  2. Develop test plans and create test cases

  3. Conduct functional and non-functional tests

  4. Write bug reports and update the defect-tracking repository

  5. Evaluate test coverage and suggest improvements

Quality Assurance testing is a methodical approach, it's a process that requires planning, careful execution and documentation.

Quality Control

Quality control (QC), is different than QA and focuses on testing the final product and identifying issues and eliminating them, before the product goes on the market. Quality Control is really all about ensuring, the features meet the requirements, both functionally and visually, compatibility spans across browsers/devices and bugs or glitches get nabbed and kicked back to devs.

  • Quality Assurance asks — “Are we doing the process right and preventing defects?” It refers to preventive activities to design, document and build quality into processes.

  • Quality Control asks — “Are we producing the right product and meeting specifications?” It involves more detective work, such as conducting testing and inspection to identify defects and correct them.

Software Testing

Software Testing is a process of evaluating the functionality of a software application for identifying any defects, errors and software bugs. It checks whether the developed software met the specified requirements and identifies defects in the software in order to produce a quality product. Software testing is also stated as the process of validation and verification of software products or applications that satisfy the customer’s requirement.

Software Testing Lifecycle (STLC)

Software Testing Life Cycle is a sequence of different activities performed by the testing team to ensure the quality of the software or the product. It defines a series of activities conducted to perform Software Testing. The different phases of Software Testing Lifecycle are —

  1. Requirements Analysis: A vital part of discovery is to gain a complete understanding of the problem the clients are trying to solve in order to map out solutions and develop an information architecture that can serve as a framework for development. As a result of this process, you can determine the scope, priorities, and environment for testing the product.

  2. Test Planning: Test Planning is the most important phase of Software testing life cycle where all testing strategy is defined. This phase is also called as Test Strategy phase.

  3. Test case development: Once the test planning phase wraps up, the test case development phase begins. Here, the testing team gets down to writing the detailed test cases and prepping all the necessary test data. After the test cases are all set, the QA team steps in to give it a thorough review.

  4. Environment Setup: Setting up the test environment is a crucial step in the Software Testing Life Cycle (STLC). Essentially, it determines the conditions under which the software is tested. This is a standalone task that can begin concurrently with test case development. During this process, the testing team isn't directly involved; instead, either the developer or the customer takes charge of creating the testing environment.

  5. Test Execution: Since most organizations work in Agile development, developing and releasing features over a period of two weeks rather (sprint) than at the end of a project in a single fall (or giant disaster) is done. Generally, active testing in an iterative manner is carried out: as features are developed, test it, report the bugs back to developers, test again, move them forward in the process, develop new features, repeat.

  6. Test Cycle Closure: Read SRS documents and understand what is the customer's requirement. Perform test cases / scenarios to find bugs, defects or any errors in the software and report it to the team.

Software Build

The term build is the process by which source code is converted to a stand-alone form that can be run on any system. The most important step of a software build is the compilation process. In compilation process the source code files are converted into executable code. Usually, build tool manages the process of building software. Builds are created when a certain point in development has been reached either for testing or release. A software build is also known as code build.

Tester's Mindset

The tester should closely work with the development team and understand how a system is being built and as soon as the code is ready, the tester should give feedback to the developer about their work.

In traditional ways of developing software, testers were responsible for finding as many defects in the system, as they can. But, in Agile, a tester's role is to prevent an error from occurring in the first place, rather than finding defects. In this context, finding defects and fixing them is the reactive way to eliminating defects in the software and preventing defects from occurring is the pro-active way.

Conclusion

The QA team is involved in all stages of development: production, testing, packaging and delivery. By carefully testing and validating every part of the app, QA experts make sure the final product meets all requirements and works as it should. This not only makes the software more reliable but also makes users happier and more confident.