测试驱动开发培训讲义_第1页
测试驱动开发培训讲义_第2页
测试驱动开发培训讲义_第3页
测试驱动开发培训讲义_第4页
测试驱动开发培训讲义_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、测试驱动开发1主题测试驱动开发的基本概念测试驱动的基本流程测试驱动的所采用的技术及工具DEMO2测试驱动开发的基本概念为什么会出现测试驱动开发什么是测试驱动测试驱动所要达到的目标3测试驱动蕴含的哲学原理将复杂事情简单化让注意力关注在单一的事物上分解Hardcode重构4为什么会出现TDD程序员当有一个新的开发任务时,往往第一个念头就是如何去实现它呢?“应该是这么做的吧,嗯,差不多就是这样的” 。抓起任务就开始编码,一边写,一边修改和设计。时间这么紧!我还是先实现任务吧,然后再好好测试。还是不工作,时间不多了。不管了,还是先做个实现,以后再来整理代码吧。我已经单步调试了好几次了,遍历了所有可能的

2、分支,应该不会有问题了,提交,今天可以好好休息一下了要不要写单元测试把我刚才单步调试的步骤写下来啊?那样是很好,但工作量很大哦这样的情况要作自动测试太复杂了。还是手工测试一下吧。程序员应该做些有创意的东西,这样才有趣啊测试是QA的事,我为什么要做啊,我做了他们干什么啊5为什么会出现TDD程序员奇怪了,怎么代码跟开发文档上有这么大的差别啊?这段代码究竟想表达什么意思?代码现在越来越乱了,我都不敢修改代码了,修改了这个地方,天晓得会引起多少别的地方出错啊!这个地方的代码怎么好象在那个地方看到过啊?这个程序里怎么会有这么多的重复代码呢?6为什么会出现TDDQA开发部在干什么啊,BUG怎么这么多,他们

3、有没有自己先测试一下啊这下好了,让他们修改了一个BUG,现在一下子来了这么多的BUG他们到底在搞什么啊,有没有从用户的角度考虑啊,我新增一个采购订单,订单项竟然可以输入负数。7有办法可以解决上面的矛盾吗?8XP中的测试Unit Test(基本不提倡,只对特别功能)Functional Test( Acceptance Test )Regression TestNightly TestIntegration TestStress Test所有的测试都应该独立地自动的运行9什么是Function Test10什么是Regression Test“Regression testing is the

4、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的基础是完整的自动单元测试和功

5、能测试。11什么是Nightly TestNightly Test就是每晚自动运行所有的Unit Test和Acceptance Test。Nightly Test是XP中的Continuous Test的一个练习(Practice)。Nightly Test可以准确的反映项目开发的进度和质量。12Nightly TestNightly Test是软件开发中一个保证开发之质量的最有效的方法,也是衡量软件之质量和开发效率的最好的指标。Nightly Test就是每天工作结束,所有的代码都Check in到Source Control后,自动运行所有的Unit Test和Function Test

6、。测试的结果应该自动分发给开发人员和管理层。两个指标数值:测试例子的通过率 单元测试必须是100%通过。Functional Test 应该按计划的通过。单元测试的覆盖率 表明有多少Class被测试过和测试的完善程度。13测试优先的编程在写任何代码之前,先写它的Function Test。“Never write a line of functional code without a broken test case” Kent BeckTest-First Programming是一种测试技术吗?Test-First Programming首先是一种分析方法。它迫使程序员仔细思考要做什么和不

7、要做什么(而不是如何具体的实现)。特别是各种例外的情况,并用程序语言正式的写下来。这就好像在程序员的任务和程序员之间签订了一个清晰的正式合同。Test-First Programming是一种设计方法。Function Test测试的是程序,而不是一个想法。程序员必须清晰的定义程序的验收条件才能写出它的Function Test。而这时程序员是不知道(也不需要知道)里面的具体逻辑是如何实现的。程序员只需要考虑Class的界面和功能(Responsibility)。啊,你在做OO设计了。Test-First Programming是一种质量控制方法( Quality Control )。如何控制

8、质量呢?如何知道我的程序是否运行呢?我会不会漏了什么?运行一下Function Test。Test-First Programming是一种重构和优化的方法。我们总希望自己的代码可以漂亮,运行的效率高,所以我们会不断地去改进。可是如何保证改进和优化后的质量呢?会不会越改越糟?答案还是Function Test。Test-First Programming不是通常意义上的测试技术,它的目的也不是仅仅用来测试你的代码。Test-First Programming是一种面向对象的开发方法。14什么是Test-Driven Design (TDD)Test-Driven Design是一种开发风格,它

9、要求程序员做到:在写产品代码之前,先写它的功能测试(Function Tests )没有功能测试的Class不允许作为产品代码功能测试例子决定了如何写产品代码不断地成功运行所有的功能测试例子不断的完善功能测试例子Test-Driven Design是把需求分析,设计,质量控制量化的过程!15什么是测试驱动测试驱动是一种开发形式:1.首先要编写测试代码2.除非存在相关测试,否则不编写任何的产品代码3.由测试来决定需要编写什么样的代码4.利用IDE,根据测试代码驱动功能代码编译成功,再运行成功5.要求维护一套详尽的测试集16测试驱动所要达到的目标clean code that work 测试驱动所

10、追求的目标就是代码整洁可用,其实现的规则就是:1.只有测试失败时,我们才写代码2.消除重复设计,优化设计结构 3. 测试代码的业务含义明确(DSL)17测试驱动开发的基本流程定义应用程序的要求熟悉应用程序的功能区域,确定要使用的单项功能项或功能要求创建验证要求的测试列表为功能或要求定义接口和类编写测试代码运行测试根据测试生成产品代码重新运行测试,根据测试修改产品代码,直到所有测试都通过整理代码重复上面的步骤18测试驱动开发的基本流程19测试驱动编码时的典型场景根据需求的验收条件编码测试用例根据编译结果(编译不通过),将编译不通过的地方,驱动功能代码的编码,视编译通过在编译全部通过后,运行测试用

11、例,修改测试不通过部分的功能代码(hardcode),使测试代码运行成功将hardcode部分逐个修改为真实的业务逻辑,并运行测试代码通过重构20测试驱动的工具与技术功能测试重构的基本概念,及在测试驱动中的地位重构的时机每日构建代码质量API(Findbug、checkstyle、Jester、代码统计、测试数据统计)模拟对象 (建议只在单元测试中使用)21功能测试什么是功能测试?_ 是黑盒测试,单元测试是白盒测试功能测试是开发者编写的一小段代码,用来验证被检测代码的一个很小的,很明确的功能是否正确功能测试的优点可以明确地验证功能的正确性 ,提高开发速度和质量,加速了代码重构的过程是一种设计行

12、为功能测试可以表现为文档化具有回归性,可以随时随地的快速的运行测试来验证代码的准确性22重构的基本概念什么是重构?重构是一个过程:在不改变软件的外在行为的前提下,对代码做出修改,以改进程序的内部结构。提高其可理解性,降低其修改成本。23重构的好处重构可以改进软件设计重构使软件更加容易理解重构可以帮助找出BUG重构可以提高编程速度24重构的时机存在重复的时候当我们觉察到代码或代码所表达的意图不明确的时候代码有味道的时候(我们的代码可能存在问题的时候)25DEMO: 货币算法26ToDOList当法郎与美元的兑换率为2:1的时候,5美元+10法郎=10美元5美元*2= 10美元27总结(1)TDD

13、的通用过程快速新增一个测试运行所有的测试针对测试不通过的地方进行修改运行所有的测试,并且全部通过重构运行所有的测试,并且全部通过28总结(2)积累代码质量API建立测试与需求的对应关系,需求测试度测试完成时,编译运行的次数、变动代码行数测试运行的时间曲线(间隔)重构的次数,每次重构的代码行数质量控制工具的运行次数、相关参数29TDD防止Over-Engineering在开发中采用TDD,可以有效的避免过度设计和开发。如果程序员不愿为一个Method写测试例子或者认为现在没有必要测试改Method,那这个Method多半是现在不需要的。30TDD,程序员和管理层对程序员来说,通过运行Unit Test和Functional Test,每天下班的时候都可以清楚的知道自己的代码是work的。对管理层来说,通过Nightly Test的结果,每天一早都清楚的知道项目的质量和开发进度。31XP中谁来写TestsDeveloper:Unit TestAcceptance 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论