Hi there, and welcome to part two of Best Practices for Microsoft Test Manager: Testing in a Sprint. Last post we explored the theory behind Scrum and its advantages. This post we will take a more detailed look at the typical tasks that devs and tester participate within a scrum to deliver a particular piece of functionality/user story/Product Backlog Item (PBI). But first a little background for the new readers on what Microsoft Team System and how testing plays a part in this:
You can now be more productive throughout your testing lifecycle of planning, testing and tracking your progress by using Visual Studio Ultimate or Visual Studio Test Professional. These testing tools are integrated with Team Foundation Server, which lets you define your testing based on the same team projects that other areas of your organization are using.
Both Microsoft Visual Studio 2010 Ultimate and Visual Studio Test Professional 2010 now include a new application called Microsoft Test Manager to help you define and manage your testing effort by using test plans. You create a test plan and add any test suites, test cases, or configurations that you need, as shown in the following illustration.
By using the suite of tools in Visual Studio Test Professional and Visual Studio Ultimate, and combining those tools with Visual Studio Team Foundation Server, you can apply proven practices to manage your application's lifecycle, from understanding customer needs through code design and implementation to deployment. You can use the instrumentation in these tools to trace requirements to checked-in code, builds and test results. These practices can help your team create software that is valued by your customers and that is faster and more reliable
- Plan and Track: Capture what is important to your customers, and track your project's progress. Enact processes and monitor their quality to help your team turn customer requirements into working software.
- Design: Design functionality either on top of existing assets or from scratch, using architectural diagrams to communicate critical information about your team's software.
- Develop: Write, unit test, debug, analyze, and profile your application using tools that are integrated with the rest of the application lifecycle so that your team can understand how your progress contributes to the project.
- Build: Build your application using the integrated build system so that your team can ensure quality gates are met and see what requirements have been fulfilled in each build.
- Test: Run manual or automated tests, including performance and stress tests. Manage testing systematically so that your team knows the software quality on any given day.
- Deploy: Deploy into virtual environments to enable more sophisticated development and testing.
So back to today's topic, Testing in a Sprint. Let us begin by going through a typical iteration that would occur during a product cycle and highlight the collaborative challenges faced by testers and developers at key points. Developer tasks will pass from left to right in the upper green arrow. Tester tasks are shown on the lower red arrow. The grey arrows in the middle represent the nightly builds of the application under development throughout the sprint.
In keeping with our Scrum methodology from the previous post, our team will begin with a Sprint Goal and Backlog Meeting, and the decision is made by the team to move two users stories (US#1 and US#2) from the product backlog to the sprint backlog.
After the Backlog Meeting, the developers begin implementing the user stories in order of priority, while the test team gets itself prepared to test each user story as soon as possible, ideally when it becomes available with a nightly build.
As the sprint advances, the developers complete implementing US#1, and immediately continue with the US#2. The devs cannot completely focus on US#2, however, as the testers have begun testing US#1 and are raising bugs against it. The developers must divide their attention between implementing new functionality and fixing bugs filed against other US. Ultimately, this will lengthen the time it takes to implement #US2.
The devs check in the code for US#2 along with (hopefully) fixes for US#1. The testers now have to begin testing US#2 as well as verifying the supposed fixes for US#1. Some of the bugs will have been sent back with a resolution of “not reproducible”, and others will be resolved with fixes that fail to adequately fix the bug, or which result in new bugs. Thus, the remainder of the iteration will follow this routine with developers fixing bugs, and testers engaged in verifying, reopening, and raising new bugs.

Toward the end of the sprint the bug count trends lower as the team focuses on Q/A; but there is a risk: The testers might well wonder if any of the test cases that had passed earlier in the sprint have been impacted by more recent code churn. For example, what if a particular test for US#1 had passed when originally run against Build #3; but would now fail if run against a more recent build? The testers will need to address this risk by investing some effort in checking for regressions. This can be accounted for by adding a “regress impacted tests” block near the end of the iteration.
So understanding a typical ideal sprint (and there have been many untypical sprints as well) we can begin to understand the risks involved with testing in a sprint: it can unravel very quickly with failing to act quickly to an action, low quality bug filing and fixing, and code changes late in the sprint breaking a previously working US. With that in mind, we can see how crucial it is that testers and developers need to work closer together within a product development iteration in order to deliver a quality product on time.
Microsoft test Manager adds value at each stage of the iteration:
- Plan your testing ahead of development: MTM provides rich tools for planning test coverage of user stories that help the testers stay ahead of the devs and avoid unnecessary delays.
- Tune in to the build cycle: MTM helps testers track what’s new in each build (user stories, tasks, bugs) and take appropriate action.
- File high quality bugs: MTM tightens the bug loop by empowering testers to file rich, easy-to-repro bugs, which leads to faster dev turnaround. No more bug ping-pong.
- Fast-forward verification: MTM helps testers manage their bugs and close them efficiently using single-click to “verify” and playback of recorded actions.
- Regress impacted tests: MTM helps testers identify and regress test cases impacted by code churn.
Wow that really is quite a bit we have covered for today. I don't want to give an information overload in one post, so I will let that one sink in for a bit. In part three of this increasingly epic series I will look at the five bullet points above in greater detail and we will explore the features available in Microsoft Test Manager that enable how we can do these things. There's going to be even greater detail in that post than there has been in either two posts, and once you have read it I am sure that you will be grateful that I have split them up!
See you all next time,
Richard
Testhouse Senior Visual Studio Consultant