Ext.: http://blog.csdn.net/kerryzhu/article/details/8812589
Today, we also discuss such an old topic, do you feel the same? Because Mr. Dening, who was Google's China Test manager two years ago (at the end of 2010), wrote an article on "What is Agile Software Testing" (published on the INFOQ website [1]), which has already been discussed, "Agile software testing is more of a concept than a process." [2] In 2011, I wrote an article on "thinking and new developments in agile Testing", published in the journal Programmer, on "the fundamental and common thought of BDD, ATDD, and TDD to form a new, more complete agile testing Framework". [3] earlier (October 2010), wrote a "methodology and practice of agile Testing" (also published in the "Programmers" magazine), where the first section discussed "What is agile testing", and simply said, "agile testing is a continuous response to software quality issues in a timely manner." However, the space is not much, hurried over, said not clear enough. If you go further, as early as 2009, Lisa Crispin and Janet Gergory wrote a book "Agile testing:a Practical Guide for Testers and Agile Teams", which in 2010 had its The Chinese version [4], in the 1th chapter on the definition of agile testing, focusing on the agile form of testing and "agile testing" to highlight the agile test, the difference between agile testing and traditional testing is analyzed (although the author confined the traditional test to the waterfall model, which is obviously wrong), Let's look at some of the features of the agile tests, shown in 1. But the authors also acknowledge that "agile testing means different things to different people."
Figure 1 Traditional and agile testing [4]
In this sense, "agile testing" is not a new concept, but why do many people still do not understand what agile testing? Now occasionally see some articles or Weibo posts are still discussing what is agile testing, but it seems foggy, unintelligible, feel "agile testing" in many people's minds is still relatively vague. It is estimated that the previous article, including my article, did not say "agile test", so there is the idea of writing an article, as far as possible to the "agile testing" this connotation to everyone clear. Later, there is a chance to discuss how the traditional test team transforms and how the test team is built under the agile culture.
First, it is clear that agile testing is neither a method (such as a black-box method, a White-box method, etc.), nor a way (such as exploratory testing). Because there are various methods available in agile testing, including white-box methods, black-box methods, exploratory testing (exploratory test), or script-based testing (scripted test) can be used in agile. What is the agile test? Agile testing should be a set of solutions, a framework of test operations and management, a set of practices, or a specific test process consisting of a sequence of test activities. Just like scrum, scrum can be understood as a framework for the implementation of agile methods, a set of practices, or a specific solution. To put it simply, agile testing is a series of test practices that conform to agile development methodologies and strive to achieve a balance of quality and efficiency. Let's take a look at how Wikipedia describes agile testing:
Agile Testing is a software testing practice that follows the principles of Agile software development. Agile testing involves all members of a cross-functional Agile team, with special expertise contributed by testers, to Ens Ure delivering the business value desired by the customer at frequent intervals, working at a sustainable pace.
It emphasizes that agile testing is a software testing practice that adheres to the principles of agile development methodologies, involving all people across functional agile teams, including the special contribution of testers to their professional expertise, to ensure continuous and rapid business value delivery. So to understand agile testing, let's go back and look closely at the 12 principles behind the Agile manifesto. I believe that everyone is familiar with the Agile manifesto, and if unfamiliar, read the following complete Agile manifesto carefully, not just those four words.
1. Methodologies for Agile testing
Start with agile development at this level of methodology to discuss what agile testing is, or what the specific features of agile testing are, or what the main practices are, and then discuss agile testing (or scrum testing) in scrum on the very hot Agile concrete framework scrum. let's look at the 12 principles behind the Agile manifesto. [5]:
1) Our most important goal is to satisfy our customers by delivering valuable software on a continuous and early date.
2) be willing to face changes in demand, even in the late stages of development. The agile process controls change for the customer's competitive advantage.
3) Frequent delivery of working software, separated by a few weeks or a month or two, tends to take shorter cycles.
4) business people and developers must work with each other, every day of the project is no exception.
5) Inspire individual morale and build projects with them as the core. Provide the required environment and support, supported by trust, to achieve the goal.
6) The best and most efficient way to deliver information, both inside and outside the team, is to talk face-to-head.
7) Working software is the primary measure of progress.
8) Agile processes advocate sustainable development. The responsible person, the developer and the user should be able to maintain their steady pace and continuity.
9) Perseverance in the pursuit of technical excellence and good design, the agility of this enhanced.
10) Simplicity-based, it is the art of trying to reduce unnecessary work.
11) The best architecture, requirements and design are from the self-organizing team.
12) The team regularly reflects on how it can improve its performance and adjust its behavior accordingly.
None of these 12 principles directly refers to testing, does it mean that there is no agile test? There is the development of the test, but the original to participate in the Agile manifesto of the 17 people, basically exclusively programmers, not in the principle of separate elaboration of the principle of testing. However, some of these principles and tests are highly correlated, such as:
1) How does software testing support or assist in "delivering valuable software on a continuous and early date"? How to perform adequate testing in a very limited time period? This is the "automated test" that we often emphasize in agile testing, and without automated testing, there is no need for agile to deliver valuable software on an ongoing basis, and to "make customers happy".
2) "Willing to face the change in demand, even in the late development of the same" and the traditional development principles are different, the traditional development of the hope that there is a strict demand change control, the more late control more stringent. and agile Development embraces change, so how does testing adapt to this change? How do I quickly complete regression testing? This may depend on developing a good unit test, or full participation in testing, and automated test execution that fully supports system-level, end-to-end regression testing.
3) Traditional development also requires "business personnel and developers must cooperate with each other", but there are a certain stage, such as pre-demand review, product walk-through during the period, and late acceptance testing requirements have close communication and collaboration. But Agile development emphasizes " every day of the project is no exception ", under such principles, how to do agile testing? This reduces the testing documentation, and it is not necessary to write a test plan in detail at first, but to write a one-page test plan that will continue to be perfected and adjusted in the future.
4) " working software is the primary measure of Progress ", no longer the completion of the test plan, the number of test cases completed, the amount of test scripts, etc., but how to verify the performance characteristics of the daily completion. The workload of development is not measured by line of code, but by how many specific user stories (features) have been implemented (done). A development says that a user story has been completed, either through his own validation, or by a tester's validation, who does not have the test, and the key is to have the test ready to verify the completed work at any time.
5) "The relentless pursuit of technical excellence and good Design ", on the one hand, the need for testing technology to continuously improve, in the processing of each test task, should find the most effective way, on the other side, in the early stage to participate in the design review, timely detection of design problems. Only good design can better support the function expansion and continuous reconstruction of the system.
Based on these principles, we can summarize some of the features of agile testing:
1) Agile testing must be part of the Agile development approach, consistent with the idea of the Agile Test Manifesto, as well as the agile development principles listed above, emphasizing the individual skills of testers, and always maintaining close collaboration with customers/users, other members (especially business people, product designers, etc.) Build a good testing framework (especially for continuous integration testing and automated regression testing infrastructure) to adapt to changes in requirements and focus on the system itself rather than on test documents (such as test plans, test cases, etc.).
2) Agile testing has distinctive features of agile development , such as test-driven development (TDD), acceptance test-driven development (ATDD), as discussed in my other article, "Thinking and new developments in agile testing". The idea of test-driven development is at the heart of agile testing, or unit testing is the foundation of agile testing, and without adequate unit testing, there is no way to cope with rapid changes in future requirements or to achieve continuous delivery. This also shows that in agile testing, developers take on more tests, which is what we say, and in agile testing, the team is working together. In agile testing, there can be no full-time testers, everyone can take the initiative to get design tasks, code tasks to do, but also to take test tasks to do. In agile testing, it is also possible to practice pairing tests, as developers do with pair programming, where a tester corresponds to a developer, or one tester to another test person.
3) Agile Testing is everywhere, at no time . Early testing is also advocated in traditional testing, including requirements and design reviews, and in traditional testing it is also advocated for full-process testing. But in the traditional test phase features are relatively prominent, for example, the need to review, which means that the product personnel to write the requirements, but after the requirements of the document is written, testers to participate in the review. In agile testing, teams work together every day to discuss requirements and review requirements together. This continuity is more pronounced in agile testing.
4) Agile Testing is based on automated testing, and automated testing plays an absolute leading role in agile testing. Automated testing is also advocated in traditional testing, but due to the long cycle of traditional development (months to years), even without automated testing, it is generally possible to get a regression test for weeks or even 1-2 months. The continuity of agile testing requires a high degree of automation in testing, with the complete acceptance test (including regression testing) completed within 1-3 days. Without automation, there is no agility.
2. Agile testing for Scrum
The following discussion of agile testing with the popular Agile framework scrum will be more specific and more actionable. We'll review the scrum model in Figure 2 below, but it's not covered in detail here.
Figure 2 The Scrum process
It can be seen that, in addition to the final "acceptance testing" phase, other processes do not seem to have significant testing characteristics, but the implied test requirements and characteristics are still present.
1) Product Backlog (Requirements definition Phase), what to test for when defining user requirements? The test needs to consider the customer's value (priority), the basic workload estimates, need to carefully study the product-related user behavior patterns (such as BDD), product quality requirements, which quality characteristics are we need to consider? What are the competing products? What are the characteristics of these competing products (advantages, disadvantages, etc.)?
2) Sprint Backlog (phased task Division and scheduling), this time need to identify specific features and tasks to achieve, as a test, this time to pay special attention to "Definition of Done", that is, the requirements of the end of each task-the acceptance criteria for the completion of the task, In particular, the design of functional characteristics and code implementation of the acceptance criteria. The key step of ATDD is also shown here, before the design, writing code, it is necessary to determine the acceptance criteria. On the one hand, in line with the idea of test-driven development, the first time to do things right, to prevent defects; another aspect of continuous testing and acceptance testing is clear, can quickly make the test pass or not judgment.
3) in each iteration (sprint) Implementation phase, the tasks defined by the Sprint backlog are primarily completed, and in addition to TDD or unit tests, a continuous integration test or the usual BVT (Build verification test) should be performed. And developers carefully consider each component or block of code to be testable when designing and writing code, because test tasks may be done by themselves. If you have a full-time tester role, you can improve unit testing, integrated testing frameworks, assist developers in unit testing, and also develop scripts for acceptance tests by doing more exploratory testing on the features of the new implementation. Without a full-time tester role, these things have to be done, but only by the team. Although there is no division of labor, but there are tasks of division of labor.
4) Acceptance test can be completed by automated testing tools, but in general, it is impossible to achieve a complete automated testing. Usability testing, for example, is difficult to accomplish by tools. Even though the performance test is done by the tool, people need to design test scenarios, including key business choices, load patterns, and so on. Agile acceptance testing, unlike traditional acceptance testing, focuses on the validation of "Definition of Done", but the basic ideas are consistent with traditional development, and any non-verified product features cannot be published directly.
3. Conclusion
Agile testing is a series of test practices that conform to the Agile Manifesto concept, adhere to agile development principles, and integrate well with their overall development processes in an agile development environment, with distinctive agile development features such as TDD, ATDD, pairing programming, and continuous testing. and traditional testing can be summed up as follows:
1) Traditional testing emphasizes the independence of testing, and the "developer" and "tester" roles are more clearly divided. Agile testing can be a full-time tester, or it can be a national test, that is, in agile testing, there can be no "tester" role, emphasizing that the entire team is responsible for testing.
2) Traditional testing is more phased, from requirements review, design review, unit testing to integration testing, system testing, from the test plan, test design to test execution, test reports, but agile testing more emphasis on continuous testing, continuous quality feedback, stage is more vague.
3) Traditional testing emphasizes the planning of testing, that testing is difficult to control and manage without a good test plan and does not follow the plan, and that agile testing emphasizes the speed and adaptability of testing, focusing on the continuous adjustment of plans to adapt to changes in demand.
4) Traditional testing emphasizes that testing is made up of "verification" and "confirmation", and the agile test does not have this distinction, always take the user's needs as the center, every time, the user needs, will verify and confirm unity.
5) Traditional testing emphasizes that any defects found should be documented in order to carry out the root cause analysis of defects, achieve the purpose of defect prevention, and emphasize the process of defect tracking and processing, distinguishing between the different responsibilities of testers and developers. Agile testing emphasizes face-to-head communication, collaboration, stress on team responsibility, and less attention to the record and tracking of defects.
6) Traditional testing pays more attention to defects and conducts a series of activities around defects, such as defect tracking, defect measurement, defect analysis, defect report quality inspection, etc., while agile testing focuses on the product itself and focuses on the customer value that can be delivered. In the agile development model of rapid delivery, the cost of defect repair is low.
7) Traditional testing encourages automated testing, but the success of automated testing does not have a fatal impact on testing, but the foundation of agile testing is automated testing, which is a fast test with good automated test framework support.
Reference article:
[1] Paragraph read, what is Agile software testing, http://www.infoq.com/cn/news/2010/12/dn-agile-test-1
[2] Zhu Shaomin, the thinking and new development of agile testing, http://www.programmer.com.cn/8040/
[3] Zhu Shaomin, methodology and practice of agile testing, http://www.programmer.com.cn/8065/
[4] Lisa Crispin, Janet Gregory, Ben Linders translation, Agile Software Testing: A Practical guide for testers and agile teams, Tsinghua University Press, 2010
[5] Http://www.agilemanifesto.org/iso/zhchs/principles.html
This article was first published on InfoQ: Http://www.infoq.com/cn/articles/agile-test
What exactly is agile testing?