致力于提升研发企业的持续创新能力

结盟众多企业“教练”, 共同设计、开发及提供人才培养解决方案,通过新颖多样的学习方式,针对性的定制化内容,助力企业全面提升竞争优势。

课程分类列表

软件设计与编码能力提升训练营

课程讲师:

张逸

课程周期:

1-12天

课程费用:

20000元/天

训练营概况

训练营采用任务驱动学习的模式,将每个学习内容拆分为可以反馈和验证的学习任务,如此即可快速获得学员对该部分知识内容了解的情况,针对性地进行改进。这一训练方式符合PCDA戴明环的管理理念,属于验证型学习(Validated Learning)的训练方法。

任何软件开发的起点都是从需求开始。对于一个软件开发初学者而言,要进行系统化的软件开发训练,就需要先从需求分析开始,学会理解需求,学会分解需求,才能更好地做到高质量的设计与开发。因此,整个工作坊会从需求分析开始,通过一个完整案例整体地展现从需求分析到设计和开发的全过程,通过自己动手实战编写代码,体验和对比设计方案与编码实现的优劣,再结合对优秀开源框架的源代码解读,就能够结合理论与实践,帮助学员真正理解软件设计与编码的本质思想和原则。

训练营目标

软件开发的学者在软件项目开发中面临的最大问题不是对语言的掌握程度,也不是对框架的使用能力,而是如何养成良好的编码习惯,并在团队协作中如何独立承担开发任务,准确地分析用户需求,运用面向对象分析和设计知识给出良好的设计方案,高效而稳健地完成编码实现。通过本次训练营,能够培养学员良好的编码习惯,提升学员的需求分析能力和软件设计能力,具备软件工程的合作意识和交付意识,使其能够在未来工作中具备独立负责功能模块的能力,完成从“小工”到“专家”的精进。

训练方案

整个训练方案包含如下内容:

  • 整洁代码:Clean Code
  • 面向对象分析与设计:OOAD / UML
  • 测试驱动开发:TDD / Unit Test
  • 重构:Refactoring
  • 遗留系统:Legacy System
  • 设计模式:Design Principle / Design Pattern

以上内容彼此关联:编写整洁代码需要一定的面向对象设计知识;要进行测试驱动开发,需要具备重构能力,并力求编写出整洁代码。学习设计模式必须具备面向对象的设计能力;处理遗留系统则是这些知识的综合。因此,在学习任务安排上,既存在知识的循序渐进,又需要合理安排学习内容的顺序,而不是单纯分为多个独立的阶段。

学习任务:需求场景分析

目标:梳理需求,学会针对需求场景进行任务分解

培训内容:

  • 用户故事编写
  • 任务分解的方法

培训收益:

  • 掌握基本的用户故事编写方法,通过沟通和交流了解客户真正需要的需求
  • 对每一个用户故事代表的业务场景,进行任务分解

任务输出:

  • 用户故事
  • 分解的任务

说明:软件开发初学者往往会因为对需求理解的不足,导致设计和实现思路的混乱,这直接影响到最终编写代码的糟糕质量。究其根源,缺乏正确的需求理解方法和任务分解能力,才是编写糟糕代码的源头。

学习任务:抽象领域概念

目标:从需求与任务中提炼领域概念,获得领域模型

培训内容:

  • 名词动词法
  • 领域模型的价值
  • 对象的封装

培训收益:

  • 提高抽象能力,建立领域概念和模型的设计思想
  • 帮助学员真正理解对象的封装思想
  • UML类图

任务输出:

  • 领域分析模型类图

说明:面向过程设计与面向对象设计的根本区别就在于:是否具有抽象和提炼领域概念的意识。同时,对于一个业务系统的编写而言,事先建立领域模型来驱动设计和开发,要优于事先建立数据库。我们需要避免数据库实现机制对业务逻辑开发带来的影响,理解什么才是面向对象设计中的类型。

学习任务:确定角色构造型

目标:确定角色构造型,建立领域设计模型

培训内容:

  • 单一职责原则
  • 自治与分治设计思想
  • 领域实体、领域服务与资源库

培训收益:

  • 建立正确的面向对象设计思想
  • 理解抽象概念,隔离业务逻辑与技术实现

任务输出:

  • 领域设计模型类图

说明:定义类型只是面向对象设计的起点,分配职责才是改进面向对象设计质量的关键。正确理解单一职责原则,就能学会分离关注点,建立起一个自治与分治的领域模型。这样的领域模型才是优秀设计的基石。

学习任务:场景驱动设计

目标:通过场景驱动设计获得对象的行为协作模型

培训内容:

  • 场景驱动设计
  • 对象的行为协作模式
  • UML时序图

培训收益:

  • 学会场景驱动设计,理解意图导向编程
  • 以动态的行为协作模式实现业务场景

任务输出:

  • 领域设计模型时序图

说明:职责分配是否合理可以通过UML时序图进行验证,在绘制UML时序图的时候,也是设计者驱动出隐藏设计对象的过程。要掌握职责分配的平衡,由此就可以改进设计质量。通过由外及内的设计方向,可以培养学员从调用而非实现的角度去思考接口的设计,提高了代码的可读性。

学习任务:面向接口设计

目标:掌握接口的设计原则

培训内容:

  • 接口的设计原则
  • 开放封闭原则
  • Postel设计原则
  • 契约式设计
  • UML组件图

培训收益:

  • 正确地理解接口,避免对接口的狭隘定义
  • 掌握面向接口设计思想,保证模块或类之间的松散耦合

任务输出:

  • 系统组件图
  • 接口定义文档

说明:一个好的接口必须满足特征:易用性、健壮性和通用性。在意图导向编程的基础之上,继续加强对接口设计的理解。这个过程实际上是对面向对象设计思想的进一步加强,以便设计能够做到“高内聚低耦合”。

学习任务:编写单元测试

目标:掌握单元测试的编写技巧

培训内容:

  • 单元测试的编写原则
  • 单元测试框架的使用
  • 模拟框架的使用

培训收益:

  • 学会编写测试用例
  • 学会如何正确的编写单元测试
  • 学会对单元测试框架和模拟框架的使用

任务输出:

  • 可以运行的单元测试

说明:根据任务编写测试用例,然后编写出一个合理的单元测试,是进行测试驱动开发的良好基础。

学习任务:简单设计原则

目标:理解简单设计原则

培训内容:

  • 简单设计原则解读
  • 方法级别和类级别的重用
  • 总结可读性代码的特征

培训收益:

  • 了解什么是简单设计,做到设计的恰如其分
  • 提高代码编写的能力,达到整洁代码的基本要求

任务输出:

  • 整洁代码的特征列表

说明:整洁代码的基本要求就是避免重复和代码可读。演示一段实现糟糕的真实代码,通过消除重复和改进代码可读性,达到整洁代码的目标,并完整阐释简单设计的思想。同时,通过阅读开源代码和项目代码,通过比较优雅和丑陋的代码,让学员自己总结出整洁代码的特征,使得学员具备辨别代码优劣的能力,树立编写整洁代码的良好习惯。

学习任务:代码重构

目标:掌握常用的代码重构技巧

培训内容:

  • 了解和学习常见的代码坏味道
  • 针对具有坏味道的代码进行重构

培训收益:

  • 进一步培养整洁代码的敏感性
  • 提高代码重构能力

任务输出:

  • 重构后的整洁代码

说明:整洁代码的编写与代码的重构相与相随。没有任何人能够一次编写出没有任何坏味道的代码,重要之处在于降低对拙劣代码的容忍度,学会及时准确地识别代码坏味道,随时对代码进行重构。本学习任务需要进行大量的重构练习。

学习任务:测试驱动开发

目标:掌握测试驱动开发方法

培训内容:

  • 测试驱动开发过程
  • 测试驱动开发的三大支柱
  • 融汇贯通单元测试、简单设计与重构

培训收益:

  • 能够熟练地通过编写测试驱动出产品代码,并通过重构改进代码质量
  • 培养红-绿-黄的测试驱动开发节奏

任务输出:

  • 通过测试驱动出来的产品代码和测试代码

说明:在具备了整洁代码、重构和单元测试知识后,就可以在编写出单元测试的基础上,开展测试驱动开发。在这个过程中,需要遵循简单设计原则,在三大支柱的指导下开展测试驱动开发。

学习任务:提升设计能力

目标:理解和掌握常用的设计模式

培训内容:

  • 理解面向对象设计的本质思想与基本原则
  • 学习常用的设计模式

培训收益:

  • 深度理解面向对象设计
  • 掌握常用的设计模式

任务输出:

  • 案例的设计方案

说明:设计模式是面向对象设计思想与原则的集大成者,学习设计模式的目的是为了提升设计能力,并将其运用到实际的项目开发中,提高设计质量。通过解读优秀的开源框架,展示设计模式在这些框架的运用,加强学员对复杂设计场景的认识,从而将设计模式知识融会贯通,而不是为了模式而模式。

学习任务:重构到设计模式

目标:掌握设计模式重构的技能

培训内容:

  • 重构到设计模式的手法

培训收益:

  • 区别事先设计和重构设计,做到设计的恰如其分
  • 将设计模式与重构融汇贯通

任务输出:

  • 重构后具有良好设计的代码

说明:设计不可能做到面面俱到,同时,还需要避免过度设计增加设计方案的复杂度,当变化发生时,能够具备从当前设计重构到设计模式的能力,就能在满足简单设计原则的基础上,随时做到设计的可扩展性,提高设计质量。这一手法也能够有效地帮助我们应对遗留系统的设计质量改进。

学习任务:解依赖

目标:掌握解依赖的技巧

培训内容:

  • 识别代码接缝
  • 解除依赖的方法
  • 依赖倒置原则

培训收益:

  • 提升解依赖的能力,进一步打磨重构技巧
  • 具备为已有代码编写单元测试的能力

任务输出:

  • 增加单元测试保护的遗留代码

说明:复杂代码的最大痛点在于无处不在的依赖,若能将强依赖降低为弱依赖,就能让代码的设计更加松散耦合,然后再通过控制模块之间、类之间的边界,让代码结构变得更加清晰,就能整体提升设计和编码质量。解依赖技术也是应对遗留系统的基本技巧。

学习任务:应对大型遗留系统

目标:改进遗留系统的设计质量和编码质量

培训内容:

  • 阅读遗留代码的方法
  • 为遗留代码编写单元测试
  • 重构或重写遗留系统

培训收益:

  • 学会应对大型遗留系统的重构能力
  • 为遗留系统建立测试保护网

任务输出:

  • 重构以及重写后的遗留系统

说明:遗留系统是每个开发人员都必须面对的。在仔细分析遗留系统的价值和痛点后,有针对性地对遗留系统进行合适的重构或重写,让不影响遗留系统原有的价值基础上,让遗留系统焕发青春,提高遗留系统的设计质量和编码质量。

训练计划

学习任务

类别

培训时长

 

张逸图片

 


培训时长合计:12天

注:为保证验证型学习的效果,本次训练营要求每位学员在学习任务完成后提交任务输出,讲师将选择部分内容存在的典型问题进行针对性地回顾和评点。任务反馈将以线上和线下结合的方式进行。

找到所需课程了吗?即刻 填写申请表格 与我们联络吧