程序编译为何失败?

jopen 7年前

        完美的程序不会是一次就写成功的,都要经过反复编译、调试、修改。调试过程可能会花费大量的时间,如果了解了常见编译错误发生的原因,这有助于节省时间,提高开发效率。

        Google、香港科技大学和内布拉斯加大学的研究人员分析了 1.8 万 Google 工程师在 2012 年 11 月到 2013 年 7 月之间的超过 2600 万次编译,分析出了编译失败的常见原因、修复所花费的时间等。

        下图显示了这些数据收集的过程。

程序编译为何失败?

        1.   编译失败率与编译次数、开发者经验无关

        研究人员推测,编译次数越多,出错的几率也就越大。但是实际数据显示,这两者之间没有相关性。

        研究人员还推测,有经验的开发者出错率会比较低,但事实也并非如此。

        2.   绝大多数编译失败与依赖有关

程序编译为何失败?

        大约 65% 的 Java 编译错误被认为跟依赖有关,比如编译器无法找到一个符号(这是最常见编译错误,占所有编译错误的 43%),或者是包不存在。

        在 C++ 编译中,大约 53% 的编译错误跟依赖相关,最常见的错误是使用了未声明的标识符和不存在的类变量。

        3.   C++ 代码编译更容易出错

        下图是编译错误率(x轴)对应的开发者人数(y轴)。

程序编译为何失败?

        研究发现,C++代码的构建失败率为 38.4%,而 Java 为 28.5%。此外,在 C++ 编译中发生语法错误比 Java 更频繁,但是 C++ 编译错误会得到更快的解决。

        研究人员认为,造成这种差异的原因是 Java 开发一般使用 IDE,这有助于减少一些简单的语法错误,但 IDE 生成的代码在一定程度上也增加了解决编译错误的难度。

        详细报告:Programmers’ Build Errors : A Case Study (at Google)(PDF)

来自: www.iteye.com