Note that for a huge amount of software functionality, the amount of tests required to "exercise full functionality" is infinite, and very rarely can we mathematically prove that a finite set suffices. When code is multi-threaded, for instance, this tends to happen a lot.
Any finite approximation would modify the task from an impossibly infinite one to something possible.