Not many years ago, Marc Andreesen wrote the now famous “Why Software is Eating the World” in The Wall Street Journal. The now cliched’ sentiment that every company needs to embrace digital transformation, in order to survive their business equivalent of an Amazon or Uber.
The one constant that remains in the face of this rapid change, is delivering quality digital experiences at speed. The software development and testing ecosystem changed the paradigm with the Agile methodology.
Over the years Agile practices have firmly planted their roots in the world of software development. Essentially, the premise of Agile innovation is higher productivity, collaboration, faster time to market and lower risk than conventional development approaches.
The Agile phenomenon is based on four core principles defined in the Agile Manifesto. In a nutshell, the practice puts premium on early delivery, continuous and incremental improvement, collaboration and quick responsiveness to change.
But as Agile practices evolved and led to the wider adoption of DevOps practices, there seemed a noticeable gap in testing and QA processes. How does testing fit into the Agile framework? How to set up an Agile testing team? What are some different ways to adopt Agile for your testing teams?
Primarily, Agile testing begins much earlier, at the start of the project with high and constant collaboration between dev and test teams. Agile Testing may not follow the usual sequence but is continuous. The essence of Agile testing is to work as a single team towards the common aim of achieving quality.
The idea is to use an iterative testing approach to deliver quick results, shorter feedback loops and simplify testing though the quality cycle. Agile testing is all about collaboration, flexibility and adaptivity. The world of development is ruthless and software teams do not have the luxury of time. Agile helps minimize business risks and gives a competitive leverage by collaboration, review of work and responding to change quickly. This however, depends on the teams’ ability to show their work regularly and collect feedback.
This accelerated pace means testers must follow some ground rules:
1. Prioritizing what to test. The most critical aspects are tested first, since everything can’t be tested at once.
2. Relying on test automation to increase coverage and productivity and achieve continuous testing.
3. Continuous improvement by using data and past trends
4. Use exploratory testing to shorten the time from code delivery to testing and focus on a working code or working software rather than documentation.
5. Communication and collaboration with developers to keep up with the rapid changes that occur in the lifecycle of a release.
Setting up an Agile testing team
To set up your Agile team successfully for QA, you need to adopt the mantra of continuous quality through collaboration, breaking of silos and automation.
The other two tasks that need to occur in parallel are testing of new stories within sprints and regression testing. Regression testing pack needs to be implemented to get fast and valid feedback on the health of application in the face of ongoing changes.
Deployment or build pipelines are vital to the success of your Agile practice. This decides how a story travels from product backlog to live production.
For successful Agile QA that enables frequent release of quality code, all stakeholders must abide by the deployment pipeline guidelines. Develop the pipeline based on best practices and include activities that are part of every stage.
Effective Agile Testing means that the code is perfect not only in the developer environment but also in other environments after integration. Continuous Integration allows detecting and solving build problems early in the process so you can fix them without losing crucial project time.
Over and above, agile testing teams will incorporate a wider range of testing tools and technologies into their checks from design to delivery and deployment. Agile testers also work on several stories/features simultaneously, so they need tools to organize and manage these multiple requirements.
What are some different Agile Methodologies you can adopt?
With Agile, there is a great emphasis on fluidity and flexibility. As iterations progress, the requirements evolve; each iteration leads to an integrated working increment and is ready for user acceptance testing. The feedback received is then used as an input for future iterations.
Continuous Integration and Continuous Quality
The key to Agile is Continuous Integration. Frequent integrations allow you to be prepared for a release when required. Testing is an essential link for all phases of development to ensure continuous quality. There are several Agile methodologies that support this construct:
Scrum is one of the most well-known Agile testing methodologies used by the vast majority. It is highly iterative and focuses on identifying the main features and objectives before each sprint. This is done to reduce business risks but provide the value.
Scrum is highly collaborative and demands frequent stand-ups and retrospectives to keep the communication flowing. For teams transitioning from waterfall methodology, Scrum is probably the better bet because it is time-based and you can plan out releases in advance.
Kanban literally ‘visual signal’ from Japanese, has its origin in the manufacturing industry. It is a visual method of managing the work with focus on continual delivery. It is almost like a large, prioritized, to-do list. A good example of Kanban is a Trello board that is split into different lists that visually present the status, capacity and stages of task completion( for example, to do, in progress, being tested, done).
As opposed to Scrum’s time-based iterations, Kanban is based on priority. Developers, testers pull the next tasks from the to-do lists as they are ready. The tasks are displayed on a Kanban board for all team members to access and prioritize work from the queue. It relies heavily on:
Kanban board(visual board used consistently across the cycle)
- Work in Progress(WIP) Limit
- Lead Time
However, Kanban is probably better suited for smaller teams or projects that are not highly time sensitive.
Agile Testing Methodologies
Test-Driven Development (TDD): Test-Driven Development (TDD) is a coding practice that helps developers write new code once an automated test fails. The main goal of TDD is to bring more clarity, simplicity and accuracy to tests. It begins by designing and developing tests for every small function of an application before the actual coding begins.
Acceptance Test Driven Development(ATDD): This takes TDD one step further where the entire team of stakeholders discusses acceptance criteria much early in the development process. ATDD is quite ideal for agile testing because it helps close the loops between product and dev teams, increases collaboration and brings efficiency.
Behavior Driven Development(BDD): BDD uses the same principles as TDD but it goes for higher level tests at the business level instead of unit tests. BDD takes the ideal or accepted behavior and asks for tests that even non-developers can understand. It uses the ‘outside in’ approach – implementing only those behaviors that contribute to these business outcomes to minimize redundancy. BDD increases the scope of the feedback loop to include business stakeholders and end users who may not have software development knowledge.
Exploratory Testing: Exploratory testing is the simultaneous process of test design and execution as opposed to scripted testing(with preset procedures and processes). Exploratory tests don’t follow a precise script decided in advance.
In other words, exploratory testing allows testers with the freedom to test the code in an exploratory and somewhat chaotic way. Exploratory tests are then complementary to automated tests, because they aim to find possible issues that are beyond the scope of automated tests.
Session based testing
Session based testing is exploratory testing but with more structure and organization. Where exploratory testing is completely unscripted, there is a question of accountability and expertise of the tester involved.
Session based testing relieves some of these concerns by keeping the essence of exploratory testing with more time-boxed, uninterrupted sessions, testing against a charter and requiring testers to report on the testing that occurred in each session.
Eventually, these sessions are completed with a debrief between testers and managers to analyse the outcomes.
Read more about aligning testing to Continuous Delivery, tools and techniques in the follow up blog post.
TO BE CONTINUED….