Given the fundamental difficulty of writing bug-free code, academia and industry have come up over the years with various mitigation techniques, such as writing unit- or property-based tests, designing more expressive type systems, performing code reviews. Formal software verification is another important technique which allows developers to statically verify that their software systems will never crash nor diverge, and will in addition satisfy given functional correctness properties.
In this talk, I present Stainless, a formal verification tool for Scala which can help develop highly reliable applications, with errors caught early during the development process. Thanks to its use of formal methods, Stainless can establish safety and termination properties using symbolic reasoning, covering infinitely many inputs in a single run of verification.
I also demonstrate the tooling we have developed around Stainless which lets users easily integrate Stainless in their Scala projects via sbt.