By Adam Kolawa, Co-Founder of Parasoft
Application functional testing is the most widely accepted testing practice in software development organizations today, and hundreds of millions of dollars have been spent on automated tools to support the practice. Yet, organizations still struggle to achieve software quality and suffer inconsistent, inefficient, and often inaccurate application of the practice. Over 70 percent of software testing today is still done manually despite the investment in automation. Understanding what has or hasn't been tested is still most organizations' major challenge, and the time commitment required for QA functional testing is increasingly one of organizations' greatest concerns for meeting application delivery and time-to-market demands.
Without a well-defined and implemented "best" practice, functional testing will continue to be practiced incorrectly and suffer inaccurate or, at best, incomplete results. Automated tools alone cannot ensure that functional testing is complete and accurate. Achieving this goal requires that a tool be supported by a well-defined practice for its use and be integrated into an organization's software development process. The necessary level of commitment and practice maintenance is often underestimated and is typically the reason for poor results and the abandonment of automated tools in favor of manual testing. An effective and consistently-applied functional testing practice is the only way to ensure that software satisfies expected functionality and reliability objectives.
Software development organizations with an effective functional testing practice have a fast and objective way to determine whether each functional requirement is actually implemented in the code. With functional testing, the team translates functional requirements into executable test cases that confirm how well the code satisfies the requirements at any given time. It provides unprecedented objective insight into requirement status and prevents the missing or incorrect functionality implementations that can lead to countless rewrites (and then budget overruns and missed deadlines), user dissatisfaction, and project failure.
An effective functional testing practice should be a natural extension of a requirements management policy. Ideally, a requirements management policy describes how to build effective use cases for the features expected in the current release, and how to map those use cases to verifiable test cases. A test plan is then developed and implemented to build a suite of executable tests that frame and verify the functionality requirements, providing a fast and objective way to assess the status of expected functionality. These tests can then be executed regularly to ensure that code modifications do not unintentionally change previously verified functionality.
An effective functional testing practice involves the definition of guidelines for using functional testing technologies effectively, and then the implementation and integration of those guidelines (along with supporting technologies and configurations) into your software development lifecycle to ensure that your teams apply the policy consistently and regularly. It also requires a means to monitor and measure the policy's application, as well as report the data it is tracking.
To achieve effective black box unit testing, you must not only have a defined practice for its use, but that practice must be implemented and integrated into your software development lifecycle so that it is used consistently and regularly across your software development team. It is also important to have the means to monitor and measure its use.