Making the Transition to Software Testing
Small software operations often derive from individual efforts, an evolution that introduces challenges as developers find old habits
hard to break when making the transition from individual work to teamwork. Individual developers often blend the processes of writing code, fixing bugs, providing support, testing operation, and creating documentation to a minimal, indistinct work flow, but when projects grow, attention must be given to each step in ways that allow multiple team members to work on the project at different levels to produce a unified, operational deliverable in the end.
Software testing is one part of software development that usually increases in demand as companies and applications grow. After all, one person alone can hardly find all the bugs in a project, let alone fix all of them. The following recommendations for software testing are designed to help developers and businesses alike adopt sensible and effective methods to make sure their finished products are worthy of the confidence end users place in them.
Image Credit: Wikimedia Commons/Pbusse
Develop a Testing Plan
When an organization makes the decision to improve software development, a testing plan should first be developed to avoid inadequate procedures and wasted effort. A general test strategy should be developed and documented as well as underlying testing requirements, methodologies, and scheduling to make sure that all of the project's stakeholders know exactly what to expect from the software testing process. Changes in the testing program should not be made without first seeking general review and approval.
The smallest part of an application that can be tested, a unit, should be tested by developers for viability. These unit tests ensure that the larger segments of the application are all built on sound code. For large applications, unit testing can be performed to make sure that every function and module is built with solid logic so that a high level of integrity is maintained.
A step above unit testing, developers use integration testing to make sure that all the various components of an application are working together properly and in a consistent manner. This can be particularly important when evaluating user interface modules.
Every time an application is changed, regression testing along with fuzzing is recommended to make sure that the changes have not introduced new flaws into the code. Without a regression testing policy in place, applications can go through several modifications before a bug is uncovered, making it more difficult and time consuming to find out when the new error was first introduced.
Applications should be evaluated and tested to make sure that they comply with industry guidance for a given software or hardware platform. By ensuring that code follows standard best practices and guidelines for Windows, for example, the chances of producing an application that works consistently on compatible machines is drastically improved.
As software products increase in complexity and as workloads also increase, automated testing becomes a highly recommended part of the development cycle. By subjecting software to a series of prolonged tests that check for integrity, error handling, and bugs, developers can identify more bugs faster, without labor-intensive processes.
Automated testing by itself is no guarantee of a successful testing process. After all, the introduction of testing scripts produces a whole new requirement for internal development and tracking. When implementing automated testing, the scripts used must be written and documented just as the application being tested so that team members can understand what the scripts are doing and why some bugs are overlooked.
The extra work required to produce well written and well documented test scripts is usually worth the work saved and the efficiencies gained over manual testing, especially when a project is in its preliminary stages. Automation can make sure that all tests are done the same way and that no important steps are left out while freeing up valuable personnel for productive work.
Most organizations should attempt to progressively automate software testing rather than attempting to implement automation in a single step. With written scripts, every step can be evaluated manually before becoming part of the automated process. Additionally, test automation software Borland's Silk products should be considered to help develop thorough routines.
Because so many different hardware platforms support any given operating system, software should be tested for stability on as many different configurations as possible. Also different environmental situations should be tested to make sure that the application consistently works as intended.
Automated software testing can help test for stability by testing applications over time to make sure the system remains stable during prolonged use.
Every team should have a process in place that documents all tests performed on a product or module and what results were obtained. A single developer may be able to keep a few tests and their results memorized, but in team environments, written results must be kept to avoid needless repetitions of the same test and to make sure results are not overlooked.
Pre-Release Usability Testing
One trap development teams may fall into is an emphasis on functionality without proper regard for usability. Manual and automated software testing can lead the fight against bugs, leading to a solid application, but if people cannot intuitively fit the program into their work flow, the application will still receive bad reviews.
After achieving operational integrity with a software application, project managers should minimize risk by finding ways to get real users involved to help identify user interface limitations. Ideally, usability testing should begin prior to release of the software for alpha or beta testing and continue at least up to the release of the final product.
Pre-Purchase Usability Testing
Before a company purchases a software package, it should be tested to make sure its personnel can easily adapt to its use. If the user interface does not provide for a work flow that complements the current business model, for example, the real cost of implementation can inflate due to reorganization.
Similarly, all functions including reporting, data import and export, standards compliance and interoperability with existing applications should be evaluated before a purchasing decision becomes final.
These recommendations for software testing will help developers and their teams implement sensible and practical testing procedures to ensure high quality deliverables.