QA Lead at djangostars.com
I remember how impatient and stressed out Steve Jobs was when Apple Macintosh’s voice demo failed because nobody checked it. Ok, I don’t actually remember it, I just saw Danny Boyle’s film, but it makes the point.
Checking or assuring quality is what has to be done before presenting a Macintosh, a software product or a meal at a dinner.
We’re not going to talk about meals and drinks today, though. Instead, let me share my thoughts on why software needs to be tested, functions of QA engineers in the team, and how software testing works at a typical software developing company.
Let’s start with some simple definitions.
Quality Assurance engineers help to create quality products. How do they help? — you ask. They prevent the defects before the development starts and therefore ensure the quality of the process of the end results.
Defect (aka bug aka this shit won’t work) is a wrong piece of code that makes the system fail to perform its required function. In other words, when something doesn’t work or work not as desired.
I will now try to summarize what QAs do in a few points. QA engineers:
I want to emphasize that QA always think about the users and try to assess the work from the user’s perspective. QAs work closely together with developers and make up a team that actually creates a quality product.
Now I will tell you about five stages of software testing life cycle (STLC), QA’s role, and how testing can help your business.
STLC: When and why you need QA
Most software development companies that use Agile methodologies work in sprints — two-week periods with a list of task to be done. Each sprint includes five stages of STLC and by its end, the team should implement some part of the requirements.
Unless QAs are in the team, some defects may never be found only to be revealed by a real user after the official launch. QA engineers reduce the overall development time by planning the test cases before the development starts. The scope of QA’s job is what assures the quality of a product.
Now, let’s study all 5 stages of Software Testing Life Cycle
Stage 1 — Requirements Gathering
Before creating software, the team must know what exactly they are going to develop. The technical description of a software product is its requirements. They describe the functionality of the desired service, what features it should include, and sometimes — technologies required to build it.
During this stage, QA (1) analyse the requirements, (2) figure out if all desired components are compatible with each other, and (3) try to prevent (predict) problems that the team may face once the coding starts. Preventing defect before the requirement to the development team is what can save you lots of money.
Apart from analyzing the technical requirements, QA validates the product. Validation is the process of evaluating a product from the business perspective. Its aim is to check if the product will be useful for customers i.e. does it make sense to build it?
If not validated, the product may never get the attention and will just remain history. Validation also ensures profit that the product will bring. If no profit, why bother in the first place?
Stage 2 — Test Planning
Test Planning is the activity that defines the testing strategy, i.e = how much time and resources will QAs need to test the entire product. Planning includes the project scope, objective, responsible roles, and the testing environments.
This stage allows the team to avoid unpredictable contingencies. Having a plan with a list of action to be taken makes is easier for QAs not to forget anything when the testing time will come.
Stage 3 — Test Development
Now that the activities have been planned, it’s time to set up a test environment and create test cases. A test case is a series of actions QAs need to take to check that there are no bugs in the code and everything works just fine. After this QAs make up the Acceptance Criteria — a standard that the software should meet to be regarded as successful. When the test cases are ready and the acceptance criteria is agreed on, the actual testing begins.
Stage 4 — Test Execution
This is testing. Based on the results of the previous stages — Requirements Gathering, Test Planning and Development — QAs execute tests that fit the technical specifics of the system. If the test hasn’t found any defects, QA engineers mark it as Passed; if the test failed, it means there’s something wrong with the code and QAs send a report about the bug to developers. If this way, QAs make sure that the entire system will be tested.
Stage 5 — Test Reporting
After the testing, the team discusses what worked well and what didn’t. It helps us improve the testing in the future testing cycles. To avoid misunderstandings between QAs and developers, it’s good to document every detected bug and then check with the reports.
So now you what work QA engineers do during the development process. Let’s summarize why this work is so important. Why do software products need QAs:
In the next part, I will tell how STLC overlaps the development process, explain the difference between QA and QC and give a general description of some testing techniques QA engineers use.
The Quality Assurance
Development and testing must be synchronous. It’s a simple rule yet many tend to ignore it. QA engineers tend to account for what developers are doing at the moment before planning to test stuff. They act as a single team. A team that is responsible for producing a quality software product. Unless QAs and developers work together, there are likely to be many delays and inconsistencies which will lead to a low-quality result (= product).
Now I will tell what difference lies between assuring quality and software testing.
Quality Control is a discipline that, unlike QA, focuses on testing already developed systems. QC engineers identify software bugs and report them. So basically, it’s QC is the part of QA that comes after the code has been written.
While QA starts working on a product before the development starts. In some projects, there’s no need for QAs, but only QCs. It happens when a team is asked to check the system prior to its release. We can roughly say that QA encompasses QC.
Some people try to combine QC role with other roles, like software development. However, it’s usually more difficult to find a defect in own code than in somebody’s. Plus, this job requires some theoretical basis combine with testing skills. An inexperienced person can’t assure quality, in some sense.
Now that you know what QAs do and why they do it, let’s see what test techniques there are.
Test Design Techniques
A test design technique is what helps us select a good set of tests for a particular project. Each technique includes tests that identify bugs of a certain type. The choice of the test design technique depends on (1) the project requirements; (2) product’s status, and (3) the type of a software product.
The picture below shows most common test design techniques.
Let’s take a closer look at each of techniques and cases where we need them.
This was a very generic overview, so don’t assume it’s all about four groups of test design techniques. The number of the required hard skills make it close to impossible for a non-QA person to assure the quality of a software product.
No matter how simple a product may seem, there’s a ton of work behind the quality software. As Don Norman pointed out: “Good design is actually a lot harder to notice than poor design”. In most cases, QA engineers make it possible for people to enjoy good products by checking if everything works well.
Quality Assurance includes lots of activities, from testing to reviewing the results. Most software products need QA engineers to (1) set a mature development process, (2) ensure the quality of the released software, (3) prevent errors in the system before users find out about them. QAs use various techniques to check if a system meets all specified requirements and as it ‘should’.
It’s not easy to test a system without special skills, even an experienced developer is unlike to succeed in it. That’s why the best teams have QAs and developers working together — to combine their skills in pursuit of quality software.
If you find this post useful, please tap 👏 button below :)