testing and debugging this independence reduces the likelihood of generating test suites that exhibit mistakes that are correlated with mistakes in the code supposefor examplethat the author of program made the implicitbut invalidassumption that function would never be called with negative number if the same person constructed the test suite for the programhe would likely repeat the mistakeand not test the function with negative argument another positive feature of black-box testing is that it is robust with respect to implementation changes since the test data is generated without knowledge of the implementationit need not be changed when the implementation is changed as we said earliera good way to generate black-box test data is to explore paths through specification considerthe specification def sqrt(xepsilon)"""assumes xepsilon floats > epsilon returns result such that -epsilon <result*result < +epsilon""there seem to be only two distinct paths through this specificationone corresponding to and one corresponding to howevercommon sense tells us that while it is necessary to test these two casesit is hardly sufficient boundary conditions should also be tested when looking at liststhis often means looking at the empty lista list with exactly one elementand list containing lists when dealing with numbersit typically means looking at very small and very large values as well as "typicalvalues for sqrtit might make sense to try values of and epsilon similar to those in the following table the first four rows are intended to represent typical cases notice that the values for include perfect squarea number less than oneand number with an irrational square root if any of these tests failthere is bug in the program that needs to be fixed the remaining rows test extremely large and small values of and epsilon if any of these tests failsomething needs to be fixed perhaps there is bug in the code that needs to be fixedor perhaps the specification needs to be changed so that it is easier to meet it mightfor examplebe unreasonable to expect to find an approximation of square root when epsilon is ridiculously small epsilon ** ** ** ** ** ** ** ** **