How to integrate quality into software production processes? (Part 2)
In a previous article, How do I integrate quality into software production processes? we touched on the basic concepts of quality, the four-level process of management and quality assurance, we saw that requirements and qualities are closely related to each other.
The software production process, for good, should obey the SDLC lifecycle, no matter what model is used by Watefall, V-model, Agile, etc. SDLC is a software manufacturing process that systematically ensures that the quality and “correctness” of software meets the standards set by the company and the industry. SDLC basically consists of 6 phases.
Stage 1. Collection and analysis of requirements. At this stage, you need to get an answer to the question – What problems require solutions? Get the most detailed description of what needs to be implemented (features, userstory, system behavior, etc.). You need to keep one simple truth in your head. If there is a requirement, it must be verified (tested). Each test passed is a specification of how the system works.
Stage 2. Design – How will we achieve our goals? One of the important stages (all stages are important, to be honest). At this stage, the technical details of the design are discussed with stakeholders and various parameters such as risks, technologies used, team capabilities, project constraints, time and budget are considered, and then the best design approach for the product is selected. in terms of technology, frameworks, configuration, implementation and change management, provide a solid foundation for the project.
Stage 3. Development – regulates the process of creating a product. The main goal of the development phase is to transform the system prototype created during the design phase into a working information system that meets all the documented system requirements.
Stage 4. Testing – regulates product quality assurance. In most cases, testing remains an integral part throughout the SDLC. Hence, he always participates in the SDLC in one way or another, no matter what stage you are in right now. The main purpose of testing procedures is to report, track, authorize, and retest software components until they reach the quality standards set by the company and the industry.
Stage 5. Implementation and Step 6. Service – regulates the processes of product introduction and use of the final product, respectively. At these stages, feedback is collected. The received data triggers SDLC from the first stage.
As an integral part of the SDLC, you can consider STLC – the software testing life cycle is a sequence of different actions performed during the software testing process. Like SDLC, STLC includes several stages.
Stage 1. Analysis of requirements… At this stage, the testing team examines the requirements from a testing perspective to identify the requirements being tested, and the QA team can interact with various stakeholders to understand the requirements in detail. Requirements can be functional or non-functional. At this stage, the technological and economic justification for test automation is also carried out.
Stage 2. Planning tests… Test planning at STLC is the phase where the QA team determines the testing strategy along with project efforts and cost estimates. In addition, resources, test environment, test limits, and test schedule are also defined. The test plan is prepared and finalized at the same stage.
Stage 3. Development of test cases… The test case development phase includes the creation, verification and processing of test cases and test scenarios after the test plan is ready. Test data is first identified, then generated and validated, and then reworked based on preconditions. Then the QA team begins the process of developing test cases for individual modules.
Stage 4. Setting up the test environment… This stage defines the software and hardware conditions under which the product will be tested. This is one of the most important aspects of the testing process, which can be performed in parallel with the test case development phase.
Stage 5. Execution of tests… At this stage, testers work, who test the software assembly based on the prepared test plans and test cases.
Stage 6. Completion of the test cycle… The close phase of a test cycle is the completion of a test run and involves several activities such as generating test completion reports, collecting test matrices, and test results. The testing team conducts a retrospective – discusses and analyzes the testing artifacts to determine the strategies that need to be implemented in the future, learning from the current testing cycle. The idea is to remove bottlenecks in the process for future test cycles.
SDLC and STLC work in parallel, and everyone and not only developers and testers are involved in these processes. In order for the whole team to work on building quality into processes, into a product, it is necessary to work with thinking and change it. The team must understand that quality testing is very important for the business, as the cost of fixing missed and discovered bugs in production environments can be catastrophically high (such bugs can hurt not only finances, but also reputation).
The choice of test types is very important. There are at least 105 types of software testing. But, of course, you don’t need to apply everything on the product and in the processes. On the contrary, the list of functional and non-functional types of testing should be formed deliberately. The list should include 4 categories of tests
Tests that guide development by forcing the development team to think about how they will test a story or piece of code before writing it.
Business and / or technology oriented tests. Written using business terminology, business tests should be understandable to the user. Written in the developer’s language, technology tests are used to evaluate whether a system provides the behavior as intended by the developer.
Tests that critique a solution by evaluating the system against user requirements to find defects or missing (unimplemented) features.
Some of these tests must be automated, some must be run with different tools, and some must be manual.
It is important to change the mindset and attitude of the team towards quality assurance. There is such a concept, an approach as Test-First Thinking. Let’s answer a simple question. What is testing for? In order to get some kind of feedback on what was done, implemented.
In the traditional V-model, when the feature is described first, then the userstory, then the code is written. And after that, code testing, userstory testing, feature testing begins.
As you can see in this model, the feedback is very slow. And slow feedback slows down the entire process of creating value for the customer. I think it is not necessary to describe the consequences of this.
With the Test-First Thinking and Shift left testing approach, the situation is changing. We get very fast feedback. As soon as there is enough implementation, you can run tests to check the written code, to check the userstory and the feature. That is, testing is ongoing! As a result, quick feedback. The Test-First Thinking approach for code means that not a line of code until the test is written and not to test the code, but to code for the test. And for features and userstory Test-First Thinking is implemented by BDD.
Interestingly, Test-First Thinking naturally creates the right testing pyramid. The testing pyramid advocates a balanced test suite with more small, low-level (cheap) automated tests and fewer large, manual tests (expensive). There is also the anti-pattern of the testing pyramid — the inverted testing pyramid, which has a suite of tests with fewer small, low-level automated tests and more large manual tests. And, if the product has an inverted pyramid, then the situation is deplorable. As it slows down development and getting feedback.
To summarize, I will say that the first step on the path to embedding quality in processes begins with changing the mindset of the team, and, of course, auditing the tests that are on the product. The audit will show the real picture with the testing pyramid, then introduce the concept of Test-First Thinking and Shift left testing.
To be continued…