Information and computation have transformed the way we look at the world beyond statistical correlations, the way we can perform experiments through simulations, and the way we can test these hypotheses. In Turing's seminal paper on the question of machine intelligence (Turing, 1950), his approach consisted in taking a computer to be a black box and evaluating it by way of what one could say about its apparent behaviour. The approach can be seen as a digital version of a cogito ergo sum dictum, acknowledging that one can be certain only of one's own intelligence but not of the intelligence of anyone or anything else, including machines. This may indeed amount to a kind of solipsism, but in practice it suggests tools that can be generalised. This is how in reality we approach most areas of science and technology, not just out of pragmatic considerations but for a fundamental reason. Turing, likeGödel before him (Gödel, 1958), showed that systems such as arithmetic that have a certain minimal mathematical power to express something can produce outputs of an infinitely complicated nature (Turing, 1936). Indeed, this means that while one can design software, only trivial programs can be fully understood analytically to the point where one is able to make certain predictions about them. In other words, only by running software can one verify its computational properties, such as whether or not it will crash. These fundamental results deriving from both Gödel's incompleteness theorem and Turing's halting problem point in the direction that Turing himself took in his ‘imitation game’, which we now identify as the Turing test.
Turing's halting problem implies that one cannot in general prove that a machine will ever halt or that a certain configuration will be reached on halting; therefore, one has to proceed by testing and only by testing. These fundamental theorems and results imply that testing is unavoidable; even under optimal conditions there are fundamental limits to the knowledge one can obtain simply by looking at a system, or even by examining its source code, that is, its ultimate causes. Even with a knowledge of all the causes driving a system's evolution, there are strong limits to the kind of understanding of it that we can attain.