前段时间和文朗做了BDD课题的研究,现将部分总结报告发出来与大家共享,欢迎指正批评,欢迎交流经验。

  此次研究的课题是BDD,主要涉及两个方面:测试的思想和方法、技术框架。这里做测试思想和方法的总结。

  BDD是什么

  全称:Behaviour Driven Development(行为驱动开发)。

  BDD改变了我对软件测试的认识。先前我对测试的认识是:从大的角度来讲,软件测试是对一个软件系统从功能上进行确认测试和验证测试,从性能上进行压力测试和负载测试,以及对系统的配置测试和兼容性测试等,从类别上又有单元测试,集成测试,回归测试,所有的这些测试工作都有一个目的:交付一套高质量的软件系统。我们软件测试人员的工作是:尽可能早的找出软件缺陷,并确保其得以修复。顺理成章的,在我们的思维中是:我们先拿到系统的既成品,然后开展测试工作,而BDD恰好颠覆了我们的思维。

  回到BDD正题,BDD中有两个大的概念:测试先行和系统设计。

  测试先行:BDD提倡我们在开发者的编码工作开展之前,先写测试用例,然后由测试来推动着开发的工作,具体解释为:在设计如何实现一个功能前,先考虑如何测试这个功能,测试的代码完成后,再编写功能实现代码,并且使得该测试用例通过,即完成了系统的一个功能模块。

  系统设计:在系统功能实现代码编写之前,我们需要先编写测试代码,在我们的测试代码中实现对系统行为的描述,这个描述其实是用一种接近自然语言的方式对系统进行详细的设计,并且使项目相关人员,即使是非技术人员也能很容易看懂。关于系统行为,举例说明:用户在一个特定的条件下对系统做请求,系统在该条件下做什么样的处理,这是系统的一个行为。

  总结一下BDD的概念:在项目之初,由客户、开发人员、测试人员一起通过充分的沟通对系统的行为进行设计,由测试人员以接近自然语言的方式编写可以描述系统行为的测试用例,然后由开发人员编写相关的实现代码,并确保该测试用例通过。循环这个过程实现整个系统的功能。

  BDD的测试思想

  先前在写日报的过程中,以关键字的形式来描述,这里用同样的方式来表达。

  关键字:TDD,代码即文档,系统设计,合作。

  ◆ TDD

  全称:Test Driven Development(测试驱动开发)。

  BDD是基于TDD发展起来的,BDD中测试先行的理念也是来自于TDD,测试驱动开发,由测试来推动着开发的工作,在具体的项目实施中,测试的工作先行,在功能代码编写前,先编写测试代码,再编写功能实现代码,并且使得该测试用例测试通过,循环这个过程,来实现系统的其他功能。在一个项目的开发过程中,针对于每一个阶段,都可用TDD的思想来开展工作。

  BDD对TDD理念进行了扩展。TDD要求用测试来驱动开发,其重点偏向开发,测试用例是在约束开发者,使开发者的目标明确,设计出满足需求的系统。BDD要求在设计测试用例时对系统进行定义,倡导我们在测试用例中用通用语言把系统的行为描述出来,把测试代码作为系统的定义文档,将系统的设计和测试用例结合起来,进而驱动开发工作。

  ◆ 代码即文档

  很多软件项目的失败源于项目团队人员对文档理解的差错。文档用来约束一个项目团队成员,使得大家的目标保持一致,总之:文档很重要。

  我们用需求文档管理需求,但是这些文档本身都因为容易变更,加上团队人员主观上的理有误,终做出不能满足产品需求的产品。

  BDD的思想是:将我们的产品设计写在我们的测试用例中。把传统的产品说明书的内容写在测试用例中,在测试用例中描述软件系统的具体行为,体现着系统的设计,而且这是一份“活”的的文档,因为这是可以运行的测试用例,我们由这些测试用例来驱动开发者的编码工作,开发者必须使这个测试用例通过,才算满足基本工作。假如用例不通过,显然我们的系统存在缺陷,没有满足用户的需求。这样,算是开发人员对文档理解有误,也会满足系统的需求。