This Tutorial Explains the Modern Testing Principles & Application of Agile Methodology In Scrum Testing with the help of a Practical Step-by-step Example:
Agile methodology and the frameworks that are used for applying agile methods to software development required a new approach for testing.
The agility requires to have a continuous testing approach to define a clear methodology for testing and to be sure who can perform the tests. The quality is the central piece of the software development process in Agile.
In this tutorial, we will discuss quality in brief and learn about the Modern Testing Principles because we consider these principles very close to Agile.
Table of Contents:
Testing In Agile Environment
Let’s take a look and discuss a little bit about what is new in agile testing.
Agile methodology is based on some principles that are using the iterative approach for software development processes. We are using here the word “agile” in a general way. We are discussing general principles irrespective of whether the team is using a particular agile framework, such as Scrum, XP, Kanban, FDD (Feature Driven Development), Crystal.
One important principle in agile testing is that there is no specific phase for testing.
Testing is a continuous activity and is the only way to deliver workable parts of the software. Agile testing should provide feedback continuously because the software produced should respect all business requirements and demands.
In theory, we say everybody in the team should test. In practice, we have to discuss this because there are many ways to approach testing in software development processes using agile frameworks.
We will understand this better with an example in the section related to scrum testing.
Who can test in an Agile environment?
- Agile testing is a team-based activity. This activity is dynamic.
- Business Analysts could test the application to be sure that all the business requirements are fulfilled.
- Testers (sometimes this term is not used in an agile environment) should test.
- Developers and testers should be involved in the test automation framework.
We perform the test in an Agile environment in the following cases:
- The testing is performed in each iteration.
- It is mandatory to perform the test in each iteration for:
- Delivering quality software.
- Delivering software that respects the customer requirements.
Benefits of testing in an Agile Environment includes:
- The code is maintained clean because the defects are reported and fixed in the same iteration. The fact that testing is performed while implementing is a very useful way to be creative and to maintain code quality.
- Documentation is also done during the iteration.
- Documentation is based on specified templates.
- The testers can also use checklists and can focus on testing rather than creating documentation.
- For sure, a technical writer is needed to help the team to create concise and clear documentation.
- High level of adaptability and flexibility. In the case of the user requested modifications, the agile testing process rapidly adjusts the requested changes.
Steps for testing in an Agile environment:
- Internal code quality should contain all the test cases which are implemented to support the development team: unit test and component tests.
- Create test cases for covering business requirements: user experience testing, use cases.
- Perform test automation: user acceptance testing, collaborative testing, and usability testing. Automation is mandatory but for successful automation, the team must be knowledgable. Automation can significantly improve test productivity if the testers know how to test. Usually, automated tests are not a replacement for manual testing. For having a good quality product a mixture of testing types and levels is required.
- Automation should also take into account the maintenance of the test scenarios.
- Testing non-functional requirements: security, stability, and performance.
- Regression testing should be done rapidly and with very clear specifications in any iteration.
Quality Assurance Team
- Sometimes QA team also works as a developer for test automation.
- They have to prepare the test plan very quickly and be adaptable also. Requirements often change, so the QA team should maintain very clear documentation related to testing and a very clear test plan.
Some key point to note for Agile testing are:
- Testing should start as early as possible in the software development lifecycle.
- Agile testing needs high customer involvement.
- The team should start testing the code as soon as it becomes available.
- Only when the code is stable enough, the software is ready for system testing.
- In agile, it is essential to maintain good communication between development and testing.
Modern Testing Principles
According to Alan Page and Brent Jensen, there are 7 principles for modern testing.
Please refer to the image below:
[image source]
Now we will discuss these principles in brief.
Modern testing is a remedy for traditional testing methods.
In traditional testing, we can have the following process:
- There is an independent testing team receiving a version of the software product at the end of the development phase.
- They have to test the product and log the bugs found.
- When the bugs are fixed then a new version of the software will be available for regression testing.
What is the problem with these? Why do we need improvement?
In case the first version of the software has many bugs and many issues related to the customer requirements, then a lot of time is needed for fixing those issues, and also in retesting a new version. This may cause delays in delivering the product and thus will increase the costs.
First Principle of Modern Testing,
This principle explains a different approach in testing where the development and testing teams are working together regularly and thus reducing costs.
In traditional testing, the development team used to stay focused on fixing the issues rather than on the quality of the code and the final product.
Also, it is possible for the testing team to ignore or not test additional issues not mentioned in the documentation. So, improving the quality of the delivered software is a very important aspect of business for having customer satisfaction.
Second Principle,
In the second principle, they are discussing Lean Principles. Please refer to the below image.
[image source]
While delivering quality software it is required to keep in mind that value is what the customer needs. It is important to use the customer’s value as a reference. In this context, we have to identify all the activities which are contributing to the customer values. Other activities are considered as useless. Flow with important activities is needed.
Every member of the team should try towards perfection while delivering the software that is only according to the customer’s values and needs.
The Theory of Constraints is a methodology for finding the most important constraint factor that impedes achieving a goal. Then they try to improve that factor until it will no longer be a constraint.
What is important for testing also is that the Theory of Constraints provides tools and methodologies for:
- Eliminating constraints.
- Analyzing the problems and finding solutions.
- Measuring performance for guiding management decisions.
Third Principle,
The third principle refers to the fact that the team should continuously learn and adapt. The team should optimize the processes and developers should also write Test Code.
Fourth Principle,
Principle 4 refers to the fact that the quality should be in the mind of every member of the team. That’s why communication between developers and tester and anybody in the team is really important. To have a quality culture, we need tools, ownership, code quality, a clear development approach, and leadership.
Fifth Principle,
The fifth principle is the one with a lot of debates because the central problem is who the customer is. The testers should think like the customer. They have to keep in mind what customer expectations are. The big question here is who the “customer” is. If we will think about the customer like “each person using the product“, then probably most people will also agree with this.
Sixth Principle,
In the sixth principle, they have mentioned that it is really important to collect data from the customer related to real customer experience and to learn and adapt based on that.
We have to understand that testing together with the customers in their real environment, having in mind the way of using the product by the customer, is important for the testing team. In this way, the testing team will learn, adapt, and create proper and useful scenarios for the business.
Seventh Principle,
The main idea of the seventh principle is that everybody can perform the tests and it’s not necessary to have a specialist in the field. Extending the testing abilities to the whole team means that everybody can perform tests and prepare test automation. If the documentation is a quality one then it is possible.
Modern Testing Principles And Scrum Testing
Scrum is a framework for applying the agile methodology.
Recommended Reading=> Agile Methodology: A Beginner’s Guide To Agile Method And Scrum
In the Scrum team, the testers are involved in various stages of the scrum process. Initially, in sprint planning, a tester should make the effort in estimation for testing and document testing of the user story (test, create tests, execute tests, review tests, create documentation for testing). Testing is a continuous activity.
During the sprint, a tester should support developers in unit testing. The user stories in the backlog have various tasks. When the development tasks are done then the person involved in the testing or, according to the seventh principles in modern testing, any person available in the scrum team can test the implemented user story.
Developers and testers are working together. Defects are logged in a Defect management Tool and are available as tasks of the user stories. Then, after the defect is fixed it is tested again.
The Scrum team is responsible for maintaining the test automation and continuous integration framework.
Testers are responsible for:
- Creating automation scripts. The test automation should be scheduled with Continuous Integration (CI) system.
- Executing the non-functional testing for each user story.
- Defining acceptance criteria for acceptance tests.
- Performing user acceptance testing and be sure that the entire test for the current sprint is complete.
In the sprint retrospective, testers have to identify the issues inserted during the sprint and have to identify lessons learned and best practices. The third principle of modern testing is used in this part.
If we are thinking of the 7th principle from modern testing then every person in the scrum team should be prepared to perform testing. In the scrum team, each team member is focused on finalizing a task. The definition of done is an important aspect.
Let’s take an example.
We have one item from a storyboard: a story from the current sprint backlog.
For this user story, we will use a simple list of tasks. Initially, all the tasks that work has, is yet to start.
Next Step: The developer has started to work on the development task. The test automation can be created and the requirements are based on the specifications. The testers are involved in the creation of test automation.
Table 2: Story Board- IN PROGRESS
Next step: As soon as the development is done, the manual testing and the test automation run will be in progress.
Testing is a continuous activity. Created test automation scripts that will help developers and testers to work together. Testing each user story will ensure that it is based on customer requirements and will also ensure good software quality.
The scrum team is working together for delivering good quality code.
Conclusion
We have to use modern testing principles and adapt the testing activities to be sure that is useful for new frameworks and methodologies.
One very important point to keep in mind is that testing should be a continuous activity. The quality should be the central piece of software delivery. Delivered software should be tested according to the customer requirements and needs.