The latest Communications of the ACM (6/2016 Vol 59. No 6) has the interesting article Enhancing Symbolic Execution with Veritesting. This describes a program testing method called “symbolic testing”. This is where, rather than stepping through the program for specific test values, one pushes all values through every path of the program. Got that?
It is a way of testing programs by pushing “symbols” through all the paths of the program and the symbols represent all possible values that values could have at that point in the program.
Mind blown.
Because I have been programming computers for decades, I have a lot of programming habits left over from a more constrained era. I still worry about the amount of memory or the number of iterations. While it is a consideration and performance is always necessary, the limits and bounds have changed a lot.
What Moore’s Law has made posssible is astonishing. From deploying deep learning everywhere to, well, simulating every path in a program.
It is a lesson I need to internalize and I should not be limited by what I feel is computable.