通过更完善的测试实现更好的软件 --作者:Paul Schafer、Tom Arnold

    [摘要]本文研究集成到Visual Studio 2005 Team System中的软件测试工具。

简介

    Visual Studio 2005 Team Test Edition引入了一组新的测试工具,这些工具已在Microsoft内部使用,并且首次由Microsoft集成到Visual Studio 2005 Team Test Edition之中。这些新工具与Visual Studio紧密集成,意味着它们不仅可以在其各自的测试框架中工作,而且还可以在提供完整软件开发生命周期解决方案的更大框架中工作。

质量保证难题

    在应用程序或Web页可以达到其质量和性能目标之前,必须经过严格的测试。过去,Microsoft Visual Studio是一种只关注软件开发人员的产品,而对开发的测试方面提供的支持不足。组织内部质量保证小组的测试工程师无疑已经正确地认识到,在他们努力确保发布高质量的软件过程中,先前版本的Microsoft Visual Studio产品所提供的支持微乎其微。

    作为开发人员或测试人员,您可以使用Visual Studio来对您自己的测试进行编码。但是要创建某些专业化的测试或者要对测试进行管理,则通常必须使用其他Microsoft产品、购买第三方工具或从头创建工具。当需要建模和发布数据、组织支持文档、跟踪错误并创建测试套件(例如,版本验证测试[BVT,Build Verification Ttest])时,您的工作将愈加复杂。所得到的工具集有可能产生这样的结果:它不能在它的各种工具和存储机制之间进行转换。

    有这样一种情况,某个金融领域企业的IT小组积累了大量在开发生命周期的各个阶段使用的不同测试工具。每个工具都是来自独立供应商的独立可执行程序。因此,这些工具之间没有交互,而且这些工具的用户之间的交互也受到阻碍。例如,在一个工具中输入项目需求,然后将其复制到另一个工具,这并不会在两个工具的数据库的需求之间建立链接。因为没有建立链接,所以在第一个工具中更改需求不会更新由开发和测试团队使用的其他工具所访问的数据。

我们的解决方案

    有了Visual Studio 2005 Team Test Edition,软件测试人员将高兴地看到,他们的工具集正在接近开发人员的工具已经拥有的价值水平。主要的例子就是能够使用Visual Studio集成开发环境(IDE)来创建并运行测试。

    许多核心测试类型(包括单元测试、Web测试、加载测试、手动测试以及代码覆盖的度量)现在都集成到Visual Studio中。实际上,Visual Studio 2005 Team Test Edition引入了一种新的项目类型——“测试”项目,它与传统的项目类型一起显示在解决方案资源管理器中。新测试工具还与Visual Studio 2005 Team System的其他部分集成在一起。这意味着软件测试人员还能够将其结果发布到数据库,生成趋势报告和历史报告,比较不同种类的数据,查看测试后找到了多少错误以及都是哪些错误,并确定哪些错误没有链接到可以帮助重新产生它们的测试中。

支持的测试类型

    Visual Studio 2005 Team Test Edition支持下面这些测试类型:

  • 单元测试由执行项目功能和方法的代码组成。单元测试用于测试现有的源代码,它们是测试驱动开发(Test-Driven Development)的基本要素。下面的示例显示代码生成后立即进行的单元测试。这个简单的测试用例以您正在测试的代码中的一个方法为目标。您现在可以编辑该测试代码(还可以选择从单元测试框架库中调用方法)来自定义它的行为。

Public Sub OrderStatusCodesTest()
Dim target As AdventureWorks.AdventureValues = New AdventureWorks.AdventureValues
' TODO: Assign to an appropriate value for the property
Dim val As System.Data.SqlClient.SqlDataReader
Assert.AreEqual(val, target.OrderStatusCodes)
Assert.Inconclusive("Look at this code and make sure it does what you want")
End Sub

  • Web测试包括一系列可以从浏览器会话创建或记录的HTTP URL。
  • 通用测试,允许使用您的团队现有的自动测试和自动工具。
  • 加载测试,模拟多个用户运行您的自动测试。
  • 手动测试,逐步完成还未自动执行的任务。

    另外,您还可以运行任何自动测试(除手动测试之外的所有测试)以及来自命令行的几组测试。

将工具集成到Visual Studio中

    Visual Studio 2005 Team Test Edition的新功能通过以下UI元素实现:

“Test View”窗口:用于编写测试

    “Test View”窗口的作用是指导您编辑(编写)自己的测试。例如,要编写单元测试来执行您想要测试的项目代码(也称为代码测试或CUT),您可以使用Visual Studio的IDE。编写完单元测试后,它就会出现在“Test View”窗口中。如果您随后打开它(通过双击或右键单击并选择“Edit”),则该测试将在Visual Studio IDE中打开以进行进一步的编写。同样,打开手动测试将打开适当的手动测试编辑器,而打开加载或Web测试也将打开这些测试类型的自定义编辑器。


图1 “Test View”窗口

    部分编写体验证明您编写的代码可以按预期方式执行。虽然不是执行测试的主窗口(参见下一节“Test Explorer”窗口),但是通过“Test View”窗口,您可以轻松地运行测试,然后根据结果进行其他编写和微调。

“Test Explorer”窗口:用于管理和执行测试

    “Test Explorer”窗口允许您通过将各个测试放入“类别”中来对它们进行管理。例如,设想您有1000个测试,而您认为每次获得新版本时都要运行其中的50个关键测试。则您可以创建名为“BVT”的新类别(用于“版本验证测试”),并将这50个测试放入该类别中。然后,通过运行BVT类别,您可以同时运行所有这50个测试。


图2 “Test Explorer”窗口

    “Test Explorer”窗口还允许您按所有者、测试类型等来筛选测试显示,因此您可以更轻松地找到想要运行、管理或作为工作项分配的测试。将类别汇集在“Test Explorer”窗口中后,您可以使用命令行测试实用工具来运行某个类别中的所有测试(您还可以使用它在程序集中运行所有测试)。

“Run Configuration”对话框:用于配置测试执行

    可以使用“Run Configuration”对话框来确切定义如何运行测试,它包含每种测试类型的不同页面。这意味着,当同时运行不同类型(单元、Web等)的测试时,您可以单击选项卡来显示该测试类型的设置页。这允许您在开始运行测试之前,为测试运行中所有不同的测试应用不同的设置。


图3 “Run Configuration”对话框

    这些运行配置设置包括以下内容:

  • 在本地运行测试还是以部署状态运行测试;“部署”意味着它将在许多远程计算机上运行。
  • 在执行测试时是否打开代码覆盖率检查;例如,通过这种选择您可以选择在代码覆盖计算中包括二进制数据。
  • 在测试运行中包括的不同测试类型中应用的设置。

    一旦将测试组织到某个类别中,您就可以从“Test Explorer”或“Test View”窗口运行它们。您可以从同一窗口运行各个测试。启动测试运行将显示“Run Configuration”对话框,这使您可以选择影响测试运行方式的设置。当单击“Run Configuration”对话框中的“OK”时,该测试将会运行,其结果显示在“Test Results”窗口中。当通过Visual Studio IDE或从命令行测试实用工具运行测试或测试类别时,您可以保存运行配置以备今后使用。

“Test Results”窗口:显示状态和结果

    该窗口显示测试运行中每个测试的当前状态,即Pending(还未开始)、In Progress、Inconclusive、Passed以及Failed。当加载测试已经运行时,该窗口显示Completed状态。例如,手动测试不是部署到远程服务器,而是在本地运行。当启动包括手动测试的测试运行时,它以“Pending”状态显示在“Test Results”窗口中。这种状态将一直保持到进行手动测试执行的人员单击“Test Results”窗口中的测试为止,这将打开该人员要执行的步骤列表。测试人员随后单击其中的一个按钮,以表示该测试是否通过。


图4 “Test Results”窗口

    对于自动运行的测试来说(手动测试以外的所有类型),“Test Results”窗口显示它从Pending状态到最终结果的测试进度。最终结果可能有两种状态:Passed或Failed。各种警告可能都会与这两种状态相关。一旦得到测试结果,您就可以双击显示该测试结果的那一行,以产生该测试结果的“详细资料视图”。该窗口显示高级摘要、警告和测试执行过程中调用的方法以及其他因素,例如,无法检测二进制数据以及将测试部署到远程服务器等等。

“Code Coverage”窗口:显示测试运行中所实现的覆盖

    如果您启用测试运行的“Run Configuration”对话框中的代码覆盖,“Code Coverage”窗口将显示测试运行中所执行的源代码模块。它显示文件名称、命名空间、类、源代码的方法以及测试运行过程中达到的覆盖百分比(例如,某给定方法的80%可能已经执行,因为只执行了IF语句,而没有执行ELSE语句)。


图5 “Code Coverage”窗口按文件显示结果

    此外,未覆盖代码的显示颜色与已覆盖代码的颜色不同。双击未覆盖的代码,可以打开代码编辑器并滚动到没有覆盖过的代码。另外,单击“Code Coverage”窗口中的按钮,还将显示源文件中以颜色标识代码的键。


图6 “Code Coverage”窗口按颜色显示已覆盖和未覆盖的代码

可扩展性

    Visual Studio 2005 Team Test Edition将包括允许进行两个层次扩展的基础结构。一个扩展是为各个测试人员设计的,而另一个是为那些需要扩展Visual Studio的人员设计的。

  • 通用测试:可以使用通用测试运行任一命令行进行测试。这种机制允许您继续运行过去所用的测试。通用测试很好地集成到Visual Studio中,这样您就可以从Test Explorer对它们进行选择、分类和运行,并且结果会显示在“Test Results”窗口中。通用测试还很好地集成到其他的Team System工具中,这样您就可以从失败中引出错误、存档测试结果等。
  • 测试类型加载项:通过插入到Visual Studio Team System的自定义测试类型,VSIP开发人员可以扩展测试系统。这使测试类型编写人员能够完全控制编辑器,Visual Studio用户可用该编辑器来更改自定义测试、测试的执行方式以及测试结果的查看方式。这些新的测试类型将完全集成到现有的“Test View”、“Test Explorer”和“Test Results”窗口中。另外,自定义测试类型还可以与代码覆盖集合、加载测试以及测试结果的持久性和仓储集成在一起。

小结

    在Visual Studio中,现在测试被认为是这样一种高层活动:可以降低提交复杂Web和桌面应用程序的内在风险,通过减少支持费用使回报最大化并集成到整个软件开发生命周期中。Visual Studio 2005 Team Test Edition提供了贯穿产品开发生命周期的一套集成工具。例如,利用Visual Studio 2005 Team Test Edition,测试软件的工具现在就可以和构建软件的工具一起集成到Visual Studio IDE中,但这只是软件开发生命周期的两个方面。集成到Visual Studio 2005 Team Test Edition中的还有通过静态与动态分析使代码更健壮、响应性更好的工具以及在软件开发生命周期的所有阶段都使用的工具(例如,工作项跟踪、企业级源代码管理、计划管理和项目管理等)。

posted @ 2005-12-22 12:02  Think  阅读(720)  评论(0编辑  收藏  举报