课程简介
很多软件团队面临的背景都是相似的,程序员们为了快速完成需求和上线而写出了最基本的代码。然后在功能的不断扩充过程中,以打补丁的方式对代码进行扩充,中间还会面临着开发人员的变更和离职。逐渐地,代码就会变得越来越臃肿,渐渐地变得难以维护。
糟糕的软件代码会带来开发效率的降低,在糟糕架构下加入新功能,会大大影响新功能的代码质量,开发和调试时间都会大大增加;其次是故障率的提升,在质量低下的代码中,总是容易隐藏着很多不易发现的坑,这些都会成为故障的隐患;同时,架构也会使得需求的完成大打折扣,使得设计好的目标,因为架构限制或者性能等原因,只能完成80%甚至更低。
随着不同产品的推出,不同客户、不同版本的发布,需要维护的遗留代码越来越多,重构也就在所难免。不仅如此,所有的软件系统,经过一段时间的维护,都会逐渐变成遗留系统,并且都遭遇了缓慢而不可抗拒的腐化。因此,软件开发人员不得不面对既有系统的混乱代码。
本课程首先深入剖析软件质量下降的根源,提出重构是软件变更中保持高质量的必然,讲解如何运用“小步快跑”与“两顶帽子”的方式应对变更、拒绝腐化,并将其归结为“测试驱动设计TDD”的设计过程。通过TDD的设计提供软件设计质量,并让日后的变更变得设计可控,同时易于不断地重构与优化。
然而,在实际项目中该怎样进行TDD,还会遇到哪些困难呢?本课程站在实战的角度,演练在实际项目中如何开展TDD,如何编写测试代码,如何编写程序代码,如何进行需求变更。同时,在微服务架构的环境中,TDD会遇到远程接口调用的设计难题,因此通过演练mock测试、契约测试,将TDD在实际项目中真正开展起来。
课程收益
1. 了解软件开发的痛点
2. 掌握测试驱动开发TDD的设计过程
3. 熟悉持续集成与DevOps的概念
受众人群
系统架构师、高级程序员、资深开发人员以及对测试感兴趣的人员
课程周期
2天(12小时)
课程大纲
主题 | 授课内容 |
第一单元 剖析软件质量不断下降的根源 | 软件开发的痛点: 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实现分布式云端部署 |
Mac Fan
百林哲咨询(北京)有限公司专家团队成员
Mac Fan
百林哲咨询(北京)有限公司专家团队成员
Mac Fan
百林哲咨询(北京)有限公司专家团队成员
Mac Fan
百林哲咨询(北京)有限公司专家团队成员
Mac Fan
百林哲咨询(北京)有限公司专家团队成员
Mac Fan
百林哲咨询(北京)有限公司专家团队成员
Mac Fan
百林哲咨询(北京)有限公司专家团队成员