当前位置:文档之家› 第8章前沿测试技术

第8章前沿测试技术


敏捷测试要求“交付可用产品”而非单纯的“发现缺 陷”
敏捷方法的特征
• 2001年在软件工程界首次出现“敏捷”。 • 敏捷方法最主要的两个特征:轻量和简单
– 包含最少的流程和文档,减少正式性。 – 做眼前能做的事情,而不去预测太远的未来 – 快速、增量的开发
• 开发方法要称之为敏捷,需要具备4个基本特征:
– 工具未必能生成所有满足要求的数据,但最快速 – 编程能生成所有需要的数据,但是可能是最复杂的、最慢的方式 – 应尽量考虑使用一些简单实用的工具,例如DataFactory
敏捷测试的弱点
• 在某些公司,由于各种原因,一个团队的 敏捷程度完全取决于和他们合作的部门或 公司的敏捷程度。 • 敏捷在无法改变周边的人、部门和公司的 做事方式的时候适用性不好。
8.2测试驱动开发(TDD)
• 一个高效的软件开发过程对软件开发人员 来说是至关重要的 • 测试驱动开发(TDD)是极限编程的重要特 点,它以不断的测试推动代码的开发,即 简化了代码,又保证了软件的质量
什么是测试驱动
测试驱动是一种开发形式: 测试驱动是一种开发形式: 1.首先要编写测试代码 首先要编写测试代码 2.除非存在相关测试,否则不编写任何的产 除非存在相关测试, 除非存在相关测试 品代码 3.由测试来决定需要编写什么样的代码 由测试来决定需要编写什么样的代码 4.要求维护一套详尽的测试集 要求维护一套详尽的测试集
TDD测试案例
• 第二个测试: Public void testFibonacci() { AssertEquals(0,Fib(0)); AssertEquals(1,Fib(1)); } Int Fib(int n) { if(n==0) return 0; return 1; }
TDD测试案例
《软件工程与软件测试技术》
韩智
第8章前沿测试技术
• 8.1敏捷测试技术 • 8.2测试驱动开发(TDD)
8.1敏捷测试技术
简而言之,敏捷测试是指在采用敏捷技术的项目 中开展的测试 同时,敏捷测试也意味着测试遵循敏捷的基本原 则,接纳敏捷的核心价值观(交流,简单,反馈, 勇气)
保持简单 以任务为导向,而不以过程或是角色为导向 通过沟通和反馈保证测试能够建立合适的质量标准 尽可能减少测试周期的时间需求
2.基于需求的测试用例设计
• 基于需求的用例场景来设计测试用例是最 直接有效的方法。 • 要把测试用例当成“活”的文档,在设计 测试用例方面应该把握敏捷的“及时响应 变更比遵循计划更有价值”这一原则 • 测试用例的设计也需要迭代,在软件开发 的不同阶段都要回捷测试用例设计
1. 2. 3. 4. 测试用例的粒度 基于需求的测试用例设计 测试用例的评价 测试用例数据生成的自动化
1.测试用例的粒度
• 测试用例可以很简单,也可以很复杂。 • 测试用例写的过于复杂或过于详细,会带来两个 问题:一个是效率问题,另一个是维护成本问题 • 测试用例写的过于简单,则可能失去了测试用例 的意义。 • 如何把握好粒度是测试用例设计的关键 • 测试用例是测试人员需要努力敏捷化的对象,要 想在测试用例的设计方面应用“能工作的软件比 全面的文档更有价值”这一敏捷原则,关键是要 考虑怎样保证设计出来的测试用例能够有效的工 作。
敏捷自动化的原则
• 测试自动化意味着使用工具支持测试项目的各个方面,而 不仅仅是测试执行方面 • 当测试自动化得到指定的程序员(tool smith-工具铁匠) 支持时,会不断的顺利的进行 • “工具铁匠”由测试员领导 • “工具铁匠”收集并应用各种各样的工具来支持测试 • “工具铁匠”帮助实现可测特性并“打造”工具以便利用 这些可测特性 • 组织实现测试自动化是为了完成某个短期的目标 • 避免盲目进行长期的自动化测试任务,而不是基于业务场 景的分析
TDD测试案例
Int Fib(int n) {
if(n==0) return 0; if(n<=2) return 1; return Fib(n-1)+Fib(n-2);
}
TDD的基本过程
1. 明确当前要完成的功能(可以记录成一个 TODO列表) 2. 快速完成针对此功能的测试用例编写 3. 测试代码编译不通过 4. 编写对应的功能代码 5. 测试通过 6. 对代码进行重构,并保证测试通过 7. 循环完成所有功能的开发。
TDD的原则
1.

测试隔离 一顶帽子

不同的代码的测试应该相互隔离。对一块代码的测试只考虑此代码的测试,不要考 虑其实现细节 开发人员应完成对应的工作时应保持注意力集中在当前工作上,保证头上只有一顶 帽子。 需要测试的功能点很多,在任何阶段想添加功能需求问题时,应把相关功能点加到 测试列表中
2. 3.

测试列表 测试驱动

4. 5.

先写断言 可测试性 及时重构 小步前进

要完成某个功能或类,首先应该编写测试代码,考虑其如何使用、如何测试,然后 再对其进行设计、编码 编写测试代码时,应首先编写对功能代码的判断用的断言语句,然后编写相应的辅 助语句
6. 7. 8.
把所有的规模大、复杂性高的工作,分解成小段任务来完成。
– 增量的:小版本,频繁发布 – 协作的:客户和开发人员之间紧密沟通,经常工作在 一起 – 直接的:方法本身是容易学习和修改的 – 适应性强的:能把刚刚发生的改变考虑进来
敏捷方法的特征
• 具备这些基本特征的敏捷方法包括:
– – – – – – – – – Adaptive Software Development (适应性软件开发) Agile Modeling(敏捷建模) Crystal family of methodologies(方法论透彻派) Dynamic systems Development Method(动态系统开 发方法) Extreme Programming(极限编程) Feature Driving Development(特性驱动方法) Internet-Speed Development(互联网速度开发) Pragmatic Programming(实用编程) Scrum(混乱方法)
• 测试用例的质量保证也需求综合使用各种 方法和手段 • 最敏捷的测试用例的检查方法应当属临时 的同行评审,这种方式体现了“个体和交 互比过程和工具更有价值” • 除了同行评审,还应该尽量使顾客参与到 测试用例的设计中来,体现“顾客的协作 比合同谈判更有价值”
4.测试用例数据生成的自动化
• 在测试用例设计方面最有可能实现自动化的,是测试用例 数据生成的自动化。 • 测试用例的输入参数有不同的类型、取值范围,全面覆盖 的值域可能会不可思议的广泛,需要科学的筛选出有代表 性的数据,可利用正交表或成对组合法设计数据。可以利 用一些工具,如TConfig、PICT等来产生这些数据 • 在性能测试方面,除了设计测试用例,还要准备大量的数 据,可以使用多种方式:编程生成、SQL语句生成、利用 工具生成。
TDD测试案例
• 继续添加代码 Public void testFibonacci() { int case[][]={{0,0},{1,1},{2,1},{3,2}} for(int i=0;i<case.Length;i++) AssertEquals(case[i][1],Fib(case[I,0]); } 再测试,失败! 解决!
TDD测试案例
• 针对Fibonacci数列的案例 • 第一个测试: Public void testFibonacci() { AssertEquals(0, Fib(0)); } • Fibonacci数列的第一个数是0,现在测试代码有了,先运 行一下测试,结果失败。因为还没有Fib()这个函数 Int Fib(int n) { return 0; }
用最简单的方法避免重复,用表驱动 Public void testFibonacci() { int case[][]={{0,0},{1,1},{2,1}} for(int i=0;i<case.Length;i++) AssertEquals(case[i][1],Fib(case[I,0]); ]
相关主题