How Testing and Agile work together?
Unlike traditional waterfall models, where testing was treated as a separate phase by itself with silos teams and heavy weight processes built in, agile principles strongly prescribe that testing as a practice that will evolve and involve all development team members of a cross-functional team. Testers in the team bring in special testing expertise to the team, with constant interaction with other team members to ensure delivering the early business value desired to the customer at frequent intervals maintaining a sustainable pace. Since Agile roles largely overlap, early and continuous testing is the key to maintain high quality.
Agile software development emphasize that testing is an integral part of the software development and it recommends using the “entire-team” approach to embed quality into the software product development. Both coding and testing are done iteratively and incrementally to build the business value upwards, until it get full points from the customer. So feedback and collaboration between the developers and testers is the key to make Agile testing successful.
Agile principles replace the need of a dedicated Test Manager with short feedback loops of interactions between the Product owners and team members. Agile testing also influences developers to contribute to testing, since all agile team members are generalized specialists. So Agile testing is a team effort and not the QA testers alone. Testers also help developers in the team, to design and write unit test cases. Other team members may give the feedback using “Show and Tell” technique before the code being checked in into the repository. In short, developers are encouraged to think more like testers, continually checking their own code for potential errors, and testers are encouraged to think more like developers, tempering their natural destructive tendencies to engage more fully in the creative process itself.
Definition of Done is called the exit criteria, before we call a story/sprint done gives a checklist, not to ship anything without the criteria not being met. The acceptance criteria of user stories may be refined to relate the user stories to a testable outcome.
Extreme Programming (XP) gives set of best engineering practices to introduce quality in Agile development. Test Driven development (TDD) is a test first model. Start development with a unit test case, make it fail, then make it pass, and refractor it gradually. We call these three stages as Red, yellow and green. We can also expand TDD to acceptance testing as well.
Pair programming is another practice, in which a tester can pair up with another developer to test and give feedback on a piece of code.
Agile testing strongly recommends test Automation at every level. Writing automated acceptance test cases that will test business logic using API, hooks, business logic layer and GUI is called Acceptance Test Driven Development. These tests should be implemented as a part of the continuous integration platform. Automating all the test cases gives us an edge to perform quick regression testing at the end of every sprint to make sure that something was developed before was not broken. It is also advisable to check in the automated tests into the repository for future references and modification.
Exploratory testing is another face of Agile testing which involves testing at a broader level uncovering the implicit expectations, without any test documents. It bring outs the critical and innovative thinking, and diverse ideas to make the better software products.
Various tools used for agile testing:
JUnit, Native Groovy, JMETER, SONAR, Selenium, DBUnit, Cucumber, Crucible, Jenkins CI, Hudson CI