第21部分测试驱动开发与重构.ppt

上传人:本田雅阁 文档编号:2497043 上传时间:2019-04-03 格式:PPT 页数:18 大小:839.01KB
返回 下载 相关 举报
第21部分测试驱动开发与重构.ppt_第1页
第1页 / 共18页
第21部分测试驱动开发与重构.ppt_第2页
第2页 / 共18页
第21部分测试驱动开发与重构.ppt_第3页
第3页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第21部分测试驱动开发与重构.ppt》由会员分享,可在线阅读,更多相关《第21部分测试驱动开发与重构.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

4、 class Player private Piece piece; private Board board; private Die dice; / public void takeTurn() / roll dice int rollTotal = 0; for (int i = 0; i dice.length; i+) dicei.roll(); rollTotal += dicei.getFaceValue(); Square newLoc = board.getSquare(piece.getLocation(), rollTotal); piece.setLocation(new

5、Loc); / end of class,Fig. 21.3,public class Player private Piece piece; private Board board; private Die dice; / public void takeTurn() / the refactored helper method int rollTotal = rollDice(); Square newLoc = board.getSquare(piece.getLocation(), rollTotal); piece.setLocation(newLoc); private int r

6、ollDice() int rollTotal = 0; for (int i = 0; i dice.length; i+) dicei.roll(); rollTotal += dicei.getFaceValue(); return rollTotal; / end of class,Fig. 21.4,/ good method name, but the logic of the body is not clear boolean 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备18001539号-1