首页 理论教育 考察现有度量方法-完美软件开发中的关键

考察现有度量方法-完美软件开发中的关键

时间:2023-11-21 理论教育 版权反馈
【摘要】:圈复杂度圈复杂度主要用于度量函数或方法,从《代码大全》中可以找到圈复杂度的描述。关于圈复杂度,Tom McCabe曾经建议使用下面的方法来度量复杂度。—Steve McConell,《代码大全》很多静态分析工具都直接提供对圈复杂度的度量,而圈复杂度本身歧义性很小,圈复杂度大于15的函数或方法基本上是有问题的,是非常难得的指标。但圈复杂度更适合用于度量编码的结果,对高层设计则不太适用。包的输入耦合度是指处于包外部,但依赖于包内类的数目。

考察现有度量方法-完美软件开发中的关键

下面是当前找到的和度量复杂度有关的方法。

(1)圈复杂度

圈复杂度主要用于度量函数或方法,从《代码大全》中可以找到圈复杂度的描述。关于圈复杂度,Tom McCabe曾经建议使用下面的方法来度量复杂度。在这一方法中为了计算复杂度首先要计算子程序中的决策点(Decision Points),规则如下:

◆从函数第一行一直往下通过程序。

◆一旦遇到以下关键字或者同类的词就加1:if,while,repeat,for,and,or。

◆给case语句中的每一种情况加1。

—Steve McConell,《代码大全》

很多静态分析工具都直接提供对圈复杂度的度量,而圈复杂度本身歧义性很小,圈复杂度大于15的函数或方法基本上是有问题的,是非常难得的指标。但圈复杂度更适合用于度量编码的结果,对高层设计则不太适用。

(2)响应集

响应集是指类的各个方法直接调用的函数数目。响应集应该尽可能的小,根据得墨忒耳法则:某个对象的任何方法都应该只调用属于以下情形的方法。

—摘自《程序员修炼之道》

(3)关系内聚性(H)

在度量包时可以用包内部类的数目除以包内类的总数,其比值用来表示包的内聚性。如果用R表示包内部得类关系数目,用N表示包内类总数。那么:(www.xing528.com)

H=(R+1)/N

(4)不稳定性(I)

不稳定性由输入耦合度(Ca)与输出耦合度(Ce)计算而来。

包的输入耦合度是指处于包外部,但依赖于包内类的数目。

包的输出耦合度是指包内部的依赖于包外部类的类数目。

这样I=Ce/(Ca+Ce)

(5)抽象性(A)

包的抽象性用抽象类的数目和包中所有类的数目进行计算。

假如包中类的总数是Nc,抽象类的数目是Na,那么抽象度A=Na/Nc

关系内聚性(H),不稳定性(H),抽象性(H)的进一步说明,请参见《敏捷软件开发:原则,模式与实践》一书。这些度量指标无疑是有意义的,但却不解决这样一个问题:

如果一个方案在关系内聚性(H),不稳定性(H),抽象性(H)上都有好的表现,复杂度有没有提高?如果说复杂度因此而提高了,那么这种额外支出的复杂度值不值得?

如果我们认为复杂度是软件的根本问题,那么在满足需求的前提下,使软件简单化就是最关键的使命(比灵活性等重要)。既如此,为什么不直接度量复杂度呢?

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈