第1章 缺陷综述
像前言中提到的那样,软件产品与传统产品有着鲜明的特征,如不可见性、灵活性、复杂性等。
不可见性:与传统的工程项目不同,软件的客观存在不具有空间的形体特征,当使用图形来描述软件结构时,它是很多相互关联、重叠在一起的图形(这些图形可能描绘控制流程、数据流、依赖关系、时间序列、名字空间的相互关系等,通常结构层次复杂)。同时,软件项目的进展是不能立即看到的,这不仅限制了个人的设计过程,也严重地阻碍了用户、公司以及程序员相互之间的交流。通常的软件项目管理就是要使原来不可见的进程可视化。
灵活性:软件可以方便地被改变,这是其长处之一。但是当人们发现软件很有用时,会在原有应用范围的边界,或者超越边界的情况下使用它,软件功能越多,越是如此。感受变更压力最大的部分(作为纯粹思维活动的产物),可以无限扩展。功能扩展的压力主要来自那些喜欢基本功能,又对软件提出了很多新用法的用户们。由于软件可以很容易地进行修改,这就意味着软件系统一旦与一个物理实体相融合,必要时,客户就期望改变软件来适应实体,而非改变实体。因此相对其他实体内容,软件系统很可能需要经常变更。
复杂性:软件的复杂度是其必要属性,不容简化。从规模上,软件实体可能比任何由人类创造的其他实体要复杂,因为没有任何两个软件部分是相同的(至少是在语句的级别上,如果有相同的情况,我们会把它们合并成供调用的子函数);从扩展方式上,也不仅仅是相同元素重复添加,而必须是不同元素实体的添加(通常,这些元素以非线性递增的方式交互),因此整个软件的复杂度以更大的非线性级数增长;从管理上,使得全面理解问题变得困难,妨碍了概念上的完整性,也使所有离散出口难以寻找和控制。
为此,在对软件质量进行评价时应遵守如下原则。
(1)应强调软件总体质量(低成本、高质量),而不应片面强调软件正确性,忽略可维护性、可靠性、可用性与效率等。
(2)应在软件工程化生产的整个周期的各个阶段都注意软件的质量,而不能只在软件最终产品验收时注意质量。
(3)应制定软件质量标准,不能仅局限于定性地评价软件质量,应采用同行评审和度量等多种方法来定量地评价软件质量,使软件产品评价走上评测结合、以预防为主的科学轨道。