“企业实施敏捷:你想止步于二十四式简易太极拳,还是想深入练内功?” “测试驱动开发,你听说过但是没尝试过?你尝试过但是觉得没用?你觉得有用但是工作中用不起来?”
自2003年Kent Beck发明了测试驱动开发方法(Test-Driven Development,简称TDD)以来,包括谷歌、苹果、微软在内的多家软件开发厂商和组织在各种项目中应用TDD:从Web开发,到企业应用,到嵌入式iPhone和Android开发;语言涵盖 C, C++, Java, C#, Python, Ruby, Php, Objective-C, JavaScript 等等。
大量工程实践和研究表明(http://en.wikipedia.org/wiki/Test-driven_development):采用TDD的开发者更少的使用Debugger,更能保持“小步快跑”的开发节奏,对产品质量的信心更大;同时,虽然TDD要求编写更多的代码,但是开发时间往往更短,大量的单元测试使产品代码的质量更高、设计的可测试性更强,更易实现高内聚低耦合的设计,从而加入新需求和缺陷排查所需的时间更短,项目成本更低。
你也想了解TDD是什么?TDD如何做?TDD能不能用在自己项目中?TDD对开发者有什么样的要求和好处?
根据我们开发、培训和咨询经验,TDD几乎是无法自学的!
TDD是敏捷开发实践中最重要的一招,同时也是最难的一招。为了掌握TDD,除了了解基本的节奏、步骤和原则,还需要大量的练习和观摩,而一个良好的有教师代领和点拨的开端对学习和掌握TDD有非常大的帮助和作用。
本次培训为期2天,采用结对编程的方式组织学员,以“练习-演示-讨论-讲解”为一个单元,由浅入深、循序渐进的方式,每天进行20个左右学习单元,让学员在丰富、密集的练习和互动中建立对TDD的正确认知、学习TDD正确的步骤和方法,在教师的引导和小组讨论中,自己体验、思考、理解、总结TDD对软件的质量、成本、进度的益处。
测试驱动开发基础
• 介绍
• 什么是单元测试及TDD?
• TDD的好处
• 单元测试
• xUnit 的原理
• 有选择的编写测试
• 给测试命名
• 满意路径的测试
• 其它路径的测试• TDD
• 为什么编写失败测试?
• TDD 的心跳 – 红, 绿, 重构
• 演进性设计
• 单一责任原则
• 依赖性注入
• 持续集成 在真实项目中使用TDD
• 重构的基础
• 技术债务带来的成本
• “代码味道”简介
• 使用集成开发环境(IDE)中的重构功能
• 应用TDD
• 关于伪码(fakes), 模拟数据(mocks) 及桩( stubs)
• 模拟框架
• 如何测试GUI
• 测试遗留代码
实战演练
单元1: 如何设计一个类
[讲座]类设计:从一个到两个,从多个到包 调整你对面向对象编程的理解
[练习]你认为多态、继承、封装在面向对象编程中应用的比例各是多少?
[讲座]面向对象编程的演变
[讨论]你如何将面向对象编程要素应用到当前项目中的? 用职责描述类功能
[练习]为指定类写职责,并实现它(TDD)
[练习]为它的指定子类写职责,并实现它(TDD)
[讲座]如何定义一个职责,用职责来 指导方法定义,定义职责的模板
[讨论]如何通过单元测试驱动职责的实现
[讲座]职责和函数命名
[讨论]JDK API的函数命名
[讲座]职责和SRP – Single Responsibility Principle 单一责任原则
结对编程
[讨论]如何成功地结对编程
[练习]切换结对,尝试不同的方法结对(乒乓,球和板,等等)
DRY原则
[讨论]重复:软件的“熵”
[练习]设计练习:概率计算
[讨论]如何消灭一个类中的重复
[讲座]DRY:Don’t Repeat Yourself 不要重复你自己
[练习]提高关于概率的设计(利用重构)
[讨论]都消灭了那些重复
[讲座]将单元测试用作回归测试
简单设计
[讲座]什么是简单设计?
[讨论]你是怎么理解简单设计的?
[讨论]你是否曾经应用/破坏过简单设计原则?
单元2:如何重构一个类
重构的循环
[讲座]什么是重构
[讲座]Smells就是问题
[讲座]重构的循环
[讲座]什么时候算做完了?
[讲座]在一个重构之内
[练习]小步前进 – 识别重构常用的步骤
[练习]简单设计 – 如何判断简单,你是怎么理解的
已知的Smells
[重构]Extract Method / Class / Subclass / Introduce
Rename Method
Introduce Assertion
Duplicate Observer Data
Replace Parameter with Method
Preserve Whole Object
Introduce Parameter Object
[讲座&练习]注释
[讲座&练习]长方法
[讲座&练习]大类
[讲座&练习]长参数列表
[练习]测验:Smells和重构
[讲座]Smells和重构
命名
[重构]
[讲座&练习]在名字中嵌入了类型
[讲座&练习]无法达意的名字
[讲座&练习]不一致的名字
不必要的复杂性
[重构]
[讲座&练习]死代码
[讲座&练习]投机未来的可能性
[讲座]成对出现的重构
重复
[重构]
[讲座&练习]神奇数字
[讲座&练习]重复的代码
[讲座&练习]可互换的类有不同的接口
条件逻辑
[重构]
[讲座&练习]空值检测
[讲座&练习]复杂的布尔表达式
[讲座&练习]特殊处理的Case
[讲座&练习]模拟的继承
单元3: 如何设计类之间的关系
组合 – 正方向观察:把变量行为委托到其它对象
[练习]设计测验:增强现有类的能力
[讨论]类之间的合作
[讲座]面向对象原则:将变化封装起来
[讲座]面向对象原则:针对接口编程,而不是实现
[讲座]面向对象原则:组合优于继承
[模式]策略模式
[讲座]什么是设计模式
[讲座]从模式中理解面向对象 组合 – 反方向观察:为其它对象增加变量行为
[练习]设计测验:如何增加行为而不引入继承
[讨论]设计Smell:组合泛滥
[讲座]面向对象原则:OCP – Open-Close Principle 开闭原则
[模式]装饰器模式
[讲座]装饰器模式的要点 组合 – 包装并延迟对方法的调用
[练习]
[模式]命令模式
单元4: 如何重构类之间的Smells
描述数据
[讲座&练习]主要的困扰
[讲座&练习]数据类
[讲座&练习]数据块
[讲座&练习]临时字段 继承
[讲座&练习]子类拒绝来自父类的遗产
[讲座&练习]不合适的亲密关系(生成子类)
[讲座&练习]Lazy Class 责任
[讲座&练习]父类嫉妒子类的特性
[讲座&练习]不合适的亲密关系(提取父类)
[讲座&练习]消息链
[讲座&练习]中间人 适应变化
[讲座&练习]不同的变化动机
[讲座&练习]散弹猎枪式的修改
[讲座&练习]平行继承结构
用作公共库的类
[讲座&练习]不完整的库类
回顾与总结
授课方式
1. 企业定制内训;
2. 公开课;
联系我们
联系我们,按需定制您的课程
电话:400 696 6280
邮箱:contact@scrumcn.com
联系我们,400 696 6280,获取讲师信息
Scrum中文网是全球第一个Scrum中文网站,中国最早的Scrum和敏捷教育及推广机构,也是国际Scrum联盟(ScrumAlliance)官方授权教育机构和大规模敏捷SAFe官方机构SAI在中国的授权合作伙伴。Scrum中文网是中国敏捷教练的摇篮,启蒙和培养了数万名敏捷专业人士,帮助数百家知名企业成功转型敏捷。
Scrum中文网创立于2008年初,由海内外资深Scrum和敏捷顾问团队共同创办,为企业提供权威专业的Scrum敏捷学习平台,以及敏捷转型咨询、教练辅导和培训服务,服务涵盖定制培训、权威认证、体系建立、教练辅导、工具落地等。权威课程包括:官方权威Scrum认证培训课程(CSM,CSPO,CSD,A-CSM等)、大规模敏捷SAFe及LeSS认证培训,以及量身定制的Scrum敏捷开发企业级实训课程培训, 敏捷工程技术实践课程等。
Scrum中文网致力于在短期内为客户解决企业、产品及项目的关键问题,包括交付周期、交付效率、交付质量、交付成本、团队士气等,同时为客户建立长期持续改善的机制。