TDD测试驱动开发实战工作坊

工作坊模式授课,案例分析+沙盘演练

课程受众

  • 期望系统化、全面掌握 TDD测试驱动开发 的软件开发团队或开发者;
  • 已经尝试在企业中推动TDD测试驱动开发,但是困难重重,期望找到解决办法的软件开发团队;
  • 已经开始尝试使用敏捷和Scrum的开发模式,期望进一步导入TDD测试驱动开发的软件开发团队。
  • 面向企业软件研发团队包括但不限于系统架构师、设计师、开发人员、测试人员等。

课程特色

  • 资深敏捷技术专家授课,深入浅出 ;
  • 理论+实操演练,以“练习-演示-讨论-讲解” 为一个单元,每天20单元 ;
  • 可以同时采用多种编程语言进行授课,包括但不限于:Java, C#, C++, Python, Ruby等 ;
  • 来自成功企业的经过验证的实战经验;

课程安排

  • 授课方式:定制企业内部培训,预约培训时间(至少提前两周预约)
  • 授课顾问:Bob Ma、陆宁等国内知名实战派敏捷顾问授课
  • 课程价格:请致电课程顾问了解价格及优惠
  • 咨询电话:4006966280 或 021-54849597,021-54163763
  • 联系邮箱:info@scrumcn.com

马上咨询:400 696 6280

往期课堂剪影

“讲师授课生动、理论联系实际,实践性强,寓教于乐,收获很大! ”

深圳晨星学员

“TDD让我重新体会到了开发的乐趣和成就感! ”

中星电子学员

“TDD让我们改变了对软件设计的看法和做法! ”

东方海外学员

“有了TDD我们对自己代码的质量更放心、对自己的代码更有信心了!”

深圳晨星学员

课程简介

“企业实施敏捷:你想止步于二十四式简易太极拳,还是想深入练内功?” “测试驱动开发,你听说过但是没尝试过?你尝试过但是觉得没用?你觉得有用但是工作中用不起来?”

自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    责任

[讲座&练习]父类嫉妒子类的特性

[讲座&练习]不合适的亲密关系(提取父类)

[讲座&练习]消息链

[讲座&练习]中间人    适应变化

[讲座&练习]不同的变化动机

[讲座&练习]散弹猎枪式的修改

[讲座&练习]平行继承结构

用作公共库的类

[讲座&练习]不完整的库类

回顾与总结

如果您需要定制课程,或者了解更多课程信息,请联系我们的课程顾问,热线:400 696 6280

培训顾问

Scrum中文网资深敏捷顾问Bob Ma

马老师

知名敏捷教练、技术专家和培训师。资深IT咨询师,企业应用架构师和IT经理

马老师曾经就职于百度,Thoughtworks, 挪威船级社(DNV),耐瑞唯信(NagraVision)等多家知名企业,有十多年软件行业经验。他在IT战略规划和转型、软件开发方法和过程改进等方面,他拥有5年的咨询经验;在开发分布式、多级(multi-tier)、多层(multi-layer)企业应用系统方面,他拥有超过6年的专业开发经验,在金融,Web,安全,多媒体应用等多种领域也拥有丰富的经验。   Bob的专长是企业应用架构、面向对象设计和分析、敏捷开发方法(测试驱动开发、重构、演进式设计、持续部署等)、敏捷软件项目管理等。
他曾为腾讯、东方海外(香港)、汤森路透、雅虎(中国)、51.com、QuoVadis、晨星(MorningStar)、中科方德等国内外多家软件企业实施过敏捷相关的培训和教练工作。他曾作为高级架构师和高级过程改进工程师负责某著名搜索引擎网站的最核心的项目的敏捷导入和实施工作。在已经实施的一个季度中,实现了需求的Story/Backlog管理,workload estimation和planning,在此基础上实现了项目进度和速度的可视化管理;在开发实践方面,实现了持续集成,通过面向对象训练营(Object-Oriented Boot Camp, OOBC)培训工程师学习和掌握测试驱动开发,重构和演进式设计,结对编程。   在软件社区内,Bob是一位积极的技术推进和传播者,他是企业应用开发技术和敏捷社区中活跃的一员,曾多次在“中国软件开发者大会”上作报告。他还翻译了《Enterprise Javawith UML》和《Developing Jini Application with J2ME Technology》等书籍。

Scrum中文网资深敏捷顾问路宁

路老师

国内知名的敏捷/精益咨询师及教练

北航硕士学位,拥有超过10年的从业经验,目前主要为各类企业提供敏捷管理和技术方面的咨询和培训服务。他历任工程师、架构师、项目经理、技术总监、咨询师等职位。他曾在百度项目管理部任高级架构师,致力于指导公司级的敏捷改进工作,主要方向是需求管理、项目管理和持续集成实践。他有多年敏捷咨询经验,曾为多家国际知名银行、物流和保险公司构建企业应用、实施敏捷和组织转型方面的咨询。他热衷技术探索,关注组织和团队管理实践,在敏捷和精益方面积累了丰富的实践经验,在敏捷中国,QCon,ScrumGathering等会议上受邀演讲,在InfoQ,Programmer等媒体上发表过多篇文章。
咨询培训的主要内容: • Scrum项目管理 • 敏捷需求分析及计划 • 敏捷迭代管理 • 建设高效的自组织团队 • 看板可视化管理 • 精益管理方法 • 极限编程XP • 各种语言的面向对象设计,重构,测试驱动开发(TDD),单元测试,自动化验收测试 • 持续集成和持续交付实践 • DevOps • 演进式设计与业务建模
咨询或培训过的部分客户: • Macquarie Bank – 澳洲最大的投资银行 • IAG – 澳洲最大的保险公司 • Cosco Bulks 中国远洋运输散货运输公司 • OOCL – 总部在香港的国际领先的物流公司 • 腾讯 • 百度 • 智联招聘 • 平安科技 • 中国工商银行珠海研发中心 • 路透北京研发中心 • 爱立信广州研发中心