课程详情

培训目标:

本课程涵盖代码重构(2天),设计重构(1天),架构重构(1天)3个层次.

主要包含以下几个方面的内容:

n 结合电信、金融等多个项目案例进行分析。本次培训所用案例均为真实项目案例,仅供课堂学术讨论。

n 重构技术:软件并不是在一开始就可以设计的完美无缺,因此必须经过不断的重构进行改善,重构是实现优秀设计的一种重要手段

n 代码坏味道: 介绍常见的糟糕的代码坏味道,以告诫学员,今后如何避免出现这样的拙劣代码。这是21条代码基本要求,是代码管理的较低要求,可以接受的底线.

n 代码管理:项目管理者和质量管理部门,如何组织代码评审,代码审查,如果通过代码评审,提高设计能力。

n 重构到模式: 模式的应用是一个渐进演变的过程, 坏味道也不是一开始就出现的.如果在一开始就想到用某某模式, 有时很可能导致设计过度.重构与模式有一种天然的关系. 重构是手段, 模式是目的, 同时模式也为重构指明了方向和原则.通过案例分析设计模式是如何演进/重构出来的

n 单元测试: 介绍如何使用XUnit进行单元测试,如何更高效地撰写bug更少的代码;如何在团队中高效地进行测试,设计具有易测性的软件等等。

n 代码质量度量: 结合和完善Logiscope和McCabe两种软件度量体系,选取出依据软件程序代码的可量化测量,建立代码质量度量评估模型.有助于软件的量化评价,为质量管理人员了解软件质量水平、软件设计师改进软件程序质量,提供量化的客观依据.

n 持续集成和静态分析工具: 介绍持续集成基本原则和工具,以及应用较佳实践。同时介绍业界大量使用代码静态分析工具,以便在编码阶段就能够找出可能的编码缺陷和坏味道。

n 设计重构: 介绍什么是好的设计特征,如何实现优秀设计.以及敏捷设计思想(演化设计)与重构.

n 架构重构: 由于软件应对需求变化的能力越来越差,通过重构架构进行软件重建的做法变得越来越有吸引力。如何进行架构重构,怎样重构等.

培训对象:

程序员、软件设计师、架构师、项目经理、质量部门员工。对于重构技术怀有疑问和困惑,需要梳理解答的团队和个人。

学员基础:

学员学习本课程应具备下列基础知识:

n 了解Java/C#或者C 任一面向对象语言,

n 具有面向对象基本概念,熟悉基本设计模式

学时:4天24学时(1小时 / 学时)

课程安排:

重构基础

软件代码的新思维----代码就是设计,代码质量决定软件可维护性

软件可维护性(为什么必须重视软件的可维护性)

代码质量概述

破窗效应

对代码的重新认识---代码就是设计

优秀代码的评价标准

好代码和糟糕代码之间的区别

劣质代码的代价

大师评价整洁代码的标准

Robert C Martin

Kent Beck`

Ward Cunningham

Ron Jeffries

Grady Booch

Dave Thomas

重构思想

重构概述

何时重构

如何发现哪些地方需要重构

如何保证重构的正确

如何测试重构

通过一个小案例演示重构的基本思想(什么时间重构,如何发现重构点,如何保证重构的正确性,较后如何验收)

案例—通过实际项目演示重构

介绍项目需求情况,进行设计

阅读代码指出代码坏症状

通过重构逐步改善代码质量

关注代码坏味道

重构关键—发现代码的坏味道

代码坏味道概述

代码坏味道的分类

代码坏味道----低级篇(重复的代码、过长的函数、过大的类、过长的参数列表、发散式变化、分散的修改)

代码坏味道----中级篇(伪面向对象的调用、数据泥团、基本类型的误用、switch-case结构的误用、平行继承体系、过薄的类、只有局部意义的成员变量)

代码坏味道----高级篇(过度耦合的消息链、过薄的中间对象、紧耦合类、相似的类、只有数据的类、滥用类的继承关系)

通过案例,让学员寻找代码坏味道

可以根据客户现在的项目作为案例进行现场分析,找出相应的代码坏味道

某项目分析----重点了解现实项目代码的充斥大量坏味道

介绍项目需求情况,阅读现有代码指出代码坏症状

不看不知道,代码到底有多烂—触目惊心的代码

通过重构逐步改善代码质量

本案例学习多种重构方式

重构方法

重构技术

重构名录

介绍常见的重构技术

分别通过相关案例展示重构手段

重构工具

重构工具概述

使用IDE重构工具进行重构

重构工具的使用标准

重构工具的使用心得

通过案例演示如何通过重构工具完成重构

重构案例—该案例重点 函数和函数调用重构

函数的重构

函数调用重构

函数参数的重构

重复代码处理策略

通过案例介绍函数的重构

重构案例—该案例重点 复杂条件表达式重构

复杂条件表达式重构

IF/Else语句的危害

Switch语句的危害

通过案例介绍如何重构面向过程代码到面向对象

重构案例—该案例重点学习代码格式和命名

代码格式规范

代码命名-名副其实

很重要,但是总被忽略的基本功

通过案例介绍代码格式以及如何使用IDE工具进行定制格式

通过案例介绍代码的命名,以及如何重构

重构案例—该案例重点 数据结构重构

数据结构重构

通过案例介绍如何重构面向过程代码到面向对象

重构案例—该案例重点 对象职责和对象重构

过程化思维和面向对象设计

对象的重新思考

职责驱动的对象设计

通过案例介绍如何重构面向过程代码到面向对象

重构的度量

软件质量和代码质量

软件质量概述

代码质量的度量

Chidamber & Kemerer度量,

Depth of Inheritance Tree(DIT)

Number of Childre(NOC)

Response for a Class(RFC)

Afferent/Efferent Couplings(CA/CE)

Lack of cohesion in methods(LCOM)

业界其他度量标准

通过分析多个实际项目,分别度量相关是否标准

代码评审和质量抽查

代码评审前期准备

代码评审的代码量

代码评审的检查表

代码评审的总结与学习

通过案例分析如何做好代码评审

持续重构

代码静态分析工具

代码静态分析工具概述

以Java语言代码静态分析工具为例介绍

CheckStyle:用于编码标准

PMD 的 CPD:帮助发现代码重复

Coverlipse:测量代码覆盖率

JDepend:提供依赖项分析

Metric:有效地查出复杂度

其他语言相关代码静态分析工具

通过案例演示工具在项目之中的应用

持续集成

持续集成概述

持续集成的要点和原则

构建策略和较佳实践

持续集成对代码分析的支持

通过案例演示如何利用持续集成完成代码检查和代码分析

设计重构

什么是好的设计以及如何预先设计实现

什么是好的设计和衡量的手段

可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标

灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标

可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标

软件的变化分析---发现变化/封装变化/隔离变化

分析真实项目,如何预先设计,给我们哪些启示,我们可以学习到什么

重构与设计----敏捷设计思想(演化式设计或者反思性设计)

重构与设计的思想---根据代码坏味道改善设计

软件需求不可预测性----设计师不可能进行预测式设计

软件设计的重构

软件演化式设计---敏捷的设计思想

分析某电信项目,如何设计重构,给我们哪些启示,我们可以学习到什么

通过代码指标进行设计重构

代码指标和可视化有助于识别代码的重要部分,从而识别设计坏味道,进行重构设计

相关代码指标(HIT 继承树的高度/NOP 包的数量/NOC 类的数量/NOM 方法的数量/LOC 代码行数/CYCLO 圈复杂度/CALL 每个方法的调用数)

分析案例主要讨论两个指标,圈复杂度(cyclomatic complexity) 和传入耦合(afferent coupling), 介绍显示和理解这两个指标的一些工具,以及如何通过组合指标帮助发现设计特征。

北京学习linux,北京linux学习相关推荐

  1. KALI LINUX渗透测试学习笔记

    KALI LINUX渗透测试学习笔记 (苑房弘主讲) 第1章 课程介绍 任务1:Kali Linux渗透测试介绍.exe 安全问题的根源: 分层思想 只求功能实现 最大的威胁是人 渗透测试: 尝试挫败 ...

  2. USB U盘Linux mass_storage驱动学习笔记(1)

    学习博客地址:https://blog.csdn.net/fudan_abc 学习书名:<Linux那些事之我是USB> 看代码之前,我曾经认真的思考过这么一个问题,我需要关注的仅仅是dr ...

  3. Linux实用操作学习笔记

    各类小技巧(快捷键) 强制停止 ctrl+c 强制停止 Linux某些程序的运行,如果想要强制停止她,可以使用快捷键ctrl+c 目录输入错误,也可以通过快捷键ctrl+从,推出当前输入出现输入 停止 ...

  4. 【Linux】Linux入门学习之常用命令一

    介绍 这里是小编成长之路的历程,也是小编的学习之路.希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡. 一个人为什么要努力? ...

  5. Linux第二周学习笔记(7)

    Linux第二周学习笔记(7) 2.13 文档查看cat_more_less_head_tail (1). cat命令 cat命令:用于查看一个文件的内容并将其显示在屏幕上 cat-A命令:显示所有的 ...

  6. Linux系统新手学习的11点建议

    随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux的一些建议. 一.从基础开始:常常有些朋友在Linux论 ...

  7. linux系统管理学习笔记之一-------linux解压缩命令

    linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...

  8. Linux第二周学习笔记(11)

    Linux第二周学习笔记(11) 2.17 隐藏权限lsattr_chattr chattr命令:是设置吟唱隐藏权限的命令,更改Linux文件系统上的文件属性. 参数说明: A:表示文件或目录的ati ...

  9. linux系统运维费用,一般Linux运维学习的费用是多少?Linux学习

    随着IT 互联网技术的发展,Linux逐渐成为中高端服务器的主要操作系统,并且目前地位不可替代.Linux运维工程师是一位"复合型人才",他集成了网络.系统.数据库.开发和安全等工 ...

  10. 20165219 预备作业3 Linux安装及学习

    20165219 预备作业3 Linux安装及学习 安装虚拟机 在安装的过程中遇到了不少的问题,在同学的帮助下都得到了解决.比如在新建虚拟机的时候没有64位这个选项,后来知道需要开启虚拟化,然后是安装 ...

最新文章

  1. 【网络文件共享】02、NFS服务基础
  2. 湖南网络推广浅析外链怎么发才会更快的收录?
  3. 浅谈百度新一代query-ad 推荐引擎如何提升广告收益率
  4. .NET Compact Framework s60v3(在S60上运行Windows Mobile程序)
  5. 需求用例分析之九:序列图
  6. boost::math模块两个 Lambert W 函数的最基本调用示例
  7. textarea 自动检测高度换行
  8. Final Cut Pro 10.6 for Mac(fcpx视频剪辑)
  9. 如何演示扇形面积公式推导过程
  10. 如何用python爬虫薅羊毛_怎么写网络爬虫来薅羊毛?
  11. 芜湖计算机专业学校录取分数线,芜湖市各类高中2018年中考录取分数线是多少...
  12. 玩转“抖音”的10种内容策划套路!
  13. PackageManagerService安装应用流程
  14. Matlab数字图像的傅里叶变换(FFT)
  15. 基础I/O【Linux】
  16. 英文版Windows XP的中文支持设置
  17. 医院检验科设计需要注意什么
  18. linux下离线更新nessus漏洞插件的方法
  19. 数据中心网络方案设计
  20. 如何使用Altium Designer官方元器件集成库

热门文章

  1. 从库Seconds_Behind_Master延迟总结
  2. 基于PaddlePaddle实现的EcapaTdnn声纹识别模型
  3. java计算今天是今年的第几天
  4. 操作系统(2)_硬件环境
  5. 【转】亿欧盘点:杭州十家代表性O2O企业
  6. ibm 数据库迁移工具
  7. Java解析JSON出现双引号变成转义字符quot;解决办法
  8. 统计从键盘输入的一行字符中小写字母,大写字母,数字字符和其它字符的个数。
  9. 从FPGA到camera ISP漫谈
  10. 超越 Nginx,号称下一代 Web 服务器,用起来够优雅~