实时代码插装的制作方法
【专利说明】
【背景技术】
[0001 ]在计算机编程的背景下,代码覆盖率分析是用于确定目标代码已经被测试的程度的许多测试套件的一个特征。由于测试应用于目标代码,诸如应用或模块,所以代码覆盖率分析能够跟踪测试关于诸如功能、陈述以及分支覆盖率之类的各种标准的覆盖率,以及多少代码被覆盖。
[0002]为了执行代码覆盖率分析,目标代码必须首先被插装以使得任何代码覆盖率工具能够应用于目标代码。对代码进行插装涉及到将插装代码(instrumentat1n code)插入目标代码中以使得插装代码连同目标代码一起被执行。二进制插装和源插装是各种插装方法的两个示例。
[0003]插装的缺陷在于由插装过程得到的经插装的代码本质上比处于其非插装形式的目标代码慢,因为经插装的代码包括了更多的用于执行的陈述。因此,对代码进行插装对于某些类型的测试而言相比其它类型测试用处较小。例如,当针对性能进行测试时,与当针对稳定性进行测试时相比,对经插装的代码进行测试用处较小。
[0004]典型地在开发过程期间对代码进行插装。可以创建应用的经插装版本,可以提交该经插装版本以用于一些测试。经插装的代码可以驻留于各客户端能访问的开发服务器上,各客户端能够根据规定测试取回并执行经插装的代码。与客户端协同运行的测试套件能够以多种方式来分析代码,包括采用任何测试所实现的代码覆盖率。
[0005]在一个示例中,应用程序可由利用JavaScript(JS)编程语言所开发的各种JavaScript(JS)文件构成。为了测试应用程序,JS文件被插装且存储在服务器上,客户端(例如,浏览器)能够从服务器取回并执行如由测试套件根据选定的测试所引导的文件。由于JS文件在其经插装状态下执行,所以通过测试套件能够监测该测试的代码覆盖率。
【发明内容】
[0006]本文提供了用于实现实时代码插装(code instrumentat1n)的系统、方法和软件。由应用环境请求执行的应用代码能够被实时地取回和插装。这些以及其它方面允许快速且灵活的开发和部署软件应用。
[0007]在至少一个实现方式中,插装环境检测在应用环境中发起的取回用于在应用环境中执行的应用程序的至少一部分的请求。插装环境从代码环境响应性地取回与应用程序相关联的应用代码并且对应用代码进行插装以生成经插装的代码(当在插装模式下操作时)。经插装的代码然后可以包含在对由应用环境发起的请求的回复中。
[0008]提供该概述以便以简化形式引入在下文技术公开中进一步描述的一系列概念。应当理解,该概述不旨在确定所要求保护的主题的关键特征或主要特征,也不旨在用来限制所要求保护的主题的范围。
【附图说明】
[0009]参考下面的附图能够更好地理解本公开的许多方面。虽然结合这些附图描述了若干实现方式,但是本公开不限于本文公开的实现方式。相反,旨在涵盖所有的替代方案、修改方案和等同方案。
[0010]图1示出了涉及到代码、插装和应用环境的实现方式中的操作方案。
[0011]图2示出了在实现方式中的插装过程。
[0012]图3示出了适于实现插装环境或其它计算环境的计算系统。
[0013]图4示出了在实现方式中的操作方案。
[0014]图5示出了在实现方式中的操作序列。
[0015]图6示出了在实现方式中的操作方案。
[0016]图7示出了当在实现方式中体验测试套件时会遇到的用户接口。
[0017]图8示出了当在实现方式中体验测试套件时会遇到的用户接口。
【具体实施方式】
[0018]本文公开的实现方式使能对应用代码进行实时插装,以使得应用测试和其它操作能够以比其它更快、更灵活的方式来进行。胜于对代码进行插装并加载(stage)经插装的代码以使得能够将其供应到适当的环境以用于测试以及可选地用于代码覆盖率分析,非经插装的代码能够实时加载、供应以及插装,以允许改进的测试和代码覆盖率分析。
[0019]在至少一个实现方式中,可以从用于应用程序的应用环境或其一部分中发起请求。插装环境可以检测到该请求并且响应性地从供应相关联的应用代码的代码环境中取回相关联的应用代码。然后将应用代码在插装环境中动态插装并且传送到应用环境,以用于在经插装状态下执行。
[0020]在一些实现方式中,应用环境可以包括用户接口,通过该用户接口来呈现用户接口控件。用户接口控件可以是能选择的以用于将插装环境置于插装模式。换言之,插装环境可以是能控制的,以使得有时其起作用以便实时插装代码,而在其它时候其不起作用,这取决于用户接口控件的选择状态。
[0021]在一些实现方式中,测试菜单控件还可以经由用户接口来呈现。测试菜单控件可以是能选择的以用于指定将所请求的应用程序提交给各个测试中的哪个测试。因此,用户可以经由用户接口进行交互以便既选择应用于应用程序的特定测试,又选择是否在经插装状态下测试应用程序。
[0022]在各种方案中,应用环境可以包括浏览器应用,从浏览器应用发起对应用程序的请求。在一些示例中,应用环境可以包括测试应用,或者在浏览器应用中运行,或者在浏览器应用外运行。另外,插装环境可以包括装载在浏览器应用中的代理服务器。在这些方案中,浏览器应用可以发起请求,所述请求由代理服务器检测到,代理服务器进而取回并插装任何所请求的代码。测试应用可以与浏览器应用相连接以根据选定的测试来驱动对经插装的代码的执行。
[0023]然而,可以意识到,不涉及到浏览器应用的其它方案是可行的。相反,除了浏览器之外,应用环境可以包括能够请求应用代码且执行应用代码的其它类型的应用。例如,专用应用操作系统可以包括在经插装或非经插装状态下适合于请求并执行应用代码的功能。
[0024]还可以意识到,可以通过多种方式来实现代理服务器。如上所述,代理服务器可以装载到浏览器应用中。然而,代理服务器还可以实现于服务应用代码的代码环境中。在一些方案中,代理服务器可以中间的形式来实现,以使其既不与应用环境集成,又不与代码环境集成。
[0025]在一些方案中,代码环境可以包括生产服务器,应用代码加载到生产服务器上,并且可以从生产服务器供应应用代码以便由多种应用环境执行。在其它方案中,代码环境可以包括开发服务器,在开发服务器上开发应用代码,并且可以从开发服务器中供应应用代码以供执行。
[0026]现在参考附图,图1示出了操作方案,在其中实时地取回代码并进行插装以便进行测试和分析。图2示出了可以在图1所示的操作方案的背景下在插装环境中实施的插装过程。图3示出了适合于实现图1-2所示的各种环境、方案、顺序和过程中的任何或全部的计算系统。图4示出了其中实时地对代码进行插装的另一操作方案,而图5示出了相关的操作序列,两者可以由诸如图3所示的任何适当的计算系统来实现。图6示出了另一操作方案,且图6和图7示出了代表当体验测试套件时会遇到的那些用户接口的各种用户接口,经由测试套件,可以控制各种测试和分析。
[0027]现在转到图1,示出了在一种实现方式中的操作方案100。操作方案100涉及到代码环境101与插装环境103之间以及插装环境103与应用环境105之间的各种交互。
[0028]代码环境101可以是从其将程序代码供应给请求客户端的任何计算环境。代码环境101的示例包括生产服务器、软件开发服务器或任何其它类型的服务器。代码环境101可以用硬件或软件实现,或者用软件和硬件的组合来实现。
[0029]插装环境103可以是参考关于图2更详细提到的插装过程200可以在其中实施以使得非经插装的代码可以被处理以实时地生成经插装的代码的任何计算环境。插装环境103的示例包括代理服务器、应用服务器或任何其它类型的服务器。插装环境103可以用硬件或软件来实现,或者用软件和硬件的组合来实现。另外,插装环境103可以独立的方式实现,或者可以与诸如应用环境105之类的其它环境集成。
[0030]应用环境105可以是任何这样的计算环境:对非经插装的代码的请求可源自该计算环境,并且通过该计算环境可以执行经插装(或非经插装)的代码。应用环境105可以用硬件或者用软件来实现,或者以两者的组合来实现。另外,应用环境105可以独立的方式实现或者可以与诸如插装环境103之类的其它环境集成。
[0031]应用代码107代表了任何可以由代码环境101供应、由插装环境103插装、以及由应用环境105执行的程序代码。应用代码107可以是能够被供应、插装以及执行的任何类型的程序代码,包括源代码、二进制代码、解译代码、汇编代码、机器代码或其任何变型或组合。应用代码107可以是代表一整个应用或者甚至多个应用的代码,但还可以仅代表程序或应用的一部分。
[0032]在操作方案100中,应用环境105发起对与应用程序相关联的应用代码107的请求。应用代码107可以是例如源代码、二进制代码或某种其它类型的代码。请求可以具体地标识应用代码107,但是可以通过某种其它方式来标识应用代码107,诸如通过对应用程序、文件、地址或位置等的引用。
[0033]实现插装过程200的插装环境103,检测请求且响应性地从代码环境101取回应用代码107。插装环