编程辅助工具 PARSEWeb 初识

程序员们通常会重用现有的框架或库,以减少软件开发的工作量。在重用现有的框架或者库的时候,一个常见的问题是:程序员知道他们需要什么类型的对象,却不知道如何得到具有具体方法序列的对象。为了帮助程序员解决这一问题,北卡罗来纳州立大学的 Suresh Thummalapenta 和 Tao Xie 开发了一种方法,这种方法将“源对象类型->目标对象类型”形式的查询作为输入,并且提示相关方法调用序列,作为一种解决方案,能够产生从查询中给出的源对象对应的目标对象。该方法通过代码搜索引擎(CSE)进行交互,以收集相关代码样本,并通过采集样品进行静态分析,以提取所需的序列。由于代码样本通过代码搜索引擎按需收集,这种方法不局限于查询任意特定集合的框架和库。而作者已经通过一个名为 PARSEWeb 的工具实现了该方法。

作者声称该工具可以通过挖掘互联网上已有的开源代码库,告诉程序员如何写出某一段代码序列。如果该工具被证明是有效的,无疑可以为程序员减轻负担,从而大大提高软件开发效率。又由于开源代码库中的代码段通常是已经被证明有效的且结构合理的,所以如果这一工具是有效的,它对软件质量的保证也具有相当大的意义。

从目前的情况来看,无论是国内还是海外,PARSEWeb 工具的具体应用还比较少,其托管在 Google code 上的项目主页比较冷清,在互联网上也是鲜有讨论,但是这并不意味着该工具或者该工具体现的方法原理不具有前景。相反,我认为该工具无论对提高软件生产率还是对软件质量保证领域来所都具有相当的意义,另外,近年来大数据领取取得的巨大进展无疑为这一工具提供了强有力的技术支撑,长远来看十分有前景。

Suresh Thummalapenta 和 Tao Xie 在他们的论文 PARSEWeb: A Programmer Assistant for Reusing Open Source Code on the Web 中已经分别介绍了 PARSEWeb 工具几个较为重要的组成部件。包括代码搜索引擎(Code Search Engine,CSE),代码下载器(Code Downloader),代码分析器(Code Analyzer),序列后置处理器(Sequence Postprocessor),查询分路器(Query Splitter)。并且简述了 PARSEWeb 的算法实现。这对我们理解 PARSEWeb 的原理以及对 PARSEWeb 的合理使用方面都具有很积极的意义。

而在论文中作者也做了四项不同类型的评测。用以证明 PARSEWeb 确实是一种可以解决编程问题的有效的工具,而且不局限于某一特定的框架或者代码库集合。在第一项评测中,PARSEWeb 能够解决开发论坛中已经提出的现有库中的编程问题;而在第二项评测中,PARSEWeb 工具建议的解决方案在一个真实的项目中被证明是可用的。而且作者在具体评测中也将 PARSEWeb 得出的结果分别与通过另外两项工具得出的结果进行了对比,它们分别是 Prospector 和 Strathcona。Prospector 试图通过使用 API 签名来解决某一特定集合的框架或库的相关查询,而 Strathcona 则尝试通过在使用存储在样本库中的样本来开发时进行代码的上下文匹配来推荐样本库中相似的代码样本。在第三项评测中,作者证明了 PARSEWeb 比 Prospector 更为有效,而且也证明了 PARSEWeb 不仅仅局限于某一特定集合的框架和库。在第四项评测中,作者展示了 PARSEWeb 在不同技术应用中的意义。

然而,该论文也提出了 PARSEWeb 目前尚未解决的问题,即目前 PARSEWeb 使用谷歌代码搜索引擎(GCSE)来作为自己的代码搜索引擎,所以目前的结果十分依赖于从 GCSE 返回的代码样本数据。而如果从 GCSE 返回的结果中缺乏相关的代码样本,PARSEWeb 则无法对某些的查询做出恰当的反应,既无法提供解决方案建议。这实际上是 Prospector 和 Strathcona 也存在的问题。为了进一步解决这个问题,一个可能的办法是扩展 PARSEWeb 使得其可以使用除 GCSE 以外的代码搜索引擎,比如 Koders。而我们希望向代码搜索引擎中增加新的源代码库也会对缓解这个问题有所帮助。另外,PARSEWeb 在下载和分析代码样本库时的高运行时成本也成为一个需要改进的问题,这在很大程度上直接影响了整个工具的性能,如果工具给出建议代码片段所需的时间太长,往往是会让程序员很头痛的。作者也提到该工具另外一个缺陷:给程序员提供的解决方案建议往往过多,通常有10到15条,而这是不利于程序员快速决定究竟采用哪一个代码片段的,反而降低了软件开发效率。这就需要提升匹配度的精度并降低那些匹配度较低的代码片段在查询结果中的展示机率。

评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.