This paper is about understanding the nature of bug fixing by analyzing
thousands of bug fix transactions of software repositories. It then places this
learned knowledge in the context of automated program repair. We give extensive
empirical results on the nature of human bug fixes at a large scale and a fine
granularity with abstract syntax tree differencing. We set up mathematical
reasoning on the search space of automated repair and the time to navigate
through it. By applying our method on 14 repositories of Java software and
89,993 versioning transactions, we show that not all probabilistic repair
models are equivalent.Comment: Empirical Software Engineering (2013