您可以将系统的传出耦合和传入耦合的数量结合起来,形成另一个度量:不稳定性。通过将传出耦合除以传出传入耦合的和(Ce / (Ca + Ce)
),可以生成一个比率,表示一个稳定的包(值接近于 0)或者不稳定的包(值接近于 1)。如这个等式所示,传出耦合对包的稳定性起作用:一个包越依赖于其他包,面对更改时它越容易受到连锁反应的影响。反过来说,一个包越被依赖,它越不可能发生更改。
例如,在图 5 中,user
包的不稳定性值为 1,这表示它有一个值为 4 的传出耦合,而没有传入耦合。像 com.acme.ascp.dao
这样的包中的更改将会 影响 user
包。
在设计和实现架构时,依赖于稳定的包是有益的,因为这些包不太可能更改。类似地,不稳定的包依赖性会在发生更改时增大架构内发生间接损害的风险。
|
到目前为止,我已经介绍了传入耦合和传出耦合,前者可用来评估更改包造成的影响,后者可用来评估外界的更改如何影响包。我还谈及了抽象性度量和不稳定性度量,前者在您想要了解如何轻松地对包进行修改时很有用,后者可用来了解包依赖性如何影响某个特定的包。
还可以使用另一个度量来了解影响软件架构的因素。这个度量通过 X, Y 坐标上的一条直线来平衡抽象性和不稳定性。主序列 是笛卡儿坐标上从 X=0
和 Y=1
到 X=1
和Y=0
的一条直线,如图 6 所示:
图 6. 主序列
通过沿着这条直线绘制包并测量它们到主序列的距离,可以推断包的平衡。如果包对于抽象性和不稳定性是平衡的,它的距离就接近于 0,如果包不平衡,那么它距离主序列的距离就接近于 1,如图 7 所示:
图 7. 到主序列的距离
检查到主序列的距离 度量会产生有趣的结果。例如,上面的 user
包生成的值为 0。就一个实现包来说,这个包是平衡的,即高度不稳定。
总体来说,“到主序列的距离” 度量尝试补偿实际实现。没有代码基包含所有抽象性和不稳定性值为 1 或 0 的包 —— 多数包的值位于这两个数字之间。通过监视 “到主序列的距离” 度量,可以衡量包是否正在变得不平衡。寻找偏远的值,如值接近于 1 的包(这表示它们距离主序列尽可能地远),有助于了解特定的不平衡如何影响架构的可维护性(例如,通过脆弱性)。
在本期文章中,您已经了解几种可以持续监视的架构度量。通过代码分析工具可以报告传入和传出耦合、不稳定性、抽象性、到主序列的距离,这些代码分析工具包括 JDepend、JarAnalyzer 和 Metrics plug-in for Eclipse(参见 参考资料)。监视系统的代码耦合度量有助于您掌握可破坏架构的常见趋势,即设计刚度、包熵和不必要的依赖性。此外,根据抽象性和不稳定性来测量系统平衡将使您不断的了解系统的可维护性。
文章来源于领测软件测试网 https://www.ltesting.net/