This article was first published in infoq Chinese site , all rights reserved, the original Article is "XXX". If You Need To reprint it, please attach this statement. Thank you.
Infoq Chinese site Is an online independent service for mid-and high-end technical personnel.Community,For Java,. net, Ruby, SOA, agility,Architecture and other fields provide timely and in-depth information and high-end technology conferences such Qcon Offline technical exchange activities Qclub For free mini book downloads, see Architect .
When talking with many testers about agility, the most asked question is about two questions: "What is agile software testing ?", "Do I need test engineers for Agile Software Development ?". 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 problems, the first article in this agile test ColumnArticleI try 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 should we 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, the vast majority 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 separated from development ", this may cause various problems in the process of agile development:CodeQuality, which leads to an endless stream of iteration problems in the process of frequent iterations. Or, the original method is used to schedule system tests on the system, which causes the test team to be exhausted, but it cannot keep up with the development requirement. 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 four aspects:" 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 as much coverage as possible, and regard testing and development as two independent processes, testing is the result of the development phase Verification . Agile Software Testing creates a different quality culture: the purpose of testing is to ensure rapid product release, that is, the increase in productivity itself. Verification " the starting point will inevitably require the independence of testing and development, as well as the "objective" and "complete" Measurement of product quality as much as possible; and based on " productivity " The starting point is to establish 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.
quality culture is the foundation of all the items listed in the table, "teams" are the conditions for implementing agile software testing, and "feedback" and "development test" are the specific methods of agile software testing. Of course, you can start these projects with agile core values: "teams" Focus on communication and respect ;" feedback "directly corresponds to feedback ; "Quality Culture" is based on courage (courage to take responsibility for quality) and respect ; the "development test" is feedback and simple .
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 testing engineers, in particular, for test engineers, traditional test engineers can only "precisely simulate user operations", because they cannot improve product productivity. In Agile development teams, it is difficult to make a difference. In subsequent articles in this column, we will further discuss the work and tasks of test engineers in agile software development.