一种基于Web资源的代码范例搜索工具
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种基于Web资源的代码范例搜索工具
摘要:本文从开发人员角度探讨了代码范例搜索工具的可用性以及常规Web资源的价值,并据此提出CSCS工具,再用两个典型用例说明了CSCS工具的功能。然后从自动化程度和准确度两个方面进行评估。最后总结了CSCS工具需满足的特征和值得进一步研究的方向。
关键词:代码范例搜索工具Web资源IDE
1 引言
在现代软件开发过程中,开发人员需要经常参考Web上的代码范例来帮助学习新技术或者辅助完成开发任务。通常情况下,开发人员需要从IDE切换至浏览器,在某个网站上进行搜索,搜索会出现许多结果链接,开发人员不得不逐个打开链接,查看结果是否满足需求,满足的话将内容复制粘贴回IDE,如果发现还要进一步搜索,再从IDE切换出去,如此反复,十分不便。对于这样一种软件开发过程中的标准活动,软件工具理应可以帮助提高自动化程度以及提升搜索目标的速度和准确度,而在目前的IDE环境中却缺乏这样的标准工具的支持。因此,本文提出一种与IDE环境整合的、基于常规Web 资源的、用户可自定义搜索源的代码范例搜索工具,即CSCS(Custom Search for Code Sample,代码范例的自定义搜索)。
2 现状
2.1 工具的可用性
工具的可用性应当是指使得Web搜索代码范例这一过程自动化、提高其效率,而不是改变开发人员对搜索Web代码范例的本质需求。而已有的一些研究成果中的工具则是自创形式,例如:Parseweb[1]要求用户以方法的参数类型和返回类型为输入,工具给出匹配的结果,然而,在用户对API不熟悉时,无法输入准确的参数类型和返回类型。Code Conjurer[2]具有多种搜索Web方式,其中的测试驱动的搜索,要求用户先写一个Test Case,然后工具帮助查找匹配的代码结果,然而直到今日,测试驱动开发仍未成为主流的开发模式,因此无法帮助到不使用测试驱动开发的开发人员。除此之外,这些研究为了实现工具的功能,几乎无一例外地需要预先使用爬虫技术下载庞大的代码库,并进行预处理,不得不带上很重的硬盘负载,由于要进行预处理,这些工具只支持有限语言。这些因素的叠加导致用户基本上无法自主选择搜索来源,只能在有限的资源中搜寻结果。
开发人员使用Web搜索代码范例实际上是一种成熟的软件活动,工具的可用性应该以满足对结果的预期为第一要务。实际上,重构这一软件活动就是这样的,重构的工具只是加快了重构的速度以及保证了正确性,而不是对软件活动的重新发明和创造。要使IDE中的Web 搜索成为重构那样的实践,用户可自定义搜索源的、与IDE结合的、轻量级的工具才可能做到。
2.2 常规Web资源的价值
当下,互联网上开放源代码资源日渐丰富,出现了如Google Code Search, Koders, Krugle等网络代码搜索引擎。为了使开发人员更好地利用开放代码仓库,研究人员开发了基于静态代码分析、信息检索或程序理解等技术的工具,分别从不同方面解决了直接搜索代码仓库或代码搜索引擎时返回无效结果太多的问题。
然而,基于代码仓库或代码搜索引擎的搜索有个不可回避缺陷,即代码本身除了包含类名、方法名以及必要的注释外,缺乏详细的上下文信息可供搜索。而常规的Web资源(如论坛、博客、教程等)的代码往往包含着更好的注释及更详细的说明,代码本身也更通用[3]。事实上,大多数开发人员仍旧选择常规Web搜索作为他们单一的搜索来源,这表明Web搜索提供的代码范例是大多数开发人员所认可的。
3 概览
CSCS旨在遵循开发人员搜索习惯的前提下,为开发人员提供一种在搜索常规Web资源中代码范例时简化其中重复过程的工具。下面通过两个典型用例,说明CSCS工具的作用。
3.1 用例1
开发人员A在学习SWT的开发,他想知道如何设置Widget大小,于是他登录常用的网站(有很多Java示例的网站),找到了一个有关Widget示例的页面,其中有10多个示例页面,依次
打开去找十分费时,于是他想到使用CSCS帮助搜索。(图1)
在Eclipse环境中,使用Ctrl+H打开CSCS搜索界面,在Start Page 中填入搜索开始的第一个页面的URL,然后在Target Pages中填入目标页面(即实际的示例页面的URL的正则表达式),最后在Containing Text中输入想要查找的关键字,点击Search进行搜索。(图2)
点击搜索后,满足Target Pages的页面结果不断地加入Search页面中,双击任何一个结果项,即可打开对应的代码片段Editor和页面Browser,方便直接编辑和查看。
Code Matches和Total Matches两栏分别显示代码段中的匹配以及在所有文本信息中的匹配,点击Code Matches或Total Matches列头,即可在搜索进行时,动态地按匹配结果程度进行排序,帮助开发人员更快地找到匹配的结果。
3.2 用例2
开发人员查找代码范例往往不是漫无目的地寻找,而是在自己信任的网站上寻找,例如。该类网站的URL都具有良好的URL格式,适合使用CSCS辅助搜索。使用CSCS搜索中标签为Java和Xml的内容。(图3)
只要网站URL的结构是稳定的,这样的搜索需求就可以复用。例如,下一次开发人员想搜索标签为Java和Hadoop的内容,将Start Page和Link Pages中Xml改为Hadoop即可。这种情况下,开发人员若有相似的搜索需求就无需从IDE中切换出去,只要改变搜索关键字即可。
另外,CSCS记录了最近的搜索,在Start Page下拉框选择不同的选项后,Link Pages和Target Pages即可自动填充。
4 评估
从自动化程度和准确度两个方面评估CSCS。
4.1 自动化程度
4.1.1 描述搜索需求的方式
使用浏览器搜索常规Web资源上的代码范例,初步定位到结果可能存在的页面后,只能机械地将目标页面逐个打开,目测或使用浏览器的文本查找功能对结果进行筛选。再点下一页,再将一目标页面逐次打开,再人工筛选结果,如此往复。
CSCS将以上需求用Start Page,Link Pages,Target Pages以及