Software Testing in Agile
Agile testing is a software testing practice that follows the rules of the agile manifesto, treating software development as the customer of testing.
Agile testing involves testing from the customer perspective as early as possible, testing early and often as code becomes available and stable enough from module/unit level testing.

Since working increments of the software is released very often in agile software development there is also a need to test often. This is often done by using automated acceptance testing to minimize the amount of manual labor. Doing only manual testing in agile development would likely result in either buggy software or slipping schedules because it would most often not be possible to test the whole software manually before every release.

Why Automated Testing for Agile Development?
Let's dive a little deeper into the reasons why testing needs to be automated in an agile delivery environment. The people involved in testing are part of the delivery team - not an isolated group that developers give the code to as a final step to release. Ideally, testers sit side-by-side with the developers, who, as they create code, pass it to testers early and continually throughout the process for evaluation against acceptance criteria. Since capability is built iteratively and the team needs to maintain velocity, the code assets have to be verified quickly. For agile to truly succeed, functional testing has to be quick, iterative, and responsive.
Let's dive a little deeper into the reasons why testing needs to be automated in an agile delivery environment. The people involved in testing are part of the delivery team - not an isolated group that developers give the code to as a final step to release. Ideally, testers sit side-by-side with the developers, who, as they create code, pass it to testers early and continually throughout the process for evaluation against acceptance criteria. Since capability is built iteratively and the team needs to maintain velocity, the code assets have to be verified quickly. For agile to truly succeed, functional testing has to be quick, iterative, and responsive.
- The Need for Speed: Accelerating the Code-and-Test Process - Automation enables testers to create simple, reusable scripts that they can deploy to save time and increase the consistency of testing across similar user stories, story points, or requirements in and across projects. Tests can be developed from the user story to drive the functional capabilities and then run rapidly and iteratively. The speed of automation significantly lightens the workload of testers and eliminates the need for late night and weekend testing marathons that can burn teams out.
- The Need for Repeatability: Doing the Same Tests and Scripting Tests against the Right Acceptance Criteria - With agile development, regression testing should be done at the close of every new iteration - in some cases this means daily. Regression testing requires that 1) you do the same tests every time you test a particular piece of code and 2) that the test is scripted against the acceptance criteria of each respective user story. Whenever code changes (or is extended to include new capability), you need to rerun all functional tests for all user stories up to the latest change to ensure other user stories weren't impacted inadvertently.
Repeatability is nearly impossible to achieve with manual testing due to human error, variability, and inconsistency. People simply can't remember exactly which tests they ran for each piece of code for the last iterative cycle - and even one oversight can cause problems in the final code. Not to mention the fact that with large code bases the time needed to manually test usually exceeds the time allotted for the iteration. But with automated, repeatable functional and regression testing, one can execute tests consistently whenever necessary.
The automation element adds key benefits that can't be achieved with manual testing. For example, it can greatly accelerate the code-and-test process by supporting fast automated test scripts. Automation also ensures the repeatability of tests to maintain regression testing from sprint-to-sprint, iteration-to-iteration. It can also enhance test efficiency with robust yet flexible test management processes, helping customers avoid the inherent inaccuracies that manual processes inject in to the process.
Testing in an agile environment can be a challenge, but the benefits to having good testing are enormous. Here are a few keys to agile testing success:
- Test Early – The key to agile is iteration: developing, testing, and developing again. To get the most out of an agile process, you have to test early. That means that you think about testing not just after the first couple of sprints, but at the very beginning of the development cycle.
- Test Often – A good agile process emphasizes frequent testing. You are looking for defects early in the testing cycle. The longer defects wait in the code, the harder and more expensive they will be to remove.
- Refactoring/Regression – Stop every few weeks to focus on stability. Fix bugs, refactor old code, and run extensive regression testing to make sure you didn’t miss bugs during the ongoing testing process.
- Test from a Customer Point of View – As with any development process, it’s critical that the testers and developers know the customer’s point of view. That means having good stories with customer relevant material, and then sharing those stories with the development team as well as the testing team.
- Separate Testing from Development – This is often difficult for smaller teams, but testers should be independent. Keeping testers separate means they can develop true testing expertise while focusing on finding bugs.
- Communicate – Having good communication between the testers, developers, and product guys is a key essential to a solid agile process. Even though testers should be separate from developers, they should work closely together to get the most from testing.
- Automate What you Can – The best agile teams automate as much of their testing load as they can. Repeatedly testing the same case over and over is a waste of time. Locating new bugs is far more valuable for any tester.
No comments:
Post a Comment