[Editor's note] the agile concept has been deeply rooted in the hearts of the people, and the development process is getting better, but the testing situation is a little embarrassing. How can testing practitioners embrace agility and reflect their new values? InfoQ invited some agile testing experts from Google to answer questions and hope that all testing practitioners can get their answers. For more information about agile testing, visit the InfoQ Chinese site agile testing.
When talking with many testers about agility, the most asked question is about two questions: "What is agile software testing? "," Does agile software development require test engineers? ". The previous question was about the definition of agile testing itself, and the second question was about the exclusion of test engineers from agile development. In fact, in the process of exploring the answers to these two questions, we can have a clearer understanding of the definition and values of testing in agile software development, and the cooperation of development and test engineers in Agile development. In view of the significance of these two questions, in the first article of this agile test column, I tried to answer these two questions as clearly as possible from my own practice.
Indeed, the discussion on Agile testing is much lower-key than that of agile development. Agile consortium defines four agile value statements and 12 accompanying support principles. None of these 12 principles individually refer to testing. Does this mean that testing is not important in Agile development? In fact, if you carefully study the 12 agile principles and various agile practices, you will find that testing plays a very important role in Agile development. Whether it is the "frequent delivery" in principle, the measurement of "workable software", or the "test-driven development" and "behavior-Driven Development" in Agile development practices ", all are inseparable from the support of tests. In my opinion, the reason why tests are not described separately in Agile development is that in Agile development, testing is no longer a separate process and independent from development, it has become the main means to drive development and measurement of output, and has become part of the process that all engineers must consider and practice at work in Agile development. In short, agile software testing is more of a concept than a process.
In this case, why do we need to discuss agile software testing in this column "? I have been in contact with many software development and testing engineers. Some of their organizations are trying to transform to agile development. Some of them have already practiced agile development. However, due to their long-standing work habits, most of them do not consciously recognize the key role of testing in Agile development, but intentionally or unintentionally regard testing as a "next stage" completely separate from development ", this leads to various problems encountered in the process of practical agile development: either the code quality is ignored, resulting in an endless stream of iteration problems during frequent iterations; or the original method is used to test the system. As a result, the test team is exhausted, but it cannot keep up with the development schedule. In this case, we will discuss tests in agile software development, that is, agile software testing, which should be helpful to these engineers.
So what is agile software testing? It is difficult to give agile testing a precise and perfect definition. In my opinion, I accept agile core values (communication, simplicity, feedback, courage, respect ), tests carried out during agile software development can be called agile software testing. Therefore, agile software testing is not a division at the same level as agile software development, but a part of Agile Software Development. Unlike traditional testing, agile software testing is not an independent process, on the contrary, it is intertwined with other activities in the whole agile development and can be seen everywhere. Because Agile Software Testing does not tend to define a separate process, I want to explain the comparison between Agile Software Testing and Traditional testing, the methods used in agile software testing, and the work of testing engineers in the agile software testing process. In this article, we mainly describe agile software testing from a macro perspective. In subsequent articles in this column, we will further describe the methods used in Agile Software Testing and the work of engineers in agile software testing.
Agile Software Testing is based on the core agile values. In order to more vividly describe the difference between Agile Software Testing and traditional software testing, I start from my own practical experience, I tried to provide the "agile test checklist" that I think contains the key elements of agile testing ":
Project |
Checkpoint |
Note |
Team |
- Is the test engineer closely connected with the development engineer?
- Do test engineers establish and closely associate with customers?
|
- Do you want to attend the daily standing meeting? Can I start a face-to-face discussion with development engineers at any time?
- Do you maintain good communication with customers? Is acceptance testing well defined maintained with the customer?
|
Feedback |
- Is an appropriate acceptance test established for the project?
- Is the distance between current work and deliverable ready for everyone in the project?
- Has a Development Quality Metric set up?
- Can developers get feedback on code submission quickly?
|
- Display the distance between current work and deliverable products using Dashboard and burn-out diagram
- Establish unit test coverage and other metrics
- Using continuous integration or frequent building enables developers to get quality feedback on code submission quickly
|
Quality Culture |
- Has the principle of shared quality objectives between development and test engineers been established?
- Does the team focus on development quality and ensure high development/code quality as much as possible during their work?
|
- Shared quality goals mean that quality responsibilities are shared by all engineers
- It not only focuses on the final output, but also constantly refactor the code to ensure the code quality.
|
Development and testing |
- Are full development tests performed?
- Has a continuous integration environment been set up and continuous integration results are used as conditions for code submission and release?
- Have enough automated tests been established and the requirements for automated tests are focused on design?
|
- Certain test coverage standards should be set up for development and testing. For example, at the unit test level, 60% or 80% coverage requirements should be set up.
- Ensure the testability of products and codes by using TDD, BDD, and other technologies
- Establish enough automated tests to ensure that the tests can meet the requirements of rapid iteration.
|
The checklist mentions "team", "feedback", "quality culture", and "development and testing". In my opinion, these four aspects reflect the greatest difference between Agile Software Testing and traditional software testing. Traditional Software Testing focuses on discovering as many problems as possible through the "coverage" as possible, and regard testing and development as two independent processes. Testing produces results in the development stage.Verify. Agile Software Testing builds a different quality culture: the purpose of testing is to ensure the rapid release of products, that is, to improve productivity. Based on"VerifyThe starting point of "must be the independence of testing and development, as well as the" objective "and" complete "Measurement of product quality as much as possible"Productivity"The starting point is to build an agile team, require testing and development to be as close as possible, require the establishment of highly testable software, and based on these highly automated testing.
Among all the items listed in the checklists, "quality culture" is the foundation and "team" is the condition for implementation of agile software testing, "feedback" and "development test" are specific methods for agile software testing. Of course, you can start these projects with agile core values: "teams" Focus onCommunicationAndRespect; "Feedback" directly correspondsFeedback; "Quality culture" based onCourage(Courage to take responsibility for quality) andRespectWhile "development and testing" isFeedbackAndSimple.
Another question raised at the beginning of this article is: "Do I still need test engineers for Agile Software Development? ", The industry has different opinions on this issue. Some people think it is necessary because there are always jobs that require the skills of test engineers. Of course, some people think it is not necessary because testing in Agile development focuses on development testing and automated testing, developers can do test-related work on their own. In practice, companies that practice agile development on a large scale (such as Google) tend to set a small number of test engineers in the organization and allocate a small number of test resources in the project, even for some projects, test engineers are not used at all.
As far as my personal practical experience is concernedCustomerTo develop a project, you need to set up a full-time test engineer in the agile development team, because:
- Testing and development have different ways of thinking: Testing focuses more on comprehensive verification and inspection of a system, and it is difficult for development engineers to establish such a way of thinking in a large scope. Therefore, a full-time test engineer is more effective, whether it is to verify the product at the system level or to find a point worth testing and verification from the application system perspective.
- Dedicated test engineers focus more on the test Foundation and establish the infrastructure required for the test: because the test engineers have a better understanding of the test, generally, they are able to develop a testing infrastructure (Automated Testing Framework) suitable for projects with more considerations for testing needs, and development engineers can use these frameworks to establish functional or code-oriented testing.
However, agile development puts forward more and more requirements for development and test engineers, especially for test engineers, traditional test engineers can only "accurately simulate user operations", because they cannot improve the productivity of products, it is difficult to make a difference in Agile development teams. In subsequent articles in this column, we will further discuss the work and tasks of test engineers in agile software development.
About the author
Duan Nian: Google's senior test Manager in China, graduated from Huazhong University of Science and Technology, and has been engaged in software development and testing for well-known domestic and foreign companies in various industries such as communication, embedded software, and Internet. Have unique insights on the technology and management work in software testing, and have a lot of research on software testing team management, automated testing, performance testing and development testing.