使用Visual Studio 2010进行敏捷测试下的测试驱动开发

发表于:2010-03-18来源:作者:点击数: 标签:开发VSTS驱动StudioVisual
使用Visual Studio 2010进行敏捷测试下的测试驱动开发,完善 软件测试 工作 在微软Visual Studio 2010 Ultimate Beta2版本中, MSF for Agile Software Development 5.0过程框架,是以Scrum模型为基础导向扩展,并且结合了 VSTS 2010工具的众多测试功能特性,
使用Visual Studio 2010进行敏捷测试下的测试驱动开发,完善软件测试工作

  在微软Visual Studio 2010 Ultimate Beta2版本中,MSF for Agile Software Development 5.0过程框架,是以Scrum模型为基础导向扩展,并且结合了VSTS2010工具的众多测试功能特性,为更多的从事微软.NET技术相关的开发人员以实现高质量的软件产品。

  在本文中,笔者将介绍Visual Studio 2010 Ultimate Beta2版本中的MSF for Agile的Scrum和XP敏捷思想与VSTS2010强大的测试功能,通过对这些内容的阐述,让读者了解在VSTS2010中的敏捷测试驱动开发方法,以便于.NET开发人员能把敏捷驱动开发为导向的技术,应用在自己的项目和团队中,从而构筑出敏捷的开发团队。

  在前几篇的文章中提到过的Scrum,相信读者们都应该已经不陌生了,它的核心在于迭代,并且以每个sprint时间段的周期进行产品功能迭代。团队首先浏览开发需求,考虑可用技术,并对自身技术及能力做出评估,所有实践就是围绕着一个迭代和增量的过程来展开,而在每个迭代内部,可以使用测试驱动和持续集成的XP(eXtreme Programming,极限编程)工程实践。

  XP,是最轻量级的开发流程,其最主要的精神是“在客户有系统需求时,给予及时满意的可执行程序”,所以最适合需求快速变动的方案。Scrum与XP所不同的是,Scrum只是一个敏捷过程框架,它并没有提供核心的价值观与指导原则,也缺乏具体的实践方法,例如,测试驱动开发、结队编程等。Scrum仅仅规定了实施的基本流程与检查表,它是一个开放的管理框架,重心在于项目管理,而不是指导团队成员如何进行开发。这既是Scrum的优点,因为它很灵活,能够适应大多数场景,也可以兼容并包地引入其他方法学所提倡的实践;同时也是Scrum存在的固有缺陷,使得它难以被实践。如果没有一位优秀的Scrum Master,而团队成员又缺乏自我组织和管理的能力,就会让开发过程变得一团糟,团队成员将会无所适从。

  在团队中开发人员随时可以与客户进行有效沟通,撰写user stories以确认需求。简易快速的系统设计,撰写独立的验证程序以解决特殊困难的问题并,找出演算法即可丢弃验证程式。规划多次小型阶段的方案计划,并且以最快得速度完成每一阶段的程序交付客户,客户负责Aclearcase/" target="_blank" >cceptance tests;Coding前必须完成Unit Test与Acceptance tests程序,所有模组整合前都须经过Unit Tests;开发人员必须快速回应Bug和需求变更;要求二人一组使用一台电脑设计程序,当一人coding时,另一人负责思考与设计(结对编程);程序必须符合程序规范,并常做程序的重整(Refactoring)。

  在Agile开发实践方面,Scrum可以借鉴XP提倡的结队编程以及测试驱动开发实现编码,通过重构对编码进行调整以适应需求的变化,Scrum为体,XP为用。XP开发流程的基本步骤,如图1所示。

Visual Studio 2010敏捷测试驱动开发 - mylovejsj - 宋孝先的<STRONG><A href=博客" src="http://www.ltesting.net/uploads/2010/03/54376_201003180958451QdP7.jpg" width="217" border="1">

  图1 XP开发流程的基本步骤

  测试驱动开发意味着你要先写一个自动测试,然后编写恰好够用的代码,让它通过这个测试,接着对代码进行重构,主要是提高它的可读性和消除重复,这将会对Agile Team整体素质要求较高。

  时至今日,Agile Process的精神已经成为共识,但是没有一种固定的流程可以重复使用在不同的方案上,而且不管是RUP、XP、SCRUM、或其他的开发流程都允许相当大的弹性,我们必须按方案性质的不同,调整或混合出适合的开发流程,并允许团队在进行中做必要的弹性修改,才能够达成目标。

  在XP开发实践中的TDD(Test Driven Development),它有一个别称叫 Test-First Programming,要求开发的第一步是根据需求,必须先写单元测试程序,然后再写实现程序让符合需求的测试通过。我们知道XP中的需求是以“用户故事”(User Story)的形式描述的,而用户故事实质上就是一种软件“特性”(Feature)。TDD 讲的是如何通过编写“测试”,尤其是单元测试,来驱动软件的设计和编程。

  系统测试从哪里来?来自系统需求。系统需求从哪里来?来自用户目标,TDD则也不例外。在需求不稳定的情况下,这样的TDD会有什么问题?会不会带来许多冗余的工作?答案是肯定的,这样必然会带来单元测试的不稳定,这就需要敏捷开发人员有相当强的抽象能力,抽象、界定出主要相对稳定需求就可以实施TDD。

  敏捷团队可以采用在软件工程学里有比较成熟的OOAD(Object Orient Analysis & Design,面向对象的分析和设计)软件开发方法(参见笔者著作《我也能做CTO之程序员职业规划》的高级程序员技术能力),在用户需求层面找到,并抽象出相对不变的需求。OOAD科学分析法体现的是‘现实事实的抽象理解能力’,以业务为中心来分析解决问题,不涉及求解方案。分析阶段所做的主要工作是理解问题和需求构模,将现实世界中的问题映射到问题域,从而稳定主要需求。OOAD包括‘设计模式能力’,反映计算机世界来体现现实世界。

  分析阶段主要是明确用户的功能需求,满足用户所需的系统部件及其结构。设计阶段则主要是确定实现用户需求的方法,即怎样做才能满足用户需求,并构造出系统的实现蓝图。

  OOAD方法要求在设计中要映射现实世界中(指问题域,如图2所示)的对象和实体,如程序员、汽车、项目实施人员等。这就需要在设计中尽可能地接近现实世界,以最自然的方式表述实体。所以,面向对象技术的优点就是能够构建与现实世界相对应的问题模型(桥梁),并保持它们的结构关系和行为模式。

原文转自:http://www.ltesting.net