净室软件工程是一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术,力图通过严格的工程化的
软件过程达到开发中的
零缺陷或接近零缺陷。净室方法不是先制作一个产品,再去消除缺陷,而是要求在规约和设计中消除错误,然后以“净”的方式制作,可以降低软件开发中的风险,以合理的成本开发出高质量的软件。
原理
传统的软件工程建模、
形式化方法、
程序验证(正确性证明)、以及统计
SQA的集成使用已经组合成一种可以导致极高质量软件的技术。净室软件工程(Cleanroom software engineering)是一种在软件开发过程中强调在软件中建立正确性的需要的方法。代替传统的分析、设计、编码、测试和调试周期,净室方法建议一种不同的观点。
在净室软件工程后面的哲学是:通过在第一次正确地书写代码增量并在测试前验证它们的正确性来避免对成本很高的错误消除过程的依赖。它的过程模型是在代码增量积聚到系统的过程的同时进行代码增量的统计质量验证。 它甚至提倡开发者不需要进行单元测试,而是进行正确性验证和
统计质量控制。
净室方法在很多方面将软件工程提升到另一个层次。象
形式化方法技术一样,净室过程强调在规约和设计上的严格性,以及使用基于数学的正确性证明来对结果
设计模型的每个元素进行形式化验证。作为对形式化方法中采用的方法的扩展,净室方法还强调
统计质量控制技术,包括基于客户对软件的预期的使用的测试。
当现实世界中软件失败时,则充满了立即的和长期的危险。这些危险可能和人的安全、经济损失、或业务和社会基础设施的有效运作相关。净室软件工程是一个过程模型,它在可能产生严重的危险前消除错误。
净室是一种以合理的成本开发高质量软件的基于理论、面向工作组的方法。净室是基于理论的,因为坚实的理论基础是任何工程学科所不可缺少的。再好的管理也代替不了理论基础。净室是面向工作组的,因为软件是由人开发出来的,并且理论必须简化到实际应用才能引导人的创造力和协作精神。净室是针对经济实用软件的生产的,因为在现实生活中,业务和资源的限制必须在软件工程中予以满足。最后,净室是针对高质量软件的生产的,因为高质量改进管理,降低风险及成本,满足用户需求,提供竞争优势。
发展历史
净室理论基础建立于20世纪70年代末80年代初,资深数学家和
IBM客座科学家Harlan Mills阐述了将数学、统计学及工程学上的基本概念应用到软件的设想。受Edsger Dijkstra关于结构化编程、Nicholas Wirth关于逐步求精、David Parnas关于模块化设计的影响,Mills为软件的工程方法奠定了科学基础。
两大基本观点促进了Mills的工作:首先,程序是数学函数规则,其次,潜在的程序执行是无穷的,质量认证必须进行统计采样。第一个观点使所有函数理论向软件开发敞开大门,导致以下技术的产生:盒式结构规范及设计、函数理论正确性检验及
增量开发,第二个观点使所有统计理论在软件测试方面得到应用,导致了统计使用测试和质量认证。
Mills的观点在其与同仁A1an Currit,Michael Dyer,Alan Hevner,Richard Linger,Bernard Witt及
IBM公司联邦系统部的其他同事的合作中得到了修改和演示。1979年由Addison—Wesley出版的《结构化编程:理论与实践》(作者:Linger,Mills和Witt)介绍了软件规范、设计、认证及再工程中的函数理论方法。《信息系统分析和设计原理》(作者:Mills,Linger,Hevner,Academic出版公司,1986)介绍了系统规范、设计和认证中的盒式结构方法,同时介绍了项目管理的
增量开发。1987年,净室将这些思想融合在一起。“净室”一词借自半导体业,强调“防患胜于除患”的思想。《净室软件工程》(作者:Mills,Dyer和Linger)刊登于《IEEE软件》1987晰年5月刊上。
第一项净室软件项目由
IBM的Richard Linger于20世纪80年代中期负责实施。COBOL结构化设施项目开发出一项商业软件再工程产品,该产品显示出了卓越的质量水平及用户使用
可靠性,净室方法得到了初步确认。
1990年,Richard Linger创建了IBM净室软件技术中心,在此,净室方法、自动化及技术改变得到进一步改进。20世纪90年代初,IBM生产出运用净室方法开发的海量存储控制单元适配器,售出了数千单元,直至1997年产品超过使用寿命后,仍未收到任何反映净室微码现场故障的报告。这项开发由Mike Brewer领导,成员有Paul Fisher,Dave Fuhrer,Karl Nielson及其他一些工作组成员。认证测试由Joe Ryan和Mike Houghtaling领导。如今,
IBM公司存储系统部的测试实验室无可争议地成为统计使用测试方法的全球巨擎。
从20世纪80年代末到90年代初,享有盛名的国家宇航局(NASA)哥达德飞行控制中心(GSFC)
软件工程实验室(SEL)在Vic Basili,Scott Green,Rose Pajerski,Jon Valett等人的领导下进行了一系列净室试验。这些试验被认为是迄今为止软件工程领域进行的一次最完整的研究。4个规模依次扩大的地面控制软件系统按净室工程方法开发出来,结果表明,与NASA GSFC已足以让人佩服的底线相比,质量和生产力还有一致的提高。
20世纪80年代中期,在
美国国防部的ARPA STARS项目(自适应的可靠系统软件技术)的形成期,STARS领导层选取净室作为开发和商业化的核心技术。领导层包括Dave Ceely,Dick Drake,Bill Ett,Joe,Greene,John Foreman,Jim Moore等。Mills博士和Arnie Beckhardt为推动净室技术而建立的软件工程技术公司(SET)被选来推动净室技术的商业化,在SIldzS的支持下,SET在净室的手段和工具方面取得了显著进展。
与此同时,Mills博士正就使用净室建立一家名为Q—Labs的公司而同欧洲的I.M.Ericsson AB进行商谈,为软件工程新技术走出实验室,向Ericsson(爱立信,译者注)进行转让。自两家公司成立之初,Q-Labs和SET就是商业伙伴,以后两家公司于1998年合并为Q—Labs公司。
20世纪90年代初,美国陆军Picatinny Arsenal执行了一个净室项目,并在这个项目中获得了20倍于引进净室技术所用的投资回报。1996年
国防部软件数据与分析中心在其所作的软件方法比较分析中,报告净室具有真实的价值和质量优势。其他留有软件生产和质量方面历史数据的机构也用净室进行了大型项目的研发,它们公开发表了其结果。净室实践明显改进了
IBM、Ericsson、
NASA、DoD及许多其他机构的软件项目产出。净室的数据表明而且将继续表明,采用净室学科有可能使软件成组性能得到很大的改善。
Carnegie Mellon大学软件工程研究所(SEI)实际上已成为改进软件工程实践方面的领头羊。SEI的
软件能力成熟度模型(
CMM)成为一项已被认可并广泛用于改善软件工程实践的管理模型。1996年SEI完成了一个项目,该项目定义了净室参考模型并将净室的工程技术映射到CMM的管理过程中。这项工作的主要结论是净室与CMM是兼容的、相互支持的。该工作在1996年2份SEI技术报告中进行推广:净室软件工程参考模型(Linger,Trammell,1996)和软件能力成熟度模型(CMM)的净室软件工程实践(Linger,Paulk,Trammell,1999)。经Carnegie Mellon大学许可,本书将净室软件工程参考模型也纳入其中。
净室技术一直由Mills及其在全球各大学和工业界的同仁进行讲授,他们是Vic Basili,A1an Hevner,Richard Linger,Jesse PboIe,Dieter Rombach,Shirley Becker,Richard Cobb, Michael Deck,Chuck Engle,Philip Housler,Ara Kouchakdjian,John Madin,Dave Pearson,Mark Pleszkoch,Stacy Prowell,Steve Rosen,Kirk Sayre, A1an Spangler,Carmen Trammell,Gwen Walton和James Whittaker。另外,还有很多人通过大量实地应用而推进净室实践,包括Mike Brewer,John Gibson, Mike Houghtaling,David Kelly,Jenny Mordes,Rob Oshana,Jason Selvidge,Wayne Sherer和Tom Swain。他们每个人都为净室成为真正的软件工程学科做出了各自的贡献。
一项工程的发展是以其科学理论为基础的,实践中的改进从遵循源自实践的第一条原理开始并沿着科学的轨道向前发展。净室实践的改进和进展正是按照这种模式进行并将继续进行下去。
净室规范方法的精化的研究主流已经形成并在本书中予以说明。Mills使用的函数理论,激发了David Parnas在序列(跟踪)分析和域划分方面的工作,这又激发了Hailong Mao在典型序列历史方面的研究,以上三者为本书中提到的Stacy Prowell和Jesse Poore基于序列规范的定义打下了基础。
另一项由Gwen Walton和Jesse Poore所从事的独立的研究,将基于
Markov链使用模型应用到了运筹学的优化方法当中。他们的研究将基于约束的方法应用到使用建模中,该研究有望加强净室统计测试实践的控制,提高其价值。
其他在
决策理论、先进
统计设计、建模与仿真等有关理论和工程实践领域内开展的工作正在取得进展,净室软件工程也一定会随着得到进一步的改进。
理论基础
(1)函数理论
一个函数定义了从
定义域到
值域的映射。一个特定的程序好似定义了一个从定义域(所有可能的输入序列的集合)到值域(所有对应于输入的输出集合)的映射。这样,一个程序的规范就是一个函数的规范。
一个明确定义的函数应当具有以下特性:
完备性:对定义域中的每个元素,值域中至少有一个元素与之对应。对程序而言,每种可能的输入都必须定义,并有一个输出与之对应;
一致性:在值域中最多有一个元素与定义域中的同一元素对应。对程序而言,每个输入只能对应一个输出;
正确性:函数的正确性可以由上述性质判断。对程序而言,某项设计的正确性可以通过基于函数理论的推理来验证。
(2)抽样理论
不可能对软件的所有可能应用都进行测试。把软件的所有可能的使用情况看作总体,通过统计学手段对其进行抽样,并对样本进行测试,根据测试结果分析软件的性能和
可靠性。
技术手段
(1)
统计过程控制下的
增量式开发(Incremental Development)增量:最终软件产品的功能子集。
增量开发基于产品开发中受控
迭代的工程原理——控制迭代。增量开发不是把整个开发过程作为一个整体,而是将其划分为一系列较小的累积增量。小组成员在任何时刻只需把注意力集中于工作的一部分,而不需一次考虑所有的事情。
(2) 基于函数的规范、设计
盒子结构方法按照函数理论定义了三种抽象层次:行为视图、
有限状态机视图和过程视图。规范从一个外部行为视图(称为黑盒)开始,然后被转化为一个状态机视图(称为状态盒),最后由一个过程视图(明盒)来实现。盒子结构是基于对象的,并支持软件工程的关键原则:信息隐藏和实现分离。
(3)正确性验证
正确性验证被认为是CSE的核心,正是由于采用了这一技术,净室项目的软件质量才有了极大的提高。
(4) 统计测试(Statistically Based Testing)和软件认证
净室测试方法采用统计学的基本原理,即当总体太大时必须采取抽样的方法。首先确定一个使用模型(usage model)来代表系统所有可能使用的(一般是无限的)总体。然后由使用模型产生测试用例。因为测试用例是总体的一个随机样本,所以可得到系统预期操作性能的有效的统计推导。
净室软件工程是软件开发的一种
形式化方法,它可以生成质量非常高的软件。它使用盒子结构规约进行分析和设计建模,并且强调将正确性验证,而不是测试,作为发现和消除错误的主要机制。
缺点
CSE太理论化,需要更多的数学知识。其正确性验证的步骤比较困难且比较耗时。CSE要求采用
增量式开发、采用盒子结构、采用统计测试方法,普通工程师必须经过加强训练才能掌握。
CSE开发小组不进行传统的模块测试,这是不现实的。工程师可能对编程语言和开发环境还不熟悉,而且编译器或操作系统的bug也可能导致未预期的错误。
CSE毕竟脱胎于传统软件工程,不可避免地带有传统软件工程的一些弊端
参考图书
《零缺陷程序设计》