使用VS 2010实现敏捷驱动测试开发

来源:互联网 发布:美国陪审团知乎 编辑:程序博客网 时间:2024/05/01 11:36
CSDN首页> 软件研发

[图书连载]使用VS 2010实现敏捷驱动测试开发

发表于2011-02-10 17:07| 901次阅读| 来源CSDN| 0 条评论| 作者陈秋歌

项目管理2010敏捷开发测试敏捷
摘要:本文为电子工业出版社推出的《构筑敏捷的开发团队:微软Visual Studio 2010实战兵法》图书第八章连载之二十一。 在Visual Studio 2010中,敏捷测试驱动开发功能非常强大,微软把Scrum和XP敏捷思想融

本文为电子工业出版社推出的《构筑敏捷的开发团队:微软Visual Studio 2010实战兵法》图书第八章连载之二十一。

在Visual Studio 2010中,敏捷测试驱动开发功能非常强大,微软把Scrum和XP敏捷思想融入到Agile过程框架之中(XP只是敏捷过程框架中的一种)。TFS2010中增强了团队源码版本管理、迭代开发和驱动测试开发模型等,从而给微软.Net开发人员非常大的帮助。

在XP敏捷开发实践中的TDD(Test Driven Development),有一个别称叫 Test-First Programming,要求开发的第一步是根据需求,必须先写单元测试程序,然后再写实现程序,让符合需求的测试通过。我们可以把驱动开发比喻成:北京城铁旁边那些小商贩摊鸡蛋煎饼的过程,他们会从加热的平底锅上把蛋黄慢慢地旋转摊开,这就是以蛋黄为驱动。回到软件编程的过程环节,以什么驱动开发只是以哪个环节为中心或者引导的过程,实际软件工程中驱动方式很多,TDD、UDD、FDD、BDD……过程的选择取决于工程的需要(适应性)。

我们知道Scrum和XP中的需求是以“用户故事”(User Story)的形式描述的,而用户故事实质上就是一种软件“特性”(Feature)。TDD 讲的是如何通过编写“测试”,尤其是单元测试,来驱动软件的设计和编程。在敏捷XP中,是采用TDD驱动软件的设计和编程实践,即测试驱动开发。

Visual Studio 2010测试马甲和单元测试过程,如图1所示。

● IUT——在生产环境中最终交付而开发的软件。

● Test Environment——测试环境。

图1  Visual Studio 2010单元测试过程

测试驱动开发(TDD)的基本过程:

①明确当前要完成的功能。可以记录成一个初始化测试清单(TODO)列表;

②快速完成针对一个功能的测试用例编写;

③测试代码编译通过,但测试用例通不过;

④编写对应的功能代码;

⑤测试通过;

⑥对代码进行重构,并保证测试通过;

⑦循环完成所有功能的开发。

应用&实践:Visual Studio 2010实现敏捷测试驱动开发——图书收藏实例

(1)确定好backlog,进行sprint backlog,把story拆分成更小的故事,再把故事拆分成任务,即图书收藏story索引卡片,在为图书借阅集合初始化测试清单时,要将案例分成任务,以便实现读者个人借阅图书的收藏集合。其中之一是backlog索引卡,如图2所示。

图2  图书收藏Story索引卡

当读者到图书馆进行图书借阅时,会查询图书库所有相关类图书封面并选取其中自己最需要的几本书。这个过程叫做“书签”,图书系统将通过图书管理来支持这个活动。图书借阅集合初始化测试清单如表1所示。

表1  图书借阅夹初始化测试清单

表1中列出了图书借阅夹初始化测试清单,测试重点放在确保我们添加和移除图书收藏夹的时候计数是正确的,以及集合的内容和是否可以恢复集合,在驱动测试时间持续1到2小时的驱动编程实践中完成这个测试清单,并确保这个测试清单不需要再次分解这个任务,以实现这个目标。

(2)实现第一个测试

打开Microsoft Visual Studio 2010,创建一个C#测试项目,项目名称为LocalBookCollectionsTests。清除原理项目方案自动生成的unit的C#测试文件,建立一个新的名称为CollectionsTests单元测试类,如图3所示。

图3  创建一个单元测试unit类

先用一些函数代码替换第一个测试中的语句,这样做驱动了产品代码Collections类的创建,并运行其Count属性。在CollectionsTests.cs类添加代码:

  1. /// <summary> 
  2.       /// 创建一个测试清单 
  3.       /// </summary> 
  4.       [TestMethod] 
  5.       public void EmptyCollectionsCountShouldBeZero() 
  6.       { 
  7.           Collctions collctions = new Collctions(); 
  8.           Assert.AreEqual(0, collctions.Count); 
  9.       } 

重新编译生成这个解决方案,你将看到一个错误,因为没有为Collections类定义Count。创建Collections类,填入如下代码:

  1. /// <summary> 
  2.         /// 定义Count 
  3.         /// </summary> 
  4.         private int count; 
  5.         public int Count 
  6.         { 
  7.             get 
  8.             { 
  9.                 return count; 
  10.             } 
  11.         } 

运行这个测试,输出EmptyCollectionsCountShouldBeZero()单元测试成功界面,如图4所示。

图4  EmptyCollectionsCountShouldBeZero单元测试成功

(3)搁置你的测试清单代码

为你的此次操作添加一个版本控制搁置,这样就可以在将来常常返回到这个点(版本控制),在VS 2010菜单打开View|Other Windows|Pending Changes,如图5所示。

图5  Visual Studio 2010的View|Other Windows菜单

通常由于你并不想在所有相关单元测试通过之前,与团队的其他成员共享文件,因此保持VS 2010存储库中搁置自己的文件版本,而不是将你的变更点签入到团队代码库的分支中。完成所有单元测试后,可以直接单击Check In 按钮将此代码加入到存储库中。Pending Changes搁置窗口,如图6所示。

图6  Pending Changes搁置窗口

Unshelve按钮可以进行版本回卷。单击Shelve按钮进行版本搁置,建立一个Test the Should Be Zero的版本搁置,如图7所示。

图7  创建版本搁置

(4)修复一个失败的测试和重构

现在我们处理清单上另外几个简单单元测试。它们在Collections对象中添加和删除各种Collection项,并验证Count熟悉返回正确的值。

首先在CollectionsTests.cs类中添加如下代码:

  1. /// <summary> 
  2.         /// 修复一个失败的测试 
  3.         /// </summary> 
  4.         [TestMethod] 
  5.         public void EmptyCollctionsCountShouldIsOne() 
  6.         { 
  7.             Collections collections = new Collections(); 
  8.             collections.Add(new Collection("Label", new Uri("db://book0001"))); 
  9.             Assert.AreEqual(1, collections.Count); 
  10.         } 

生成这个项目(生成|生成项目),生成报错是因为Collection类缺少参数,如图8所示。

图8  缺少参数报错界面

添加一个unit新类Collection.cs,加入以下代码:

  1. private string label; 
  2.         private Uri uri; 
  3.         public Collection(string label, Uri uri) 
  4.         { 
  5.             this.label = label; 
  6.             this.uri = uri; 
  7.         } 
  8.         public string Label 
  9.         { 
  10.             get 
  11.             { 
  12.                 return label; 
  13.             } 
  14.         } 
  15.         public Uri Uri 
  16.         { 
  17.             get 
  18.             { 
  19.                 return uri; 
  20.             } 
  21.         } 

替换Collections.Add()方法,修改Count属性返回count变量值。

  1. /// <summary> 
  2.        /// 增加一个Count实例变量 
  3.        /// </summary> 
  4.        /// <param name="collction"></param> 
  5.        public void Add(Collection collction) 
  6.        { 
  7.            count++; 
  8.        } 

再次生成这个项目,输出结果显示成功,如图9所示。

图9  输出单元测试成功结果

再次重复上面操作,创建一个版本搁置。

(5)构建验证测试(BVT)

生成确认测试(BVT)是通过产生测试列表来检查软件,它通常作为一个生成任务在团队生成结束的时候执行。当编写好一个unit测试时,你可以加入到BVT中,确保任何时候在生存库环境下运行集成生成,相同的测试程序都可以依次执行。这样,由VS 2010的单元测试(Unit test)→每日构建→集成构建验证(BVT),形成保证软件质量安全的网。(有关BVT的内容请参考《网络实验室的配置与管理》)

我们可以把上面的EmptyCollctionsCountShouldBeZero()和EmptyCollctionsCountShouldIsOne()测试方法创建生成测试。打开Microsoft Visual Studio 2010菜单,单击Test|Windows,如图10所示。

图10  Test|Windows菜单

单击菜单项Test|Windows|Test List Editor,打开Test List Editor界面,如图11所示。

图11  Test List Editor界面

如图8-137所示,单击界面“here”或者菜单Test|Create New Test List,创建一个新的测试列表,测试列表名称为BookCollectionBVT,如图12所示。

图12  创建一个新的BVT

同理,打开菜单项Test|Windows|Test View,打开Test View浏览框,从而显示驱动单元测试程序,从Test View把EmptyCollctionsCountShouldBeZero和EmptyCollctionsCountShouldIsOne拖放到Test List Editor面板中,为了确保这个测试是作为集成测试的一部分运行,单击BookCollectionBVT中所要测试程序的复选框。

单击Run Checked Tests按钮,运行这个测试程序,如图13所示。

图13  运行这个测试程序

运行测试结果界面,如图14所示。

图14  运行测试结果界面

这样,安装Microsoft Visual Studio 2010的团队成员,在每个人的本机开发环境上运行自己的单元测试之后,就可以添加并测试完成余下的那些索引卡下分解出来的测试列表单元测试程序清单,加入到BookCollectionBVT集成测试集合之中。

通过VS 2010的Unit test和集成测试的功能特点,结合MSF for Agile Software Development V5.0中的Scrum和XP敏捷过程框架,使从事微软.NET技术相关工作的人拥有了一把利剑,并且可以更好地协助编程人员开发出高质量的软件产品。

Scrum专注于聚焦找到一个最小的迭代式项目管理框架,注重敏捷的计划、跟踪和管理,而没有把它强行绑定在某一种具体的工程技术和做法之上,这也是它非常聪明的地方。既然没有明确限定和约束,那么就代表着开放,可以适用于不同类型和不同环境的项目。

提示:顺序测试(Ordered Test)

VS 2010版本中,微软把Web Test改为Web Performance Test,可以在VS 2010解决方案资源管理器,打开一个测试项目,右键菜单|Add|Ordered Test或者在VS 2010 IDE菜单Test|New Tes|Ordered Test进行创建。

顺序测试可以对单元、Web、load等测试集,执行顺序手动排序,可以是BVT中的一部分。顺序测试是为了在一个指定的顺序(有序)运行集成测试。在测试管理和测试视图窗口显示为单一测试,其结果显示在单行的测试结果窗口,可以获取每个被测试的一部分并有序运行测试单独的结果,如图15所示。

原创粉丝点击