软件的可维护性和可复用性

目录

1.软件系统的可维护性

1.1一个典型的软件生命周期

1.2真正的原因

1.3设计的目标

2.软件系统的可复用性

2.1复用的重要性

2.2设计原则


对于面向对象的软件系统设计来说,在支持可维护性(Maintainability)的同时,提高系统的可复用性(Reuseability)是一个核心问题。

 

1.软件系统的可维护性

1.1一个典型的软件生命周期

  1. 软件项目开始了。系统设计师拿到了系统设计要求(正规文件、几页纸或一个口头协议等等),开始进行系统设计。
  2. 设计师头脑--->详细的设计文档--->系统原型--->实现为交付客户使用的成品。
  3. 设计师、开发者、客户等都看着这个完美的系统运行着。
  4. 不久,客户给系统提出了“小小的”修改意见(可能是客户遗忘的或新加的“小”要求)。
  5. 系统设计师经过讨论,给出了修改的方案,修改和现有系统可能不相容,方案仅仅是权宜之计,只不过“小小的”修改,还不至于那么糟糕。
  6. 事情并没有结束,类似的问题一再发生,系统就由一些“小小的”毛病积累为“大大的”肿瘤,以至于没人愿意去维护它。天天在抱怨这个设计师。
  7. 经过漫长的时间之后,实在无法忍受系统维护的昂贵,不得不再次投入一笔钱,来设计一个新系统(包括死去的旧系统所有功能,再外加一些新功能)。
  8. 然后呢?新系统的命运又如何呢?

1.2真正的原因

导致一个软件设计的可维护性较低,也就会随着性能要求的变化而“腐烂”的真正原因有四个:

1.过于僵硬

很难在一个软件系统里加入一个新的功能,哪怕是很小的都很难。这是因为加入一个新功能,不仅仅意味着建造一个独立的新模块,而且因为这个新功能会波及很多其他模块,最后变成跨越几个模块的改动。使得一个起初只需要几天的工作,最后演变成持续两个月的连续作战。由于这种设计上的缺陷,使得项目经理不敢轻易向系统中加入新功能。这就造成一个软件系统一旦做好,就不能增加新功能的僵硬化情况。

2.过于脆弱

与软件过于僵硬同时存在的,是软件系统在修改已有代码时过于脆弱。对一个地方的修改,往往会导致看上去没什么关系的另一个地方发生故障。

3.复用率低

所谓复用,就是指一个软件的组成部分,可以在同一个项目的不同地方甚至另一个项目中重复使用。

每当程序员发现一段代码、函数、模块所做的事情是可以在新的模块、或者新系统中使用的时候,他们总是发现,这些已经有的代码依赖于一大堆其他的东西,以至于很难将它们分开。最后,他们发现最好的办法就是不去“碰”这些已有的东西,而是重新写自己的代码。他们可能会使用源代码复制的办法,以最原始的复用方式,节省一些时间。

这样的系统就有复用率低的问题。

4.黏度过高

有的时候,一个改动可以以保存原始设计意图和原始设计框架的方式进行,也可以以破坏原始意图和框架的方式进行。第一种办法无疑会对系统的未来有利,第二种办法是权宜之计,可以解决短期的问题,但是会牺牲中长期的利益。

如果第二种办法比第一种办法要容易很多的话,程序员就有可能牺牲中长期的利益,采取权宜之计:在模块中搭建一个短路桥,或者在一个通用的逻辑中制造一个特例,以便解决眼前的需要。

一个系统的设计,如果总是使得第二种办法比第一种办法容易,就叫做黏度过高。一个黏度过高的系统会诱使维护它的程序员采取错误的维护方案,并惩罚采取正确维护方案的程序员。

1.3设计的目标

一个好的系统设计应该有如下的性质:可扩展行(Extensibility)灵活性(Flexibility)可插入性(Pluggability)

  • 可扩展性

新的功能可以很容易的加入到系统中去,就是可扩展性。是系统“过于僵硬”的反面。

  • 灵活性

可以允许代码修改平稳地发生,而不会波及到很多其他的模块,这就是灵活性。是系统“过于脆弱”的反面。

  • 可插入性

可以很容易地将一个类抽出来,同时将另一个有同样接口的类加入进来,这就是可插入性。是系统“黏度过高”的反面。

 

怎样才能做出一个符合这三项要求的设计呢?关键是恰当地提高软件的可维护性和可复用性。

2.软件系统的可复用性

“复用”(Reuse)有时译作“重用”,是重复使用的意思。

2.1复用的重要性

软件的复用的好处有:

  1. 较高的生产效率

  2. 较高的软件质量

  3. 恰当的使用复用可以改善系统的可维护性

2.2设计原则

下面列出的设计原则是在提高一个系统的可维护性的同时,提高系统的可复用性的指导原则。

  • “开-闭”原则(Open-Closed Principle,或者OCP)

  • 里氏代换原则(Liskov Substitution Principle,或者LSP)

  • 依赖倒转原则(Dependency Inversion Principle,或者DIP)

  • 接口隔离原则(Interface Segregation Principle,或者ISP)

  • 组合/聚合复用原则(Composition/Aggregation principle,或者CARP)

  • 迪米特法则(Law of Demeter,或者LoD)

这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值