This post is the continuation of the previous one: SQA Revolution – Introduction
General QA Definitions
After listing the general conclusions in my previous article, I would like to dive into the specifics. I will start by presenting my concept model, which defines the terms and structure of different roles in QA process, using Agile methodology. Please, feel free to provide with the feedback accordingly. I will start with the definitions and then will move on to roles.
First and foremost, comes the utmost definition of Software QA terminology in general:
Software testing is a thorough investigation, conducted in order to provide stakeholders with clarity on the quality of software, product, or service under test. Software testing may also be instigated to provide an objective, independent view of software, and to allow the business to acknowledge and evaluate the risks of software implementation. Test techniques include, but are not restricted to program or application execution with the intent of finding software bugs (errors or other defects), and verifying that the software product is fit for use.
Software testing involves the execution of a software component or system component, aimed at evaluating specific properties of the system. In general, these properties indicate the extent to which the component or system under test:
- meets the requirements that guided its design and development,
- responds correctly to all kinds of inputs,
- performs its functions within an acceptable time,
- is sufficiently usable,
- can be installed and run in its intended environments, and
- achieves the general result its stakeholder’s desire.
Here, I would like to slightly amend the aforementioned definition by quoting James Bach and Мichael Bolton:
“Testing is the process of evaluating a product by learning about it through exploration and experimentation, which includes to some degree: questioning, study, modeling, observation, inference, etc.”
Software Quality Control
And now let’s dive deeper. As we see in the pic.1, testing is a part of Quality Control. If you take the traditional definition, which I have “borrowed” from Professor Amitav Mitra, it goes like this: “Quality control may generally be determined as a system that maintains a desired level of quality, through feedback on product / service characteristics and implementation of remedial actions, in case of a deviation of such characteristics from a specified standard into three main subareas: off-line quality control, statistical process control, and acceptance sampling plans.”
A simpler definition that I often quote is: “It is the process of reviewing the actual product.” Quality Control intends to identify defects if any, in the deployed product for the purpose of timely rectification. “
Software Quality Assurance
Now let’s move on to the most interesting part- QA, or rather SQA (Software Quality Assurance). And, here, again, I would like to use a quote from the book by Professor Amitav Mitra, “FUNDAMENTALS OF QUALITY CONTROL AND IMPROVEMENT”: “Quality is not just the responsibility of one person in the organization-it is the message. Everyone involved directly or indirectly in the production of an item or the performance of a service is responsible. Unfortunately, QA is something that is currently viewed as an individual’s responsibility. Such behavior can create an ineffective system. Thus, what is needed is a system that ensures that all procedures that have been designed and planned are followed. This is precisely the role and purpose of the quality assurance function.
The objective of the quality assurance function is to have in place a formal system that continually surveys the effectiveness of the quality assurance of the company. The quality assurance team. “
Or a simpler definition:
Quality assurance refers to the activities that take place in the development of a software product. It is the process of verifying, which adheres to specified standards, techniques and processes.
Actually, this is probably the shortest:
SOFTWARE QUALITY ASSURANCE (SQA) is a set of activities that ensure quality in software engineering processes (that ultimately result in the quality of software products).
The main thing you need to understand here is the difference between these three: testing is a process, QC is a method and QA is a set of activities. Quality Control is involved in product-oriented activities, while Quality Assurance is involved in process-oriented activities.
SQA in “Agile” development
Now we need to combine all these concepts with Agile development. The overall picture is described in pic 2. Testing can be used as a QC tool at all stages of development. The QC process begins and ends within the sprint, monitoring the process of the new development. QA activity occurs throughout the entire time, regardless of the sprint. We will discuss more thoroughly what is a QA activity.
Once we have defined terminology and combined it with the “Agile” methodology, we can move on to the job descriptions in the area of QA. For the general picture, let’s use pic 3 again.
According to pic.3, we can see the vector of development of SQA professional, starting with a tester, then moving to the test engineer and then to the QA engineer accordingly. It is important to note that each of the new stages of development has a predecessor and a successor, which must be maintained and followed exactly in this order. What it means, is, that in order to become a good test engineer and QA engineer, one must first master the skills of a tester. Therefore, if we are talking about building a successful career of a QA engineer, owning the testing process from the beginning to the end is a crucial skill that must be constantly maintained and developed. But, I have to add to it: a tester or a test engineer does NOT automatically become a QA engineer. In order for it to happen, one must possess certain skills and knowledge. Now let’s describe each role separately.
Tester – is a specialist who takes part in testing a component or system. It is his responsibility to search for possible errors and failures in the functioning of the testing object (product, program, etc.). The tester simulates various situations that may arise during the use of the test subject, so that developers may quickly fix the detected errors.
Testers responsibility is to execute pre-written tests. In the Agile environment, almost every team member can perform this task, although, at a different professional level.
Test engineer – could be a test analyst, test designer and/or a planner. He/she accompanies each feature/product/development in the sprint, analyzes the plans and performs testing, and then follows-up with reports on the product’s condition. In other words, creates a QC process.
SQA engineer – performs the role of a test engineer, but for the continuous improvement of the quality of processes and product. He/she has to create additional activities that are not limited to sprints and occur throughout the entire development within the team. Everything begins with the introduction of standards and processes for the operation of PO with technical tasks, the use of test tools of the entire team, such as bug hunt sessions or acceptance tests. Other responsibilities include coaching team in testing and quality, monitoring compliance with the “Agile” processes during active development, analysis and monitoring of the effectiveness of QA processes and testing – analyzing critical issues in production bugs, finding critical defects at a late stage of development, etc.
Pro-level of SQA Engineer
Therefore QA is an engineer-specialist who is responsible for all listed activities in the team. QA Engineer professional development in Agile can be divided into two levels – middle and senior. I will not delve into this moment, but in general terms- there is no place for a Junior level for a QA Engineer in Agile team. Junior QA Engineer starts from a Tester role and Test Engineer. Only after mastering these two, one can move to QA engineering. The middle level is a problem solver and Senior lever is a problem finder. By the way, I recommend an excellent video on this topic, made by Randall Koutnik: Rethinking the Developer Career Path (https://www.youtube.com/watch?time_continue=963&v=yIPbE7BssOs) Though he talks about developers, it’s completely welcome to us.
Summary + Action Items:
I really hope that I explained to you the basic concepts thoroughly. I realize that there is a lot of work to be done on defining multi-level functions and prioritizing the activities of the QA engineer. Still, a lot of questions to be answered. And I will be happy to do everything in my power to develop this concept/idea. In order to keep my promise, I will divide it into the following stages:
- First and foremost, since I am a strong supporter of arguments and discussions, as a part of the learning process. We organized a meet-up for those, who would like to ask questions in person and learn more about QA engineers. I invite you to come to the meetup in TestIL group: February TestIL Meetup
- Secondly, I will create a close working group with which I will meet once a month to help develop the future QA engineers. For those who are interested be part of this, please fill next form: SQA Engineers Club Form.
- And lastly, I will continue to research this topic and will keep sharing my knowledge with you…
Good luck to all and may the spirit of quality come upon you!