Testing technologies are tools that support and automate the best practices (unit testing, coding standard compliance, integration testing, load testing, functional testing, security penetration testing and static analysis, and so on) that your team has decided to implement. The nature of the technology depends on what practices you need to automate and the nature of the code you need to test (Java, C++, Web, etc.). Every testing technology should automate the related practice as much as possible. The developer should perform only tasks that are impossible to automate.
To get the most out of your testing technologies, apply the following policies, which are designed to ensure that all team members can perform each practice correctly, efficiently, and uniformly.
Have at least one technology that automates and supports each practice you plan to implement
Though highly respected, best practices, such as unit testing and coding standard compliance, are commonly neglected. The main reason: insufficient resources. Rapidly changing market and business demands are driving development teams to constantly update applications to add more functionality, and these updates are expected at faster and faster rates. At the same time, financial concerns are forcing them to do more with less. Consequently, development organizations need to overextend themselves to deliver the required code on deadline, and no additional resources are available for performing best practices that are not required.
Automation makes it possible and practical to apply industry best practices in the increasingly aggressive development schedules that software development organizations face. Without automation, most practices are simply too time-consuming, difficult, and tedious to perform as thoroughly and frequently as is necessary. When best practices are automated, organizations can ensure that they are performed thoroughly and precisely, with minimal disruption to existing processes and projects. As a result, best practices can become a practical, enduring part of a team's development process rather than an idea that is appreciated in principle, but never truly embraced and implemented.
Have a mechanism to standardize test settings across the team and share applicable files
To reap the full benefits from these practices, the entire team must perform them consistently and uniformly. Inconsistently applying software development standards and best practices across a software project is like wiring a new building's electrical system with multiple voltages and incompatible outlets. In both cases, different components will interact to form a single system. Consequently, any hazards, problems, or even quirks introduced as a result of inconsistent application can make the entire system unsafe, unreliable, or difficult to maintain and upgrade.
For instance, if the team decides to enforce coding standards, the entire development team must check the designated set of rules consistently. Consistency is required because even a slight variation in tool settings among team members could allow non-compliant code to enter the team's shared code base. If the team has carefully selected a set of meaningful development rules to comply with, just one overlooked rule violation could cause serious problems.
To ensure the necessary uniformity, the architect defines the settings for each testing technology that the team decides to use, then all instances of the testing technology — from the versions installed on developer workstations to the version that runs batch mode tests of the team's shared code base — must use those same settings. This standardization and related file sharing should be managed automatically so team members do not need to constantly download and update setting files each time that the architect needs to modify the standard settings.
Each technology must operate in three different contexts: It must run in interactive mode on the developer desktop, run in batch mode on a server machine, and automate file and settings sharing to ensure that the entire team is performing the required practices in a uniform, standardized manner
First, the technology must help developers apply the given practice as they are working on code on their workstations. Ideally, it should be fully integrated into the developers' IDE so that the practice can be performed as quickly and unobtrusively as possible.
Second, the technology must be capable of operating in batch mode to apply the practice to all code available in the source control system. This batch-mode processing is required to conduct the automated verification, which occurs during the automated build process.
Finally, the technology must ensure that all team members are applying the practice in a standardized manner. If a practice is required for a team, each and every team member must implement that practice in the manner the architect prescribed. If different developers are performing the practice using different settings, under different assumptions, and so on, then that practice is not being correctly implemented.