敏捷开发与测试

啥是敏捷,敏捷是啥?

与“敏捷开发”的初次接触

开始接触到“敏捷”这个概念,是在公司实习的时候,因为所在项目组实行的是敏捷开发。后来又读了几本关于敏捷测试的书籍(软件测试的艺术第三版—Chapter9),有了更深入的理解。所以本文主要是博主的实习经历总结和读书笔记。


接下来我将从3个方面:What?(什么是敏捷开发)&Why(为什么要实行敏捷开发)&How(如何实施)来谈谈我对敏捷软件开发模式的理解。

What?

敏捷开发

简单来说,敏捷开发是一个以用户为中心、客户需求为导向的开发过程。强调客户合作、响应需求变化。是一种迭代式、增量式的开发模式。主要有以下特点:

  • 依赖客户参与
  • 测试驱动开发(TDD)
  • 开发周期短

敏捷测试

对应敏捷开发模式,敏捷测试要求每个人都参与到测试过程中,所以需要团队人员之间进行大量的沟通与协作。

  • 客户:定义用例和程序属性参与验收测试
  • 开发和测试:共同打造可以进行功能自动化的测试配件

与传统测试过程相比,敏捷测试主要有以下特征:

  • 测试并不是一个独立的阶段,而是和开发过程紧密联系并驱动开发(TDD)。
  • 开发者先创建单元测试用例(失败验证测试),然后实现软件单元代码。
  • 敏捷测试依赖于自动化测试
  • 测试者要通过持续的测试反馈推动项目前行,并帮助开发者修复bug

Why?

与传统软件开发模式相比,敏捷开发把客户的参与作为关键环节。这样引入了灵活性,提高客户满意度。

如今的客户总是需要能立即发布的高质量应用产品,使得传统开发模式不能适应这种激烈的市场竞争环境。所以大多数企业更青睐像敏捷开发一般,轻量化、快速的开发方法。


How?

事实上,敏捷开发方法有很多种,比如:功能驱动开发(FDD)、开放统一过程等等。但最流行的是极限编程(XP)开发方法和Scrum(进度跟踪)项目管理方法。

XP是一种迭代式、增量式的开发模式,非常强调单元测试和验收测试,是现在最著名的敏捷方法。
Scrum是一种迭代式、增量式的项目管理方法,适用于所有的敏捷方法,用来度量开发速度和进度。两者相辅相成,形成了现今最流行的敏捷开发模式。

XP编程

面向对象的编程语言如Java/C#,都含有全功能的API,所以可以利用其迅速实现大型复杂应用。但正因如此,应用程序的质量经常得不到保证。

XP编程的目的就是短时间开发高质量的应用程序。所以,XP方法将主要精力集中在测试上,在产品设计阶段之后,必须首先生成单元测试用例,然后才编写代码通过测试。

XP开发模型用12个核心实践来驱动该过程:

  • NO.1:需求分析(开发、客户、产品均参与)
  • NO.2:小规模、递增发布(增加实在/可增值的新功能,频繁发布新版本)
  • NO.3:系统隐喻(编程小组确认开发规则)
  • NO.4:简要设计(实现简要设计,通过单元测试,不需重复设计,只要不停实现)
  • NO.5:连续测试(编写模块之前先生成单元测试用例,模块在通过单元测试后才算完成,程序在通过所有单元测试和验收测试后才算结束)
  • NO.6:重构(清理调整代码库,任何重构之后需重新进行所有单元测试)
  • NO.7:结对编程(两位程序员在同一台机器协同开发代码库,便于对代码实时检查,提高缺陷发生纠正率)
  • NO.8:代码的集体所有权(所有代码归全体程序员所有,不存在某一个程序员只开发某一个代码库)
  • NO.9:持续集成(变更后的代码在通过单元测试之后将其集成到代码库中)
  • NO.10:每周工作40小时(不允许加班,如果每周都全力工作了40个小时,就不需要加班,在版本发布的前一周例外)
  • NO.11:客户在现场(编程小组可以随时与客户沟通)
  • NO.12:按标准编码(所有的代码需要满足编程小组设计的系统隐喻)

XP测试

为满足XP方法的流程和思想,XP测试强调连续测试。主要由两种类型的测试组成:单元测试验收测试

XP单元测试

单元测试是XP测试采用的主要测试方法,具有两条规则:

1.所有的代码模块在编码开始前必须设计好单元测试用例(最主要的优点在于可以更好理解程序需求,排除混淆)

2.产品发布之前所有的代码模块必须通过单元测试

为了迎合项目进度,单元测试通常要用自动化测试套件来减轻单元测试负担,测试套件可以生成测试报告并对程序中出现的缺陷进行分类,帮助修复bug。

XP验收测试

验收测试是判断应用程序是否满足功能性和易用性及其他需求,在设计阶段,开发人员和客户设计验收测试,由客户执行。

验收测试需注意以下几点:

  • 同单元测试一样,验收测试也可是自动化的。测试内容为计算/数据等,可用自动化测试;当测试内容为界面布局和颜色等,测试应该是非自动化的。
  • 与单元测试相同,验收测试过程中发现多个bug时,应对其进行优先级排序,每次bug修正后都要重新执行验收测试。所以验收测试也算是一种回归测试。

一个完整XP项目的运作流程

下表给出了一个完整XP项目应进行的流程:

步骤 内容
Step1 程序员与客户进行产品需求分析会议,决定产品使用场景
Step2 编程小组进行内部会议,将需求分解为独立的任务,并估计每个任务所需要的时间(StoryPoint)
Step3 程序员向客户提交任务清单,并要求客户对任务清单进行优先级排序
Step4 编程小组根据程序员具备的能力,将任务分配给对应结对程序员
Step5 每对程序员按照程序需求和规格说明,编写相应任务的单元测试用例
Step6 每对程序员编写完成通过其单元测试用例的任务代码,期间不断对代码进行修改和重测,并对代码库进行整合和集成
Step7 编程小组发布应用程序的一个预览版本,由客户进行验收测试,并通过修改缺陷不断进行回归测试
Step8 程序员在验收测试成功的基础上发布产品版本

其他工作:程序员根据最新经验更新对客户需求的时间估计方式。

敏捷开发学习网站

Scrum中文网
Scrum指南