• CSPO+A-CSPO直通车
  • 敏捷领导力(CAL E+O / ALJ)认证培训
  • Five_reasons_three
  • Hardware-agile-practice-20231012
  • Clp_20220108
  • A-CSM 国际Scrum联盟认证 ScrumMaster
  • CSM A-CSM一站式培训
  • CSM CSP CAL CSPO CSD CST CEC CTC
  • ShineScrum捷行出版书籍
认证课程 > 单元测试与重构实战工作坊
课程概述

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

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

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

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

本课程为期两天,课程除了为您深入剖析什么是重构、什么是单元测试、单元测试和重构对人的要求是什么、带来哪些好处,对产品的会带来哪些影响,更重要的是帮助团队全面掌握如何做重构和单元测试的技巧。
课程采用结对编程的方式组织学员,以“练习-演示-讨论-讲解”为一个单元,由浅入深,循序渐进的方式,每天进行大量的学习单元(20个左右),让学员在丰富、密集的练习和互动中建立对重构和单元测试的认知、学习重构和单元测试正确的步骤和方法,在资深专家的引导和小组讨论中,自己体验、思考、理解,总结重构和单元测试对软件内部质量提升价值。

课程受众
软件研发团队成员包括但不限于项目经理、开发经理、架构师、软件设计师、开发工程师、测试工程师等。
学员反馈
  • “受益匪浅!老师授课生动、深入浅出、实践性强!” ——深圳晨星
  • “寓教于乐,讲师实践经验丰富、理论联系实际,十分透彻!” ——盘古搜索
  • “重构和单元测试培训让我对我们的项目又重拾了信心!” ——中兴电子
  • “重构和单元测试培训让我重新正确认识了这两个实践的意义和做法!” ——东方海外
课程优势
  • 资深敏捷技术专家授课,深入浅出, 贴近实战
  • 理论+实操演练,以“练习-演示-讨论-讲解” 为一个单元,每天20单元
  • 可以同时采用多种编程语言进行授课,包括但不限于:Java, .Net, C#, C++, Python, Ruby等
  • 来自成功企业的经过验证的实战经验
课程收益

学习结束后,学员对重构和单元测试能建立正确、深入的观点和理解,掌握重构和单元测试的基本实践、要点、流行的工具和常见的误解和错误的做法。

课程要点

第一天 重构

  • 1. 识别代码中的坏味道
    • 用团队中的产品代码做例子分析所出现的坏味道
    • 结对讨论和分析
    • 总结、讲解、概要分析所有种类的坏味道(21种)
    • 结对讨论和分析
  • 2. 正确认识和对待坏味道
  • 3. 为什么需要重构?
    • 重构的考虑、成本、粒度、频率和方式
  • 4. 学习重构的原则和步骤
  • 5. 学习正确的重构步骤
  • 6. 练习小规模重构 - 如何重构一个类

实践环节:

重构的循环

  • [讲座]识别类内的坏味道
  • [讲座]重构的循环
  • [讲座]什么时候算做完了?
  • [讲座]在一个重构之内
  • [练习]小步前进 - 识别重构常用的步骤
  • [练习]简单设计 - 如何判断简单,你是怎么理解的

已知的Smells

  • [[重构]Extract Method / Class / Subclass / Introduce
    • 1. Rename Method
    • 2. Introduce Assertion
    • 3. Duplicate Observer Data
    • 4. Replace Parameter with Method
    • 5. Preserve Whole Object
    • 6. Introduce Parameter Object
  • [讲座&练习]注释
  • [讲座&练习]长方法
  • [讲座&练习]大类
  • [讲座&练习]长参数列表
  • [练习]测验:Smells和重构
  • [讲座]Smells和重构

命名

  • [重构]
  • [讲座&练习]在名字中嵌入了类型
  • [讲座&练习]无法达意的名字
  • [讲座&练习]不一致的名字

不必要的复杂性

  • [重构]
  • [讲座&练习]死代码
  • [讲座&练习]投机未来的可能性
  • [讲座]成对出现的重构

重复

  • [重构]
  • [讲座&练习]神奇数字
  • [讲座&练习]重复的代码
  • [讲座&练习]可互换的类有不同的接口

条件逻辑

  • [重构]
  • [讲座&练习]空值检测
  • [讲座&练习]复杂的布尔表达式
  • [讲座&练习]特殊处理的Case
  • [讲座&练习]模拟的继承

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

描述数据

  • [讲座&练习]主要的困扰
  • [讲座&练习]数据类
  • [讲座&练习]数据块
  • [讲座&练习]临时字段

继承

  • [讲座&练习]子类拒绝来自父类的遗产
  • [讲座&练习]不合适的亲密关系(生成子类)
  • [讲座&练习]Lazy Class

  • [讲座&练习]父类嫉妒子类的特性
  • [讲座&练习]不合适的亲密关系(提取父类)
  • [讲座&练习]消息链
  • [讲座&练习]中间人

适应变化

  • [讲座&练习]不同的变化动机
  • [讲座&练习]散弹猎枪式的修改
  • [讲座&练习]平行继承结构

用作公共库的类

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

第二天 单元测试

单元测试入门:

  • [演示] 用JUnit 4进行单元测试 - 初步掌握用 JUnit 4 进行单元测试的能力
  • [练习] 如何按业务价值导向进行单元测试设计

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

Fixture组织

单测的力度

如何划分单元测试

  • [讨论&分析] 为什么不写单元测试
  • [讨论&分析] 谁该对(外部/内部)质量负责
  • [讲座] 什么不是单元测试
  • [讲座] 什么是单元测试
  • [讲座] 项目中单元测试策略

怎么写单元测试

  • [讲座] 单元测试结构
  • [讲座] 单元测试内容
  • [练习] 如何组织测试数据
  • [讨论&分析] 边界条件
  • [练习] 如何用Mock辅助边界条件测试

单元测试重构

  • [讨论&分析] 识别单元测试中的坏味道
  • [练习] 重构单元测试

单元测试和构建流水线(build pipeline)

  • [讨论&分析] 单元测试在构建流水线中的位置和作用
  • [讲座&练习] 用Buildr做Java 项目构建
  • [讲座&练习] 用Rake做Ruby 项目构建
  • [讲座&练习] 用 Jenkins/Hudson 做持续集成

最后总结

开课方式

企业内训,预约培训时间

课程讲师
    课程价格

    请联系课程顾问了解价格及优惠。

    服务流程
    • 客户需求分析及调研
    • 培训方案设计及课程内容定制
    • 培训实施
    • 培训反馈
    • 后期服务及跟进
    后期服务
    • 培训结束后2个月内,将对学员提供免费的电话、邮件或在线的技术支持服务。
    • 与客户签订企业会员合作协议,企业员工或者客户参加公开课程培训时享受优惠。
    • 定期组织多样化的公益性沙龙及学术交流活动。

    咨询电话:400 920 0024 或 021-3450 0213