Source: https://justinwm.github.io/paper/FSE_18.pdf