主页 > 案例 > JAVA > JavaScript教程 Android学习 ASP.NET JAVA

为代码自动添加注释,让 Java 程序的阅读和开发更高效

辰乐科技 | 发布时间: 2018-04-08 10:01

在阅读代码时,准确适当的注释能够给开发者提供很有价值的帮助。但并不是每一个需要阅读的代码都包含注释,这可能会让开发者白白花费更多用于理解代码的时间。特拉华大学软件分析实验室的一项研究试图通过数据驱动的技术来解决这一问题,为与对象相关的语句序列自动生成自然语言描述,从而帮助开发者更有效率地理解阅读代码。该论文也是 SANER 17(IEEE 软件分析演进与逆向工程国际大会) 会议接收的论文之一。注:为了区分代码 method 和本论文中提出或提到的解决方案,本译文中将 method 译为「方法」,将 approach 译为「办法」。

软件维护工作中的很大一部分时间花费是理解已有的代码。通过帮助开发者快速理解代码和减少他们的阅读代码量,可以减少开发者理解程序的时间。当程序员书写注释时,这些注释的目的是描述该方法(method)。不幸的是,程序员常常不写注释,而且有时候注释是过期的。使用空行隔开不同方法的代码可以帮助阅读者理解代码;但是,他们仍然需要阅读代码。另一种办法是 method refactoring,以使用方法调用(method call)来替代它们,这样也能压缩阅读量;但是,这种转换需要繁琐的分析才能维持原有的语义。

为了解决程序员写注释的问题,以帮助提升对程序的理解,之前 Sridhara(特拉华大学软件分析实验室)通过人工的方式为少量已知的多语句动作编写了一套模板,比如用于「计算最大值」的循环结构。这样所得到的注释可以方法(method)的注释。为了避免手动开发模板,我们提出了一种机器学习的方法自动识别 Java 方法中的循环动作。我们的方法不需要手动构建模板,自动的特征提取方法可以应用到大数据中。

我们在之前的研究成果中将动作单元(action unit)的概念定义为:逻辑上实现了一个高层面动作(即一个高层面算法步骤)的由连续语句序列构成的代码块。一个方法通常包含多个动作单元,其中动作单元是很小的而不足以构成单个方法,但却需要多个语句来实现。尽管之前的研究都使用了结构信息和语言信息来识别用于实现高层面算法步骤(动作单元),但是这他们都只解决了程序中的循环语句。

还有一种未被考虑过的,同时也是非常重要的动作单元,是与对象相关的动作单元。我们将与对象相关的动作单元定义为仅由非结构化连续语句构成的动作单元且这些非结构化连续语句是通过对象互相关联在一起的。非结构化语句是变量声明/赋值或方法调用语句。比如,在 Listing 1 中,第 11-14 行表示了一个与对象相关的动作单元,这是通过 mappingRow 对象关联的。与对象相关的动作单元通常是实现一个方法的中间步骤,而且在代码中非常常见。在从 GitHub 随机选择的 1000 个开源项目中,我们发现用空行隔开的代码块中有 23.03% 都是与对象相关的动作单元。

为代码自动添加注释,让 Java 程序的阅读和开发更高效


Listing 1:阐释动作单元

除了识别实现高层面动作的代码,我们还想通过简短的英语短语来描述它。对于 Listing 1,我们之前的技术 [3] 会将第 2-7 行的第一个动作单元识别为 if 循环并将其描述为「确定一个元素是否存在于该比特流中」。对于第 11-14 行的动作单元,这篇关于与对象相关的动作单元的论文会生成「将新创建的映射行添加到数据库中」。对于第 9 行单行的与对象相关的动作单元,我们会生成「将指定比特流添加到比特流」。

与对象相关的动作单元的概念催生出了一种用于生成方法总结注释的新方式,尤其是对于较长的方法。Sridhara et al. 提出的之前最佳方法是根据它们的特点选择单独的语句,然后为这些单独的语句生成用于方法总结的英语短语。对于 Listing 1,用于内容选择的 Sridhara 方法会选择第 9、12、13、14 行,其中第 12 和 13 行之后会被过滤为普遍动作。第 9 行被选择的原因是这是一个 void return 语句,第 14 行被选择的原因是这是一个 void return 和结束语句。尽管最终选择的第 9 和 14 行内容能够得到一个合理的方法总结,但应当指出选择它们的原因并不是为了识别高层面动作。因此,在 Listing 2 中,Sridhara 的方法会选择第 4-6、8 和 10 行。第 4-6 行会被看作是一个高层面动作序列(因为它们都是一样的动作)。


为代码自动添加注释,让 Java 程序的阅读和开发更高效


Listing 2:用于总结注释生成的动作单元

上一篇:Define Java at Dictionary.com 下一篇:没有了

相关热门文章

服务热线