开发者视角:使用VSTS进行应用程序分析和单元测试
 

2009-06-25 作者:李会军 来源:IT168

 

Visual Studio Team System(以下简称VSTS)开发版是VSTS大家族中的一员,除此之外,还有架构版、测试版、数据库版。在本文中,我们将从一个开发者视角出发,来探究VSTS给开发者带来了哪些方便之处,其他版本将在后续文章中陆续介绍。如果大家安装了VSTS,可以在“关于”对话框中查看到自己所安装的版本。

VSTS开发版不仅注重为开发者带来强大方面的功能,同时也注重于开发者和团队之间的协作,每一个功能几乎都可以于Team Foundation进行无缝结合,主要体现在以下几个方面:

  • 代码度量
  • 单元测试
  • 代码分析
  • 团队协作

下面我们会分别进行介绍。

代码度量

码度量是一组软件度量值,使开发人员可以更好地了解他们正在开发的代码。利用代码度量,开发人员可以了解哪些类型和/或方法应该返工或进行更彻底的测试。开发团队可以识别潜在的风险、了解项目的当前状态,并跟踪软件开发的进度。在VSTS开发版中进行代码度量,可以点击“分析”菜单,然后选择“计算代码度量值”(注:笔者使用的是VSTS英文版本),如图1所

图1

点击该菜单之后,VSTS将会对当前解决方案进行代码度量,结果将会在代码“度量度量结果”窗口中显示,如图2所示:

图2

分析的结果呈树状展示,可以从命名空间展开,到具体的某一个类型,最细粒度可达类型中的某个方法。注意,使用VSTS进行代码度量时,只会针对“Project”类型的项目进行分析,而不会对WebSite进行分析,大家注意到图2中的度量结果窗口有警告信息,就是因为该项目为WebSite。 分析的结果可以导出为Excel,也可以创建一个基于“代码度量结果”窗口中的结果的Team Foundation工作项。创建该工作项时,VSTS将自动在“标题”字段中输入标题,并在“历史记录”选项卡下输入代码度量数据,如图3所示:

图3

从代码度量这一点看,VSTS对于开发者在团队协作方面大大加强了,度量的结果可以直接Team Foundation无缝结合,这样开发者就可以通过Team Explorer来浏览通过代码度量创建的工作项了。在后面的代码分析中我们还会看到这一点。  代码分析

代码分析工具对代码缺陷执行大量检查,这些代码缺陷在错误窗口中显示为警告,VSTS中内置了非常丰富的代码分析规则,所有的规则都可以在代码分析窗口中查看到,如图4所示:

图4

如果要对某个项目进行代码分析,可以选中该项目后,在“分析”菜单下选择“在XX项目上运行代码分析”,如图5所示:

图5

代码分析的结果会在“错误”窗口中显示,如图6所示:

图6

代码分析工具提供一些警告,指示代码库中的规则冲突,这些警告归类为不同的规则领域,如设计、本地化、性能、安全性等等。每条警告都标识一个与托管代码分析规则的冲突。如果要将警告上升为错误,可以在代码分析配置窗口中进行设置。

如果想要在项目生成的时候,强制进行代码分析,可以通过项目属性窗口进行设置,如图7所示:

图7

分析的结果在“错误窗口”中显示,对于代码分析结果仍然可以创建工作项到Team Foundation中。

单元测试

单元测试对于开发者来说,尤其重要,如果开发者接受TDD的方式,那么单元测试将成为不可或缺的一部分,尽管要测试的“单元”(此处的单元包括类型、方法等)的大小各异,但VSTS测试工具 会生成专门针对方法(包括私有方法)的单元测试。

单元测试用于通过直接调用某个类的方法(传递相应参数)来执行其他源代码。因此,如果包括Assert语句,它们可以根据所期望的值来测试实际生成的值,单元测试方法位于测试类中,测试类存储在源代码文件中。

可以使用能够创建测试的初始源代码的代码生成功能来创建单元测试,也可以完全手动编写测试。无论使用何种方式,测试类和所有测试方法都用编程属性加以标识。如使用[TestClass()]特性标记每个测试类,每个单元测试都是一个使用[TestMethod()]特性标记的测试方法。这些属性是在生成单元测试时自动分配的;如果是手动编写单元测试代码,则必须自行添加类和方法的属性。

在文件组织结构上,我们习惯于对于测试项目通过“项目名” + "Test"字符表示,而对于每个测试类,习惯于为它们加上后缀Fixture,这也是微软推荐的方式。

下面是一段来自于微软模式与实践团队中Unity项目的测试代码:

[TestMethod]
publicvoidResolverWithElementsReturnsEmptyArrayIfThereAreNoElements()
{
    IUnityContainer container=
newUnityContainer();
    
objecto1=newobject();
    
objecto2=newobject();
    
objecto3=newobject();

    container
        .RegisterInstance<
object>("o1", o1)
        .RegisterInstance<
object>("o2", o2);

    BuilderContext context=GetContext(container,
typeof(object));

    ResolvedArrayWithElementsResolverPolicy resolver
        =
newResolvedArrayWithElementsResolverPolicy(typeof(object));

    
object[] results=(object[])resolver.Resolve(context);

    Assert.IsNotNull(results);
    Assert.AreEqual(
0, results.Length);
}

在VSTS中所有的测试操作都可以通过“测试”菜单下的命令完成,如图8所示:

图8

可以新建测试,或者在这里运行测试,或者对整个解决方案运行单元测试。

团队协作

VSTS不仅给开发者带来了强大的代码度量、分析以及单元测试等功能,同时也无一不在体现团队协作的理念,现在我们可以直接在VSTS上安装团队资源管理器(在下一个VSTS版本中团队资源管理器不需要单独安装),团队资源管理器是Team Foundation的客户端,可提供对Team Foundation Server 中包含的功能的访问:

  • 工作项
  • 团队项目
  • 团队文档
  • 报告
  • 团队生成
  • 源代码管理

在安装完团队资源管理器之后,可以直接连接到Team Foundation Server,对资源进行管理,如图9所示:

图9

总结

从开发者视觉来看,Visual Studio Team System不仅给开发者带来了极其强大的代码度量、代码分析以及单元测试等功能,在团队协作也体现的相当完美,团队资源管理器就是一个很好的体现,极大的提高了团队协作的效率。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织