As a modern software programmer, you're expected to play many roles. Traditionally, professionals in your position were just required to be good at coding, but more and more development companies are adopting the Agile approach to software production. This means you're likely required to think like a coder and tester at the same time. This can be challenging. But at least your Scrum Master should have your back at all times. Adapting to this job can seem a bit overwhelming, especially if you don't have the tools and skills required to succeed.
The Agile Mindset
The "waterfall" approach to software development, which emphasized divided, linear processes, is quickly becoming extinct. Many believe it to be an archaic leftover from the pre-Internet, physically packaged days of software. It's often believed to be inefficient, costly, and divisive. The Agile Mindset attempts to solve these problems by bridging the virtual crevasse between code creators and code breakers. That doesn't mean getting rid of one or the other but rather merging processes so that everyone works closer together.
So, what exactly is your responsibility as a software programmer in an agile environment? Your primary job is to help get the team's work done. Coding and testing don't really matter in the same old ways. Your specialty is that you're good at creating code, so that's what you should probably do most of the time. However, you are also required to help other team members to get the work done. Even if that means testing other people's work. Rather than leaving the task of finding any bugs exclusively to testers, you're likely expected to check your code for errors--as it is created. On the flip side, testers are often expected to think more like programmers by engaging in the creative process. Together, you are members of the scrum team with a unified vision to create bug-free code. The key here is that everyone on this team is responsible for delivering a quality product.
The Programmer's Role in Agile Testing
With Agile, there is no solitary testing team or test phase of development. As a programmer, you'll need to continuously collaborate with your fellow scrum team members to find and fix problems. When working on a project, you should have a vision of the final product in mind. Rather than following strict written procedures or checklists, you'll be making sure that the code adheres to the quality expectations of the end product. You'll do this by:
- Providing feedback at in-person meetings
- Forming self-organized, dedicated and table teams
- Conducting unit tests and notifying teams quickly about problems
- Switching hats with testers or QA personnel or any other specialty on the team to help out
- Performing sprint level and end-to-end agile regression testing
The Concept of Regression Testing
The concept of regression testing is to be sure that previous functionality within an application still works as new changes are brought into production. You do not want to break anything that is already working, and this testing helps to avoid that. The concept is to build a set of tests run against existing code. As new code is added, it ensures nothing implemented before it was broken in the process.
With agile squads working their meeting cadence, with refinement sessions, demos, production releases, you need to be sure that the new code conforms with the older code. Agile regression testing is more important than even in the old waterfall environment when you consider the frequency of delivery.
Build the Agile Regression Testing Suite Early
With agile, you want to start to build out your test suite early. The functionality that you are going through in sprint one, for example, should have regression testing built out right along with it.
As you do this with each piece of functionality, you will have a series of unit tests that will get woven together. They can be executed with each build that is compiled and run to be sure that everything is still working as expected.
Identification of Manual and Automated Testing
Getting started with automated testing early in development can be helpful. There are going to be testing scenarios as well which you or the team may need to handle manually. Identifying the time to execute the regression testing is essential. You also need to have an agreement on what will be manually tested, and what will be automated. Finally, have a plan to look at the outcome of the testing. You could have the best suite of tests in the world, but if you are not analyzing and reacting to the outcomes, it will do you no good.
Agile regression testing is worthwhile to be aware of in development. Going through a scrum process, right from the very first sprint when you are forming, storming, norming, and performing. That's when you should be thinking about how to test. Since agile development is iterative, so should your test suite. Tackle it piece by piece, add to it over time, and ensure you avoid technical debt and deliver quality software, fast.