




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,测试驱动开发,2,主题,测试驱动开发的基本概念 测试驱动的基本流程 测试驱动的所采用的技术及工具 DEMO,3,测试驱动开发的基本概念,为什么会出现测试驱动开发 什么是测试驱动 测试驱动所要达到的目标,4,测试驱动蕴含的哲学原理,将复杂事情简单化 让注意力关注在单一的事物上 分解 Hardcode 重构,5,为什么会出现TDD程序员,当有一个新的开发任务时,往往第一个念头就是如何去实现它呢? “应该是这么做的吧,嗯,差不多就是这样的” 。 抓起任务就开始编码,一边写,一边修改和设计。 时间这么紧!我还是先实现任务吧,然后再好好测试。 还是不工作,时间不多了。不管了,还是先做个实现,以后再来整理代码吧。 我已经单步调试了好几次了,遍历了所有可能的分支,应该不会有问题了,提交,今天可以好好休息一下了 要不要写单元测试把我刚才单步调试的步骤写下来啊?那样是很好,但工作量很大哦 这样的情况要作自动测试太复杂了。还是手工测试一下吧。 程序员应该做些有创意的东西,这样才有趣啊 测试是QA的事,我为什么要做啊,我做了他们干什么啊,6,为什么会出现TDD程序员,奇怪了,怎么代码跟开发文档上有这么大的差别啊? 这段代码究竟想表达什么意思? 代码现在越来越乱了,我都不敢修改代码了,修改了这个地方,天晓得会引起多少别的地方出错啊! 这个地方的代码怎么好象在那个地方看到过啊?这个程序里怎么会有这么多的重复代码呢?,7,为什么会出现TDDQA,开发部在干什么啊,BUG怎么这么多,他们有没有自己先测试一下啊 这下好了,让他们修改了一个BUG,现在一下子来了这么多的BUG 他们到底在搞什么啊,有没有从用户的角度考虑啊,我新增一个采购订单,订单项竟然可以输入负数。,8,有办法可以解决上面的矛盾吗?,9,XP中的测试,Unit Test(基本不提倡,只对特别功能) Functional Test( Acceptance Test ) Regression Test Nightly Test Integration Test Stress Test 所有的测试都应该独立地自动的运行,10,什么是Function Test,11,什么是Regression Test,“Regression testing is the process of validating modified parts of the software and ensuring that no new errors are introduced into previously tested code.” 一句话,Regresstion Test就是要重新测试所有的代码和功能。 Regression Test和Development Test的不同在于Regression Test 需要重用已经建立的所有的测试单元(Unit Test )和功能测试套件(Functional Test)。 Regression Test的基础是完整的自动单元测试和功能测试。,12,什么是Nightly Test,Nightly Test就是每晚自动运行所有的Unit Test和Acceptance Test。 Nightly Test是XP中的Continuous Test的一个练习(Practice)。 Nightly Test可以准确的反映项目开发的进度和质量。,13,Nightly Test,Nightly Test是软件开发中一个保证开发之质量的最有效的方法,也 是衡量软件之质量和开发效率的最好的指标。 Nightly Test就是每天工作结束,所有的代码都Check in到Source Control后,自动运行所有的Unit Test和Function Test。测试的结果 应该自动分发给开发人员和管理层。 两个指标数值: 测试例子的通过率 单元测试必须是100%通过。Functional Test 应该按计划的通过。 单元测试的覆盖率 表明有多少Class被测试过和测试的完善程度。,14,测试优先的编程,在写任何代码之前,先写它的Function Test。 “Never write a line of functional code without a broken test case” Kent Beck Test-First Programming是一种测试技术吗? Test-First Programming首先是一种分析方法。它迫使程序员仔细思考要做什么和不要做什么(而不是如何具体的实现)。特别是各种例外的情况,并用程序语言正式的写下来。这就好像在程序员的任务和程序员之间签订了一个清晰的正式合同。 Test-First Programming是一种设计方法。Function Test测试的是程序,而不是一个想法。程序员必须清晰的定义程序的验收条件才能写出它的Function Test。而这时程序员是不知道(也不需要知道)里面的具体逻辑是如何实现的。程序员只需要考虑Class的界面和功能(Responsibility)。啊,你在做OO设计了。 Test-First Programming是一种质量控制方法( Quality Control )。如何控制质量呢?如何知道我的程序是否运行呢?我会不会漏了什么?运行一下Function Test。 Test-First Programming是一种重构和优化的方法。我们总希望自己的代码可以漂亮,运行的效率高,所以我们会不断地去改进。可是如何保证改进和优化后的质量呢?会不会越改越糟?答案还是Function Test。 Test-First Programming不是通常意义上的测试技术,它的目的也不是仅仅用来测试你的代码。 Test-First Programming是一种面向对象的开发方法。,15,什么是Test-Driven Design (TDD),Test-Driven Design是一种开发风格,它要求程序员做到: 在写产品代码之前,先写它的功能测试(Function Tests ) 没有功能测试的Class不允许作为产品代码 功能测试例子决定了如何写产品代码 不断地成功运行所有的功能测试例子 不断的完善功能测试例子 Test-Driven Design是把需求分析,设计,质量控制量化 的过程!,16,什么是测试驱动,测试驱动是一种开发形式: 1.首先要编写测试代码 2.除非存在相关测试,否则不编写任何的产品代码 3.由测试来决定需要编写什么样的代码 4.利用IDE,根据测试代码驱动功能代码编译成功,再运行成功 5.要求维护一套详尽的测试集,17,测试驱动所要达到的目标,clean code that work 测试驱动所追求的目标就是代码整洁可用,其实现的规则就是: 1.只有测试失败时,我们才写代码 2.消除重复设计,优化设计结构 3. 测试代码的业务含义明确(DSL),18,测试驱动开发的基本流程,定义应用程序的要求 熟悉应用程序的功能区域,确定要使用的单项功能项或功能要求 创建验证要求的测试列表 为功能或要求定义接口和类 编写测试代码 运行测试 根据测试生成产品代码 重新运行测试,根据测试修改产品代码,直到所有测试都通过 整理代码 重复上面的步骤,19,测试驱动开发的基本流程,20,测试驱动编码时的典型场景,根据需求的验收条件编码测试用例 根据编译结果(编译不通过),将编译不通过的地方,驱动功能代码的编码,视编译通过 在编译全部通过后,运行测试用例,修改测试不通过部分的功能代码(hardcode),使测试代码运行成功 将hardcode部分逐个修改为真实的业务逻辑,并运行测试代码通过 重构,21,测试驱动的工具与技术,功能测试 重构的基本概念,及在测试驱动中的地位 重构的时机 每日构建 代码质量API(Findbug、checkstyle、Jester、代码统计、测试数据统计) 模拟对象 (建议只在单元测试中使用),22,功能测试,什么是功能测试? _ 是黑盒测试,单元测试是白盒测试 功能测试是开发者编写的一小段代码,用来验证被检测代码的一个很小的,很明确的功能是否正确 功能测试的优点 可以明确地验证功能的正确性 ,提高开发速度和质量,加速了代码重构的过程 是一种设计行为 功能测试可以表现为文档化 具有回归性,可以随时随地的快速的运行测试来验证代码的准确性,23,重构的基本概念,什么是重构? 重构是一个过程:在不改变软件的外在行为的前提下,对代码做出修改,以改进程序的内部结构。提高其可理解性,降低其修改成本。,24,重构的好处,重构可以改进软件设计 重构使软件更加容易理解 重构可以帮助找出BUG 重构可以提高编程速度,25,重构的时机,存在重复的时候 当我们觉察到代码或代码所表达的意图不明确的时候 代码有味道的时候(我们的代码可能存在问题的时候),26,DEMO: 货币算法,27,ToDOList,当法郎与美元的兑换率为2:1的时候,5美元+10法郎=10美元 5美元*2= 10美元,28,总结(1),TDD的通用过程 快速新增一个测试 运行所有的测试 针对测试不通过的地方进行修改 运行所有的测试,并且全部通过 重构 运行所有的测试,并且全部通过,29,总结(2),积累代码质量API 建立测试与需求的对应关系,需求测试度 测试完成时,编译运行的次数、变动代码行数 测试运行的时间曲线(间隔) 重构的次数,每次重构的代码行数 质量控制工具的运行次数、相关参数,30,TDD防止Over-Engineering,在开发中采用TDD,可以有效的避免过度设计和开发。如果程序员 不愿为一个Method写测试例子或者认为现在没有必要测试改Method, 那这个Method多半是现在不需要的。,31,TDD,程序员和管理层,对程序员来说,通过运行Unit Test和Functional Test,每天下班的时 候都可以清楚的知道自己的代码是work的。 对管理层来说,通过Nightly Test的结果,每天一早都清楚的知道项 目的质量和开发进度。,32,XP中谁来写Tests,Developer: Unit Test Acceptance Test( Functional Test ) Customer: Acceptance Test 用户为每一个User Story写Functional Test。但通常用户并不 具备设计和开发Functional Test的能力,需要程序员的帮助。 可以开
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字支付平台合作协议
- 那年的落日周末约定1000字12篇
- 医保奖励款管理办法
- 休闲专业与管理办法
- 公路段车队管理办法
- 大小额支付管理办法
- 东莞epc管理办法
- 六年级日记嘻嘻哈哈校园生活800字(13篇)
- 借调公务员管理办法
- 大货车闭环管理办法
- 2022贵州磷化(集团)限责任公司招聘(445人)上岸笔试历年难、易错点考题附带参考答案与详解
- PMP近年考试真题汇总(含答案)
- JGT3422012建筑用玻璃与金属护栏
- 厕所施工方案(钢结构)
- 产后出血的处理以及指南解读
- GBZ/T(卫生) 254-2014尿中苯巯基尿酸的高效液相色谱测定方法
- GB/T 5905-2011起重机试验规范和程序
- 生物:13《基因工程的应用》课件2(新人教版选修3)
- GB/T 20840.3-2013互感器第3部分:电磁式电压互感器的补充技术要求
- GB/T 15089-2001机动车辆及挂车分类
- GA 838-2009小型民用爆炸物品储存库安全规范
评论
0/150
提交评论