代码克隆通知以及体系结构改变可视化的制作方法

文档序号:6442134阅读:208来源:国知局
专利名称:代码克隆通知以及体系结构改变可视化的制作方法
技术领域
本发明涉及代码克隆。
背景技术
软件开发过程在其最简单的级别涉及软件开发者以语言(例如,C++、C#、汇编)编写软件代码并使用诸如编译器的工具将代码构建成二进制可执行模块。随着软件变得更为复杂,多个开发者可从事一个项目并使用更为复杂的工具,诸如登记管理器(check-inmanager)、集中式构建系统等。团队也可制定过程,诸如在体系结构和源代码级别进行的同 行评审(peer review)。流行的过程是使除主要开发者以外的至少一个开发者评审每一个登记。开发者也可运行一个或多个自动化的验证工具,诸如单元测试、静态代码检查器、运行时代码检查器等。诸如MICR0S0FT VISUAL STUDIO 的较新的集成开发环境(IDE)试图尽可能早地向开发者告知潜在的代码缺陷。例如,IDE可在开发者键入代码时对软件代码进行解析以标识拼写错误、所引用的未被声明的变量等。通常鼓励代码重用以避免为解决每个新问题而“做无用功(reinventingthewheel) ”。已经使用了长时间的软件代码更有可能没有缺陷,因为代码可能已经随时间接收更多的覆盖和分析。此外,许多软件问题重复出现,使得重用代码允许使用已知的良好实践来解决老问题并允许开发者注意力集中在新问题或对特定项目专有的软件代码上。代码重用可在小范围进行,其中开发者对同一项目多次使用类似代码,但是也可在更大范围进行,其中在公司从事一个项目的开发者重用来自公司另一项目的代码。两个开发者可能不在同一团队中工作,或甚至不会彼此通信以了解所重用的代码。代码重用的一个问题在于,它也导致隐错传播。所复制(此处也称为克隆)的代码中的软件缺陷将在代码的所有实例中存在。当各个开发者在公司内或甚至更广泛地复制代码时,修补一个项目中的缺陷的开发者可能不会意识到其中该缺陷可能存在的其它项目。这导致每一团队使用重复的劳动来找出并修补问题,更糟糕的是,在一个团队中已知并得到修补的问题在重用代码的另一个团队中没有得到修补。在当今的代码评审期间,审阅者被限于在其自己的了解内的克隆,且可能不了解带有在当前实例中修补的同一缺陷的所有克隆。难以保证考虑了所有被克隆的副本。另一问题在于,软件代码按照难以可视化的方式随时间演变,尤其当多个开发者随时间继续对该代码工作时。作出改变的开发者可能想要理解源代码的两个版本之间的体系结构差异。例如,代码库的类级、名字空间级或模块级差异可能是复杂且难以通过同时钻研许多源文件来掌握的。

发明内容
此处描述了代码验证系统,该系统提供带有代码克隆分析和可视化的扩充的代码评审,以帮助软件开发者自动地标识相同代码的类似实例,并对软件代码随时间变化的各版本中的差异进行可视化。系统使用代码克隆搜索技术来在开发者作出改变时标识代码克隆,并向用户呈现关于类似代码的信息。系统可在对具有一个或多个相关克隆的代码片段作出改变时,向开发者或其他团队提供自动化的通知。代码验证系统也帮助开发者理解软件代码体的体系结构演变。代码验证系统提供用于确定体系结构差异的分析组件,以及用于以直观且有用的方式向开发者和软件开发过程中所涉及的其他人显示所标识的差异的用户界面组件。这可帮助开发者理解改变的原因或在不好的体系结构改变走得太远之前发现它们。该系统可提供代码克隆的类似可视化,以允许开发者对一个克隆以及另一个克隆之间的差异可视化。这允许评审者对代码库的两个版本之间的体系结构级的差异进行分析和可视化,提供对体系结构级的差异的直观理解,并提高体系结构级的代码评审的效率。因此,代码验证系统通过避免来自带有先前已经修补的缺陷的未经检测的代码克隆的重复劳动来增加代码的正确率并减少错误的成本。提供本发明内容以便以简化的形式介绍在以下具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。


图I是示出在一个实施例中的代码验证系统的各组件的框图。图2是示出在一个实施例中代码验证系统向软件开发者通知存在与开发者正在修改的软件代码相关的软件代码的处理的流程图。图3是示出在一个实施例中代码验证系统向软件开发者显示与软件代码中的改变相关的体系结构级改变的处理的流程图。图4是示出在一个实施例中代码验证系统所显示的、用于向软件开发者通知代码克隆的用户界面的显示画面图。图5是示出在一个实施例中代码验证系统所显示的、用于向软件开发者提供对软件代码的体系结构改变的可视化的用户界面的显示画面图。
具体实施例方式此处描述了代码验证系统,该系统提供带有代码克隆分析和可视化的扩充的代码评审,以帮助软件开发者自动地标识相同代码的类似实例,并对软件代码随时间变化的各版本中的差异进行可视化。该系统使用先前描述的代码克隆搜索技术(例如,参见2010年4月提交的、题为“C0DE-CL0NE DETECT IONAND ANALYSIS (代码克隆检测和分析)”的美国专利申请第12/752942号)来在开发者作出改变时,标识代码克隆并向用户呈现关于类似代码的信息。例如,系统可提供在开发者对代码块作出改变时显示类似软件代码的位置的工具提示弹出窗口或窗口。在较粗略的层面上,系统可在对其代码包括一个或多个克隆的代码片段进行登记时,向开发者或其他团队提供自动化的通知。系统可标识要改变的代码片段的被克隆的副本,并向代码评审者建议在被克隆的副本中检查相同改变的潜在应用。代码验证系统也帮助开发者理解软件代码体的体系结构演变。例如,软件架构师可能想要理解项目的两个里程碑(例如,Ml和M2)之间的体系结构演变。作为另一示例,进行两个源控制分支之间的代码分支集成的开发者可能想要理解两个分支中的源代码之间的体系结构级差异。代码验证系统提供用于确定体系结构差异的分析组件,以及用于以直观且有用的方式向开发者和软件开发过程中所涉及的其他人显示所标识的差异的用户界面组件。这可帮助开发者理解改变的原因或在不好的体系结构改变走得太远之前发现它们。该系统可提供代码克隆的类似可视化,以允许开发者可视化一个克隆以及另一个克隆之间的差异。这允许评审者对代码库的源代码的两个版本之间的体系结构级的差异进行分析和可视化,提供对体系结构级的差异的直观理解,并提高体系结构级的代码评审的效率。因此,代码验证系统通过避免来自带有先前已经修补的缺陷的未经检测的代码克隆的重复劳动来增加代码的正确率并减少错误的成本。开发者通常复制代码以便进行快速的代码重用。所复制的代码片段也被称为代码克隆。在对一段代码作出改变时,通常也应该将相同的改变应用于其被克隆的副本。当今,在代码评审期间,评审者可仅仅根据其心中对代码库的理解来判断是否需要对其被克隆的副本应用相同的改变。难以保证考虑了所有克隆副本。代码验证系统通过针对代码克隆搜索引擎搜索经改变的代码片断来解决这一问题并自动告知代码评审者检查复制的副本,代 码克隆搜索引擎对当前代码库或代码库的更为扩展的范围中的源代码进行索引。当今,代码评审者难以在代码评审期间理解源代码的两个版本之间的体系结构级的差异。现有工具对指出文本级差异(诸如添加和移除的行、词或字符)做得很好,但是因为可按照如此多的方式构建软件代码,这些工具并不提供任何种类的更高级别的视图。也存在用于显示关于代码的当前版本的体系结构信息的良好的现有工具,诸如类查看器、名字空间查看器等。然而,这些工具没有用于比较软件代码的两个版本并帮助开发者对所改变的内容可视化的设施。这进一步使得代码评审者难以判断体系结构级代码重构是否会是有用的。图I是示出在一个实施例中的代码验证系统的各组件的框图。系统100包括解析组件110、索引组件120、改变检测组件130、代码克隆检测组件140、差异可视化组件150、用户界面组件160以及通信组件170。这些组件中的每一个都在此处进一步详细讨论。解析组件110解析用编程语言编写的软件代码以标识与软件代码相关的信息以便索引。尽管此处仅称为解析,但该过程可包括编译软件代码所涉及的典型过程,包括解析、词法分析、优化等。解析组件110可标识变量名、代码块、语言关键字(例如,“if”、“then”和“while”)、可变声明、类定义以及任何其它代码特征。解析组件110可包括插件模块或用于处理各种编程语言的其它子组件。解析组件110可在大型登记代码体以及正由开发者活动编辑的本地代码体上操作。在一些实施例中,解析组件110在用户键入和/或暂停时解析所输入的新文本(例如,MICR0S0FT INTELLISENSE )。索引组件120对解析期间标识的软件代码信息进行索引以提供对代码信息的快速查找和匹配。组件120可创建大型代码体或多个代码体的索引,并接收判断是否存在匹配输入代码的已知代码的查询。例如,索引可包含大项目的代码,系统100可提交基于开发者当前正在键入的内容的查询。系统100还基于开发者当前编辑位置周围的代码子集进行查询,以标识与当前位置相关的代码克隆。索引组件120可在开发者的计算设备上本地操作,或在可从开发者的计算设备访问的服务器上操作。索引组件120以增量方式操作,以便在随时间标识新代码改变或附加的代码库时并入它们。改变检测组件130检测开发者对所标识的软件代码范围作出的当前改变。组件130可被集成到开发者用来编辑软件代码的IDE中。在某些实施例中,代码检测组件130监视键入以及其它开发者输入,以检测开发者正在对软件代码作出改变。所检测的改变可包括在特定源文件中或通过一个或多个可视编辑工具添加、删除或更新软件代码。改变检测组件130标识一个或多个代码范围,并将这些范围提交给代码克隆检测组件140以便与已知代码克隆的索引进行比较。代码克隆检测组件140标识与所检测到的软件开发者作出的改变的标识范围相关的一个或多个代码克隆。系统可将开发者当前位置周围的代码或代码范围提交给索引组件120,以标识相同或其它软件项目中类似或匹配的代码范围。代码克隆检测组件140可本地操作以标识存储在开发者的计算设备上的克隆,或可在更广泛的级别上操作,诸如在公司内的服务器上,或在提供多个软件项目的源代码的索引的公共因特网服务器上。在一些实施例中,代码克隆检测组件140基于粒度信息(例如,块级、函数级、模块级相似处)或基于所确定的当前代码位置周围的大小(例如,当前位置+/-100个字符)来标识代码克隆的开始和结束。可按照各种不同的方式定义和标识克隆,且此处的描述不旨在将系统100限 于任何一个特定方法。具体地,不同的编程语言将在适用于标识代码克隆的源代码的粒度上有所变化。差异可视化组件150创建源代码的体系结构模型,并将该体系结构模型与其它体系结构模型进行比较以标识体系结构的差异。组件150可接收相同源代码的两个版本(例如,今天的一个以及上周的一个)作为输入,并比较两个版本以向软件开发者或架构师显示体系结构差异。组件150还可比较不同的代码体来帮助开发者对体系结构相似处和差异进行可视化。在一些实施例中,IDE在代码评审过程期间调用差异可视化组件150,使得开发者能够容易地在体系结构级上标识登记代码和新代码之间的差异。软件代码可被分解和重构成各种设计和体系结构。通常在文本级显著变化的源代码在体系结构级变化很少,反之亦然。例如,如果开发者对程序中的每个变量重命名,文本可能完全很难匹配,但是体系结构将是相同的(例如,相同的类、类之间的关系等)。用户界面组件160向开发者提供所标识的代码克隆以及所标识的体系结构差异。用户界面组件160可包括图形用户界面(⑶I)、程序性应用程序编程接口(API)、或用于向开发者提供信息的其它界面。组件160可作为IDE的一部分操作,或作为集成到可扩展IDE的插件操作,以便在用户编辑软件代码时提供克隆标识,并应请求提供体系结构比较。在一些实施例中,系统100作为用于评审源代码改变的代码评审过程的一部分操作,并在代码评审过程期间提供Gn或其它界面,以向开发者和/或评审者显示与当前改变相关的代码克隆和体系结构差异。组件160还提供适用于对信息可视化的web、移动或其它界面。在一些实施例中,用户界面组件160包括通知子组件,该子组件在检测到代码所有者或其他开发者的软件代码所基于的被克隆的代码改变时,向代码所有者或其他开发者提供通知。这允许开发者修补其代码中、已经由其他开发者在相关代码中标识的问题,无论开发者是否意识到彼此或代码的共享。通信组件170是在系统100是分布式的时候在系统10的其它组件之间提供通信的可选组件。尽管该系统可全部在单个开发者的客户机计算设备上操作,一些用户将通过将系统100应用于大得多的代码体来找到额外的价值。系统100允许各个组件被置于一个或多个服务器上,既为了访问比单个开发者的计算设备上可用的代码体大的代码体,又为了对用于执行系统100的功能的开发者的计算设备卸载资源消耗。例如,代码克隆检测和体系结构建模可由能访问代码的多个版本和多个代码库的服务器提供。在这样的情况中,各个开发者的IDE可通过通信组件170连接到该服务器,以接收协助开发者的信息。通信组件170可使用各种公共的联网协议和网络,诸如局域网(LAN)或因特网上的传输控制协议(TCP)。该系统还可利用云计算资源来将处理、存储和其它功能分发给诸如MICROSOFT WINDOWS AZURE 所提供的、可缩放的基于云的服务器。在其上实现代码验证系统的计算设备可包括中央处理单元、存储器、输入设备(例如,键盘和指示设备)、输出设备(例如,显示设备),以及存储设备(例如,磁盘驱动器或其他非易失性存储介质)。存储器和存储设备是可以用实现或启用该系统的计算机可执行指令(例如,软件)来编码的计算机可读存储介质。此外,数据结构和消息结构可被存储 或经由诸如通信链路上的信号等数据传送介质发送。可以使用各种通信链路,诸如因特网、局域网、广域网、点对点拨号连接、蜂窝电话网络等。该系统的实施例可以在各种操作环境中实现,这些操作环境包括个人计算机、月艮务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子产品、数码照相机、网络PC、小型计算机、大型计算机、包括任何上述系统或设备、机顶盒、片上系统(SOC)等中任一种的分布式计算环境等。计算机系统可以是蜂窝电话、个人数字助理、智能电话、个人计算机、可编程消费电子设备、数码相机等。该系统可以在由一个或多个计算机或其他设备执行的诸如程序模块等计算机可执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可在各个实施例中按需进行组合或分布。图2是示出在一个实施例中代码验证系统向软件开发者通知存在与开发者正在修改的软件代码相关的软件代码的处理的流程图。在框210中开始,系统解析软件代码库来标识与软件代码相关的信息。系统可标识语言特征、代码块、变量信息、类和其它数据结构信息、函数信息等。系统将经解析的信息提供给索引供用户修改软件代码时进行查询。系统还解析开发者当前正在从事的源代码以与索引中之前解析的软件代码进行比较。在框220中继续,系统对经解析的软件代码库进行索引,以提供软件代码的匹配部分的快速标识。索引可包含来自开发者的计算设备的软件代码,以及来自涵盖潜在的许多开发者对潜在的许多软件项目的贡献的更宽泛的代码库的软件代码。系统提供基于索引的查询和搜索功能,以标识与开发者正在从事的软件的当前范围相关的代码克隆。系统可在开发者向代码管理系统登记软件代码时或在其它重要里程碑处更新索引。系统还可在开发者的计算设备处提供本地索引,以供在开发者编辑源代码时查找相关信息。前两个步骤可在正在进行(ongoing)的基础上且在较早时间或在与以下步骤分开的服务器上进行。例如,系统可提供连续标识并索引软件代码改变的代码克隆索引服务。运行在开发者的计算设备上的单独服务可标识开发者作出的改变,并查询索引服务以标识相关的软件代码。另选地或另外地,系统可在开发者的计算设备上提供索引服务,用于标识同一计算设备上的相关代码。在框230继续,系统检测编辑软件代码的开发者提供的软件代码改变。系统可检测开发者为修补软件代码中所标识的缺陷进行的键入。在用户键入时,系统可在针对索引的查询中提交改变,以标识与开发者正在从事的代码相关的代码。系统还可向IDE或其它软件程序提供API,通过API,IDE可向系统提供描述软件改变的信息,并可作为响应接收关于代码克隆的信息。在一些实施例中,开发者可选择特定的代码块并选择标识与所选代码块相关的代码克隆的选项(例如,“找到相似代码”)。在框240中继续,系统标识与开发者提供的代码改变相关的任何代码克隆。系统可咨询索引,并提供代码改变周围的代码部分或代码在改变之前的先前版本,以帮助标识相关代码。代码克隆可存在于当前代码库中、相关代码库中、或碰巧共享软件代码的特定范围的完全不相关的代码库中。代码块常常被开发者在宏级别以及微级别重用。在一些情况中,开发者可重用特定函数或程序循环,而在其它情况中,开发者可重用整个模块或类。系统可在各个级别和粒度标识克隆。在一些实施例中,系统提供配置参数,用户或应用可修改配置参数以配置标识克隆的级别。在判定框250中继续,如果系统标识至少一个克隆,则系统在框260中继续,否则 系统完成。系统可从克隆索引服务器或从在开发者的计算设备上运行的本地索引接收所标识的克隆的列表。该列表可包括描述克隆的信息,诸如克隆的源代码的存储位置(例如统一资源定位符(URL)或文件路径)、文件名信息、行数信息、与克隆相关联的开发者等。在框260中继续,系统向软件开发者通知存在至少一个克隆,使得开发者可确定是否要对所标识的克隆应用所检测到的改变。系统可提供弹出消息、工具提示、IDE中的停放列表(docked list)或其它用户界面,以便向开发者显示所标识的克隆。系统可确定要显示的克隆的阈值(例如,10),或可提供用于在克隆之间导航的用户界面控件。在一些情况中,开发者可能不能访问来修改克隆,系统可提供联系信息,供开发者向其他开发者通知代码改变。系统还可向负责代码克隆的其他开发者提供自动化的通知,诸如电子邮件消息。通知可包括描述改变的信息、标识作出改变的开发者的信息以及开发者提供的、描述改变的动机的任何信息。在框260之后,这些步骤结束。图3是示出在一个实施例中代码验证系统向软件开发者显示与软件代码中的改变相关的体系结构级改变的处理的流程图。在框310中开始,系统接收包括一个或多个体系结构特征的软件代码的第一版本。软件代码可包括作为开发者正在从事的项目的一部分的代码库或其它代码库。开发者可标识开发者想要接收体系结构比较的、软件代码的两个版本。在一些实施例中,系统提供用户界面,通过该用户界面,开发者可请求体系结构比较。在框320中继续,系统创建提供对所接收的软件代码的第一版本的概念上的可视化的第一体系结构模型。该模型可包括类、模块、名字空间、和在体系结构级上描述软件代码的其它编程语言和环境特征。模型可包括一个或多个存储器内数据结构和所显示的可视化,以便查看软件代码的第一版本的体系结构。系统可创建并存储先前存储的软件代码的体系结构模型(例如,登记、发布或其它里程碑)。在框330中继续,系统接收包括一个或多个体系结构特征的软件代码的第二版本。第二版本可以是开发者想要标识体系结构差异的相同代码库的后续版本或相关代码库。开发者可标识第二软件版本,或者系统可自动推断第二软件版本是开发者正在从事的源代码的版本。在一些实施例中,系统作为诸如在源管理系统中集成代码分支的过程或登记软件代码的过程等过程的一部分自动标识第一和第二软件版本。在框340中继续,系统创建提供对所接收的软件代码的第二版本的概念上的可视化的第二体系结构模型。如同第一体系结构模型,第二模型突出显示软件代码的第二版本的体系结构构造。模型可包括从单元测试或在软件代码的每一版本上运行的其它基准得到的性能信息。在框345中继续,系统在代码库的两个版本之间进行代码克隆检测。原始检测结果可以是一组被克隆的函数/片断对,其中一个函数/片断来自于代码库的第一版本,而另一函数/片断来自于代码库的第二版本。代码库的两个版本之间的原始克隆对在下一步中进一步用来标识体系结构级克隆。在框350中继续,系统比较第一体系结构模型和第二体系结构模型以及原始克隆对信息,以标识两个模型之间的一个或多个差异。差异可包括添加的体系结构特征、移除的体系结构特征、基于代码克隆检测结果标识代码相似处(例如, 共享的代码的百分比)、标识发生的重构等。体系结构比较还可标识描述每一模型的统计数据,诸如在模型内使用的克隆、模型的性能特性等。系统可比较这一信息以示出性能或克隆使用的增加或减少。比较还可标识未曾改变的对象,因为这也可能是对开发者有用的信息。在框360中继续,系统在向开发者阐释改变的可视显示中显示软件代码各版本之间的体系结构差异。显示可包括示出主要代码组件以及表示组件之间的数据流的箭头的框图、或者有助于在体系结构级简洁地传达改变的其它可视化。在一些实施例中,系统可显示指示改变或其它差异的数量的某些显示的组件上的统计数据。在框360之后,这些步骤结束。图4是示出在一个实施例中代码验证系统所显示的、用于向软件开发者通知代码克隆的用户界面的显示画面图。显示包括IDE窗口 410,窗口 410提供用于编辑和管理软件代码的一个或多个工具。IDE窗口 410包括代码窗口 420,窗口 420显示开发者当前正在查看和/或编辑的特定软件代码源文件。IDE窗口 410还包括一组代码评审选项430,选项430包括用于检测代码克隆的选项。代码窗口 420包括多个所标识的克隆。例如,代码窗口420包括被突出显示的第一标识的代码范围440和在弹出窗口 450中显示的所标识的代码克隆。弹出窗口 450提供关于克隆的信息,诸如克隆的名字以及打开与克隆相关联的源文件的链接。开发者可使用这一信息来查看代码克隆。在一些情况中,克隆可包含比开发者的版本更新近的代码,在这种情况中,开发者可复制改变。在其它情况中,开发者的改变也归入克隆中,且开发者可修改克隆或通知克隆的所有者来修改克隆。图5是示出在一个实施例中代码验证系统所显示的、用于向软件开发者提供对软件代码的体系结构改变的可视化的用户界面的显示画面图。显示包括IDE窗口 510,窗口510提供用于编辑和管理软件代码的一个或多个工具。IDE窗口 510包括体系结构比较窗口 520,窗口 520显示此处所述的、与开发者所选的软件项目相关的可视化。IDE窗口 510还包括一组代码评审选项530,选项530包括用于显示代码各版本之间的体系结构差异的选项。体系结构比较窗口 520包括标识体系结构特征和改变的多个块。例如,体系结构比较窗口 520包括第一名字空间540。名字空间540包括类550。类550提供指示80%的类代码在两个版本之间改变的统计信息560。另一类提供指示570,指示该类在代码版本之间丧失了其损失的性能的30%。另一名字空间580指示,该名字空间是新的且在软件代码的第一版本中不存在。系统显示这些和其它改变,使得开发者在除文本的原始改变之外还接收代码改变意味着什么的高级视图。在一些实施例中,代码验证系统在评审代码的多个阶段中协助开发者。在自评审的第一阶段中,系统在开发者关于与软件代码相关的和/或与开发者正对软件代码作出的体系结构改变相关的代码克隆修改该代码时,系统向开发者提供输入。在评审的第二阶段中,诸如开发者的同级或开发者的经理的评审者,使用该系统,按照对代码克隆的使用或改变以及开发者作出的体系结构改变,来查看软件开发者的改变。在甚至更高的级别,团队架构师或负责大型代码体的他人可使用系统来查看各个改变或在代码历史中的主要点(例如,里程碑或发布)之间发生的改变,以对改变的本质可视化。在一些实施例中,代码验证系统可用于防止代码重用。软件代码通常包括公司或其它实体可能不想要在其软件代码中承受的版权或其它约束。该系统可用于标识软件项目内、匹配开发者应避免的一项目中的代码的代码,使得开发者或其他评审者可移除冒犯的代码。类似地,公司可使用该系统来确保在公司的整个代码库集合上修补了所标识的漏洞。该系统允许在之前不可用的级别上对代码相似性和重用进行大规模分析。

从前面的描述中可以看出,可以理解,此处描述的代码验证系统的特定实施例只是为了说明,但是,在不偏离本发明的精神和范围的情况下,可以进行各种修改。因此,本发明只受所附权利要求限制。
权利要求
1.一种计算机实现的用于向软件开发者通知存在与所述开发者正在修改的软件代码相关的软件代码的方法,所述方法包括 解析(210)软件代码库来标识与所述软件代码相关的信息; 对所解析的软件代码库进行索引(220)以提供软件代码的匹配部分的快速标识; 检测(230)编辑软件代码的开发者提供的软件代码改变; 标识(240)与所述开发者提供的代码改变相关的任何代码克隆; 在检测到(250)标识了克隆时,向所述软件开发者通知(260)存在至少一个克隆,使得所述开发者能够确定是否要对所标识的克隆应用所检测到的改变, 其中,前面的各步骤由至少一个处理器来执行。
2.如权利要求I所述的方法,其特征在于,解析所述软件代码库包括标识以下各项中的至少一个语言特征、代码块、变量信息、类和其它数据结构信息、以及函数信息。
3.如权利要求I所述的方法,其特征在于,解析所述软件代码库包括解析所述开发者当前正在从事的源代码以与所述索引中之前解析的软件代码进行比较。
4.如权利要求I所述的方法,其特征在于,对所述软件代码进行索引包括对来自所述开发者的计算设备的软件代码以及至少一个其它代码库的软件代码进行索引。
5.如权利要求I所述的方法,其特征在于,索引所述软件代码包括提供基于所述索引的查询和搜索功能以标识与所述开发者正在从事的软件的当前范围相关的代码克隆。
6.如权利要求I所述的方法,其特征在于,对所述软件代码进行索引包括在开发者向代码管理系统登记软件代码时或在其它重要里程碑处更新所述索引。
7.如权利要求I所述的方法,其特征在于,对所述软件代码的解析和索引在正在进行的基础上、在连续标识并索引软件代码改变的代码库索引服务器上进行。
8.如权利要求I所述的方法,其特征在于,检测所述软件代码改变包括检测所述开发者为修补软件代码中所标识的缺陷进行的键入,并在用户键入时,在针对所述索引的查询中提交改变,以标识与所述开发者正在从事的代码相关的代码克隆。
9.如权利要求I所述的方法,其特征在于,检测所述软件代码改变包括检测所述开发者选择了特定代码块并选择了标识与所选代码块相关的代码克隆的选项。
10.如权利要求I所述的方法,其特征在于,标识代码克隆包括向所述索引查询,并提供所述代码改变周围的代码部分以标识相关代码。
11.如权利要求I所述的方法,其特征在于,标识代码克隆包括标识与所述开发者正在从事的代码库相同或不同的代码库中的克隆。
12.如权利要求I所述的方法,其特征在于,向开发者通知包括提供标识集成开发环境(IDE)内的克隆的用户界面消息。
13.如权利要求I所述的方法,其特征在于,通知所述开发者包括向与所标识的代码克隆相关联的另一开发者提供附加通知。
14.一种用代码克隆标识和体系结构改变可视化扩充软件代码评审的计算机系统,所述系统包括 被配置成执行包含在以下组件内的软件指令的处理器和存储器; 解析组件(UO),解析用编程语言编写的软件代码以标识与所述软件代码相关的信息以便索引;索引组件(120),对解析期间标识的软件代码信息进行索引以提供对代码信息的快速查找和匹配; 改变检测组件(130),检测开发者对所标识的软件代码范围作出的当前改变; 代码克隆检测组件(140),标识与所检测到的所述软件开发者作出的改变的标识范围相关的一个或多个代码克隆; 差异可视化组件(150),创建源代码的体系结构模型,并将所述体系结构模型与其它体系结构模型进行比较以标识体系结构差异;以及 用户界面组件(160),向开发者可视地提供所标识的代码克隆以及所标识的体系结构差异。
15.如权利要求14所述的系统,其特征在于,所述改变检测组件与所述开发者用来编辑软件代码的集成开发环境(IDE)相关联,其中所述改变检测组件监视键入和其它开发者输入以检测开发者正在对软件代码作出改变,并将一个或多个代码范围提交给所述代码克隆检测组件以便与已知代码克隆的索引进行比较。
全文摘要
本发明涉及代码克隆通知以及体系结构改变可视化。此处描述了代码验证系统,该系统提供带有代码克隆分析和可视化的扩充的代码评审,以帮助软件开发者自动地标识相同代码的类似实例,并对软件代码随时间变化的各版本中的差异进行可视化。系统使用代码克隆搜索技术来在开发者作出改变时标识代码克隆,并向用户呈现关于类似代码的信息。系统可在对具有一个或多个相关克隆的代码片段作出改变时,向开发者或其他团队提供自动化的通知。代码验证系统也帮助开发者理解软件代码体的体系结构演变。代码验证系统提供用于基于软件代码库的两个版本之间的代码克隆检测结果确定体系结构差异的分析组件。代码验证系统还提供用于以直观且有用的方式向开发者和软件开发过程中所涉及的其他人显示所标识的差异的用户界面组件。
文档编号G06F9/44GK102681835SQ20111042772
公开日2012年9月19日 申请日期2011年12月19日 优先权日2010年12月20日
发明者D·张, S·卡恩, 党映农, 刘未鹏, 戈颂, 成功 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1