浅谈软件质量属性之可修改性

浅谈软件质量属性之可修改性

摘要:可修改性指系统或者软件能够快速的以较高的性价比对系统进行变更的能力,本文就针对软件质量属性中的可修改性进行探讨,本文将从代码层来解答如何编码实现可修改性战术,设计可修改性的目的,解决的问题和实现的过程和难度等方面来分析可修改性战术。

关键词:可修改性;代码;质量属性;软件

Abstract: modifiability refers to the ability of the system or software to quickly change the system with high cost performance. This paper discusses the modifiability of software quality attributes, and analyzes the modifiability from the aspects of how to code to achieve modifiability tactics, the purpose of designing modifiability, the problems to be solved, the process and difficulty of implementation, etc Tactics.

Keywords : modifiability; code; quality attribute; software

​ 可修改性是指系统或者软件能够快速地以较高的性价比对系统进行更改的能力,可修改性战术的目标是控制实现、测试和部署变化的时间的成本。

1.设计可修改性目的

1.1用户需求

​ 这里就要看“需求、成本、修改”三者之间的关系了;需求无处不在,时时刻刻产生。判别一个需求的重要性来自于它对系统的成本产生的影响,如果严重影响了系统带来的的收益,那必须对系统进行修改,如果一部分相对于系统来说微不足道,则可以选择性不改。

1.2.系统内在需求

​ 系统内在的需求,比方说腾讯初期的数据库使用的是MYSQL,众所周知MySQL是一个适用于小型企业的数据库,对于起初的腾讯也是适用的,因为没有产生MySQL无法处理的大量数据及相应的实时处理业务。但是近几年来腾讯的数据爆炸产生,这就要求腾讯对数据库体系架构不断的更新优化。

1.3其他需求

技术需求、商务合作、bug等因素。

2.可修改性战术分类

2.1局部化修改战术

​ 局部化修改的目标是减少由某个变更直接影响的模块的数量。1.预期期望的变更(expected changes):根据语义一致性原则,预测期望变更的战术并不关心模块责任的一致性,而是关心将变更的影响最小化。2.维持语义一致性(semantic coherence ):语义一致性是模块中责任之间的关系,目标是确保所有这些责任都能够协同工作,不需要过多地依赖其它模块,即这组模块的内聚性。维持语义一致性的子战术就是“抽象通用服务”,通过专门的模块提供通用服务通常被视做支持重用,比如设计数学函数sin(x)为通用函数。3.泛化模块(Generalize the module):使一个模块更通用能够使他根据输入计算更广泛的功能;模块越通用越有可能通过调整语言而非修改模块来进行请求变更;4.限制选择参数(Limit possible options:限制可能的选择将会降低这些修改所造成的影响,比如将可选择的处理器或操作系统限定在一定的范围内。

2.2防止连锁反应战术

​ 防止连锁反应的目标是限制对狙部化的模块修改,以防止对某个模块的修改简介地影响到其他模块。连锁反应——修改某个模块却影响到其他并没有被修改的模块,我们必须修改所有相关模块(直接影响和间接影响)才能够实现我们的变更目标;依赖关系——如果我们根据某种需要修改模块,那么也必须修改模块B,我们就说模块B依赖于模块A。

​ 防止连锁反应的战术:1.信息隐藏(Hide information):目的是将变更隔离在一个模块内,防止变更扩散;1.维持现有接(Maintain existing interfaces):如果B依赖于A的一个接口的名字和签名,则维持该接口及其语法能够使B保持不变。实现该战术的模式:3.限制通信路径(Restrict communication paths):限制与一个给定的模块共享数据的模块,包括生产和使用该模块的数据。4.使用仲裁者(Use an intermediary):在A与B之间插入一个仲裁者,以管理A与B之间依赖的相关活动。

2.3延迟绑定时间战术

​ 延迟绑定时间目标是控制部署时间并允许非开发人员进行修改。推迟绑定时间支持部署时间及允许非开发人员修改;可以在各个时间把决策绑定到执行系统中,在运行时绑定意味着系统已经为该绑定做好了准备,并且完成了所有的测试和分配步骤;推迟绑定时间还能够使最终用户或系统管理员进行设置,或提供影响行为的输入。

3.代码层次描述示例

3.1功能封装

​ 对于功能的实现要封装于独立的类中。大型软件就是划分为多个模块,例如淘宝的搜索模块、商品信息模块等等。这样在修改的时候只需修改对应的模块即可,而不会对其他的模块产生影响。增加新模块也是同样不会对其他模块产生影响。

3.2减少类之间的依赖

​ 例如:桥接模式,在桥接模式中:将颜色类与形状类之间的耦合度降低,增加了两个类的独立性。修改其中的任何一个维度,在其对应的类中修改即可而不需要做整体的修改。例如修改颜色,只需要在颜色类中增加相应的颜色,并在组合函数中调用即可。

3.3只提供必要的接口

​ 这个简单的理解就是代码中尽量使用private和protected去代替public。这样就具有了减少了信息暴露,在修改时,避免了同名函数之间的影响

3.4抽取公共代码

​ 对于使用量大的一段代码就可以直接单独封装。例如设计网页中的CSS文件,对于网页的样式修改就可以直接在CSS文件中修改全部网页。

4.结语

​ 可修改性是对于应用的架构所作的修改的容易程度。可修改性能够被进一步分解为在下面所描述的可进化性、可扩展性、可定制性、可配置性和可重用性。基于网络的系统的一个特殊的关注点是动态的可修改性,它要求在对一个已部署的应用做修改时,无需停止和重新启动整个系统。即使有可能建造一个完美地匹配用户需求的软件系统,那些需求也会随时间发生变化,就像社会的变化一样。因为基于网络的应用中的组件可能跨多个组织边界来分布,系统必须准备好应对逐渐的和片段的修改,一些旧的组件实现将会与一些新的组件实现共存,而不会妨碍新的组件实现使用它们的扩展功能。

posted @ 2021-04-09 22:40  Mr_WildFire  阅读(825)  评论(0编辑  收藏  举报