测试驱动开发与重构.ppt

上传人:牧羊曲112 文档编号:6389213 上传时间:2023-10-26 格式:PPT 页数:18 大小:407KB
返回 下载 相关 举报
测试驱动开发与重构.ppt_第1页
第1页 / 共18页
测试驱动开发与重构.ppt_第2页
第2页 / 共18页
测试驱动开发与重构.ppt_第3页
第3页 / 共18页
测试驱动开发与重构.ppt_第4页
第4页 / 共18页
测试驱动开发与重构.ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《测试驱动开发与重构.ppt》由会员分享,可在线阅读,更多相关《测试驱动开发与重构.ppt(18页珍藏版)》请在三一办公上搜索。

1、第21章 测试驱动开发与重构,暨南大学计算机科学系黄战,目标,在案例研究的语境中介绍这两种重要的开发实践。,overview,简介,极限编程(XP)所提倡的重要测试实践是:首先编写测试。它还提倡不断地重构代码以改进质量,包括降低冗余、提高清晰度等。现代工具都支持这两种实践,并且有许多OO开发者信赖这些实践的价值。,测试驱动开发(测试优先开发),测试驱动开发(TDD)迭代和敏捷XP方法提倡的优秀实践。在TDD风格的OO单元测试中,要在测试类之前编写测试代码,并且开发者要为几乎所有的产品代码编写单元测试。TDD的基本规律是编写一小段测试代码,然后再编写一小段产品代码,保证其通过测试,然后再编写更多

2、的测试代码,依此类推。先写测试代码,此时不妨想象被测代码已经写出来了。,测试驱动开发的优点,能够保证编写测试人们往往会忽略单元测试。使程序员获得满足感从而更始终如一地坚持编写测试(我能够编写通过这一测试的代码吗?)有助于澄清接口和行为的细节可证明、可再现、自动的验证改变事物的信心,示例,遵循以下模式完成每个测试方法:1)创建测试固件。2)对其完成某些操作(你所希望测试的某些操作)3)评估结果是否为期望值。我们没有先编写所有的单元测试,而是只编写了一个测试方法,在类中实现该方法并确保通过测试,然后再反复这一过程。,重构,重构是重写或重新构建已有代码的结构化和规律性方法,但不会改变已有代码的外在行

3、为,而是采用一系列少量转换的步骤,并且每一步都结合了重新执行的测试。不断地重构代码也是XP的一个实践,该实践也适用于所有的迭代方法(包括UP)。,重构,重构的本质是:一次实行一小步保留行为的转换(每次转换都称为“重构”)。每次转换后,要重新执行单元测试,以保证重构不会导致错误。重构和TDD具有关系所有的单元测试要支持重构过程。,重构,每次重构是:少量的但是一系列的改变。每次重构都伴随着重新执行的单元测试。会对代码和设计产生主体性的重新构造,同时所有的重构都要保证代码的行为与过去一致。,重构的命名,Fig.21.1,Fig.21.2,public class Playerprivate Piec

4、e piece;private Board board;private Die dice;/public void takeTurn()/roll diceint rollTotal=0;for(int i=0;i dice.length;i+)dicei.roll();rollTotal+=dicei.getFaceValue();Square newLoc=board.getSquare(piece.getLocation(),rollTotal);piece.setLocation(newLoc);/end of class,Fig.21.3,public class Playerpri

5、vate Piece piece;private Board board;private Die dice;/public void takeTurn()/the refactored helper methodint rollTotal=rollDice();Square newLoc=board.getSquare(piece.getLocation(),rollTotal);piece.setLocation(newLoc);private int rollDice()int rollTotal=0;for(int i=0;i dice.length;i+)dicei.roll();ro

6、llTotal+=dicei.getFaceValue();return rollTotal;/end of class,Fig.21.4,/good method name,but the logic of the body is not clearboolean isLeapYear(int year)return(year%400)=0)|(year%4)=0),Fig.21.5,/thats better!boolean isLeapYear(int year)boolean isFourthYear=(year%4)=0);boolean isHundrethYear=(year%100)=0);boolean is4HundrethYear=(year%400)=0);return(is4HundrethYear|(isFourthYear,Fig.21.6,Fig.21.7,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号