面向对象的设计法确保软件的健壮性

原创 2005年02月21日 11:56:00

软件设计的质量在很大程度上受到系统封装关系的影响。模块间松耦合而模块内部又保持高度一致性是高质量设计软件的关键之一。所以,评定软件设计的水平的手段之一就是考察它的模块间的关系。对系统的可重用性和可维护性水平的客观评价是一个评价软件结构的重要组成部分。我在本文介绍的度量标准可以帮助你客观评定你的软件设计的质量。

 
Nokia_S60_728x90.gif Nokia_S60_728x90.gif tech;sz=1x1;ord=191907387?

尽管度量标准可以对我们的软件设计质量起着指导和反馈的作用,但是你要牢记我在本文提出的度量标准并不是软件设计的唯一依据。设计质量分数的高低未必一定对应于真实软件设计质量的高低,但是不太可能出现那种设计水平很高,但是在我们这种度量标准下,分数却很低的情况。我们提出软件设计质量度量标准的目的在于帮助设计者正确评估他们自己的设计,更重要的是帮助你检测设计的水平是否达到预期目标。

测试稳定性

稳定性指的是修改软件中某个模块而不影响其它模块的困难程度。让我们看看模块间的依赖关系是如何影响到稳定性的。

一个模块在软件中重用的次数越多,那么就越依赖于它。模块的输入依赖性越强(较多的其它模块依赖本模块),则它的稳定性得分也就越高(即难以修改)。换句话来说,其它模块越依赖于本模块,那么修改本模块而不影响其它模块也就越困难。模块的输入依赖性和输出依赖性是评测模块稳定性和不稳定性的重要方面。模块的输出依赖性强、输入依赖性弱,则稳定性低(即容易修改),这是因为对变化不会扩展到很多其它方面。另一方面,模块的输入量越多,它就越难以修改,则越稳定。稳定性可以通过计算输入量和输出量来计算。

输入耦合度代表依赖本模块的其它模块数,输出耦合度代表本模块所依赖的其它模块数。不稳定度可以通过输出耦合度与总的耦合度的比例来得到。计算公式如下:I = Ce/(Ce + Ca)

  • I 代表该模块的不稳定度
  • Ca代表该模块的输入耦合度,即输入依赖度
  • Ce代表本模块的输出耦合度,即输出依赖度

如果I的值接近于零,那么模块的输入依赖性就远远大于输出依赖性,模块也就越稳定。模块越稳定也就越难以修改,因为某个变化会衍生出许多新的变化,波及到依赖它的其它模块上了。对I值接近于一的模块来说,它的输出依赖性远远大于输入依赖性,模块很不稳定。由于受本模块影响的模块不多,所以不稳定的模块容易修改。看到这些,你也许会感到很困惑,“到底我应该让模块的稳定性高一些好,还是低一些?”

由于组成一个软件的一整套模块中,有些模块有输入依赖性(被其它模块引用),而有些模块有输出依赖性(引用其它模块)。我们在设计模块不应该追求完全的稳定性或者不稳定性,而是具体考虑某个模块需要的是稳定性还是不稳定性并尽可能实现。输入依赖度比较强的模块必须拥有较高的抗可变性,展现较高程度上的稳定性。在面向对象的开发方法中,抽象性通过分离功能和功能的实现方法来提高稳定性。对Java来说,抽象类和界面(interface)显然就是抽象性的表现形式。因此,越需要稳定的模块应该有越高的抽象层次。与此对应,越不稳定的模块也就越具体。

测量抽象性

你可以通过计算模块内抽象类(或者界面)的数目与所有类的数目的比例来测出该模块的抽象程度。抽象度可以用下面的公式计算:
A=Na/Nc

  • A 代表模块的抽象程度
  • Na代表模块中抽象类或者界面的数目
  • Nc代表模块中具体类的数目

抽象度等于零表示该模块是一个完全抽象的模块,而抽象度等于一代表它是完全具体的模块。

评估度量标准

Nokia_S60_728x90.gif Nokia_S60_728x90.gif tech;sz=1x1;ord=1307950774?

比较抽象度和稳定度,你可以发现一些更有趣的结论。完全不稳定的抽象模块也是完全抽象的、并且输入依赖度为零。相反,完全稳定、输入依赖度较大的模块意味它有较多的频繁使用的具体类。

这是因为抽象性把变换和实现分隔开来。变动频繁使用的具体类会衍生出许多新的变化,这些变化可能会波及整个软件。所以,你应该在具体类中尽量降低模块的输入依赖性。换句话来说,设计模块时要确保抽象性和输入依赖性、具体性与输出依赖性成比例。

评估设计质量的有效辅助工具

本评估方法可以帮助你提高软件强壮性。尽管好的度量方法并不能保证高质量的设计自然就会产生,但是它确实可以帮助你加强信心。在正确灵活的使用下,本方法是评估软件设计质量的宝贵手段。

 

作者: BUILDER.COM

软件设计目标—健壮性

import java.io.*; public class CommandLineCalculator { private int accumulatedValue=0; public C...
  • LY_624
  • LY_624
  • 2017-05-22 16:44:17
  • 524

程序的健壮性和鲁棒性

一、健壮性 健壮性是指软件对于规范要求以外的输入情况的处理能力。 所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。 另外健壮性有时也和容错...
  • bigpudding24
  • bigpudding24
  • 2015-10-12 10:22:34
  • 7415

如何提高程序的健壮性,增加判断。

如果后台在返回的时候少了一个属性?前端会不会报错,这是我们前端开发一定会遇到的问题。那么如何的提高程序的健壮性呢。 关于这个问题,我们可以在实例化这个对象的时候进行判读来增加程序的健壮性。下面是一个...
  • qq_29678299
  • qq_29678299
  • 2016-04-02 19:45:10
  • 1089

谈系统设计之面向对象设计方法

谈系统设计之面向对象设计方法                                                                   误解 刚开始出道,从事C++编程,...
  • AntiSoul
  • AntiSoul
  • 2012-06-09 23:23:01
  • 3429

基于面向对象的软件分析与设计实验教程.衣扬.肖志娇.顾春琴.扫描版.pdf

  • 2014年05月27日 21:42
  • 22.19MB
  • 下载

健壮性图

健壮性图 1.设计模型 这里要解释一下什么是架构模型什么是设计模型。 架构模型:软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述...
  • A1342772
  • A1342772
  • 2017-12-23 21:10:09
  • 238

【架构设计】【程序指标】鲁棒性与健壮性的细节区别

本文转自:http://blog.csdn.net/bigpudding24/article/details/49069805 一、健壮性 健壮性是指软件对于规范要求以外的输入...
  • xylin1012
  • xylin1012
  • 2017-05-14 11:57:27
  • 469

程序健壮性

写了一年多的代码,不生不熟。很多代码
  • shengshiqing
  • shengshiqing
  • 2014-05-25 20:56:08
  • 2119

JAVA————一门强大的面向对象编程语言

JAVA————一门强大的面向对象编程语言 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两...
  • yuxy36
  • yuxy36
  • 2017-12-11 21:14:09
  • 1816

边界测试、健壮测试的测试用例个数:

在边界测试中,对于有n个输入变量的程序,基本边界值分析的测试用例个数为4n+1。 在健壮性测试中,对于有n个输入变量的程序,健壮性测试的测试用例个数为6n+1。 对于有n个输入变量的程序,...
  • skyxmstar
  • skyxmstar
  • 2017-04-07 16:05:30
  • 1915
收藏助手
不良信息举报
您举报文章:面向对象的设计法确保软件的健壮性
举报原因:
原因补充:

(最多只允许输入30个字)