测试驱动与软件重构
Mac Fan 查看讲师
百林哲咨询(北京)有限公司专家团队成员
现任某信息有限公司高级系统架构师,资深技术专家。从事软件研发工作近二十年,并且现在一直坚守在大型软件架构设计一线工作,尤其熟悉互联网架构与分析的特点,长期关注软件代码质量。
浏览:781次
详情 DETAILS

课程简介

很多软件团队面临的背景都是相似的,程序员们为了快速完成需求和上线而写出了最基本的代码。然后在功能的不断扩充过程中,以打补丁的方式对代码进行扩充,中间还会面临着开发人员的变更和离职。逐渐地,代码就会变得越来越臃肿,渐渐地变得难以维护。

糟糕的软件代码会带来开发效率的降低,在糟糕架构下加入新功能,会大大影响新功能的代码质量,开发和调试时间都会大大增加;其次是故障率的提升,在质量低下的代码中,总是容易隐藏着很多不易发现的坑,这些都会成为故障的隐患;同时,架构也会使得需求的完成大打折扣,使得设计好的目标,因为架构限制或者性能等原因,只能完成80%甚至更低。

随着不同产品的推出,不同客户、不同版本的发布,需要维护的遗留代码越来越多,重构也就在所难免。不仅如此,所有的软件系统,经过一段时间的维护,都会逐渐变成遗留系统,并且都遭遇了缓慢而不可抗拒的腐化。因此,软件开发人员不得不面对既有系统的混乱代码。

本课程首先深入剖析软件质量下降的根源,提出重构是软件变更中保持高质量的必然,讲解如何运用“小步快跑”与“两顶帽子”的方式应对变更、拒绝腐化,并将其归结为“测试驱动设计TDD”的设计过程。通过TDD的设计提供软件设计质量,并让日后的变更变得设计可控,同时易于不断地重构与优化。

然而,在实际项目中该怎样进行TDD,还会遇到哪些困难呢?本课程站在实战的角度,演练在实际项目中如何开展TDD,如何编写测试代码,如何编写程序代码,如何进行需求变更。同时,在微服务架构的环境中,TDD会遇到远程接口调用的设计难题,因此通过演练mock测试、契约测试,将TDD在实际项目中真正开展起来。

课程收益

1. 了解软件开发的痛点

2. 掌握测试驱动开发TDD的设计过程

3. 熟悉持续集成与DevOps的概念 

受众人群

系统架构师、高级程序员、资深开发人员以及对测试感兴趣的人员

 课程周期

212小时)

 课程大纲

主题

授课内容

第一单元 剖析软件质量不断下降的根源

软件开发的痛点:

1. 需求不断在变更

2. 需求变更引发软件退化

3. 需求变更 + 软件退化 = 软件设计迷失方向

 

问题的分析:

1. 软件是对真实世界的模拟,但真实世界十分复杂

2. 人在认识真实世界的时候总是有一个从简单到复杂的过程

3. 因此软件需求变更成为一种必然,并且总是由简单向复杂转变

4. 但在软件由简单向复杂转变过程中,设计容易迷失方向

案例:电商网站支付功能的变更过程

1. 第一个版本的简单支付功能

2. 商品折扣的变更及其设计

3. 支付方式的变更及其设计

4. 秒杀、预订、闪购、众筹等功能的变更

5. 软件设计开始迷失方向

高质量的软件设计过程

1. 小步快跑的软件设计过程

1) 用最快的速度开发第一个可以测试的版本

2) 在此基础上不断添加其它功能

3) 每添加一个功能就能通过测试验证

4) 不断往复直到完成所有的功能

案例:演练小步快跑的设计过程

2. 两顶帽子的软件变更过程

1) 在每次变更之前先进行一个重构以适应新的需求

2) 在此基础上实现新的需求,就能做到高质量设计

案例:两顶帽子的设计过程

3. 测试驱动的软件开发过程

 

采用测试驱动的设计变更过程:

1. 第一个版本的简单支付功能

2. 商品折扣的变更及其设计

3. 支付方式的变更及其设计

4. 秒杀、预订、闪购、众筹等功能的变更

第二单元 测试驱动设计的开发过程

传统软件设计开发过程的弊病

1. 先开发后测试,测试非常困难

2. 容易写出大函数与大对象

3. 在此基础上不断变更会变得越来越困难

 

测试驱动开发TDD的设计过程

1. 根据需求先编写测试代码

2. 根据测试代码设计实现功能

3. 让新功能通过代码测试

4. 在测试代码的保护下不断优化代码设计

演练:用Junit进行TDD的设计开发

 

TDD实现新功能的软件设计过程

1. 根据新功能首先编写测试代码

2. 设计实现新功能让测试用例通过

3. 编写更多的测试代码让功能更加完善

演练: 在订单模块中增加支付功能

 

TDD需求变更的软件设计过程

1. 根据需求变更对原有代码进行重构

2. 通过测试用例保证重构不影响原有功能

3. 在此基础上实现需求变更

演练:支付功能变更的TDD设计过程

 

第三单元 基于微服务的契约测试

基于Springboot的TDD设计

1. 基于Springboot的测试驱动开发

2. Mock测试的概念

3. Springboot框架的mock测试

 

演练:在线交易系统的TDD设计过程

1. 通过mock框架编写测试代码定义Rest接口

2. 设计开发在线交易系统设计这些Rest接口

3. 通过测试用例实现这些功能

 

微服务测试的设计难题

1. 微服务之间的接口调用带来的测试难题

2. 契约测试Spring Cloud Contract

3. 契约测试的设计过程:

1) 接口双方通过协商定义接口

2) 接口提供方根据定义编写测试用例

3) 接口提供方设计实现并通过测试

4) 接口提供方提供桩程序给调用方

5) 接口调用方基于桩程序进行TDD

 

演练:订单功能的TDD设计过程

1. 订单团队与客户团队协商客户接口

2. 客户团队编写契约测试并实现客户接口

3. 客户团队提供客户接口的桩程序

4. 订单团队基于桩程序进行TDD

 

第四单元 持续集成与DevOps

持续集成与DevOps的概念

1. 跨团队开发面临的难题

2. 规模化敏捷与快速交付面临的难题

3. 互联网运维面临的难题

4. DevOps的概念及其解决思路

 

构建分布式持续集成环境

1. 什么是分布式持续集成

2. 大前端+技术中台的组织形式与微服务架构

3. 持续探索、持续集成、持续交付、按需发布的概念

 

微服务云端部署的DevOps运维过程

1. 持续集成工具Jenkins与pipeline

2. 程序开发与测试脚本同时开始

3. 每日自动化与Allure测试报告

4. 用SonarQube进行代码质量检测

5. 用Jacoco进行代码覆盖率检查

6. 用Docker+k8s实现分布式云端部署


企业服务热线:400-106-2080
电话:18519192882
投诉建议邮箱:venus@bailinzhe.com
合作邮箱:service@bailinzhe.com
总部地址:
北京市-丰台区-汽车博物馆东路6号3号楼1单元902-B73(园区)
全国客户服务中心:
天津市-南开区-桂苑路15号鑫茂集团鑫茂军民园1号楼A座802-803
公众号
百林哲咨询(北京)有限公司 京ICP备2022035414号-1