By Harish Chander, Senior Project Manager, Infogain
Agile testing is defined as a software testing practice that follows the principles of agile software development. It involves all members of a cross-functional agile team to ensure delivering the business value desired by the customer at frequent intervals, working at a sustainable pace.
Agile Software development has now been adopted widely in the IT Industry. Most software projects now embrace this methodology, and this trend is increasing in popularity with time. While there is a good understanding of development practices suitable for an Agile environment, the testing practices are not mature enough. Challenges and strategies for a successful approach to Agile Testing are addressed below.
Challenges in Agile Testing
- Minimal requirement documentation and changing requirements:
The requirements are gathered in the form of user stories and it may not contain the implementation details. Also, requirements may get refined once development starts.
- Developer mindset while testing:
The developers have “Parental feelings” towards their code. They are emotionally linked to the code, they write and it is difficult for them to be able to find the bugs in the code written by them. So, their focus is on the “Positive Paths”. The mental switch required to move from a positive mindset to a negative/ what-can-go-wrong mindset is not trivial and very hard to achieve in a short time.
- Shorter cycle time with insufficient time to test
Agile Teams no longer have the luxury of time to execute a complete regression test suite in every sprint. They need to understand the impact areas and plan to test accordingly.
Recommended Approach for Agile Testing
We recommend following as part of Agile Testing Strategy.
- Test First Approach
This approach suggests development of the tests before development of the code. Kent Beck, creator of XP said ‘We never have enough time for testing, so let’s just write the test first’. The tests written are often automated for unit tests. Even when the tests are not automated, it helps the team to develop as per the requirements and remain focused on the user’s need. This approach creates a better understanding and reduces rework. This also results in higher quality code because of early detection and fixing of bugs, and correct implementation of the features.
- Test Automation
There is not enough time to perform extensive regression testing. So, there is a need for increased emphasis on test automation. Test automation does not mean only functional or end-to-end test automation. The test strategy should consider unit, integration/component tests as well. Relying only on end-to-end tests (E2E) is not a wise strategy. We recommend having a test pyramid wherein there are maximum unit tests, lesser integration tests, and still lesser functional/ E2E tests.
The other aspect of automation is to have the proper framework in place. Record and playback or automation without any framework may seem a low-cost option initially, but it does not work from a maintainability point of view. A good framework helps in faster script development, ease of understanding the scripts, analyzing the reasons for any failure and maintainability of the scripts. Infogain’s Unified Automation Platform helps to boost test efficiency and effectiveness while increasing speed to market through intelligent automation.
- Continuous Integration/Continuous Delivery:
Agile implementation is incomplete without continuous integration and continuous delivery practices.
Continuous integration is a software development practice where team members integrate their work frequently leading to multiple integrations every day. The integrated code is verified by an automated build, which includes automated tests to detect integration errors as quickly as possible. This approach leads to significantly reduced integration problems and allows a team to develop good quality software more rapidly.
Continuous delivery is the natural extension of continuous integration. In this approach, teams ensure that every change to the system is releasable and that any version can be released at the push of a button, or with minimum effort.
- Collaboration and cohesiveness in the team
It is important to have a cohesive team, where developers and testers collaborate to ensure good product quality. It is important that there is mutual respect and trust. Traditionally, the developers want minimum or no bugs to be found in their code while a tester wants to maximize the number of bugs. To facilitate an environment of collaboration, it is recommended that the number of bugs found within the scrum team is not tracked for metrics. This would help developers and testers to work together since their goals would be identical – delivery of quality product.
- System Testing Team
A scrum team is constantly working in each sprint to develop required features and test. There might be multiple scrum teams working on the same product and it is quite possible that a well- tested feature by a team may stop working after integration with the code developed by other teams. The unit tests do help in some cases to detect the issues, but sometimes this may go undetected. To help prevent such scenarios, it helps to have a system testing team, which tests the integrated code before every release. This team provides the second level of validation before finally releasing the product/ application.
To derive benefits from Agile methodology, it is important to have good testing practices in place along with development practices. With a test first approach, proper automation strategy along with CI/CD implementation and collaboration between testers and developers contributes to delivering a quality product or application and ensures that the agile implementation is successful.
To speak to an expert, contact here.