woman taking a workshop in software testing
PHOTO: Jan Kraus

Companies continue to adopt Agile methods for all kinds of software development, including development of enterprise systems, mobile apps and websites. Agile promises faster and more frequent development. Unfortunately, that means fast, and sometimes rushed, testing. With Agile, the constant pressure to keep up with the short sprints of development doesn't take into account testing's very specific requirements.

Testing Has Its Own Pace and Problems

Testing doesn’t work like coding. Unlike writing code, testing can be very unpredictable. That’s the point of testing, to find the things you don’t expect. Even more disruptive to a project are the problems that happen during the transition of the code from development to test. A variety of problems can cause testing to slow down, get out of sync with development or return bad results. Three of the more severe issues are:

Mismatched Environments

When code is handed over to testing, differences in the test and development environments can generate errors that won’t be part of the production system. Even worse than these false positives are the false negatives. A false negative occurs when code works in the test environment but not production. This is a key source of system failure.

Test environments may differ because the code libraries, environment variables, or virtual machines for languages, such as Java or Python, are not the same as those used in development. This is usually a result of bad communication or hand configuration of test and development environments.

Bad or Incomplete Test Data

Code will often behave differently when it encounters certain types of data. One clear example is improperly handled exceptions that will only exhibit themselves when the code encounters unexpected data. This is why data that mimics real world production data is critical to test plans. This data is not always readily available, however, especially for new applications and systems that manage highly private data. Waiting for data extracts with de-identified private information leaves testers idle and denies important feedback to developers.

Miscommunication Between Testers and Developers

Communication is key in Agile. Testers need to be able to communicate to developers and product owners quickly but without disrupting their workflows. When erroneous information flows from test to development or vice versa, developers and testers may continue down wrong paths and not realize key problems until it is so late that the project is delayed.

Related Article: How to Structure Your Digital Team: 15 Critical Roles

Technology to the Rescue

There are ways to mitigate these potential problems with existing technology. Probably the most obvious is by using test data management and generation software. This technology, from companies such as Informatica, provides the tools to create test data that mimics real production data, eliminating false negatives and false positives alike. Similarly, automated data masking can de-identify private data on the fly rather than through slow and error-prone processes. Using these tools means less chance of bad data and all of its ill effects.

Infrastructure as Code(IaC)/DevOps Automation tools can help ensure environments are created correctly. Tools by Red Hat, Chef, Puppet and SaltStack automate the process of provisioning and configuring software environments and use code to drive the process. Using the same IaC code for development, test and production environments means that all will have the same environments. Container technology can help as well, since they are self-contained components that can be instantiated form pre-existing images.

Collaboration software is the final piece of the puzzle. It is no wonder that tools such as Slack or Microsoft Teams have become popular amongst development teams. The combination of real-time and persistent chat helps both developers and testers to communicate when it is least disruptive to either group. Purpose built intranets and document repositories also allow each access to information in a self-serve rather than interrupt the other for documents and key information.

Related Article: Developer Collaboration Tools Beyond Slack

Tools are Not Everything … But They Help

Like all technology, software is just tools. They can’t do anything about politics, bad behavior and a lack of best practices. They can only help make the integration of developers and testers into one team easier. Easier is preferable, though, to struggling needlessly. 

Good carpenters aren't made because of their tools, but the tools certainly help. Similarly, developers and testers are more than the sum of their tools, but why suffer from a lack of good tools?