图1:Forrester 关于敏捷模式的调查报告
Visual Studio 2010 是微软在2010年4月发布的全新一代的集成开发环境,配合同时发布的Team Foundation Server 2010(TFS——团队服务器) ,为开发团队提供了全面的应用程序生命周期管理(ALM)工具和平台。在2010这个版本中,对于敏捷,或者说Scrum模式的支持是前所未有的。虽然微软的Visual Studio Team System从2005年开始发布的时候就提供了敏捷流程模板(也就是MSF Agile)模板,但是2008版之前的这个敏捷流程模板都是基于MSF(微软解决方案框架)的;这个框架是微软针对自己的研发团队的最佳实践进行抽取总结出来的,与广大敏捷开发社区里面所流行的很多敏捷方法并不是很契合,造成了开发团队在实施的时候有很多不适用的地方。因此,微软在开发2010版本的过程中,大量的听取了敏捷开发社区中的声音,在自己的MSF Agile 5.0的模板中进行很多针对敏捷,更确切的说是Scrum开发模式的改进,使得2010版本中所集成的MSF Agile 5.0的模板非常适合我们来进行Scrum模式的开发组织。当然,微软的产品为了追求通用性,在MSF Agile 5.0的模板中并没有完全采用Scrum模式通行的名称和流程;同时,微软在两周前又发布了一个纯粹的Scrum流程模板以供那些希望完全使用Scrum模式的开发团队使用,当然这个模板现在仍然是Beta版。
我个人认为,开发团队采用哪一个模板并不是最重要的,重要的是我们需要在开发过程中不断地改进过程,并对这个模板进行定制,以便适合我们自己的开发流程。这也是为什么TFS所提供的是一个模板,因为它的目的就是希望我们在这个模板的基础上不断的改进,最终找到适合
自己开发团队的流程。其实这也很符合Scrum模式的理念;简单一点来说,Scrum模式是一种针对复杂项目的流程组织方式的框架,其目标是为了让我们开发出更高质量的软件产品。围绕的这个目标,Scrum模式为我们提供一个团队模型,一系列工具和一个简单的流程。在这样一个框架之下,Scrum模式要求我们不断地改进流程以达到适合团队的最佳状态,这种对改进的要求也是Scrum模式区别于其他开发流程的重要特点之一。
为什么Scrum模式适合软件开发?
Sprint Review的支持更多地体现于Visual Studio 2010的持续集成能力,因为这个会议是对于需求完成情况的审核,如果我们能够保证需求是业务导向的并充分利用Visual Studio 2010的自动化构建和测试集成能力。那么我们就可以保证在这个会议上交付一定的商业价值。具体如何使用Visual Studio 2010来实现在后面做详细介绍。
Retrospective 会议其实非常简单,需要我们团队成员对当前迭代的运作进行总结,但为了使这些信息可以完整的保存以便后续使用,我们可以利用TFS提供的门户站点,定制一个SharePoint的列表分类的记录这些反馈以便团队查询。 Visual Studio 2010对于产品质量的保证
提高产品质量是Visual Studio 2010在设计阶段就确定的重要目标,在2010版本所添加的新特性中,已经想着这个目标形成了一套完整的解决方案。对于Scrum模式来说,交付高质量的产品也同样是其终极目标,而且我们需要在迭代时间很短的情况下仍然保证质量,这就更加需要依赖工具的支持。
自动化构建
之所以把自动化构建列在首位,是因为软件工程发展到今天,自动化构建已经是任何一个想要实现高质量的软件开发团队都必须采用的工程方法;另外,对于Visual Studio 2010系统来说,自动化构建也起着承上启下,贯穿全局的重要地位。当开发软件进入第一个迭代的开发时,所要进行的第一项工作并不是开始实际的编码,而是创建出符合团队需求的构建模板。这样做的目的在于团队在后期的实际开发中可以更加专注于需求的开发,而不必花费额外的时间和精力来集成开发人员的代码;开始阶段的代码量很少,团队可以有更加清晰的思路将迁入策略,架构验证,自动化测试列表设置好并保证构建可以正常运行;如果把这个工作放到迭代后期进行,往往会因为代码中的缺陷和不同开发习惯造成构建模板不能正常运行。
在Visual Studio 2010中,提供了更加便捷的模板创建工具,特别是添加了Gated Check-in 构建的触发方式,可以保证所有嵌入源代码库的代码都是经过验证的。
图12:构建参数配置
TFS的自动化构建可以集成测试列表,图中的上方的红色区域中就是要求构建从项目文件中的测试列表文件中提取单元测试并自动运行;另外一个在Visual Studio 2010种的重要改进就是下方红色区域中的架构验证参数。如果我们的项目文件中包含了架构层次图(Layer Diagram)的话,那么我们就是添加这个参数让构建自动的验证项目的代码是否符合架构设计的要求。
图13:Visual Studio 2010的层次架构图 Layer Diagram
Scrum模式开发中的架构设计给我们提出了非常大的挑战,由于我们采取业务导向的需求定义,开发人员必须从数据层一直实现到表现层;在这个过程中如何保证项目的架构仍然符合需求非常困难;而Visual Studio 2010的架构验证功能则可以帮助我们在每次迁入代码的时候都进行验证,保证违反架构规范的代码不会进入最终的交付产品。
消除无法重现的Bug
无法重现的Bug一直都是困扰开发人员的问题,开发环境,测试环境,生产环境的不同;开发人员,测试人员和最终用户的不同都是造成Bug无法被重现的客观因素。在Visual Studio 2010中,提供了很多强大的调试和测试工具来帮助我们解决这个问题。
协作调试实际上解决多个开发人员在调试过程中的另外一些信息共享问题的方法,上面的IntelliTrace可以共享调试历史数据;但是用过Visual Studio 的开发人员都知道,像“断点”是不能保存到调试数据中,也不会被保存到项目文件中;所以协作调试就提供了开发人员共享断点信息,并且还可以让开发人员在断点信息上添加一些说明,以便帮助其他的开发人员理解问题。
测试管理器和手工测试(Test Manager)
测试管理器是Visual Studio 2010系统中为测试人员特意开发的可以独立运行的测试环境,它完全独立,不依赖于Visual Studio IDE,提供非常强大的测试录制等功能。在前面介绍构建的时候我曾经将单元测试集成到构建中去自动运行,但是单元测试只能针对后台逻辑进行,不能解决UI测试,或者叫黑盒测试问题。微软的测试管理器的出现,就是为解决UI测试的问题。
TFS 2010中专门提供测试用例(Test Case)工作项类型,这个工作项允许测试人员对具体的测试步骤进行设计,并且给出预测的结果;同时,借助测试管理器的录制功能,还可以把测试人员换的操作全部都录制下来,一边后来自动播放;或者生成Coded UI 测试,一旦有了Coded UI测试,我们就可以把这些针对UI的测试也集成到自动化构建中去。
实验室管理是我在Visual Studio 2010系统中见过的最酷的功能,也是微软继承了自己的多项产品为开发团队提供的最完整的测试解决方案。在测试中一个非常难实现的问题,就是对于不同环境的创建,还原和状态的保存。如果同一个用例在不同的环境中运行,结果往往是不同的,而且我们客户的使用环境也往往很复杂,所以就要求我们的测试人员可以搭建很多不同配置的测试环境,以便验证应用程序可以适应他们要求。
微软借助自己的Hyper-V虚拟化平台,为测试团队搭建这样的测试环境提供了非常好的支持,比如:我们可以使用SCVMM和TFS协同工作,当TFS需要测试环境的时候,通过SCVMM部署一台符合要求的虚拟机,并把需要测试应用自动的部署到这个虚拟机中,最终在这个环境中运行指定的测试。这样的测试环境避免了测试人员自己的机器不干净而导致的结果偏差,而且还可以通过环境快照的方式吧虚拟机的某个状态直接交付给开发人员进行检查。
在上面所介绍的这些功能中我们可以看到,实际上我们解决了3个不同测试的不可重现问题:
开发人员本机上的不可重现:IntelliTrace
开发人员和开发人员之间的不可重现:IntelliTrace, tdlog和协作调试
开发和测试环境之间的不可重现:微软测试和实验室管理器,Hyper-V
这些功能在工程技术上为团队保证了高质量,同时配合Scrum模式所推行的时间箱管理,业务导向的需求定义以及流程上的保证,Visual Studio 2010系统和Scrum一起帮助我们创建更好的产品和更好的团队。
结束
我使用Visual Studio Team System是从2005年开始的,最初的目的只是为了满足远程迁入代码的需要;但随着2008和2010版本的发布,对于流程定制和整体性的质量解决方案的需求越高。幸运的是,这个时候公司为我提供了到澳大利亚接受Scrum Master培训的机会,使我可以体系化的了解了Scrum模式的精髓,回来之后就对我们的开发团队进行了一系列的优化。
同时,作为Scrum Master我也同时获得了提供Professional Scrum Developer培训的机会,PSD课程是微软和scrum.org共同开发的一套基于实践的scrum开发人员培训课程,它使用Visual Studio 2010系统作为平台,将参训人员分为不同的团队,进行实际的开发工作,在开发的过程中让学员体会Scrum的妙处和Visual studio 2010的强大。目前我们已经在澳大利亚墨尔本和意大利米兰成功运作了这个课程。作为在亚洲去唯一向中国提供这一课程的提供商,我也希望能够和更多的开发人员分享这些内容。 [注:此文在2010年7月28日发表于InfoQ的SCRUM开发频道,原文地址: http://www.infoq.com/cn/articles/visual-studio-2010-agile-scrum-development]