Users primarily expect that Java machines work correctly and stably. At our company we are creating our own VM and actively developing optimizing JIT compiler, based on LLVM. But every new optimization comes with a risk that new functional bugs may appear or ancient issues, buried in the old code and never evident till now, may resurface.
So how can we find those bugs in time when every week dozens and hundreds of thousands of code lines are integrated in our compiler? No one knows the definite answer to this question, but we have been successfully using Fuzzer — a generator of random tests, whose configuration makes them fairly effective in finding issues in the compiler. In such a case, we get a stable, determined way of reproducing those issues on a test with the sources available.
In this session we will tell how and why we use generator of random Java programs, how this generator is built and what can be done for generating Scala, Kotlin and other such programs which can be compiled into Java bytecode.