澳门js全球唯一官方网站-最新网站

澳门js全球唯一官方网站 > 科技 > Example Overflow:使用社交媒体进行代码推荐

Example Overflow:使用社交媒体进行代码推荐

引用

Alexey Zagalsky and Ohad Barzilay and Amiram Yehudai. Example Overflow: Using Social Media for Code Recommendation. In Proceedings of the 3rd International Workshop on Recommendation Systems for Software Engineering, 2012, 38-42.

摘要

如今像 Stack Overflow 这样的问答网站,都使用社交媒体来提供简洁的回答和大量的技术性上下文,并且具有一定的质量评估能力。尽管有些回答中包含了可实行的代码片段,但它们都掺杂在自由文本中,难以进行提取。可见这些问答网站不是直接为代码重用而设计的。

对此大家提出了 Example Overflow,这是一款将社交媒体与代码推荐系统相结合的代码搜索与推荐工具。Example Overflow 使得众包App开发能够同时利用文本信息与社交网络信息,其中包含了网络上的源代码。它的浏览机制减少了它与其它代码搜索工具的上下文切换次数。在这篇论文中,大家描述了这款工具如何进行开发和初步评估,并讨论了它对以实例为中心的编程范例的贡献。

Stack Overflow 先容

Stack Overflow 使用社交网络机制来促进用户间的常识交换,并创建了一个信息档案。在 Stack Overflow 中,程序设计人员可以提出任何编程领域的问题,并且在平均 10 分钟内得到回复。当缺少官方文档时,Stack Overflow 上的回答甚至可以用作官方文档的替代品。 Stack Overflow 的设计使得每一个问题和回答都可以被用户评价,最后,每个问题中那些最优的回答将被选为该问题的“被采纳的回答”。除此之外,每一个问题和答案都可以被长期编辑,这使得信息得以持续更新。最后,StackOverflow 拥有庞大的用户群体,这是一个巨大的常识库。(目前已经有超过 260 万个问题和 160 万个被采纳的回答),并且仍在继续增长。

Example Overflow 设计

比较多个样例:

在进行实例为中心的开发时,开发者们需要浏览并比较多个样例,并从中选取最符合他们需求的样例。传统的代码搜索工具给出的搜索结果,往往由文件名或前几行源代码组成。这样开发者就必须点开结果,并打开新的视图去判断这是否是他想要的结果。使用这样的工具难以将当前实例与之前或之后看到的实例相比较。而在使用 Example Overflow 时,使用者能够同时看到 5 个最合适的代码样例。这就使得开发者可以在同一个视图中看到所有代码样例,便于他们比较并挑选最满足自己需求的样例。如果这 5 个样例没有满足他们的需求,那么 Example Overflow 会自动展现接下来的 5 个合适的代码样例。这样一来,开发者通过浏览最少的样例数就能获得想要的结果。

最少上下文切换:

图 1. Example Overflow Web 接口


样例搜索是现代App开发中重要的一环。Example Overflow 的目标是在集成开发环境中,使开发者能够通过最少的上下文切换找到合适的代码样例,理想情况下是不离开 IDE 就能完成。为此,Example Overflow 有一个简单的搜索窗口,并且搜索结果只显示代码片段,这使开发者通过一个视图就能看到所有代码片段,如图 1 所示。如果他们需要更详细的代码上下文,只需将鼠标在样例上悬停(甚至不需要点击)并选择“Question”或“Answer”,就能在同一个视图看到上下文。

Example Overflow 实现

填充仓库:

Example Overflow 采用 Stack Overflow 的 API 来获取所有标记为 jQuery 的问题,并筛去那些没有被采纳回答的问题。编辑遵循传统,每个问题只设一个被采纳的回答,这样就能保证结果的高质量。接下来,检查每个被采纳回答是否都包含代码片段。如果有的话,则将其提取出来,并和问题标题、问题主体、回答主体、代码片段自身、Stack Overflow 上的用户评价、 浏览次数、相关标记及其它相关信息一并存入数据库。如果数据库中已存在该问题,则只需要更新改变的信息,保证其与 Stack Overflow 上的数据保持一致,这可以作为一项定期任务实行。

搜索:

Example Overflow 使用基于 Apache Lucene 的关键字搜索,其采用 TF-IDF 算法进行赋权。为了使用该方法,需要确定对哪些参数进行分析和索引。大家使用代码片段和 Stack Overflow 中伴随代码的额外元数据作为关键词搜索的索引。这使得开发者获取的代码片段中不一定要包含该关键词,也可以是代码上下文数据中包含了该关键词。

每一个代码样例都可以表示为一个文档,它包含了标题、标记、回答、问题、代码以及社交网络元数据,可以通过如下公式来计算每个文档的分数。

初步评估

评估设置:

编辑使用 jQuery in Action 书中的代码作业确定了评估基准,其中包含 10 个常见的编程任务,如表 1 所示。除了 Example Overflow 外,实验中还对 谷歌 Search、Stack Overflow、Krugle、Koder 使用了这些查询,并检查返回的前 20 个搜索结果。

表 1. 评估基准所用的查询


评估方法:

编辑人工检查了每一个工具中每一个查询的搜索结果,并以 jQuery in Action 书中的实际代码作为参考结果,确定这些工具是否完成了编程任务。如果在 20 个返回结果中都不存在匹配的结果,那么该工具会被标记为“ not found ”,并在计算平均值时以 21 进行计算。

评估结果:

表 2. 搜索结果比较:最佳结果在搜索结果中的排名 表 3. 上下文切换比较:开发者查看实际代码的鼠标点击次数

表 2 展示了最合适的结果在各工具搜索结果中的排名。可以看出 Example Overflow 以平均 1.6 的排名在几个工具中表现得最好。相比较而言,Krugle 与 Koders 的结果比较差,原因是因为它们在匹配查询时没有考虑上下文信息,而 Example Overflow 给标题、标记、代码等信息都赋予了权值,所以表现更为突出。从结果中也可以看出, Example Overflow 搜索的前 5 个结果就能匹配到合适结果,不需要再加载额外的结果。

表 3 统计了开发者鼠标点击的请求数,并以此评估开发者在找到合适代码前的视图/上下文切换次数。可见 Example Overflow 的平均鼠标点击次数为 0,这表明开发者甚至不需要进行视图切换就能看到需要的结果。

致谢

感谢国家重点研发计划课题:基于协同编程现场的智能实时质量提升方法与技术(2018YFB1003901)和国家自然科学基金项目:基于可理解信息融合的人机协同移动应用测试研究(61802171)支撑! 本文由南京大学App学院 2020 级硕士生孙昱翻译转述。

本文来自投稿,不代表本人立场,如若转载,请注明出处:/article/2386470.html

setTimeout(function () { fetch('/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)
XML 地图 | Sitemap 地图