Laurie Williams, a professor at North Carolina State University, recently conducted a survey to find out which principles and practices are used by agile teams. According to the survey respondents, these five characteristics were widely held to be associated with agile. Let’s take a quick look at each of them.
Agile requires fast delivery of working software. To meet this goal, they have to work fast at the beginning. Rather than meticulously planning out all of the business needs, organizing them, and carefully designing out all aspects of the software, they get just enough of the business needs, and do just enough of the design, to code a few features at a time. What makes this work is regular feedback from the users.It’s interesting to note that this approach is the very antithesis of the one promoted by software engineering practitioners over the years. Their mantra was that if you planned long enough and well enough, coding should just be almost a footnote at the end of the process.
We can collect all of our metrics, all of our measures of productivity, and keep all of our complex schedules, but ultimately the only measure that counts is working software features. That means that those features deployed are of high quality, and that users are productively using them.
Frequent delivery means that there’s not a significant gap in what the users think they need, and are able to try out at least some of it. Depending on the Agile process used, new features may be delivered anywhere from every week to every month. This enables the users to have fast access to critical features, while enabling the project team to get timely feedback.
Had to include the Rosie the Riveter poster.What does motivation have to do with it? Motivated people do more than build software. They understand the domain, talk to the users, and make decisions on the fly that benefit the project and software. By giving motivated professionals key roles, you shape the project with their energy and focus on success.
We’ve all made poor decisions on projects, through inexperience or lack of good information. We would like to not make such mistakes in the future, by analyzing and learning from those in the past. In an Agile project, most of those mistakes are recent. At least some we realized and had to correct along the way.Agile teams take the time at the end of a project to reflect on what went right and what went wrong. This is similar to some of the lessons learned done at the end of traditional projects, but because these are Agile, the lessons tend to be closer in time.
One of the most important topics for any team deciding to adopt an Agile process is the role of testing. Testing in traditional processes is very well-defined; however, the extensive and detailed planning inherent in those processes maps poorly to any Agile process.There’s no one answer to this question, because every project is different. But there are some guidelines that managers and project leaders can use to integrate testing in such a way that testers are equal contributors to the project, and the software produced is of high quality.
The first thing to remember is that being Agile doesn’t mean that quality takes a back seat. Quality remains a high priority, and the developers aren’t in a good position to ensure quality, because they are writing the code. This means there is a role for testers, albeit not using the traditional testing processes.Testers have to reinvent those processes, and in doing so reinvent themselves.
How can testers reconcile the need for quality but not for extensive test planning? Can we save any part of the planning process?
So where should the focus of testers be? Probably the best prescription is to follow the lead of Agile developers – do enough to get you started, then iterate on each phase of the testing process to refine it more as the project progresses.Start with planning – do enough planning to understand the project and user stories. Devise initial testing strategies focused on the first user stories selected. Be ready to participate when developers start coding.Iterate on testing – Don’t expect that you’re going to have comprehensive coverage, at least not right away. Make decisions on the most important aspects of the application for the user, and focus on testing those at first. Over time, if there are hardening iterations or features that depend on other features, you can expand your test coverage.Iterate on quality – Because you won’t have comprehensive testing, your initial efforts at quality will be approximations. Like developers iterate on features, testers also iterate on quality, improving over time.
To make the iterative approach work, you have to have testers directly involved at the very beginning. They are members of the team, not professionals who sit to one side in their own world. They need to know the users and the problem domain in order to know what to test and how to test it. And they need to do more than that; they need to get underneath the user story in a way not required of the developers, in order to know how a feature will be used, and what is important to the user.
Here’s where testing and Agile come together. Testing remains an important part of the process. But without requirements to analyze and test plans to write, you have to look at what the user says is important. This means studying the user stories, and going back to the product owner and asking questions. You can’t be passive; you have to actively seek out opportunities to learn more about the domain to have more effective testing.
That’s right, testers can’t sit back and be passive. That role may work in traditional processes, where testers maintain professional separation from the development process. In Agile, testers have to be an integral part of the developer process. They bridge developers to the users, and take active responsibility for application quality.
To take an leadership role, and be involved from the beginning, testers also have to work alongside developers. They need to understand the tactical decisions developers are making while writing code, so that they understand the underlying structure of the application and the reason why it works as it does. This will accelerate the ability to develop tests that focus on those features.
You have to automate to test in an Agile process. At first, this may seem to be a contradiction, as Agile processes are intended to be lightweight, but there is no substitute for the speed that selective automation delivers. Further, automation allows testers to collect data to measure aspects of the process. This enables them to iterate on testing and quality, by knowing where to place their future efforts.
There are a couple of different aspects to automation. First is automating the process in general. This refers to things like user stories/feature descriptions and bug tracking. The second is testing in particular, like test management and automated functional testing.The key to employing automation in Agile is that you are looking to accelerate repetitive manual processes, so you have to make sure your tools and strategies are lightweight.There needs to be a balance here. The costs of automation, in terms of learning and administration, can’t outweigh the benefits.
You can use process automation tools to track user stories and features, the feature backlog, and for defect tracking. While Agile is typically described as using 3 by 5 cards for recording and tracking user stories, in actual projects that just doesn’t cut it. These need to be available to all project participants, and they need to be able to track any changes that have been made to the stories. Once again, you don’t want to make a career out of tracking user stories, but you need to focus on the things the team and the organization need to move forward.
Testing automation includes test management, automated functional and regression testing, and load testing. Test management refers to defining tests, tracking test execution, and collecting and analyzing data. Any tests and testing has to be tracked in some way, for efficiency’s sake, but the automation can’t overwhelm the actual testing.Automated functional testing is a challenge, because you typically have to manually execute the test once to automate it. At a minimum, it’s good to automate all tests, even though you may be only re-executing the ones that fail initially.Load testing can be tied with automated functional testing, which is another reason to automate functional tests, so those tests can be used as actions for load testing. Ideally, load testing can be a key indicator of whether to use one or more iterations solely for the purpose of paying down debt of the existing feature set (often called hardening iterations) instead of paying down debt in an iteration that implements new features.
Ensure that testers take the lead on the development and execution of functional, regression, and acceptance test cases, and perform these tests throughout Agile sprints, and prior to application deployment. Because Agile tends to blur the line between writing code and testing code, the independence testers bring to the process is essential.
Enable testers to work side-by-side with developers as coding decisions are made, both to appropriately reflect the intentions of the user stories and to enable testers to gain insight into development issues that may impact quality.
I’ve spent some time on automation here, and I can’t stress enough how important it is to be able to use automation to accelerate activities in an Agile process. One caution – don’t get bogged down in the tool; instead, focus on the goal of speed and efficiency.
In sum, testing is essential in Agile projects, and in fact can work well in Agile processes. Application quality is the factor that brings them together. To do so, testers need early involvement and must become partners with both users and developers.
A Software Manager’s Guide to Defining Testing in an Agile Age
Agenda<br />What Does it Mean to Be Agile?<br />Principles of Agile Development<br />Integrating Testing into Agile Development<br />Testing and Automation<br />Making Testing Count with Agile<br />Summary and Questions<br />
What Does It Mean to Be Agile?<br />Satisfy the customer through early and continuous delivery of valuable software<br />Working software is the primary measure of progress<br />Deliver working software frequently<br />Build projects around motivated individuals<br />At regular intervals, the team reflects on how to become more effective<br />
What Does It Mean to Be Agile?<br />Early and continuous delivery of software<br />Requirements less formal – user stories<br />Iterative development cycle<br />One week to one month<br />Working software at the end of each<br />
What Does It Mean to Be Agile?<br />Working software is the primary measure of progress<br />User stories translated to features<br />Features delivered after each iteration<br />
What Does It Mean to Be Agile?<br />Deliver working software frequently<br />One week to one month<br />Timeframe continues to shorten<br />
What Does It Mean to Be Agile?<br />Build projects around motivated individuals<br />Developers, testers, users<br />
What Does It Mean to Be Agile?<br />Reflect on how to become more effective<br />Don’t keep making the same mistakes<br />
Integrating Testing into Agile Development<br />There’s not one single prescription<br />Agile methodologies promote short release cycles<br />Every project is unique<br />
Assignment: Reinvention<br />Quality is a high priority<br />But testing can’t plan like it used to<br />Needed: a new approach to testing<br />Testers have to reinvent themselves and their craft<br />A path to value<br />
Integrating Testing into Agile Development<br />Reinventing testing for Agile<br />Testers remain essential to quality<br />A long lead time before active testing is infeasible<br />How to reconcile test planning with up-front execution<br />Can planning be saved?<br />
Integrating Testing into Agile Development<br />Iterate on planning<br />Keep pace with development<br />Iterate on testing<br />Manage risk so that the most important features and actions are well-tested<br />Iterate on quality<br />Measure your quality<br />Improve it in the next iteration<br />
Integrating Testing into Agile Development<br />Early involvement by testers<br />Testers need to work directly with product owners<br />Must understand the user needs<br />Get underneath the user story<br />
Integrating Testing into Agile Development<br />Focus testing on features that make a difference to users<br />No requirements to analyze<br />No time for comprehensive test plans<br />Learn what the users need<br />Make sure those features work<br />Users sign off, testers validate<br />
Integrating Testing into Agile Development<br />Ensure that testers take the lead<br />Take responsibility for application quality<br />Become an interface to the user community<br />Work with developers as equal partners<br />
Integrating Testing into Agile Development<br />Enable testers to work side-by-side with developers<br />Testers need to know about tactical development decisions<br />This is especially important in Agile projects without formal requirements<br />
Integrating Testing into Agile Development <br />Make automation an integral part of testing<br />Agility and automation work hand in hand<br />Accelerate testing to show agility<br />Data collection and analysis essential<br />
Testing and Automation<br />Automate both process and testing<br />Agile methodologies are lightweight<br />But tools are essential for speed and flexibility<br />Tools accelerate repetitive manual processes<br />But tool overhead can’t outweigh benefits<br />Easy to learn and use<br />Provide easily digestibleinformation<br />
Testing and Automation<br />Process Automation<br />User story tracking - Hint: 3 x 5 cards don’t cut it<br />Feature backlog<br />Defect tracking<br />
Testing and Automation<br />Testing automation<br />Test management<br />Automated functional and regression tests<br />Automated load testing – valuable for assessing design and coding practices<br />
Testing and Automation<br />5-minute Demo<br />
Making Testing Count With Agile<br />Ensure that testers take the lead on the building and execution of functional, regression, and acceptance test cases<br />Independence from development helps ensure objective evaluation<br />
Making Testing Count With Agile<br />Enable testers and developers to make coding decisions together<br />Helps prioritize testing<br />Guide development in decision-making<br />
Making Testing Count with Agile<br />Automate to achieve speed and efficiency<br />Use tools when there is a clear advantage<br />Don’t get bogged down with configuring and maintenance<br />Focus on the goal<br />
Summary<br />Agile methodologies and testing work well together<br />Quality is the common factor<br />Testers need earlier involvement, more interaction with users and developers<br />An independent voice of quality<br />Automation makes testing feasible<br />Repetitive activities are accelerated<br />
For More Information<br />Seapine Software – www.seapine.com<br />“Testing in an Agile Age” Whitepaper http://bit.ly/hiGtkk<br />Agile Expedition – www.seapine.com/exploreagile<br />The Seapine View - http://blogs.seapine.com/<br />