inFusion错误类型分析

合集下载

FusionStorage Block故障处理概述

FusionStorage Block故障处理概述

install.log.0 FusionStora log-MDC.*
ge Agent log-OSD.*
log-VBS.*
zookeeper.log.*
安装agent的日志 MDC运行时的日志 OSD运行时的日志 VBS运行时的日志 ZK运行时的日志
/var/log/dsware /var/log/dsware /var/log/dsware /var/log/dsware /var/log/dsware
第19页
日志获取方法3 - 工具收集
第20页
日志获取方法4 - 手动收集
使用putty工具,用非root用户登录需要取日志的节点 执行su - root命令,并提示输入root用户的密码,切换至root用户 执行TMOUT=0命令,防止PuTTY超时退出 执行 tar -czvf log.tar,gz 日志文件,例如tar –czvf log.tar.gz /var/log/dsware/*
FusionStorage Block故障处理概述
技术创新,变革未来
前言
FusionStorage Block是华为分布式存储,了解和掌握 FusionStorage Block的故障处理方法,可以更好的部署和维 护企业云计算存储环境。
第1页
目标
学完本课程后,您将能够:
FusionStorage Block故障简介 FusionStorage Block告警机制介绍 FusionStorage Block日志机制介绍 FusionStorage Block故障处理流程 FusionStorage Block备份与恢复方法 FusionStorage Block应急预案介绍 FusionStorage Block高危操作

精选-FusionAccess桌面云故障处理

精选-FusionAccess桌面云故障处理

参考应急指南
检查各节点的IP是否正确,使 用ping命令检查网络连通性。
确认版本配套
客户端AccessClient版本与虚 拟机AccessAgent版本要匹配。
模块日志分析
根据问题现象查询对应模块的 日志进行分析。
登录连接故障案例 - 虚拟机图标显示为灰色
收集信 息
• 虚拟机图标为灰色(即状态为未注册) • 虚拟机处于关机状态
检查确 • 网络视频效果正常 认
1. FusionAccess故障处理流程 2. FusionAccess典型故障处理
业务发放故障 登录连接故障 性能体验故障 外设使用故障
外设技术回顾
设备 重定向
端口 重定向
其他 重定向
基于上层设备业务功能实现的重 定向技术
打印机、摄像头、TWAIN、PS/SC、 HID等默认使用设备重定向。
AD
应用程序初始化
显示正在连接界面
请求连接 (Address Ticket)
获取虚拟机IP
连接成功
建立连接
协商参数,登录虚拟机 (Login Ticket)
获取用户名密码
登录成功,呈现桌面
到AD上鉴权
问题处理思路
使用工具自检
虚拟机中,运行“连接自检工 具”,使用“一键检修”
检查服务状态
在FusionAccess portal中查看状态监 控信息,在服务器中查看组件状态。
FusionCare
FusionCare WinSCP
Huawei vDesk
用户终端
TC/SC
在TCM上使用“日志提取”功能远程获取日志。 使用手动方式收集用户终端日志。
TCM
故障定位常用方法

云计算故障处理-FusionAccess故障处理

云计算故障处理-FusionAccess故障处理
此类故障的操作界面是ITA Portal,后台涉及FC/FM(创建虚拟 机资源)、HDC(关联用户)、VM(改名加域)、AD(计算 机和用户管理)/DNS(域名解析)/DHCP(IP地址分配)等。
用户组、模板、虚拟机、虚拟机组、桌
面组
3
4
5
1 2
5
3
4
2
1
1
用户或用户组:域用户或 一组域用户,使用桌面云 的用户需使用域帐户登录 虚拟机。
FusionAccess产品功能简介
FusionAccess是基于华为虚拟化平台的 一种虚拟桌面应用。
在虚拟化平台上部署FusionAccess,使 终端用户通过瘦客户端或者其他任何 与网络相连的设备来访问跨平台的应 用程序,以及整个客户桌面。
通过FusionAccess接入云平台,可重点 解决传统PC办公模式给客户带来的如: 安全、投资、办公效率等方面的诸多 挑战,适合大中型企事业单位、政府 其他分散/户外/移动型办公单位。
1. FusionAccess故障简介 2. FusionAccess业务发放故障处理 3. FusionAccess登录连接故障处理 4. FusionAccess性能体验故障处理 5. FusionAccess外设使用故障处理 6. FusionAccess备份与恢复 7. FusionAccess高危操作一览表 8. 典型案例分析
• 查阅在线帮助 • 按在线帮助步骤处

看错误提示
看告警
• 查看系统告警 • 按告警帮助步骤处

• 查看FusionAccess日 志
• 搜寻日志关键字错 误
• 根据日志提示处理
看日志
业务发放问题处理示例-看错误提示
1. 打开任务中心,查看任务进展信息,提示:“获取创建 出的虚拟机的计算机名失败,请您检查模板是否制作正确以 及网络环境是否正常,并重新创建虚拟机。”

013-精修A,B类错误的技巧

013-精修A,B类错误的技巧

013晶体解析心得精修AB类错误的技巧PLAT412_ALERT_2_C Short Intra XH3 .. XHn H9 .. H13C ..1.87 Ang.对策:在Ins文件中添加Dfix 2.45 0.01 h9 h13c 指令,XL→ XL.(尝试调整比1.87大的数)范例:wq-5-36-2PLAT413_ALERT_2_B Short Inter XH3 .. XHn H2D .. H2D ..2.06 Ang.对策:在Ins文件中添加Dfix 2.52 0.01 h2d h2d 指令,XL→ XL.(尝试调整比2.06大的数)范例:Wq1-5PLAT430_ALERT_2_B Short Inter D...A Contact O2 .. N1 ..2.66 Ang.dfix 2.80 0.01 o2 n1PLAT230_ALERT_2_B Hirshfeld Test Diff for O2 -- C10 .. 7.15 suPLAT431_ALERT_2_C Short Inter HL..A Contact Cl1 .. N3 .. 3.11 Ang.dfix 2.90 0.01 o2 n1无B类错误,但是Cl1 .. N3 .. 3.11 Ang.dfix 3.00 0.01 o2 n1无B类错误,但是PLAT431_ALERT_2_C Short Inter HL..A Contact Cl1 .. N3 .. 3.11 Ang.---OKdfix 3.10 0.01 o2 n1无B类错误,但是PLAT430_ALERT_2_C Short Inter D...A Contact O2 .. N1 .. 2.90 Ang.---OK范例:p16-9PLAT230_ALERT_2_B Hirshfeld Test Diff for O9 -- C29 .. 7.97 su对策:在Ins文件中添加Delu 0.02 0.01 o9 c29指令,XL→ XL.(0.02 0.01必需成倍数关系)范例:f10, f15-2, e75PLAT232_ALERT_2_B Hirshfeld Test Diff (M-X) Cu1 -- Cl1 .. 13.26 sudelu 0.01 0.005 cu1 cl1PLAT220_ALERT_2_B Large Non-Solvent C Ueq(max)/Ueq(min) ... 4.07 Ratio对策:在Ins文件中添加simu 0.005 0.01 3.8 $c 指令,XL→ XL(0.005 0.01必需成倍数关系)范例:e75PLAT029_ALERT_3_B _diffrn_measured_fraction_theta_full Low ....... 0.94对策:在Ins文件中添加omit -3.00 50.02 指令,XL→ XL.范例:f15-2,e11, ye-12--00PLAT057_ALERT_3_B Correction for Absorption Required RT(exp) ...1.22对策:在Ins文件中添加size 0.21 0.19 0.18指令,XL→ XL.(调整a,b,c紧凑些, 亦即三者之间的差值小一些)范例:wq1-2PLAT148_ALERT_3_B su on the c - Axis is Too Large (x 1000) . 20 Ang.对策:尝试调小ins文件中c - Axis的数据, XL→ XL.范例:f15-4ZERR 6.00 0.0143 0.0143 0.02220.000 0.000 0.000ZERR 6.00 0.0143 0.0143 0.01820.000 0.000 0.000PLAT148_ALERT_3_B su on the c - Axis is Too Large (x 1000) . 18 Ang.ZERR 6.00 0.0143 0.0143 0.01520.000 0.000 0.000PLAT242_ALERT_2_C Check Low Ueq as Compared to Neighbors for Cu2对策:在Ins文件中添加simu 0.01 0.02 3.8 cu2 o9 o10 o11 o12 n3指令,XL→ XL.(尝试0.01 0.02或0.02 0.04) 包含cu2的周围的原子范例:f9-34PLAT241_ALERT_2_C Check High Ueq as Compared to Neighbors for C11范例:p4-2PLAT035_ALERT_1_A No _chemical_absolute_configuration info given . ?对策:在Cif文件中添加_chemical_absolute_configuration s_refine_ls_structure_factor_coef Fsqd_refine_ls_matrix_type full_refine_ls_weighting_scheme calc_refine_ls_structure_factor_coef Fsqd_chemical_absolute_configuration s_refine_ls_matrix_type full_refine_ls_weighting_scheme calc范例:p16-9PLAT055_ALERT_1_A Maximum Crystal Dimension Missing (or Error) ... ? 对策:在Ins文件中添加size a b c指令,XL→ XL(a,b,c的值见Pcf文件)范例:e11PLAT060_ALERT_4_A Ratio Tmax/Tmin (Exp-to-Rep) (too) Large ..3.49对策:在Ins文件中添加size a b c指令,调整a b c 的相应比例,XL→ XL. 范例:e11PLAT762_ALERT_1_A CIF Contains no X-Y-H or H-Y-H Angles .......... ?对策:在Ins文件中添加bond $h指令,XL→ XL.范例:e11Diffractometer make and type. Replaces _diffrn_measurement_type.Mode of intensity measurement and scan.Number of standards used in measurement._diffrn_standards_interval_time are missing. Number of measurementsbetween standards or time (min) between standards.Percentage decrease in standards intensity.对策:用Pcf文件中的内容,代替Cif文件中的的?_diffrn_radiation_source 'fine-focus sealed tube'_diffrn_radiation_monochromator graphite_diffrn_measurement_device_type ?_diffrn_measurement_method ?_diffrn_radiation_source 'fine-focus sealed tube'_diffrn_radiation_monochromator graphite_diffrn_measurement_device_type 'CCD area detector'_diffrn_measurement_method 'phi and omega scans'----P1-4PLAT420_ALERT_2_B D-H Without Acceptor O3 -H3B ... ?以下错误均为晶体本身所引起,不可修复PLAT026_ALERT_3_B Ratio Observed / Unique Reflections too Low ....31 Perc.PLAT022_ALERT_3_B Ratio Unique / Expected Reflections too Low ....0.89RINTA01_ALERT_3_B The value of Rint is greater than 0.15Rint given 0.152PLAT020_ALERT_3_B The value of Rint is greater than 0.10 ......... 0.15PLAT341_ALERT_3_B Low Bond Precision on C-C Bonds (x 1000) Ang ...19PLAT601_ALERT_2_B Structure Contains Solvent Accessible VOIDS of . 189.00 A**3调整GooF(S)值Refine时,适当改变Weights Suggested的值,Weights值越大,GooF值越小。

精典-华为云-FusionManager故障处理

精典-华为云-FusionManager故障处理

FusionManager故障处理-看日志
4. 如果问题依然存在,使用FusionCare工具,收集更详细的 日志进行分析:
在日志文件中查找关键字,进行分析处理和故障排除
1. FusionManager故障简介 2. FusionManager管理节点故障处理 3. FusionManager操作维护故障处理 4. FusionManager备份与恢复 5. FusionManager高危操作一览表
恢复故障FM数据
主备节点FM故障处理流程
主备FusionManager虚拟机同时 故障时,需要参考本故障处理
取消单点登录 (可选)
重启FM虚拟机
操作,使业务快速恢复正常。
是否能 VNC登 录FM

启动HA服务
否 重装故障FM节点
联系华为 技术支持
节点的
否 HA状态
是否正 常

配置单点登录 (可选)
物理基础架构
以云服务自动化管理和资源智能运维为核心,构筑“敏捷、精简”的云数据中心管理体验
FusionManager故障处理一般流程
• 任务中心的错误提示 • 查阅在线帮助 • 按在线帮助步骤处理
看告警
• 查看系统告警 • 按告警帮助步骤处理
看错误提示
• 查看FusionManager日 志
• 搜寻日志关键字错误 • 根据日志提示处理
排除故障
单节点FM故障处理流程
FusionManager主备部署时,单个FusionManager虚拟机故障,
且重启该虚拟机后业务仍无法恢复时,需要参考本故障处理
操作,使业务快速恢复正常。
是否能 VNC登录

FM

06 FusionAccess故障处理

06 FusionAccess故障处理

WinRM:检查重命名、加域、写注册表是否成功
WinRM:添加Tomcat域账户,删除vdesktop_user本地账户 更新虚拟机名、加入虚拟机组
选择一个HDC、加入桌面组,关联用户
保存新虚拟机名 更改虚拟机显示名称
WinRM:将用户加入权限组
VM
AD
重命名 写注册表 加域
快速封装虚拟机发放不成功时,参考该流程,逐步分析可能的故障点。
版权所有© 2016 华为技术有限公司
第3页
FusionAccess故障概览
登录连接 故障
性能体验 故障
外设使用 故障
业务发放 故障
FusionAccess 故障
软件兼容 故障
版权所有© 2016 华为技术有限公司
第4页
目录
1. FusionAccess故障简介 2. FusionAccess业务发放故障处理 3. FusionAccess登录连接故障处理 4. FusionAccess性能体验故障处理 5. FusionAccess外设使用故障处理 6. FusionAccess备份与恢复 7. FusionAccess高危操作一览表
第9页
完整复制发放流程
ITA
用户下发任务
创建任务 创建查询任务
DB
查询模板 创建虚拟机
FC
HDC
创建虚拟机
WinRM:根据虚拟机IP获取虚拟机名,如果AD上有重名则重命名 WinRM:虚拟机加域
加入虚拟机组
WinRM:添加Tomcat域账户,删除vdesktop_user本地账户
选择一个HDC、加入桌面组,关联用户
管理员创建和发放虚拟机过程中遇到的故障。
如创建虚拟机失败、虚拟机关联失败、虚拟机加域失败等。

嵌入式系统中的异常处理与错误检测方法

嵌入式系统中的异常处理与错误检测方法

嵌入式系统中的异常处理与错误检测方法嵌入式系统是一种专门设计用于控制和驱动各种设备或系统的计算机系统。

由于嵌入式系统通常在一些关键的应用领域中运行,例如航空航天、医疗设备和汽车等,因此其可靠性和稳定性至关重要。

然而,在复杂的硬件和软件环境下,异常和错误不可避免地会发生。

因此,在嵌入式系统中,异常处理与错误检测方法是至关重要的组成部分。

异常处理是指对于嵌入式系统中出现的异常情况进行相应的处理和恢复。

异常可以是由于硬件故障、软件错误、通信异常或外部干扰等原因引起的系统中断或异常情况。

对于这些异常情况,嵌入式系统需要具备相应的机制来进行处理,以保证系统的正常运行和稳定性。

首先,嵌入式系统可以利用异常处理机制来对硬件故障进行检测和处理。

例如,当嵌入式系统中的硬件组件出现故障或错误时,例如存储器错误、时钟故障或信号丢失等,系统可以通过使用硬件监控器和故障检测电路来检测和分析这些异常情况。

一旦检测到异常情况,系统可以通过适当的措施来进行错误处理和恢复,例如重新启动、重置或切换备份系统等。

其次,嵌入式系统还可以利用软件异常处理来对软件错误进行检测和处理。

软件错误可能包括程序错误、数据异常或算法错误等。

为了检测和处理这些软件错误,嵌入式系统可以采用软件调试和异常处理技术。

例如,系统可以通过在程序中插入断言语句、错误检测代码和异常处理函数来实现对软件错误的检测和处理。

当软件错误发生时,系统可以根据错误类型和严重程度采取相应的措施,例如记录错误信息、打印错误日志或进行错误恢复等。

此外,嵌入式系统还可以利用通信异常处理来对外部通信异常进行检测和处理。

在嵌入式系统中,与外部设备或系统的通信是常见的操作。

当外部通信发生故障或异常时,系统可以通过使用适当的通信异常处理机制来检测和分析这些问题。

例如,系统可以通过检测通信时延、校验和错误码等指标来判断通信是否正常。

一旦检测到通信异常,系统可以采取相应的措施,例如重新发送消息、切换通信通道或通知用户等。

FusionCompute运维故障处理指南

FusionCompute运维故障处理指南
故障
不能添加、修 改、删除存储
资源
不能关联存储 资源
存储设备 故障
扫描不到存储 设备
数据存储 故障
添加、修改、 移除数据存储
异常
关联、解关联 主机异常
数据存储异常
虚拟磁盘 故障
创建、绑定、 解绑定、删除 虚拟磁盘异常
调整容量异常
快照异常 迁移异常
第20页
存储资源、存储设备故障点分析
第3页
FusionCompute功能简介
计算池
• 提供站点下集群与主机资源的监控、管理和维护功能。
存储池
• 提供站点下存储资源、数据存储与磁盘管理功能,并可为系统增添共 享存储设备。
网络池
• 提供分布式交换机和网络资源的维护和管理。
虚拟机和模板
• 提供虚拟机资源的监控、管理、维护和模板属性规格管理的功能。
第13页
系统接口故障点分析
• 网口绑定异常 • 业务管理接口异常 • 存储接口异常
故障点
可能的故障原 因
• 网络异常 • 主机异常 • VRM异常
• 排除网络故障 • 修复主机 • 修复VRM
排除故障
系统接口涉及到底层网络硬件,主机和VRM节点,排除故障时可自顶 向下快速定位故障层次,然后再自底向上逐步排除故障点。
第2页
目录
1. FusionCompute故障简介 2. FusionCompute主机和集群故障处理 3. FusionCompute存储故障处理 4. FusionCompute网络故障处理 5. FusionCompute虚拟机和模板故障处理 6. FusionCompute日常操作维护故障处理 7. FusionCompute高危操作一览表 8. 典型案例
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1God Class1.1特征上帝类通常为过多的操做其他类的数据,从而破坏了类的封装性。

上帝类从其他类中获得功能,同时增加了自身的耦合性,通常会导致自己体积过大和较大的复杂度。

判断一个上帝类的标准有:1.CPFD (Capsules Providing Foreign Data) 从多个不相关类(模块)中引用数据2.WOC(Weighted Operation Count)类的所有函数的圈复杂度之和超过653.TCC (Tight Capsule Cohesion)TCC < 1/3 类需要具有低内聚的特性(类中直接相关的方法与全部方法之比小于1/3),也就是较少的private方法4.需要同时满足以上条件才可以被认定为上帝类1.2修改破坏CPFD, WOC, TCC 中的一个。

2Message Chains2.1特征过度耦合的消息链如果你看到用户向一个对象索求(request)另一个对象,然后再向后者索求另一个对象,然后再索求另一个对象……这就是Message Chains。

实际代码中你看到的可能是一长串getThis()或一长串临时变量。

采取这种方式,意味客户将与查找过程中的航行结构(structure of the navigation)紧密耦合。

一旦对象间的关系发生任何变化,客户端就不得不做出相应修改。

Infusion通常会寻找具有较多调用其他类数据访问接口的方法,而且会检查返回值是否匹配。

2.2修改采用“隐藏委托关系”修改。

先观察Message Chains最终得到的对象是用来干什么的,看看能否以Extract Method 把使用该对象的代码提炼到一个独立函数中,再运用Move Method 把这个函数推入Message Chains。

3 FeatureEnvy3.1 特征函数对某个class的兴趣高过对自己所处之host class的兴趣。

最通常的焦点便是数据,通常为某个函数为了计算某值,从另一个对象那儿调用几乎太多取值函数(getting method)。

ATFD(Access To Foreign Data)方法从外部获取了数据LDA(Locality of Data Accesses)内部变量与所有可以获取数据方法之比<1/3,也就意味着该方法过多的使用了外部数据,而非自身数据。

FDP(Access To Foreign Data)数据来源于很少几个类3.2 修改如果一个类A使用了类B的过多数据来完成某项操作或计算,那改操作就应该放在B类中。

针对ATFD,通常较难进行修改,除非该类不访问其他类。

针对LDA,可以采用增加类本身的成员变量来进行修改,提高LDA比值。

针对FDP,可以考虑将类B拆分为多个类,从而增加FDP个数。

4Blob Class4.1特征可以译为复杂类,它具有体积大,高度复杂的特征,因而难以维护。

除此之外,如此大的类(通常超过千行)大大增加了与外部类耦合的可能性,并降低了自身的内聚性。

附加Infusion判断blob class的标准:4.2修改修改时可以根据4.1给出的标准破坏其判断条件。

5 Blob Module5.1 特征类似于blob class,指模块高度复杂且体积过大。

它的检测标准非常类似于blob class,只有稍微的不同:在面向过程语言中,函数中的长参数列表是正常的。

5.2 修改一般情况下通过拆分模块或类降低规模和复杂度。

6 Cyclic Dependencies6.1 特征循环依赖,也即在依赖结构中存在有“环”。

这种设计缺陷出现在系统及子系统级别,如果两个或更多的子系统相互依赖,维护和重用几乎是不可能的。

Infusion的检测规则使用与面向对象和面向过程代码。

检测工具会绘制依赖图,并根据此图判断是否存在循环依赖。

6.2 修改略7 Data Class7.1 特征数据类是单纯的数据持有者,它通常不包含复杂的功能,但是会被其他类频繁和密切的引用。

缺乏功能意味着这个类的数据和操作是分离的,不符合面向对象的特征。

Data class缺乏封装性,由于允许其他类较为自由的存取其内部数据,导致data class较为脆弱和难以维护。

Infusion在检测时会判断data class的特征:轻量级类,包含大量的get和set方法(或public 属性)。

7.2 修改将它处的方法移到data class中,提高其封装性;或编写高复杂度函数。

8 Data Clumps8.1 特征数据泥团,是《重构》提到的代码坏气味的一种。

“喜欢成群结队地待在一块儿。

你常常可以在很多地方看到相同的三或四笔数据项:两个classes内的相同值域(field)、许多函数签名式(signature)中的相同参数。

”也就是一组数据重复出现,如一组数据从一个方法传递到另外一个方法,这些数据完全可以抽取为一个对象来进行处理。

8.2 修改将这些参数抽取为对象。

9 Data Module类似于data class,可以翻译为数据模块。

为面向过程的设计缺陷。

一个模块暴漏了太多数据,但自身却没有完成什么功能,也即太过开放。

检测规则非常容易:提供了过多数据为外部访问;复杂度过低10. Distorted Hierarchy10.1 特征扭曲的层次通常指继承层次过窄和过深。

研究表明人的记忆难以记住超过6的层次,因此此类缺陷常常导致代码难以维护。

除此之外,它还可能预示着代码存在封装性的问题,或是划分的粒度太细。

10.2 修改修改不合理的继承层次,渐少深度和增加广度(多个类继承自某父类,则该父类具有较高的广度)。

11 God Module11.1 特征类似于God Class,该module的规模和复杂度高,低内聚以及访问过多的外部数据。

11.2 修改破坏检测条件,如拆包,降低复杂度和外部依赖。

12 Intensive Coupling12.1 特征过紧的耦合一个经常被提到的紧耦合的例子是:某个方法与系统中的多个方法相关,而这些方法位于某个或很少几个类之间。

这表明该方法与其他方法提供类之间的通信太过冗长了。

这种设计缺陷通常意味着一个微妙的问题:provider类没有抽象层逻辑提供合理的服务,导致耦合方法必须要频繁通信。

在infusion的检测方面:耦合方法调用了许多外部方法;外部方法位于一个类或少数几个类。

12.2 修改将耦合方法中依赖的外部方法提取和抽象,将逻辑封装到provider类中。

13 Refused Parent Bequest13.1 特征被拒绝的遗赠继承关系是比类协作关系更为特殊和紧密的关系,它基于子类从父类继承成员的基础上(变量和方法),但如果子类拒绝使用父类中提供的方法或变量,这表明继承关系存在问题。

13.2 修改修改类的继承关系,将不使用的属性和方法拆分的另外的类。

14 SAP Breaker14.1 特征SAP Stable Abstractions Principle 稳定抽象原则,也即包的抽象程度与其稳定程度一致这种缺陷表明包,或者类破坏了SAP原则。

SAP原则有两种基本情况:如果一个子系统提供了较多的抽象,则它更应位于层次设计的底层,由其他的子系统来引用,这也表明它具有较高的稳定性,也即高抽象性高稳定性。

另外,如果一个子系统的抽象较少,就是是他更多的处于调用者的角色,依赖下层子系统,则它位于层次设计的上层,且具有较低的稳定性,也即低抽象性低稳定性。

SAP Breaker破坏了这种抽象原则。

14.2 修改修改层次设计,从抽象程度和稳定性上修改。

一般在成型系统中,抽取接口较为简单。

15 Schizophrenic Class15.1 特征精神分裂的类一个类本应承担一种抽象,完成一类责任,但该类确完成两种或以上的抽象,会影响对类的理解和修改。

Infusion通过如下规则检测该缺陷:低内聚,定义大量接口,以及被不同的client使用。

15.2 修改将不同的职责分割到其他类中去。

16 Schizophrenic Module16.1 特征精神分裂的模块检测规则类似于“精神分裂的类”。

16.2 修改将职责提取到不同的module17 Shotgun Surgery17.1 特征霰弹式修改,直观的讲,就是修改该方法会引出其他大量的修改。

而且这种修改是分布的,并不集中于某一类或某个包。

存在这种缺陷的方法常常被称为“瓶颈方法”,该方法通常具有很高的复杂度,引用大量的外部方法并被众多方法调用,极有可能引入bug。

在《重构》包含有对“霰弹式修改”的定义:Shotgun Surgery类似Divergent Change,但恰恰相反。

如果每遇到某种变化,你都必须在许多不同的classes内做出许多小修改以响应之,你所面临的坏味道就是Shotgun Surgery。

如果需要修改的代码散布四处,你不但很难找到它们,也很容易忘记某个重要的修改。

下面给出infusion的检测规则:17.2 修改“这种情况下你应该使用Move Method 和Move Field 把所有需要修改的代码放进同一个class。

如果眼下没有合适的可以安置这些代码,就创造一个。

通常你可以运用Inline Class 把一系列相关行为放进同一个class。

这可能会造成少量Divergent Change,但你可以轻易处理它。

”-《重构》18 Significant External Duplication18.1 特征显著的外部重复,也即在系统包层面上的重复。

代码重复破坏了系统的唯一性,将导致代码规模增大以及提高问题定位的难度。

抽取公共代码19 Significant Internal Duplication 19.1 特征显著的内部重复在类或模块间的代码重复,提高维护难度。

19.2 修改提取公共代码20 Significant Sibling Duplication 20.1 特征显著的家族重复即存在于继承层次上的重复,一般指继承层次中的同一层次。

提取公共代码到父类。

21 Tradition Breaker21.1 特征传统破坏者,即子类拒绝父类提供的方法和属性,也即破坏了“继承”这一传统。

在JAVA 中,可以通过在子类中重写方法来完成。

这种缺陷意味着子类的定义或者继承关系存在不合理。

检测方式有两个标准:子类重写了父类方法或使用了非公用继承。

21.2 修改重新检视和修改继承关系。

22 Unnecessary Coupling22.1 特征不必要的耦合通常指在C++中引用了不必要的头文件,从而增加的耦合性。

22.2 修改去掉不使用的头文件。

23 Unstable Dependencies23.1 特征不稳定的依赖值子系统需要依赖比其更为稳定的子系统,至少是同样稳定,违反改原则则为不稳定的依赖。

相关文档
最新文档