原理
傳統的軟體工程建模、形式化方法、程式驗證(正確性證明)、以及統計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畢竟脫胎於傳統軟體工程,不可避免地帶有傳統軟體工程的一些弊端
參考圖書
《零缺陷程式設計》