5.5 净室软件工程 ★★☆☆☆
净室 (Cleaning Room) 软件工程是一种应用数学与统计学理论开发高质量软件的工程技术,力图通过严格的工程化的软件过程达到开发中的零缺陷或接近零缺陷。净室方法要求在规约和设计中消除错误,降低软件开发中的风险,以合理的成本开发出高质量的软件。
净室软件工程 (Cleanroom Software Engineering,CSE) 是一种在软件开发过程中强调在软件中建立正确性的需要的方法。在净室软件工程背后的哲学是:通过在第1次正确地书写代码增量,并在测试前验证它们的正确性,来避免对成本很高的错误消除过程的依赖。它的过程模型是在代码增量积聚到系统的过程的同时,进行代码增量的统计质量验证。
净室是一种以合理的成本开发高质量软件的基于理论、面向工作组的方法。
5.5.1 理论基础
净室软件工程的理论基础主要是函数理论和抽样理论
1.函数理论
一个函数定义了从定义域到值域的映射。 对于特定程序来说,类似定义了(序列输入集合)到(输出集合)的映射。
一个明确定义的函数应当具有以下特性。
● 完备性:对定义域中的每个元素,值域中至少有一个元素与之对应。对程序而言,每种可能的输入都必须定义,并有一个输出与之对应。
● 一致性:在值域中最多有一个元素与定义域中的同一元素对应。对程序而言,每个输入只能对应一个输出。
● 正确性:函数的正确性可以由上述性质判断。对程序而言,某项设计的正确性可以通过基于函数理论的推理来验证。
2.抽样理论
由于不可能对软件的所有可能应用都进行测试。把软件的所有可能的使用情况看作总体,通过统计学手段对其进行抽样,并对样本进行测试,根据测试结果分析软件的性能和可靠性。
5.5.2 技术手段
净室软件工程中应用的技术手段主要有以下4种。
1.统计过程控制下的增量式开发 (Incremental Development )
增量开发基于产品开发中的控制迭代。增量开发将整个开发过程划分为一系列较小的累积增量。小组成员在任何时刻只须集中于工作的一部分,而无须一次考虑所有的事情。
2.基于函数的规范与设计
盒子结构方法按照函数理论定义了3种抽象层次:行为视图、有限状态机视图和过程视图。 规范从一个外部行为视图(称为黑盒)开始,然后被转化为一个状态机视图(称为状态盒),最后由一个过程视图(明盒)来实现。
盒子结构是基于对象的,并支持软件工程的关键原则:信息隐藏和实现分离。
3.正确性验证
正确性验证被认为是CSE 的核心,采用了这一技术,使净室项目的软件质量大幅提高。
4.统计测试 (Statistically Based Testing) 和软件认证
净室测试方法采用统计学的基本原理,即当总体太大时必须采取抽样的方法。首先确定一 个使用模型 (Usage Model) 来代表系统所有可能使用的(一般是无限的)总体。然后由使用模型产生测试用例。因为测试用例是总体的一个随机样本,所以可得到系统预期操作性能的有效统计推导。
净室软件工程是软件开发的一种形式化方法,它可以生成质量非常高的软件。它使用盒子结构规约进行分析和设计建模,并且强调将正确性验证(而不是测试)作为发现和消除错误的主要机制。
5.5.3 应用与缺点
经过一些项目实践,净室软件工程得到了认可。
缺点
1)CSE太理论化,需要一定的数学基础,其正确性验证的步骤比较困难且比较耗时。CSE 要求采用增量式开发、盒子结构、统计测试方法,普通工程师必须经过加强训练才能掌握,开发软件的成本比较高昂。
2)CSE 开发小组不进行传统的模块测试,这是不现实的。
3)CSE 脱胎于传统软件工程,不可避免地带有传统软件工程的一些弊端。