本申请要求2008年11月10日提交的美国专利申请序列号12/268,168的优先权,其是2007年5月16日提交的美国专利申请序列号11/804,030的部分继续申请,通过参考二者的全部内容而将其并入在此。
具体实施方式
建议的应用评估系统(RAE)解决了如下的技术问题,即提供工具以便轻易地和快速地评估建议的应用,从而验证建议的应用实现了特定功能性。在一个实现中,RAE可以评估从可执行示例存档系统(Exemplar)获得的建议的应用。
Exemplar提供了这样的一种工具,其接受高层处理概念作为查询,以便识别、确定行为、排名并返回HRA的应用逻辑。Exemplar解决了困难的词汇表问题的实例,当用户和开发人员以不同的词语来描述处理概念时会存在该词汇表问题。Exemplar不限于在针对应用描述和与应用逻辑一起包括的注释所进行的查询中使用的基础关键字匹配。因此,当应用是高度相关时,并且其中当查询包括了与开发人员用于描述应用逻辑和API调用逻辑的词语不同的关键字时,Exemplar仍会返回作为高度相关应用的应用。
Exemplar将高层处理概念(例如,使用关键字表达的)与在帮助文档或其他受信描述性源中找到的各种API调用的描述进行匹配。因为典型的应用从若干不同库调用API调用,所以使用不同词汇表的若干不同人员将经常编写与API调用关联的帮助文档。不同词汇表的丰富性增加了找到匹配以及产生潜在相关应用和API调用的长列表的概率。搜索帮助文档或其他受信描述性源产生了附加的益处。例如,包括API调用的帮助文档通常指示应用逻辑在何处实现了API调用。因此,Exemplar可以将开发人员引导到应用逻辑中的位置,在该位置处,API调用实现了高层处理概念。开发人员接着可以确定应用逻辑和API调用逻辑的相关性。换句话说,开发人员可以确定应用逻辑和API调用逻辑实际上是否支持高层处理概念。
尽管将描述Exemplar和RAE的特定组件,但是与Exemplar和/或RAE一致的方法、系统和制品也可以包括附加的或不同的组件。例如,处理器可以实现为微处理器、微控制器、专用集成电路(ASIC)、离散逻辑或其他类型电路或逻辑的组合。类似地,存储器可以是DRAM、SRAM、闪存或任意其他类型的存储器。实现下面所描述的程序和处理的逻辑可以(例如,作为计算机可执行指令)存储在例如光盘或磁盘或其他存储器的计算机可读介质上。备选地或附加地,逻辑可以实现在实体之间传送的电磁或光信号中。此类信号的例子是承载物理层以太网信号的TCP/IP分组,其包括程序源代码或可执行程序。标记、数据、数据库、表格和其他的数据结构可以被分离地存储和管理,可以被并入到单个的存储器或数据库中,可以被分发,或可以以许多不同的方式来进行逻辑地和物理地组织。程序可以是单个程序的一部分、单独的程序或在若干个不同的存储器和处理器之间分布。此外,程序或程序的任意部分可以以硬件来实现。
图1图示出与建议的应用评估系统(RAE)128通信的Exemplar系统环境100(“Exemplar环境”100)。Exemplar系统100可以包括Exemplar原型和应用开发(EPAD)用户接口102、帮助内容处理器104和帮助内容106。Exemplar系统100还包括API调用字典108、扩展搜索引擎110、逻辑库112、试探性相关性排名引擎114和逻辑分析器116。图1中示出的任意或所有的元件可以共处一处或是分布式的,并且通过一个或多个网络118(例如,因特网)来进行通信。
在一个实现中,EPAD用户接口102、扩展搜索引擎110、试探性相关性排名引擎114和逻辑分析116形成Exemplar环境100内的Exemplar系统124。Exemplar系统124可以包括附加的或不同的组件。Exemplar系统124可以通过作为外部系统的网络118(例如,因特网)来与帮助内容处理器104、帮助内容106、API调用字典108和逻辑库112以及其他系统通信。
逻辑库112可以包括应用逻辑120和API调用逻辑122。Exemplar系统124接受高层处理概念(例如,“发送安全XML”)作为输入并且产生输出,该输出识别出开发人员可以使用哪个应用逻辑120和API调用逻辑122对实现高层处理概念的新应用构建原型和进行开发。在一个实现中,Exemplar环境100利用多个存储设备(例如,不同盘驱动器上的多个数据库)实现帮助内容106和逻辑库112,以及与来自各种可用源(例如,本地或远程帮助数据库、网站、知识交换、文档库或其他源)的帮助内容106、应用逻辑120和API调用逻辑122对接。
在一个实现中,帮助内容处理器104可以实现为web爬虫(crawler),其遍历可用的应用库,并且下载帮助内容106(例如,应用描述),以及逻辑库112内容(例如,应用逻辑120和API逻辑122)。帮助内容处理器104可以执行帮助内容106和逻辑库112内容上的全文编索引。帮助内容处理器104可以进一步产生包括多组集合(有序列表的形式)的API调用词典108,该多组集合将从API调用的描述选择的词语与API调用的名称进行联系。
上面的描述使用了应用逻辑120和API调用逻辑122的例子。这些类型的逻辑例如可以是程序源代码(例如,C或C++代码)。然而,Exemplar环境100可以搜索、分析和确定许多其他类型的逻辑的相关性。例如,逻辑库112可以包括以可视化编程语言表达的程序或程序组件,该可视化编程语言使用图形程序元素以及文本和图形符号的空间布置。可视化编程逻辑可以包括基于图标的逻辑、基于形式的逻辑、基于示意图的逻辑或其他类型的可视化表达。可视化表达可以与数据流语言、基于流程的编程、域特定建模或其他编程范例一致。
在一个实现中,Exemplar环境100和RAE 128存在于RAE环境126中。RAE 128包括RAE用户接口生成逻辑130,其包括RAE区域逻辑132。RAE区域逻辑132包括概念查询显示逻辑134、概念分布显示区域136、源代码显示区域138和元数据显示逻辑140。在下面将进一步详细描述RAE 128的多个方面。
图2示出Exemplar数据流框图200。Exemplar系统124接收高层处理概念作为输入以创建原始查询202,Exemplar系统124可以将其转发到帮助内容处理器104。帮助内容处理器104可以通过匹配被执行以搜索帮助内容106的原始查询202中发现的高层处理概念(例如,“发送安全XML”)中的词语而从API调用词典108产生基础API调用列表204。
扩展搜索引擎110可以组合原始查询202和基础API调用列表204以形成扩展查询206。扩展搜索引擎110可以使用扩展查询206来执行扩展搜索以搜索整个逻辑库112,从而获得扩展的搜索结果208。在一个实现中,逻辑库112可以向试探性相关性排名引擎114返回扩展的搜索结果208。扩展的搜索结果208可以包含由试探性相关性排名引擎114使用逻辑分析器116分析的潜在相关应用210和潜在相关API调用212的列表。在一个实现中,试探性相关性排名引擎114可以包括逻辑分析器116。逻辑分析器116可以包括例如ANTLR(“用于语言识别的另一工具”)的解析器生成器,其从可以从提供对生成数据流图和控制流图支持的www.antlr.org获得。
逻辑分析器116可以返回如下详细讨论的连接性排名214,以进一步确定应用试探性相关性排名216和API调用试探性相关排名218。试探性相关性排名引擎114向EPAD用户接口102返回应用试探性相关性排名216和API调用试探性相关性排名218。扩展搜索引擎110可以向EPAD用户接口102返回相关应用列表220和相关API调用列表222。Exemplar系统124可以将应用试探性相关性排名216指派给在相关应用列表220中找到的一个或多个相关应用,以指示每个相关应用如何更接近地支持由原始查询202所表示的高层处理概念。类似地,Exemplar系统124可以将API调用试探性相关排名218指派给在相关API调用列表222中找到的一个或多具相关API,以指示每个相关API调用如何更接近地支持由原始查询202所表示的高层处理概念。
在一个实现中,RAE区域逻辑132获得连接性排名214、应用试探性相关排名216、API调用试探性相关排名218、相关应用列表220和相关API调用列表222。RAE区域逻辑132可以使用连接性排名214、应用试探性相关性排名216、API调用试探性相关性排名218、相关应用列表220和相关API调用列表222来提供建议的应用评估区域,如下面详细讨论的,以便评估从Exemplar 124获得的建议的应用。
图3示出了可以用于输入原始查询202的Exemplar查询接口300。原始查询202可以表示例如“压缩解压缩ZIP文件”的高层处理概念,如文本录入域302所示。利用帮助文档106、API调用词典108和逻辑库112中所描述的各种API调用,若干个开发人员可以以不同的方式来实现示例的高层处理概念“压缩解压缩的ZIP文件”302。用户例如可以使用如下拉框、菜单或用户输入域的接口元素来指定搜索精炼准则304。搜索精炼准则304可以指定感兴趣的逻辑类型(例如,C、C++、JAVA、或其他类型的逻辑),可以指定所搜索的信息源(例如,仅搜索已编译的帮助文件、或*.doc文件),或指定其他的搜索准则。Exemplar搜索接口300可以包括用于执行原始查询202的图形用户接口元素(例如,搜索按钮306)。
表1以代表高层处理概念“压缩解压缩ZIP文件”302的结构化查询语言语句(SQL)的形式示出了原始查询202的例子。表1示出:原始查询202将搜索帮助内容106(例如,JAVA帮助文档)来识别基础API调用列表204。
表1-原始查询202 |
SELECT基础API调用FROM Java帮助文档 |
WHERE这些文档中的词语=压缩或解压缩或ZIP或文件。 |
表2示出由Sun微系统有限公司所发布的Java帮助文档的片断所代表的帮助内容106的一个示例,其描述从Java.util包导出的类的功能性。Java.util包定义当开发人员与多组对象工作时可使用的多个类,主要是集合类。参考表2,帮助内容处理器104可以识别类ZipEntry与原始查询202的部分匹配。帮助内容处理器104可以搜索帮助内容106,并且识别表3中示出的用于ZipEntry类的帮助文档的片断。
表3示出针对ZipEntry类的两种不同方法(例如,getCompressedSize以及setMethod)的描述,其包括在高层处理概念“压缩解压缩ZIP文件”302中找到的短语压缩和解压缩。基础API调用列表204可以包括getCompressedSize和setMethod方法。
表4示出扩展查询206的两个等同形式的例子,该扩展查询206使用来自原始查询202的基础API调用列表204,将原始搜索从帮助内容106(例如,Java帮助文档)扩展到逻辑库112。表4声明A示出可以包括在基础API调用列表204中的getCompressedSize和setMethod。表4声明B示出了作为嵌套查询的扩展查询206,其中原始查询202和基础API调用列表204(getCompressedSize和setMethod)驱动外部查询来针对潜在相关应用210搜索逻辑库112,以便获得扩展查询结果208,该扩展查询结果208包括潜在相关应用210和潜在相关API调用212。通过将执行的搜索瞄准于逻辑库112以便获得具有包括潜在相关应用210和潜在相关API调用212的高概率的应用逻辑120,扩展查询206可以改进原始查询202。
表4-扩展查询206 |
A.SELECT潜在相关应用FROM逻辑库WHERE API调用在以下中这些应用的源代码文件=getCompressedSize或setMethod。 |
/********上述的SQL声明也表达如下**********/B.SELECT潜在相关应用FROM逻辑库WHERE API调用在以下中这些应用的源代码文件={SELECT基础API调用FROM Java帮助文档 |
WHERE这些文档中的词语=压缩或解压缩或ZIP或文件}。 |
表5示出扩展查询206的两种等同形式的另一个例子,通过组合原始查询202和基础API调用列表204来形成扩展查询206,其将原始搜索从帮助内容106(例如,Java帮助文档)扩展到逻辑库112。表5声明A示出与原始查询202合并的getCompressedSize和setMethod(例如,基础API调用列表204)。表5声明B示出了作为嵌套查询的扩展查询206,其中原始查询202和基础API调用列表204(例如,getCompressedSize和setMethod)驱动外部查询来针对潜在相关应用210搜索逻辑库112,以便获得扩展查询结果208,该扩展查询结果208包括潜在相关应用210和潜在相关API调用212。通过将执行的搜索瞄准于逻辑库112以便获得具有包括潜在相关应用210和潜在相关API调用212的高概率的应用逻辑120,扩展查询206可以改进原始查询202。
表5-扩展查询206 |
A. SELECT潜在相关应用FROM逻辑库WHERE API调用位于以下中这些应用的源代码文件=getCompressedSize或setMethod或压缩或解压缩或ZIP或文件/********上述的SQL声明也表达如下。**********/B.SELECT潜在相关应用FROM逻辑库WHERE API调用在以下中这些应用的源代码文件={ |
SELECT基础API调用FROM Java帮助文档WHERE这些文档中的词语=压缩或解压缩或ZIP或文件}或压缩或解压缩或ZIP或文件。 |
表6示出从包括潜在相关API调用212(例如,getCompressedSize)的逻辑库112(例如,潜在相关应用210)提取的逻辑片断的例子。
表6-潜在相关应用210(例如,提取的逻辑片断) |
Public static void addFilesToExistingZip(File zipFile File[]files)Throws IOException{//获得临时文件File tempFile=File.create TempFile(zip File.getName(),null);//删除它,否则你不能将你的现有的zip命名成它。tempFile.delete();int sz=zipFile.getCompressedSize()Boolean renameOk=zipFile.renameTo(tempFile);if(!renameOK&&sz==-1){throw new RuntimeException(“不能将文件“+zipFile.GetAbsolutePath()+”重命名为“+tempFile.getAbsolutePath())”;}byte[]buf=new byte[1024]; |
图4示出Exemplar系统124原型和应用开发(EPAD)项目区域400。EPAD项目区域400包括相关应用列表显示区域402、相关API列表显示区域404、试探性相关排名结果显示区域406、逻辑显示区域408和应用创建显示区域410。相关应用列表显示区域402包括Exemplar系统124基于扩展查询206搜索结果所生成的相关应用列表220。相关应用列表220可以包括相关应用逻辑414的相关应用标识符-1412(例如,程序名、库标识符、文件名、或其他程序指示符)。用户可以选择由箭头416所指示的任意标识符以在逻辑显示区域408中显示相关应用逻辑414(例如,程序的源代码)。EPAD用户接口102可以包括键盘、鼠标、麦克风(或其他传感器)、游戏杆、游戏板、或供用户与EPAD项目区域400交互的其它。
相关的API列表显示区域404可以包括由Exemplar系统124基于原始查询202返回的相关API调用列表222。相关API调用列表222可以分别包括相关API调用逻辑-2424和相关API调用逻辑-1422(例如,功能调用的源代码)的相关API调用标识符-1418(例如,功能调用名)和相关API调用标识符-2420。EPAD项目区域400可以提供由箭头426所指示的、可由用户选择的相关API调用标识符-1418和相关API调用标识符-2420,以便在逻辑显示区域408中显示并高亮相关API调用逻辑-1422和相关API调用逻辑-2424。在一个实现中,逻辑显示区域408可以高亮相关应用逻辑414、以及相关API调用逻辑-1422以及相关API调用逻辑-2424,从而用户可以进一步确定逻辑与由原始查询202所代表的高层处理概念的相关性。
在图4中示出的试探性相关排名结果显示区域406可以包括应用相关性阈值428、API调用相关性阈值430、数据流图432、控制流图433和API调用图434。试探性相关性排名结果显示区域406可以显示试探性相关性排名引擎114信息,以辅助用户来确定用户选择的逻辑的相关性。正如将在下面详细描述的,试探性相关性排名引擎114可以基于在相关应用逻辑414中找到的相关API调用(例如,相关API调用逻辑-1422和相关API调用逻辑-2424)的数目,来与由Exemplar系统124所确定的其他相关应用逻辑436相比较地确定相关应用逻辑414的应用试探性相关性排名216。例如,高层处理概念例子“压缩解压缩ZIP文件”302可以完全实现在相关应用逻辑414中,但也可仅部分地实现在其他相关应用逻辑436中。结果是,试探性相关性排名引擎114可以为相关应用逻辑414指派比其他相关应用逻辑436更高的应用试探性相关性排名216。在另一个实现中,试探性相关性排名引擎114可以基于分析从扩展查询206和扩展搜索结果208所导出的语义(其建立了相关API调用逻辑-1422、相关API调用逻辑-2424以及相关应用逻辑-1414的行为)来确定相关API调用逻辑-1422和相关API调用逻辑-2424的API调用试探性相关性排名218。
在图4中示出的应用相关性阈值428和API调用相关性阈值430可以由用户选择和/或以系统默认值进行预先配置。在另一个实现中,Exemplar系统124可以基于多个因素(例如,由原始查询202所表示的高层处理概念的复杂性以及由扩展搜索结果208所标识的潜在相关应用210和潜在相关API调用212的数目)来确定应用相关性阈值428和API调用相关性阈值430。Exemplar系统124可以使用应用相关性阈值428和相关性阈值430来分别进一步精炼相关应用列表220和相关API调用列表222。在一个实现中,应用相关性阈值428和相关性阈值428可以确定潜在相关应用210必须满足以便被包括在相关应用列表220上的应用试探性相关性排名216值。API调用相关性阈值430也可以确定潜在相关API调用212必须满足以便包括在相关API调用列表222上的API调用试探性相关性排名218值。例如,为1的应用相关性阈值428可以指示低的相关性需求(例如,需要松散相关的应用,以及低的应用试探性相关性排名216),并且允许大量的潜在相关应用210成为合格的相关应用(例如,相关应用逻辑-1414)。在另一个例子中,为10的应用相关性阈值428可以指示高的相关性需求(例如,需要高度相关的应用,以及高的应用试探性相关性排名216),并且允许少数的潜在相关应用210成为合格的相关应用。试探性相关性排名引擎114也可以使用数据流图432和控制流图433来确定应用试探性相关性排名216和API调用试探性相关性排名218,并且可视化地描述相关应用逻辑414、相关API调用逻辑-1422和相关API调用逻辑-2424之间的关系,如下面更进一步详细地描述的那样。
相关API调用逻辑-1422和相关API调用逻辑-2424可以是用户可选择的(由箭头442所指示),并且向用户提供以选择的逻辑来生成新的应用440的能力。为此,EPAD项目区域400可以为用户选择相关API调用逻辑-1422和相关API调用逻辑-2424以便生成新的应用440来实现点击、拖放功能。通过合并用户可选择的其他相关应用逻辑436、相关API调用逻辑-1和相关API调用逻辑-2,EPAD项目区域400可以构建新的应用400。应用创建显示区域410还可以识别针对由原始查询202所表示的高层处理概念的需求444。例如,开发人员可能期望识别和确认用于实现高层处理概念(例如,“发送安全XML”)的需求444。在一个实现中,Exemplar可以基于帮助内容106来生成需求文档和最终用户文档并且识别支持新的应用440的需求444,所述帮助内容106涉及用于构建新的应用440的其他相关应用逻辑436、相关API调用逻辑-1以及相关API调用逻辑-2。
图5示出了更为详细的Exemplar系统124的示图。Exemplar系统124包括用于与Exemplar系统124内部和外部的各种资源、存储器506和处理器508通信的通信接口504。处理器508可以执行各种下面所述的逻辑。存储器506可以包括EPAD用户接口102,其使用接口逻辑510来生成Exemplar查询接口300,以及EPAD项目区域400。接口逻辑510可以包括图形库、窗口渲染调用以及其他用户接口逻辑,这些用户接口逻辑可操作用于显示接口元素、接收输入、和将输入传送到Exemplar系统124中的任意特定程序逻辑。
存储器506还可以包括扩展搜索逻辑514。上面的表5中示出了扩展查询206,其中搜索逻辑514通过合并原始查询202和基础API调用列表204来形成扩展查询。更具体地,扩展搜索逻辑514合并原始查询202和基础逻辑结果516来形成扩展查询206,并且使用扩展查询206来执行扩展的搜索。基础逻辑结果516可以包括基础API调用列表204,其包括零个或多个基础API调用标识符(例如,基础API调用标识符-1518),以及基础应用列表520,其包括零个或多个基础应用标识符(例如,基础应用标识符-1521)。扩展的搜索逻辑514由此获得扩展的搜索结果208。扩展的搜索结果208可以包括潜在相关应用210和潜在相关API调用212,其包括零个或多个潜在相关应用标识符-1522和零个或多个潜在相关API调用标识符(例如,潜在相关API调用标识符-1524和潜在相关API调用标识符-2526)。
图6示出Exemplar系统124的其他特征。存储器506也可以包括具有试探性相关性排名逻辑602的试探性相关性排名引擎114,其生成应用试探性相关性排名216和API调用试探性相关性排名218。阈值逻辑604可以把应用相关性阈值428和API调用相关性阈值430应用到应用试探性相关性排名216和API调用试探性相关性排名218,来确定潜在相关应用210和潜在相关API调用212是否有资格被包括在相关应用列表220和相关API调用列表222中。换句话说,阈值逻辑604可以实现比较逻辑来确定何时潜在相关逻辑作为相关逻辑是合格的。
存储器506也可以包括分析器逻辑606,处理器508执行其以分别识别出潜在相关应用210和潜在相关API调用212的应用元数据608和API元数据610。应用元数据608的例子包括应用描述、应用逻辑注释、应用参数名和现有的应用的应用参数类型。类似地,API元数据610的例子包括API描述、API逻辑注释、API参数名和API参数类型。
分析器逻辑606可以生成数据流图432和控制流图433以获得API调用图434。API调用图434可以包括代表潜在相关API调用212的节点(例如,节点-1612和节点-2614)以及潜在相关API调用212之间用于指示数据流的数据流边(例如,数据流边616)。图7提供了附加的例子。分析器逻辑616可以确定对应于潜在相关应用210内的潜在相关API调用212之间的连接数量的数据流边计数618。具有“n”个节点的图在节点之间具有n(n-1)条边。数据流边计数618提供了对数据流图432的连接性的程度的洞察。如下面详细所讨论的,分析器逻辑606也可以向节点之间的边指派链路值620。在一个实现中,基于公共API参数626,分析器逻辑606可以确定潜在相关API调用212之间的每个连接的连接性排名214(例如,强连接性排名622和弱连接性排名624),如下面所详细讨论的。
图6进一步图示出存储器506可以包括选择逻辑628和应用创建逻辑630。处理器508可以执行选择逻辑628以允许用户来选择相关应用逻辑414以及相关API调用逻辑(例如,相关API调用逻辑-1422和相关API调用逻辑-2424),以开发新的应用440。在另一个实现中,选择逻辑628可以向用户提供拖放点击功能性以便选择其他应用相关逻辑436来与相关API调用逻辑-1422和相关API调用逻辑-2424合并,从而构建新的应用440。处理器508可以执行应用创建逻辑630,以便通过识别用于获得对应于用户选择的其他相关应用逻辑436、相关应用逻辑414、相关API调用逻辑-1422和相关API调用逻辑-2424的帮助内容106,来识别针对由原始查询202所表示的高层处理概念的需求444。在一个实现中,应用创建逻辑使用其他相关应用逻辑436、相关应用逻辑414、相关API调用逻辑-1422和相关API调用逻辑-2424来形成查询,以便获得描述需求444的帮助内容106。应用创建逻辑630可以从对应于用户选择的其他相关应用逻辑436、相关应用逻辑414、相关API调用逻辑-1422和相关API调用逻辑-2424的帮助内容106来生成定制的需求。
图7示出针对两种不同潜在相关应用(例如,潜在相关应用A和潜在相关应用B)的API调用图434。试探性相关性排名引擎114基于潜在相关API调用212的数目、连接性排名214和指派给分别包括在潜在相关应用A和潜在相关应用B中的潜在相关API调用212之间的每个连接的链路值,为潜在相关应用A指派比潜在相关应用B更高的试探性相关性排名216。
在一个实现中,逻辑分析器116产生API调用图434。逻辑分析器116可以分别识别出潜在相关应用210和潜在相关API调用212的应用元数据608和API元数据610,从而分析潜在相关API调用212之间的数据流路径和连接性。逻辑分析器116可以向试探性相关性排名引擎114提供应用元数据608和API元数据610。在可替换的实现中,试探性相关性排名引擎114可以识别应用元数据608和API元数据610,并且可以使用逻辑分析公式、规则和等式来产生数据流图432和控制流图433,从而获得API调用图434。数据流图432、控制流图433和API调用图434可以表示为数学结构。作为比较潜在相关API调用212之间的数据流和控制流的结果,逻辑分析器116可以获得API调用图434。
在一个实现中,逻辑分析器116可以对潜在相关应用210执行控制流分析以获得控制流图433,并且对控制流图433执行数据流分析以获得数据流图。数据流图432、控制流图433和API调用图类似地包括节点和边。通过作为解析潜在相关应用210结果在逻辑上将潜在相关应用210划分成代表包括API调用的逻辑的节点,逻辑分析器116可以获得控制流图433。逻辑分析器116可以将潜在相关应用210的解析过的逻辑指派给指派的节点直到逻辑分析器116识别出潜在相关API调用或分支逻辑(例如,if-then、switch-case和do-while)为止,并且添加指派的节点到控制流图433。当程序包括多个潜在相关应用210时,逻辑分析器116可以将针对每个潜在相关应用所生成的控制流图433合并进单个控制流图433中。通过将控制流图433中的边与数据流图432中的边进行比较,逻辑分析器116可以获得API调用图434。例如,当控制流图433包括数据流图432不包括的边时,逻辑分析器116可以不在相应的API调用图434中包括该边。然而,当控制流图433包括数据流图432也包括的边时,则逻辑分析器116可以在API调用图434中包括该边。
在一个实现中,逻辑分析器116可以接收用户输入以确定API调用之间的特定依赖性。例如,当潜在相关应用210使用函数指针(例如,使用在C、C++语言中的指针类型)来引用潜在相关API调用212和哈希表(例如,将密钥与值关联的数据结构),从而存储代表在API调用之间传送的数据元素的对象时,逻辑分析器116可以接收用户输入以确定API调用之间的依赖性,因为逻辑分析器116可能在当事实上仅有一个或有限集的有效依赖性存在时以其他方式解释API调用之间的多个可能依赖性。
在另一个实现中,逻辑分析器116可以分析潜在相关应用210和潜在相关API调用逻辑212的数据流路径(例如,下面讨论的节点间的边)(例如,链路试探性),从而确定潜在相关API调用212之间的每个连接的连接性排名214。在一个实现中,试探性相关性排名引擎114可以基于代表在潜在相关应用210中找到的不同潜在相关API调用212的节点712-720所代表的API调用的总数目“n”、等于n(n-1)(例如,数据流边计数614)的潜在相关API调用212之间的连接(例如,边712-720)总数目、连接的质量(例如,强连接或弱连接)、以及潜在相关API调用212之间的链路类型(例如,环形链路、单链路或没有链路),确定在图7中示为潜在相关应用A的潜在相关应用210的应用试探性相关性排名216。
应用元数据608和API元数据610可以描述在潜在相关应用210内的不同的潜在相关API调用212(例如,节点702-710)之间的数据流路径。例如,逻辑分析器116可以确定在潜在相关应用210和潜在相关API调用212内找到的公共API参数626和逻辑分支(例如,if-then-else),从而产生数据流图432、控制流图433和API调用图434。也如图7所图示出的,逻辑分析器116识别每个潜在相关API调用212(例如,702-710以及722)的函数(例如,K(x)、J(x)、S(y)、P(y)、F(x)和G(z)),以确定连接性排名214。
在一个实现中,逻辑分析器116向潜在相关API调用212(例如,节点712-720)之间的每个连接指派权重Wi(例如,连接性排名214)。根据多个因素,逻辑分析器116可以向弱连接指派为0.5的权重而对强连接指派为1.0的权重。例如,边712、边716和边720可以代表由节点对702和710、702和704以及706和708(例如,分别为函数对K(x)和F(x)、K(x)和J(x)以及S(y)和P(y))所代表的潜在相关API调用212之间的弱连接。跟着上面的例子,其中K(x)和F(x)共享公共API参数626、但两个函数都未产生公共API参数626的值,则逻辑分析器116可以为由边720所代表的节点对702和710之间的连接性排名214指派为0.5的弱连接权重。指派给节点对(例如,702和710)的弱连接可以指示节点对实现由原始查询202所代表的高层处理概念的低相对概率(例如,相比较于其他节点对的连接性排名)。逻辑分析器116可以使用其他试探性分析方法和工具来确定是否给连接性排名214指派弱连接。
备选地,边714和边718可以代表潜在相关API调用212之间的强连接,该潜在相关API调用212由节点对702和708、以及704和706所代表(例如,分别是函数对K(x)和P(y)、以及J(x)和S(y))。逻辑分析器116可以确定当函数J(x)产生J(x)和S(y)都共享的变量y时,则由边714所代表的节点对704和706可以指派强连接性排名622。指派给节点对(例如,704和706)的强连接可以指示节点对实现了由原始查询202所代表的高层处理概念的高相对概率(例如,相比较于其他节点对的连接性排名)。逻辑分析器116可以使用其他试探性分析方法和工具来确定是否给连接性排名214指派强连接。
逻辑分析器116可以给潜在相关API调用212之间的每个连接指派链路值L(例如,链路值620)。例如,Exemplar系统124可以对于其中环路链路(例如,边712-718形成环路)存在于潜在相关API调用212(例如,节点702-708)之间的情况下指派链路值L等于1。Exemplar系统124可以对于其中单链路(例如,边720)存在于潜在相关API调用212(例如,节点702-708)之间指派链路值L等于0.5。在另一个实现中,Exemplar系统124可以对于其中没有链路(例如,边720)存在于潜在相关API调用212(例如,节点722代表不具有与潜在应用210中的其他潜在相关API调用连接的潜在相关API调用212)之间指派链路值L等于0。可以使用额外的、不同的或更少的权重。试探性相关性排名引擎114可以使用指派给潜在相关API调用212之间每个连接的连接性排名214和链路值620来根据下式确定应用试探性相关性排名216:
其中i范围从1到n(n-1)。(等式1)
逻辑分析器116可以基于连接性排名214和指派给包括潜在相关API调用212的每个边的链路值620来确定针对潜在相关API调用212的API调用试探性相关排名218。例如,其中m代表包括特定节点的节点对(例如,702和704、702和708、以及702和710)的数目,并且包括该节点的边(例如,712、718和720)的数目等于m(m-1),并且针对每个连接性排名214的指派的值以及针对包括节点的每个边的链路值620分别代表W和L,可以根据上面的等式1来确定针对节点的API调用试探性相关性排名218,其中m替代n:
其中j范围从1到m(m-1)。
图8示出Exemplar系统124可采取的以获得相关应用列表210的动作。Exemplar系统124可以使用接口逻辑510来接收代表高层处理概念(例如,“发送安全XML”)的原始查询202(802)。帮助内容处理器104可以使用原始查询202来执行原始搜索(804)以获得包括基础逻辑结果516(例如,基础API调用列表204或基础应用列表520)的原始搜索结果。基础逻辑结果516可以包括基础逻辑(例如,API调用)标识符(806)。Exemplar系统124可以将原始查询202与基础逻辑列表的任意部分进行组合以形成扩展查询(808)。扩展的搜索逻辑514可以执行扩展查询206以获得包括潜在相关应用210列表和潜在相关API调用212列表的扩展搜索结果(810)。潜在相关逻辑列表可以标识潜在相关逻辑。分析器逻辑606可以针对逻辑库112来分析由潜在相关应用标识符所标识的潜在相关逻辑(812)。试探性相关性排名逻辑602可以使用连接性排名214和链路值620、使用等式1或其他的方程式来确定针对潜在相关应用210和潜在相关API调用212的应用试探性相关性排名216和API调用试探性相关性排名218(814)。试探性相关性排名逻辑602可以使用阈值逻辑604来应用应用相关性阈值428和API调用相关性阈值430,以确定潜在相关应用210和潜在相关API调用是否分别满足应用相关性阈值428和API调用相关性阈值430(816)。试探性相关性排名逻辑602可以将潜在相关应用210添加到相关应用列表220,其中该潜在相关应用210满足应用相关性阈值428(818)。试探性相关性排名逻辑602可以确定包括在扩展搜索结果208中的每个潜在相关应用210和潜在相关API调用212的应用试探性相关性排名216和API调用试探性相关性排名218(820)。
图9示出Exemplar系统124试探性排名引擎114可以采取的以将应用试探性相关性排名216指派给潜在相关应用210的动作。分析器逻辑602可以分析在逻辑库中找到的潜在相关应用210和潜在相关API调用212(904)。分析器逻辑602可以生成和分析用于生成和分析API调用图43(908)的数据流图432和控制流图433(906)。分析器逻辑602可以使用数据流图432、控制流图433和API调用图来确定包括在潜在相关应用210中的潜在相关API调用的链路值650,并且将连接性排名214指派给潜在相关API调用之间的每个连接(910)。试探性相关性排名逻辑602可以确定每个潜在相关应用210的应用试探性相关性排名216(912)(例如,如上面所讨论的,可以根据等式1来确定应用试探性相关性排名216和API调用试探性相关性排名218)。试探性相关性排名逻辑602可以确定包括在扩展搜索结果208中的每个潜在相关应用210和潜在相关API调用212的应用试探性相关性排名216和API调用试探性相关性排名218(914)。
图10示出选择逻辑和应用创建逻辑所采取的以生成新的应用440的处理。EPAD项目区域400可以使用选择逻辑624来检测从相关API调用列表222选择相关API调用标识符(例如,由从相关API调用标识符-1418和相关API调用标识符-2420到相关API调用逻辑-1422和相关API调用逻辑-2424所绘制的箭头所指示的)(1002)。EPAD项目区域400可以呈现实现相关API调用的相关API调用逻辑(例如,相关API调用逻辑-1422和相关API调用逻辑-2424)(1004)。EPAD项目区域可以使用选择逻辑624来检测相关API调用逻辑(例如,相关API调用逻辑-1422和相关API调用逻辑-2424)和其他相关应用逻辑436的选择以生成新的应用440(1006)。EPAD项目区域可以提供选项来生成新的应用440,即,使用应用创建逻辑626,接着选择相关API调用逻辑(例如,相关API调用逻辑-1422和相关API调用逻辑-2424)和其他相关应用逻辑436来生成新的应用440(1008)。Exemplar系统124也可以识别由原始查询202所代表的高层处理概念的需求444。在一个实现中,Exemplar系统124可以基于帮助文档106来生成需求文档和最终用户文档,该帮助文档涉及被合并以生成新的应用440并且识别需求444的其他相关应用逻辑436、相关API调用逻辑-1422和相关API调用逻辑-2424。
图11示出建议的应用评估系统(RAE)128。在一个实现中,RAE 128包括与网络118通信并用于与RAE 128内部和外部的各种资源、存储器1104和处理器1106通信的通信接口1102。处理器1106可以执行RAE 128和/或Exemplar124的任何逻辑。存储器1106可以包括RAE用户接口生成逻辑130,其生成如图12中所示出的RAE用户接口1202,并且使用RAE区域逻辑132。
RAE区域逻辑132可以包括图形库、窗口渲染调用和其他用户接口逻辑,这些逻辑可操作用于显示接口元素、接收输入和将输入传送到RAE 128中的任何特定程序逻辑。RAE区域逻辑132可以进一步包括概念查询显示逻辑134、概念分布显示逻辑136、源代码显示逻辑138和元数据显示逻辑140。概念查询显示逻辑134可以包括原始查询202和/或扩展查询206的主题1108、词语1110和概念1112。概念查询显示逻辑134接收来自Exemplar的主题1108、词语1110、概念1112、原始查询202和扩展查询206,并且生成RAE用户接口1202中的窗口(如结合图12更为详细描述的),其将主题呈现为用于验证建议的应用功能性的可选择焦点选项。
概念分布显示逻辑136可以包括建议的应用1118的建议的应用表示1116(例如,HRA)。在一个实现中,建议的应用1118包括基于原始查询202和/或扩展查询206从Exemplar获得的相关应用逻辑414和相关API调用逻辑(例如,422和424)。建议的应用表示1116包括概念分布定位符1120,其标识主题、概念和词语之一的潜在实现位置。Exemplar标识应用逻辑中的位置(例如,概念分布定位符),其中API调用在该位置处实现高层处理概念。概念分布显示逻辑136生成建议的应用的可视化。概念分布显示逻辑136例如可以产生概念分布显示区域1206,其显示模块、源代码文件、头文件、库文件,或其他建议的应用源文件的一个或多个。概念分布显示逻辑136进一步在建议的应用源文件内定位实现由操作员所选择的主题1108、词语1110、概念1112、原始查询202和扩展查询206的API调用。概念分布显示逻辑136可以以概念分布定位符1120来表示每个位置,例如具有通过建议的应用源文件的超链接功能性的实水平线,其位于API调用存在于源文件的位置处。其他概念分布定位符1120可以用作例如三角形(例如,圆形、方形)以及(例如,字体、图形(例如,直线或指针)、颜色和/或声音)。
概念分布显示逻辑136可操作以接收概念分布定位符选择1122。概念分布显示逻辑136可以将概念分布定位符选择1122传送到源代码显示逻辑138。如下面更为详细描述的,源代码显示逻辑138产生用户接口上的源代码显示区域,其显示选择点处的实际代码。结果是,操作员可以评估该代码以确定该代码实际是否实现从概念查询显示区域所选择的搜索短语。
源代码显示逻辑138可以包括建议的应用1118的源代码部分1124。源代码部分1124可以包括针对选择的概念分布定位符1122的源代码(例如,高亮的概念1126)的潜在实现位置。源代码显示逻辑138接受来自概念分布显示逻辑136的概念分布位置选择1122。作为响应,源代码显示逻辑138取回在选择点处的建议的应用代码并且呈现源代码以便在源代码显示区域中审阅。此外,概念分布显示逻辑136高亮显示器中的源代码组件,例如匹配从概念查询显示区域选择的概念的源代码中的API调用。因此,操作员可以审阅源代码以确定该源代码是否实际实现了从概念查询显示区域选择的概念。源代码显示逻辑138可以包括只读和编辑模式,其允许源代码显示逻辑138响应于由开发人员在评估建议的应用1118过程中所输入的源代码编辑1128。
元数据显示逻辑140可以包括基于主题1108、词语1110、概念1112、原始查询202和扩展查询206的建议的应用1118的应用元数据608和API元数据610。元数据显示逻辑140也可以包括基于主题1108、词语1110、概念1112、原始查询202、扩展查询206和/或建议的应用1118的概念查询统计1130和语义信息1132。在一个实现中,作为基于分析从扩展查询206和扩展搜索结果208所导出的语义来确定相关API调用逻辑-1422和相关API调用逻辑-2424的API调用试探性相关性排名218的结果,概念查询统计1130和语义信息1132由试探性相关性排名引擎114确定。
图12示出RAE区域逻辑132可以操作以显示的建议的应用评估区域1202。RAE区域1202可以包括概念查询显示区域1204、概念分布显示区域1206、源代码显示区域1206和元数据显示区域1210。概念查询显示区域1204单独或组合地显示原始查询202和/或扩展查询206的主题1108、词语1110、概念1112。概念查询显示区域1204可以进一步包括复选框和/或其他选择GUI元素,从而操作员可以从概念查询显示区域1204选择主题1108、词语1110和概念1112。
概念分布显示区域1206显示建议的应用1118的建议的应用表示(RAR)1212和1214。例如,RAR 1212可以代表包括main()函数的源代码文件,而RAR 1214可以代表具有从所谓的JPEG到BITMAP转换例程的源代码文件。建议的应用表示1212和1214包括由概念分布显示逻辑136插入的概念分布定位符1216、1218、1220、1222、1224和1226,其标识单独或组合的主题1108、词语1110、概念1112、原始查询202和扩展查询206的源代码文件中的潜在实现位置。概念分布定位符1216、1218、1220、1222、1224和1226可以使用不同的标识符(例如,字体、图形(例如,直线或指针)、颜色和/或声音)来标识概念分布定位符与原始查询202和扩展查询206的主题1108、词语1110、概念1112之间的关系。源代码显示区域1208包括高亮概念1126(例如,1228和1230)。在一个实现中,高亮概念1126(例如,1228和1230)包括标识符(例如,字体、颜色和/或声音)以标识高亮概念1126和概念分布定位符(例如,1216、1218、1220、1222、1224和1226)之间的关系。RAE区域逻辑132可以使用字体、颜色和/或声音(例如,音频队列)来指示主题1108、词语1110、概念1112、概念分布定位符(例如,1216、1218、1220、1222、1224和1226)和高亮概念1126之间的关系,如箭头1232和1234所指示的。
在一个实现中,响应于选择原始查询202和/或扩展查询206的特定主题1108、词语1110、概念1112和/或元素,建议的应用表示(1116、1212和1214)和/或概念分布定位符(例如,1216、1218、1220、1222、1224和1226)被显示。换句话说,建议的应用表示(1116、1212和1214)和/或显示在概念分布显示区域1206中的概念分布定位符(例如,1216、1218、1220、1222、1224和1226)可以响应于在概念查询显示区域1204中所做出的选择。
图13示出如在显示器中示出的建议的应用评估区域1202的例子。建议的应用评估区域1202包括概念查询显示区域1204、概念分布显示区域1206、建议的应用表示1214和元数据显示区域1210。概念查询显示区域1204提供短语选择元素1302,操作员可对其进行选择以便选择感兴趣的概念供在建议的应用中验证。概念分布显示区域1206示出实现所选择的短语的其他源代码组件和API调用的位置。在图13所示出的例子中,使用概念分布定位符(虚线(例如,1304)按比例定位在构成建议的应用的源代码文件的图形表示内)来指示位置。这些源代码文件被标记为图13中的建议的应用代码(RAC)文件1(RAC1)、RAC2、RAC3、RAC4和RAC5。
建议的应用表示1214示出在特定源代码文件中的特定概念位置处的源代码,如由操作员所选择的。因此,当操作员例如选择RAC1和概念分布定位符1304时,概念分布显示逻辑136通过取回概念位置处和周围的RAC1源代码来做出响应。概念分布显示逻辑136在建议的应用表示1214区域中显示取回的代码。此外,概念分布显示逻辑高亮Exemplar的搜索技术确定的、涉及概念查询显示区域1204中所示的搜索短语的代码段。如在图13中所示,例如,概念分布显示逻辑136高亮(使用下划线)作为与在概念查询显示区域1204中的选择的搜索短语“length”和“create”相关的源代码组件“new”和“.set”。
图14示出RAE区域逻辑132可以采取的以评估建议的应用的处理。RAE区域逻辑132获得供评估的建议的应用(1402)。在一个实现中,RAE区域逻辑132从Exemplar124获得供评估的建议的应用,其中建议的应用1118是HRA。概念查询显示逻辑134显示执行以识别建议的应用的原始查询202和/或扩展查询206的主题、概念和词语(1404)。概念查询显示逻辑134在概念查询显示区域中显示主题、概念和词语。概念分布显示逻辑136在概念分布显示区域1206中显示建议的应用1118的表示,包括概念分布定位符1120(1406)。概念分布定位符1120识别执行用于识别建议的应用1118的查询的主题、概念和词语。当从概念分布显示区域1206选择概念分布定位符1120时(1408),源代码显示逻辑138在源代码显示区域中显示由概念分布定位符1120所标识的建议的应用的源代码1124的一部分(1410)。元数据显示逻辑140显示在执行查询时所生成的元数据,该查询被执行以识别出建议的应用(1412)。开发人员可以使用RAE 128来评估建议的应用和源代码的一部分以验证建议的应用是高度相关的应用(1414)。通过从概念分布显示区域选择另一个概念分布定位符,开发人员可以选择另一个建议的应用来评估(1416)。
RAE 128极大地减小了与评估建议的应用关联的时间、成本和其他资源花费。RAE 128产生以高层处理概念开始的相关结果。软件开发人员在成功评估时可以将高度相关应用部署到生产中。
此外,注意到,系统实施执行可以代表底层物理对象的数据的电子转换。例如,通过增加搜索短语定位符并且高亮与搜索短语匹配的相关代码,RAE区域逻辑可视地转换源代码。此外,RAE可以实现为特定的机器。例如,特定的机器可以包括用于实施如上所述的RAE区域逻辑的CPU、存储器和软件库。
已经描述了多个实现。然而,将理解到在不偏离本发明的精神和范围的情况下可以做出各种修改。因此,其他实现也在下面的权利要求书的范围内。