| ▲ | skybrian 4 hours ago | |||||||
Proofs are a form of static analysis. Static analysis can find interesting bugs, but how a system behaves isn't purely a property of source code. It won't tell you whether the code will run acceptably in a given environment. For example, if memory use isn't modelled, it won't tell you how big the input can be before the system runs out of memory. Similarly, if your database isn't modelled then you need to test with a real database. Web apps need to test with a real web browser sometimes, rather than a simplified model of one. Databases and web browsers are too complicated to build a full-fidelity mathematical model for. When testing with real systems there's often the issue that the user's system is different from the one you use to test. You can test with recent versions of Chrome and Firefox, etc, which helps a lot, but what about extensions? Nothing covers everything, but property tests and fuzzers actually run the code in some test environment. That's going to find different issues than proofs will. | ||||||||
| ▲ | js8 2 hours ago | parent [-] | |||||||
> Databases and web browsers are too complicated to build a full-fidelity mathematical model for. I disagree - thanks to Curry-Howard isomorphism, the full-fidelity mathematical model of a database or web browser are their binaries themselves. We could have compilers provide theorems (with proof) of correctness of the translation from source to machine code, and library functions could provide useful theorems about the resource use. Then, if the AI can reason about the behavior of the source code, it can also build the required proof of correctness along with it. | ||||||||
| ||||||||