紧张的世界

如果所有的质量特征都是很容易彼此调和的,那么软件工程师可能(几乎)就是多余的了。管理互相冲突的需求和约束是工程学中需要研究的问题,在软件质量问题中,冲突和约束也非常之多。图1-3中,使用弹簧弹力模型描述了各种质量特征之间最显著的冲突。每条连线都表示其端点的两个特征之间无法融洽共存:对其中任何一个进行改进,往往都会破坏另一个。

值得注意的是,6个主要特征中的每一个都与其他5个主要特征有冲突。以可用性为例,存在极少数的情况,程序实在写得太糟糕,只要简单地删除一些代码元素就可以改善程序的可用性。而在大多数情况下,改善可用性需要增加代码:这里加点儿自动化功能,那里加点儿时髦的GUI元素,在其他什么地方再加点儿特殊处理。因此,改善软件的可用性通常会导致程序的效率表现下滑:程序更大也更慢。而且,额外增加的代码会导致程序更难维护,可靠性下降。此外,很多可用性好的窗口小程序通常都是在特定平台上才能运行的,因此会导致程序更难以移植。最后,功能性与可用性之间通常需要权衡:通常特性越多程序越复杂,而各种安全部件总是让用户困惑。功能性的情况与可用性是类似的:更多的特性意味着更多的代码,这意味着增加了维护、可靠性、可用性、兼容性及效率方面的问题。

效率冲突背后的基本原理有所不同。高效率的算法与数据结构通常都是复杂的,结果将导致相应的代码在可维护性与可靠性上表现不足。此外,有些效率度量只适用于特定平台,因此就限制了软件的可移植性。效率与准确性之间亦存在冲突:精确的计算耗时更多,精确的表示需要更多空间。

对于可移植性,道理很简单:任何比在控制台输出“hello world”更复杂的程序都要面对可移植性问题,围绕这些问题来编码会影响软件的高效性、可维护性、可靠性、可用性及功能性。

在大多数情况下,可维护性与可靠性会被其他因素影响,而不是反过来影响其他因素。然而,可靠性的要素之一—容错性,会因其复杂性而直接从整体上直接影响软件的成熟性与可维护性,尤其会影响易测性。

另一个有趣的关系是安全性和稳定性之间的关系。安全保障通常是很脆弱的:对软件进行小小的改动都有可能导致重大的安全问题。因此,安全特性丰富的软件很容易被改动所影响。

最后,图1-3说明了前面讨论的其他两种关系:空间与时间特性之间的反向互补关系,质量、成本和时间三者之间互相纠缠的关系。

 

1-3  质量特征间的冲突

 

 

 

本文节选自《代码质量》一书

(希)斯宾耐立思(Spinellis,D.)著

左飞,吴跃,李洁译

电子工业出版社出版

 

 图书详细信息: