Doomsday QA

    This is a translation of an article by Eli Lopian, founder of Typemock. He is the executive director of the corporation. Eli has over 17 years of development experience. During this time, he managed to work in such global organizations as AMDOCS (NYSE: DOX) and Digital Equipment Corporation (DEC). His responsibilities included streamlining the development process and making the necessary adjustments to maintain its effectiveness. This article explains how unit tests will influence the traditional approach to testing in the future, and what effect they have now.

    image

    From the beginning of the Industrial Revolution, about 250 years ago, machines began to actively replace human labor in factories, factories and mines. On the one hand, this leads to increased economic growth, and on the other, to the dismissal of workers whose work has been replaced. After dismissal, people are often unable to find a new job or retrain. What is happening in the QA area is strikingly similar to the processes described above. Just look at the incredible increase in the number of companies involved in testing, such as Mercury Interactive, during the nineties of the last century. The testing process and the QA teams themselves came in handy during the Internet boom in the nineties. Then the number of programs launched on the market increased exponentially. This has led to an increase in the number of development tools and the expansion of the staff of testers. However, over time, the unstoppable growth of the economy began to decline gradually, budgets became scarcer, the use of Agile methodologies became more widespread, the software itself became more widespread and automated testing was gaining momentum. Manual testing faced the same problems that were characteristic of manual labor in enterprises during the Industrial Revolution. Many QA engineers began to move to new positions, implying the use of programming and development skills in everyday tasks. Testing teams began to undergo changes, to become multifunctional. Borders between departments gradually began to decline. over time, the unstoppable growth of the economy began to decline gradually, budgets became scarcer, the use of Agile methodologies became more widespread, the software itself became more widespread and automated testing was gaining momentum. Manual testing faced the same problems that were characteristic of manual labor in enterprises during the Industrial Revolution. Many QA engineers began to move to new positions, implying the use of programming and development skills in everyday tasks. Testing teams began to undergo changes, to become multifunctional. Borders between departments gradually began to decline. over time, the unstoppable growth of the economy began to decline gradually, budgets became scarcer, the use of Agile methodologies became more widespread, the software itself became more widespread and automated testing was gaining momentum. Manual testing faced the same problems that were characteristic of manual labor in enterprises during the Industrial Revolution. Many QA engineers began to move to new positions, implying the use of programming and development skills in everyday tasks. Testing teams began to undergo changes, to become multifunctional. Borders between departments gradually began to decline. The software itself was becoming more widespread and automated testing was gaining momentum. Manual testing faced the same problems that were characteristic of manual labor in enterprises during the Industrial Revolution. Many QA engineers began to move to new positions, implying the use of programming and development skills in everyday tasks. Testing teams began to undergo changes, to become multifunctional. Borders between departments gradually began to decline. The software itself was becoming more widespread and automated testing was gaining momentum. Manual testing faced the same problems that were characteristic of manual labor in enterprises during the Industrial Revolution. Many QA engineers began to move to new positions, implying the use of programming and development skills in everyday tasks. Testing teams began to undergo changes, to become multifunctional. Borders between departments gradually began to decline. involving the use of programming and development skills in everyday tasks. Testing teams began to undergo changes, to become multifunctional. Borders between departments gradually began to decline. involving the use of programming and development skills in everyday tasks. Testing teams began to undergo changes, to become multifunctional. Borders between departments gradually began to decline.

    But let's go back a few steps and see how it was before. The vast majority of companies have chosen a waterfall development model since the 1950s. This approach allowed the team to first completely design the design, then concentrate on the code, pass it to the testers and then begin to fix the defects. As developers are constantly under pressure, they began to rely more on the QA department. This led to a vicious circle. New testers are hired, developers relax even more and pass more raw code to QA. At some point, developers completely stopped testing their code.

    This extremely negatively affected the efficiency of work and ultimately resulted in a failure to meet the terms of the contract. The final product did not reach the customer at the planned time.

    At the same time, in February 2001, at the time of the already mentioned Internet boom, the Agile Manifesto was adopted and from that moment, a different point of view appeared on the development process. Agile seemed to breathe new life into this process. A new goal in the Agile world has become adaptation to endless changes and the rapid creation of working software modules. The main emphasis was placed on programmers, and as the new methodology spread, QA services were needed less and less. This meant that testing was one foot overboard of the IT business.

    More testers - more problems

    Enterprise software development is not cheap. For this reason, often in the middle of a project it is discovered that the team no longer fits into the initial budget. In this case, the leadership is forced to look for ways to solve the problem they are facing. There are three main ways in which, in this case, the team can go:

    1. To replenish the budget - you can always add more money, then it will be possible to meet the deadline. But keep in mind that then the return on investment will be less. All risks should always be considered. Based on the results of the analysis, you can conclude that further investments are not advisable. Not the best option.
    2. Refuse part of the functional - neither the developers nor the management want to deliver to the client a program that does not do what is expected of it. This is also not an option.
    3. Leave the quality at a low level - in everyday life we ​​often encounter certain defects. As for software, product quality is paramount here. However, the third way is becoming the most common among companies.

    As a result, we get a violation of the usual order - on the one hand, developers are either busy or too lazy to bring their code to the optimal level, on the other hand, management cuts down testing costs. This is where Agile principles can help.

    Agile Benefits

    Due to the popularity of Agile, developers and management are actively using the methodology to solve their problems on the way to improving software. However, there are still problems that need attention. What the views of management and programmers agree on is that they want to produce software in the shortest possible time and, preferably, at minimal cost.

    After the Internet boom and the subsequent rollback in economic growth, companies realized the need to produce high-quality software without high costs for its production. But how to cut QA costs?

    Fortunately, the Agile methodology involves testing its own code. Passing unit tests indicates that the selected module is working and fulfilling its function. Of course, this implies the close cooperation of all departments. The product manager determines what the program should be in order to meet customer requirements. Developers and testers work together to write specifications. Next, developers write unit tests for their modules. Correctly tested code is the only way to deliver a working program, so to speak, the core of the Agile process. Conducted by standards, unit testing confirms that the code works the way the programmer intended. The QA department is still testing non-standard situations, while developers are gradually becoming aware of the responsibility for the quality of their code. One of the fundamental pillars of the Agile methodology is working software. And some principles of the given methodology, such as TDD (Test Driven Development) and unit testing are carried out by developers. So what is the essence of unit tests and why should they be used? The peculiarity of unit testing is that it performs verification of a certain section of code. When everyone monitors their module, it effectively and quickly corrects the defects found - the cost of the entire project is reduced. Without a clearly defined unit testing process, it is extremely difficult to stay within the Agile framework. All of these endless changes in requirements, design, and the code itself ultimately lead to even more defects, and without knowing their specifics, development risks ending in failure. And some principles of the given methodology, such as TDD (Test Driven Development) and unit testing are carried out by developers. So what is the essence of unit tests and why should they be used? The peculiarity of unit testing is that it performs verification of a certain section of code. When everyone monitors their module, it effectively and quickly corrects the defects found - the cost of the entire project is reduced. Without a clearly defined unit testing process, it is extremely difficult to stay within the Agile framework. All of these endless changes in requirements, design, and the code itself ultimately lead to even more defects, and without knowing their specifics, development risks ending in failure. And some principles of the given methodology, such as TDD (Test Driven Development) and unit testing are carried out by developers. So what is the essence of unit tests and why should they be used? The peculiarity of unit testing is that it performs verification of a certain section of code. When everyone monitors their module, it effectively and quickly corrects the defects found - the cost of the entire project is reduced. Without a clearly defined unit testing process, it is extremely difficult to stay within the Agile framework. All of these endless changes in requirements, design, and the code itself ultimately lead to even more defects, and without knowing their specifics, development risks ending in failure. So what is the essence of unit tests and why should they be used? The peculiarity of unit testing is that it performs verification of a certain section of code. When everyone monitors their module, it effectively and quickly corrects the defects found - the cost of the entire project is reduced. Without a clearly defined unit testing process, it is extremely difficult to stay within the Agile framework. All of these endless changes in requirements, design, and the code itself ultimately lead to even more defects, and without knowing their specifics, development risks ending in failure. So what is the essence of unit tests and why should they be used? The peculiarity of unit testing is that it performs verification of a certain section of code. When everyone monitors their module, it effectively and quickly corrects the defects found - the cost of the entire project is reduced. Without a clearly defined unit testing process, it is extremely difficult to stay within the Agile framework. All of these endless changes in requirements, design, and the code itself ultimately lead to even more defects, and without knowing their specifics, development risks ending in failure.

    Unit testing is a possible cause of death. QA We
    repeat: unit testing is a process aimed at verifying the health of your isolated piece of code. It ends only when there is confidence that this piece will harmoniously fit into the overall picture of the system. It is proved that by using unit testing it is possible to achieve code coverage of 90 percent, and, unlike manual testing, unit tests can evolve over time to solve more complex problems.

    Just don’t think that the main idea of ​​the article - unit tests will save the world. They are not a panacea. However, these are the most suitable candidates for code testing, because of their low cost. In addition, the final product turns out to be of higher quality and manages to reduce time.

    If you apply QA departments, then the process is delayed. Bugs are sent to the developers, then their changes go back to the testers. The use of unit tests minimizes the likelihood of defects as soon as the developer has finished work on his module.

    Conclusions

    As can be judged from the title of the article - QA is more unviable, in the traditional sense. However, we can still see the widespread use of QA. The question is how long will it last? Personally, I am of the opinion that soon testing tasks will go directly to developers and QA specialists will have to adapt to the new order.

    Yes, we will still see testers, but they are more likely to be part of the development team, rather than a separate department. Agile QA content is becoming too expensive, so testers will have to change.

    I sincerely believe that we are moving towards a brighter future, where developers will write more advanced, high-quality code. Business remains with corporate executives. They have ways to reduce costs and produce competitive products. They need to apply them.

    Translation of "The Day the QA Department Died" by Eli Lopian.
    www.infoq.com/articles/day-qa-dept-died

    Also popular now: