Some XP teams choose to have a separate test team and keep the acceptance testing tasks separate from development. We disagree with this approach, for several reasons:
We're not saying this can never work, but it requires strong leadership and communication. It's simpler to include testers as part of the development team and testing tasks as part of the story tasks. Iteration planning is best learned by doing. You'll find lots of pointers in XP publications, but they may not specifically address testing tasks. Here's an example of breaking out and estimating test infrastructure and testing tasks for the phone-directory application used in the preceding examples. For the purpose of a clear example, we're using a story containing functionality that, in a real project, might be broken out into multiple stories. Example 6
In Chapter 9, we defined the acceptance tests shown in Table 13.1 for this story.
Let's say this is the first story in our first iteration. Below is the way we broke out and estimated the tasks in ideal hours. Remember, this is just an example. If your stories aren't this complex, you won't necessarily need all these tasks. We just want to illustrate all the possibilities. Test Infrastructure TasksWe need to select and implement a test tool that will allow us to run tests through the user interface. Assume we have a short list of tools we've used before, so we'll be able to decide on one fairly quickly. We estimate 3 hours. Now, say we have a machine allocated for a test system. We need to install the base software on it and create some shell scripts to pull over our software from the integration system whenever we have a new build. We estimate 3 hours. We also need some shell or database scripts to load, save, and restore the data in the test environment. We estimate 2 hours. We want to find or create a tool to save and report results for each run of our functional tests. The whole team needs to look at this and decide the best approach. We estimate 8 hours. Acceptance Testing TasksWe know we'll need to work with the customer to define categories and business names. The customer should also come up with the searches to retrieve the various types of results. While we're compiling that, we'll also define error messages, the look and feel of the search form and results list, and probably come up with additional typical and potentially tricky user scenarios. In addition to all this, we'll need to figure out how many concurrent users we need for the load test and determine what "reasonable" response time is. We estimate 4 hours. Once we've defined the details, we'll need to load test data into the test system and also into whatever format is necessary for the test automation to access it especially the load test, which will require a lot of different searches. We expect to obtain test data from the user and load it into the system using standard database utilities. Once again, we estimate 4 hours. We're going to break out the test automation tasks for this story by anticipating writing an executable version of the test. We'll do that for real later on in the iteration (Chapter 16). For now, based on the acceptance tests we've defined, it appears we can handle all of them, except test 3, with a single search module. This module will be parameterized with the search specification as a category and location, a business name and location, or a business address and location. It will perform the search according to the parameters and return the results list. We expect to first build a version of search that calls the system code directly (half hour) and later one in the test tool that goes through the user interface (2.5 hours), for a total of 3 hours to code and test this module. Four variations on the expected results are possible:
We expect to need a verifyList module to recognize each of these variations. We estimate 1 hour to code and test this module. Because test 3 involves multiple users and has performance criteria besides the functionality validated by our search module, we'll need a different module for that test, which we'll call multiSearch. This module will use search and verifyList to perform the searches and validate the results. It will coordinate the concurrent users doing the searches and will collect and validate the response times. Because we aren't as comfortable with multiuser automation, we expect to have to experiment to find the best way to do this, so we'll estimate a 4-hour design spike and another 4 hours to code and test this module. Finally, setup and reporting for all tests except test 3 are trivial; we won't even estimate those. For test 3 to be valid, we need a good 2 hours at peak load and additional time to analyze the results, especially if the response times aren't good enough. There's a good chance we may have to do this test twice, so we'll plan for two execution tasks of 2 hours each and two analysis tasks of 2 hours each. Table 13.2 shows our tasks and estimates.
|