下面继续本书第四部分的读书笔记部分
第四部分 开发中的调试和测试思想
第8章 调试;第9章 敏捷开发模式下的测试
第9章 敏捷开发模式下的测试
随着市场竞争的日趋激烈,今天的商业项目需要不断缩短发布时间,同时还要不断地为客户提供高质量的产品。而老一套的开发模式很难适应当今的竞争环境,所以有一些开发人员就开始讨论轻量化和快速的开发方法。这就是著名的《敏捷软件开发宣言》,这份宣言没有僵化的开发方法和复杂的技术结构,而更像是一份针对客户和开发个体的箴言警局。
1、敏捷开发的特征
从敏捷软件开发宣言可以发现敏捷开发的一些特征:
(1)客户参与
围绕以客户需求为导向的开发过程,需要让客户尽早参与到开发周期中,并一直到其结束;如果没有客户参与,敏捷开发等同失败,这时可以选择传统的开发流程。
(2)迭代开发
敏捷开发提倡迭代式和增量式的开发模式。
(3)测试驱动
测试在其中发挥重要作用,依赖单元测试和验收测试(极限编程)。
2、敏捷测试的特征
敏捷测试要求每个人参与到测试计划的设计、实现及执行中去。客户通过定义用例集以及程序属性参与到定义验收测试的设计中来。开发者和测试者打造可以进行功能自动化的测试组件。敏捷测试要求每个人参与,需要有大量的沟通与协作工作。
(1)客户参与
在客户参与阶段,客户需要参与到开发周期来定义验收测试的设计。
(2)自动化测试
开发人员需要在软件代码实现之前,创建单元测试。在软件代码实现后,有任何的代码的递增,都需要进行单元测试。所以需要自动化的单元测试。
(3)项目跟进
测试者不仅是把问题找出来交给开发人员修复,他们的任务是通过持续的测试反馈推动项目前进,并帮助开发这修复bug、改变需求及其他一般质量的提升。
3、极限编程与测试
极限编程是一种新的软件开发方法,可以很好的支持像Java、Visual Basic及C#等面向对象编程语言的应用。面向对象的开发语言虽然加快了程序的开发,但其质量并未得到保证。
XP(极限编程)开发方法的目的是短时间内开发高质量的程序。XP除了需要客户参与之外,还高度依赖模块的单元和验收测试,也就是说每次代码的递增和修改,开发人员都必须进行单元测试,以确保代码库满足其规格说明的要求。
3.1 极限编程基础
XP是一种使开发人员快速生产高质量代码的软件开发过程。如果将“质量”定义为:代码库对其设计的规格以及客户的满意程度。
XP的关注点是:
-
- 实现简单的设计。
- 开发人员与客户的沟通。
- 不断地测试代码库。
- 重构以适应规格说明的变更。
- 寻求用户的反馈。
XP更倾向于中小规模的软件开发,因为此类软件的规格说明变更非常频繁,同时还需要同客户进行实时的沟通。
XP同传统的开发过程相比有一下几点不同:
(1)避免大规模项目综合症
综合症:开始编码之前客户和编程小组碰头,设计软件的每个细节。XP的策划阶段重点在于收集应用程序的一般性需求,而非在所有小细节上。
(2)避免编写不需要的功能
将精力集中在必需的功能上,有助于短时间内开发高质量的软件。
(3)将主要精力集中在测试上
传统软件开发模型会建议首先编码,然后生成测试接口。但XP方法,先生成单元测试用例,然后才编写代码通过测试。
XP开发模型有12个核心实践,可总结归纳为4个概念
1.聆听客户和其他程序员的谈话
2.与客户合作,开发应用程序的规格说明和测试用例
3.结对编程
4.反复测试代码库
下表是极限编程的12个核心实践
实践 | 注释 |
1.计划与需求分析 |
|
2.小规模、递增地发布 | 努力添加细微的、实在的、可增值的特征,频繁发布新版本 |
3.系统隐喻 | 编程小组确认隐喻,便于建立命名规则和程序流程 |
4.简要设计 | 实现最简单的设计,是代码通过单元测试。假设变更即将发生,因此不要在设计上花太多时间,只是不停地实现 |
5.连续测试 | 编写模块之前生成单元测试,模块只有通过单元测试后才算完成 |
6.重构 | 清理和调整代码库。单元测试有助于不破坏程序功能,应在任何重构之后重新进行所有单元测试 |
7.结对编程 | 两位程序员协同工作,在同一台机器开发代码库。这样可以对代码进行实时检查,提高发现缺陷的概率和改正的几率 |
8.代码的集体所有权 | 所有代码归全体程序员所有,没有哪一个程序员只致力于开发某一个代码库 |
9.持续集成 | 每天的程序变更,需要通过单元测试后才能集成到代码库中 |
10.每周40小时工作 | 不允许加班。如果每周都全力工作了40小时,就不需要加班。在重大发布前的一星期例外 |
11.客户在现场 | 开发人员和编程小组可以随时接触用户,这样可以快速、准确地解决问题,是开发不至于中断 |
12.按标准编码 | 所有代码看上去必须一致。设计一个系统隐喻有助于满足改原则 |
重要的核心实践:XP计划和XP测试。
(1)XP计划
XP计划的重点是确定客户的应用需求,然后设计使用场景(或用例故事,User Story)来满足客户的应用需求。用户也可以在验收测试时使用这些场景。同时用户的深入参与,也可以获得对程序的拥有感和信心。
(2)XP测试
XP测试的关键是进行连续的测试。连续测试包括:单元测试和验收测试,但是单元测试占据主要部分。持续的测试也可以增强编程小组对代码库的信心。
3.2 极限测试
极限测试主要包括:单元测试和验收测试。
(2)单元测试
1.所有代码模块在编码开始前必须设计好单元测试用例;
2.产品在发布之前必须通过单元测试。
因此需要自动化的软件测试套件来进行单元测试,这些测试套件可以通过编写测试脚本,执行全部或其中的一部分。此外测试套件可以生成报告,并对程序中出现的缺陷进行分类。
(2)验收测试
验收测试是由客户而不是开发人员来执行的。验收测试可以是自动化或非自动化。验收测试也是回归测试的一种形式。
参考文献:
[1]敏捷软件开发宣言.http://agilemanifesto.org/iso/zhchs/manifesto.html