技术开发 频道

Visual Studio 2010敏捷测试驱动开发

  2.敏捷之驱动开发

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

  例如,我们通常做的系统分析是在假定需求不变的情况下进行的,这样可以把企业的资源配置到最优的程度,但是企业的需求是变化、不稳定的,那么以变化的需求为基础建立起来的软件系统当然也就不稳定了。需求是项目的根本,既然需求都是不稳定的,那么何以建立起稳定的企业信息系统呢?


图2 软件需求抽象示意图

  采用OOAD开发的方法时的需求不稳定,可分析出这不稳定的东西就是对象。世界都是由对象组成的,而对象都是持久的,例如动物、植物已经有相当长的时间。虽然对象也在变化,动物、植物也在不断进化。但对象在一个相当长的时期内都存在,动植物的存在时间肯定比任何一家企业长久。面向对象开发方法的精髓就是从企业的不稳定需求中分析出企业的稳定对象,以企业对象为基础来组织需求、构架系统。这样得出的系统就会比传统的系统要稳定得多,因为企业的模式一旦变化,只需将稳定的企业对象重新组织就行了。

  在敏捷XP中,采用的是TDD驱动软件的设计和编程实践,即,测试驱动开

  发。笔者负责过很多项目的敏捷实践中,更喜欢UDD(Use Case-Driven Development)比较适合目前的国情。它可根据用户目标,编写软件需求,根据软件需求,编写系统(验收)测试,即,用户目标驱动。利用 UML 对软件的设计进行建模,这部分建模当然是敏捷的(agile)。简单的只需几秒钟可以迅速在人的大脑中完成,复杂的则可以画在纸上、白板上,记录在建模工具生成的电子文档中,当需求稳定后可以迅速转化成软件应用代码,在结合TDD会有很不错的效果,这种理论体系有些像太极原理,需求的变化看似武术中的招式,采用UDD见招破招,无招胜有招,这种客户的需求应变使得UDD更为敏捷。

0
相关文章