Best testing tools are the brains of software and testing engineers, architects who make sure the software is testable by components, those who organize proper development cycle and support it in technological and organizational aspects. Testing should be the integral part of architecture (please see a references to the articles on
software testability and
reliability below) and development process. The wise approach to development and testing beats all available testing tools, which are very important of course, but go next.
The choice of particular testing tools depends on the platforms and language used. For example, for .NET I would recommend NUnit, but with Java it would be JUnit, as well as similar frameworks collectively known as xUnit:
http://en.wikipedia.org/wiki/NUnit[
^],
http://www.nunit.org/[
^];
http://en.wikipedia.org/wiki/JUnit[
^],
http://junit.sourceforge.net/[
^];
http://en.wikipedia.org/wiki/XUnit[
^],
http://en.wikipedia.org/wiki/Unit_testing#Unit_testing_frameworks[
^].
That was just about
unit testing which is a primary tool used in the middle of development, but there are many other types of testing and testing methods, too many to overview in a quick answer. Please see:
http://en.wikipedia.org/wiki/Software_testing[
^],
http://en.wikipedia.org/wiki/Software_testability[
^],
http://en.wikipedia.org/wiki/Software_Testing,_Verification_%26_Reliability[
^],
http://en.wikipedia.org/wiki/Software_testing_controversies[
^].
Please pay attention for the last article. It helps to understand why the choice of testing method and technology is not simple at all.
I would say, the predicate function "best" cannot be defined. The choice should rather be driven by the ultimate goals of the project or whole business.
—SA