She views each module as a glass box . Designs test cases so that every conditional branch, e. g. IFs, is executed in every direction at least once. Sally's ultimate goal is to test all execution paths through the program logic. She designs her test cases with little or no regard to the specifications. We must do a combination of both.
Testing is largely a problem of economics.
Since exhaustive input testing is impossible, we have to settle for something less. Each test case used should provide a maximum yield on our investments. Given that the investment is bounded by schedule and budget, the art of testing is really the art of selecting those test cases with the highest chance of finding an error. Each test case should represent a class of inputs so that if the test case executes correctly, we have confidence that a certain class of inputs executes correctly. Though the possible inputs may be infinite or very large, we usually can design a finite and small number of classes.