单元测试及重构工作坊

提升软件内部质量

课程受众

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

课程特色

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

课程安排

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

马上咨询:400 696 6280

往期课堂剪影

“受益匪浅!马波老师授课生动、深入浅出、实践性强! ”

深圳晨星

“寓教于乐,讲师实践经验丰富、理论联系实际,十分透彻! ”

盘古搜索

“重构和单元测试培训让我对我们的项目又重拾了信心! ”

中兴电子

“重构和单元测试培训让我重新正确认识了这两个实践的意义和做法! ”

东方海外

课程简介

“软件产品新功能越来越难加入?”  “代码越来越难懂,越来越难修改?”  “写这个模块的工程师离职了,文档又不全,里面的逻辑很乱,但是没人敢修改?”  “产品功能都开发不完,哪有时间写单元测试?”  “一个函数100行算什么,我们还有500行,1000行的!”

作为项目经理/开发主管、开发或者测试人员,是否经常听到这样的声音、惊讶和问题? 是否大家都认可代码的质量差,但都无计可施、无能为力? 是否老板拍定了交付日期,开发团队除非拼命加班,否则无论如何也赶不上?

如何上述情况出现了一项,那么可以肯定的说:您的项目内部质量出现了问题。 怎么办? 内部出现了问题,就需要重构;想成功的重构,需要完备的单元测试。 您也许听过什么是重构,什么是单元测试,更有可能曾经尝试过重构和单元测试,但是: 要么:“我们的代码很乱,无法重构”; 要么:“我们的代码复杂,无法做单元测试”;

也许你小范围的尝试了,觉得不错,但是是否能应用在产品代码还心存疑惑; 甚至也许您已经很成功的使用了重构和单元测试,但是觉得对人要求太高,怎么推广到整个团队表示担心。

本课程为期两天,课程除了为您深入剖析什么是重构、什么是单元测试、单元测试和重构对人的要求是什么、带来哪些好处,对产品的会带来哪些影响,更重要的是帮助团队全面掌握如何做重构和单元测试的技巧。

课程采用结对编程的方式组织学员,以“练习-演示-讨论-讲解”为一个单元,由浅入深,循序渐进的方式,每天进行大量的学习单元(20个左右),让学员在丰富、密集的练习和互动中建立对重构和单元测试的认知、学习重构和单元测试正确的步骤和方法,在资深专家的引导和小组讨论中,自己体验、思考、理解,总结重构和单元测试对软件内部质量提升价值。

课程大纲

第一天 重构

1. 识别代码中的坏味道     – 用团队中的产品代码做例子分析所出现的坏味道     – 结对讨论和分析     – 总结、讲解、概要分析所有种类的坏味道(21种)     – 结对讨论和分析

2.正确认识和对待坏味道

3.为什么需要重构?    – 重构的考虑、成本、粒度、频率和方式

4.学习重构的原则和步骤

5.学习正确的重构步骤

6. 练习小规模重构 – 如何重构一个类

实践环节:     重构的循环

[讲座]识别类内的坏味道

[讲座]重构的循环

[讲座]什么时候算做完了?

[讲座]在一个重构之内

[练习]小步前进 – 识别重构常用的步骤  [

练习]简单设计 – 如何判断简单,你是怎么理解的

已知的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

[讲座&练习]模拟的继承

练习较大规模重构 – 多个类之间的重构

描述数据

[讲座&练习]主要的困扰

[讲座&练习]数据类

[讲座&练习]数据块

[讲座&练习]临时字段     继承

[讲座&练习]子类拒绝来自父类的遗产

[讲座&练习]不合适的亲密关系(生成子类)

[讲座&练习]Lazy Class

责任

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

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

[讲座&练习]消息链

[讲座&练习]中间人

适应变化

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

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

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

用作公共库的类

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

第二天 单元测试

单元测试入门:

[演示] 用JUnit 4进行单元测试 – 初步掌握用 JUnit 4 进行单元测试的能力

[练习] 如何按业务价值导向进行单元测试设计

树立正确的单元测试认识、概念和思路

Fixture组织

单测的力度

如何划分单元测试

[讨论&分析] 为什么不写单元测试

[讨论&分析] 谁该对(外部/内部)质量负责

[讲座] 什么不是单元测试

[讲座] 什么是单元测试

[讲座] 项目中单元测试策略

怎么写单元测试

[讲座] 单元测试结构

[讲座] 单元测试内容

[练习] 如何组织测试数据

[讨论&分析] 边界条件

[练习] 如何用Mock辅助边界条件测试    单元测试重构

[讨论&分析] 识别单元测试中的坏味道

[练习] 重构单元测试    单元测试和构建流水线(build pipeline)

[讨论&分析] 单元测试在构建流水线中的位置和作用

[讲座&练习] 用Buildr做Java 项目构建

[讲座&练习] 用Rake做Ruby 项目构建

[讲座&练习] 用 Jenkins/Hudson 做持续集成

最后总结

如果您需要定制课程,或者了解更多课程信息,请联系我们的课程顾问,热线: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 – 总部在香港的国际领先的物流公司 • 腾讯 • 百度 • 智联招聘 • 平安科技 • 中国工商银行珠海研发中心 • 路透北京研发中心 • 爱立信广州研发中心