提高軟件可靠性的方法和技術(shù)
當前,人類步入了信息時代,從交通、能源、電信到金融、教育、軍事……等等大多數(shù)行業(yè)都需要計算機的輔助。軟件是計算機系統(tǒng)的靈魂,是許多復雜系統(tǒng)的神經(jīng)中樞,而質(zhì)量則是軟件的命脈。軟件失效造成系統(tǒng)癱瘓、人員傷亡以及重大經(jīng)濟損失。
本文源自21ic電子技術(shù)論壇 僅供學習交流,知識產(chǎn)權(quán)歸原作者所有,侵刪。
一、建立以可靠性為核心的質(zhì)量標準
在軟件項目規(guī)劃和需求分析階段就要建立以可靠性為核心的質(zhì)量標準。這個質(zhì)量標準包括實現(xiàn)的功能、可靠性、可維護性、可移植性、安全性、吞吐率等等,雖然還沒有一個衡量軟件質(zhì)量的完整體系,但還是可以通過一定的指標來定標準基線。
軟件質(zhì)量從構(gòu)成因素上可分為產(chǎn)品質(zhì)量和過程質(zhì)量。產(chǎn)品質(zhì)量是軟件成品的質(zhì)量,包括各類文檔、編碼的可讀性、可靠性、正確性,用戶需求的滿足程度等。過程質(zhì)量是開發(fā)過程環(huán)境的質(zhì)量,與所采用的技術(shù)、開發(fā)人員的素質(zhì)、開發(fā)的組織交流、開發(fā)設備的利用率等因素有關。還可把質(zhì)量分為動態(tài)質(zhì)量和靜態(tài)質(zhì)量。靜態(tài)質(zhì)量是通過審查各開發(fā)過程的成果來確認的質(zhì)量,包括模塊化程度、簡易程度、完整程度等內(nèi)容。動態(tài)質(zhì)量是考察運行狀況來確認的質(zhì)量,包括平均故障間隔時間(MTBF)、軟件故障平均修復時間(MTRF)、可用資源的利用率。在許多實際工程中,人們一般比較重視動態(tài)質(zhì)量而忽視靜態(tài)質(zhì)量。
所定的質(zhì)量標準度量,至少應達到以下兩個目的:
(1)明確劃分各開發(fā)過程(需求分析過程,設計過程,測試過程,驗收過程),通過質(zhì)量檢驗的反饋作用確保差錯及早排除并保證一定的質(zhì)量。
(2)在各開發(fā)過程中實施進度管理,產(chǎn)生階段質(zhì)量評價報告,對不合要求的產(chǎn)品及早采取對策。
確定劃分的各開發(fā)過程的質(zhì)量度量:
(1)需求分析質(zhì)量度量
需求分析定義是否完整、準確(有無二義性),開發(fā)者和用戶間有沒有理解不同的情況,文檔完成情況等,要有明確的可靠性需求目標、分析設計及可靠性管理措施等。
(2)設計結(jié)果質(zhì)量度量
設計工時,程序容量和可讀性、可理解性,測試情況數(shù),評價結(jié)果,文檔完成情況等。
(3)測試結(jié)果質(zhì)量度量
測試工時,差錯狀況,差錯數(shù)量,差錯檢出率及殘存差錯數(shù),差錯影響評價,文檔等,以及有關非法輸入的處理度量。
(4)驗收結(jié)果質(zhì)量度量
完成的功能數(shù)量,各項性能指標,可靠性等。
最后選擇一種可靠度增長曲線預測模型,如時間測量、個體測量、可用性,在后期開發(fā)過程中,用來計算可靠度增長曲線的差錯收斂度。在建立質(zhì)量標準之后,設計質(zhì)量報告及評價表,在整個開發(fā)過程中就要嚴格實施并及時作出質(zhì)量評價,填寫報告表。
二、選擇開發(fā)方法
軟件開發(fā)方法對軟件的可靠性也有重要影響。目前的軟件開發(fā)方法主要有Parnas方法、Yourdon方法、面向數(shù)據(jù)結(jié)構(gòu)的Jackson方法和Warnier方法、PSL/PSA方法、原型化方法、面向?qū)ο蠓椒ā⒖梢暬椒ā?/span>ICASE方法、瑞理開發(fā)方法等,其他還有BSP方法、CSF方法等。
這里特別要提一下的是Parnas方法。Parnas方法是最早的軟件開發(fā)方法,是Parnas 在1972年提出來的,基本思想是在概要設計時預先估計未來可能發(fā)生變化,提出了信息隱藏的原則以提高軟件的可靠性和可維護性。
在設計中要求先列出將來可能要變化的因素,在劃分模塊時將一些可能發(fā)生變化的因素隱含在某個模塊的內(nèi)部,使其他模塊與此無關,這樣就提高了軟件的可維護性,避免了錯誤的蔓延,也就提高了軟件的可靠性。還提出了提高可靠性的措施:
(1)考慮到硬件有可能出故障,接近硬件的模塊要對硬件行為進行檢查,及時發(fā)現(xiàn)錯誤。
(2)考慮到操作人員有可能失誤,輸入模塊對輸入數(shù)據(jù)進行合法性檢查,是否合法、越權(quán),及時糾錯。
(3)考慮到軟件本身有可能失誤,加強模塊間檢查,防止錯誤蔓延。
對瑞理方法可能許多人還不熟悉,這里也簡要介紹一下。瑞理(Rational)模式是美國瑞理軟件工程公司發(fā)展出來的,其模式是:面向?qū)ο?;螺旋式上升;管理與控制;高度自動化;
以管理觀點和技術(shù)觀點把軟件生命周期劃分為起始、規(guī)劃、建構(gòu)、轉(zhuǎn)移、進化五個階段,也可把這五個階段歸并為研究時期(起始和規(guī)劃)和生產(chǎn)時期(建構(gòu)和轉(zhuǎn)移),最后是維護時期(進化),特別適合對高風險部分及變動需求的處理。
在以上的眾多方法中,可視化方法主要用于與圖形有關的應用,目前的可視化開發(fā)工具只能提供用戶界面的可視化開發(fā),對一些不需要復雜圖形界面的應用不必使用這種方法;ICASE 技術(shù)還沒有*成熟,所以可視化方法和ICASE方法最多只能用作輔助方法。面向數(shù)據(jù)結(jié)構(gòu)的方法、PSL/PSA方法及原型化方法只適合于中小型系統(tǒng)的開發(fā)。
面向?qū)ο蟮姆椒ū阌谲浖碗s性控制,有利于生產(chǎn)率的提高,符合人類的思維習慣,能自然地表達現(xiàn)實世界的實體和問題,具有一種自然的模型化能力,達到從問題空間到解空間的較為直接自然的映射。在面向?qū)ο蟮姆椒ㄖ?,由于大量使用具有高可靠性的庫,其可靠性也就有了保證,用面向?qū)ο蟮姆椒ㄒ怖趯崿F(xiàn)軟件重用。
所以建議采用面向?qū)ο蟮姆椒?,借鑒Parnas和瑞理模式的思想,在開發(fā)過程中再結(jié)合使用其他方法,吸取其它方法的優(yōu)點。
三、軟件重用
最大限度地重用現(xiàn)有的成熟軟件,不僅能縮短開發(fā)周期,提高開發(fā)效率,也能提高軟件的可維護性和可靠性。因為現(xiàn)有的成熟軟件,已經(jīng)過嚴格的運行檢測,大量的錯誤已在開發(fā)、運行和維護過程中排除,應該是比較可靠的。在項目規(guī)劃開始階段就要把軟件重用列入工作中*的一部分,作為提高可靠性的一種必要手段。
軟件重用不僅僅是指軟件本身,也可以是軟件的開發(fā)思想方法、文檔,甚至環(huán)境、數(shù)據(jù)等,包括三個方面內(nèi)容的重用:
(1)開發(fā)過程重用,指開發(fā)規(guī)范、各種開發(fā)方法、工具和標準等。
(2)軟件構(gòu)件重用,指文檔、程序和數(shù)據(jù)等。
(3)知識重用,如相關領域?qū)I(yè)知識的重用。
一般用的比較多的是軟件構(gòu)件重用。軟件重用的過程如下:候選,選擇,資格,分類和存儲,查找和檢索。在選擇可重用構(gòu)件時,一定要有嚴格的選擇標準,可重用的構(gòu)件必須是經(jīng)過嚴格測試的、甚至是經(jīng)過可靠性和正確性證明的構(gòu)件,應模塊化(實現(xiàn)單一、的完整的功能)、結(jié)構(gòu)清晰(可讀、可理解、規(guī)模適當),且有高度可適應性。
四、使用開發(fā)管理工具
開發(fā)一個大的軟件系統(tǒng),離不開開發(fā)管理工具,作為一個項目管理員,僅僅靠人來管理是不夠的,需要有開發(fā)管理工具來輔助解決開發(fā)過程中遇到的各種各樣的問題,以提高開發(fā)效率和產(chǎn)品質(zhì)量。
如Intersolv公司的PVCS軟件開發(fā)管理工具,在美國*已超過70%,使用PVCS可以帶來不少好處:規(guī)范開發(fā)過程,縮短開發(fā)周期,減少開發(fā)成本,降低項目投資風險;自動創(chuàng)造完整的文檔,便于軟件維護;管理軟件多重版本;管理和追蹤開發(fā)過程中危及軟件質(zhì)量和影響開發(fā)周期的缺陷和變化,便于軟件重用,避免數(shù)據(jù)丟失,也便于開發(fā)人員的交流,對提高軟件可靠性,保證質(zhì)量有很大作用。
在我國,開發(fā)管理工具并沒有得到有效地使用,許多軟件公司還停留在人工管理階段,所開發(fā)的軟件質(zhì)量不會很高。
人的管理比較困難,在保證開發(fā)人員素質(zhì)的同時,要保持人員的穩(wěn)定性,盡可能避免人員的經(jīng)常流動。人員流動影響了軟件的質(zhì)量,工作連續(xù)性難保證,繼承者不可能對情況了解很清楚等,也可能影響工作進程等。PVCS也提供了適當?shù)娜藛T管理方法。
五、加強測試
軟件開發(fā)前期各階段完成之后,為進一步提高可靠性,只有通過加強測試來實現(xiàn)了。為最大限度地除去軟件中的差錯,改進軟件的可靠性,就要對軟件進行完備測試。要對一個大的軟件系統(tǒng)進行完備測試是不可能的,所以要確定一個最小測試數(shù)和最大測試數(shù),前者是技術(shù)性的決策,后者管理性的決策,在實際過程中要確定一個測試數(shù)量的下界??偟膩碚f,要在可能的情況下,進行盡可能完備的測試。
誰來做測試呢?一般說來,用戶不大可能來進行模塊測試,模塊測試應該由最初編寫代碼的程序員來進行,要在他們之間交換程序進行模塊測試,自己設計的程序自己測試一般都達不到好的效果。
測試前要確定測試標準、規(guī)范,測試過程中要建立完整的測試文檔,把軟件置于配置控制下,用形式化的步驟去改變它,保證任何錯誤及對錯誤的動作都能及時歸檔。
測試規(guī)范包括以下三類文檔:
(1)測試設計規(guī)范:詳細描述測試方法,規(guī)定該設計及其有關測試所包括的特性。還應規(guī)定完成測試所需的測試用例和測試規(guī)程,規(guī)定特性的通過/失敗判定準則。
(2)測試用例規(guī)范:列出用于輸入的具體值及預期輸出結(jié)果。規(guī)定在使用具體測試用例時對測試規(guī)程的各種限制。
(3)測試規(guī)程規(guī)范:規(guī)定對于運行該系統(tǒng)和執(zhí)行定的測試用例來實現(xiàn)有關測試所要求的所有步驟。
測試的方法多種多樣:
(1)走查(Walk-through),即手工執(zhí)行,由不同的程序員(非該模塊設計者)讀代碼,并進行評論。
(2)機器測試,對給定的輸入不會產(chǎn)生不合邏輯的輸出。
(3)程序證明或交替程序表示。
(4)模擬測試,模擬硬件、I/O設備等。
(5)設計審查,關于設計的所有各方面的小組討論會,利用所獲得的信息,找出缺陷及違反標準的地方等。
以上可以交替并行循環(huán)執(zhí)行,在實際測試過程中要使用測試工具提高效率。除正常的測試之外,還要對軟件進行可靠性測試,確保軟件中沒有對可靠性影響較大的故障。制定測試計劃方案,按實際使用的概率分布隨機選擇輸入,準確記錄運行時間和結(jié)果,并對結(jié)果進行評價。
沒有錯誤的程序同永動機一樣是不可能達到的。一般常用排錯方法有試探法、追溯法、歸納法、演繹法。還要使用適當?shù)呐佩e工具,如UNIX提供的sdb和dbx編碼排錯工具,這些排錯工具只有瀏覽功能,沒有修改功能,是實際的找錯工具。
六、軟件評審
評審是一些用于開發(fā)過程早期檢查和糾紛缺陷的有效方法。它們可以用來檢查衛(wèi)星城執(zhí)行代碼的文檔的缺陷。
在開發(fā)過程中,評審可以讓我們獲得以下收益:
(1)提高項目的生產(chǎn)率:由于早期發(fā)現(xiàn)了錯誤,因而減少了返工時間,還可能減少測試時間。
(2)改善軟件的質(zhì)量;
(3)在評審過程中,使開發(fā)團隊的其他成員更熟悉產(chǎn)品和開發(fā)過程;
(4)通過評審,標志的軟件開發(fā)的一個階段的完成;
(5)生產(chǎn)出更容易維護,更可靠的軟件。
主要原因是由于被評審的軟件評審者必須是非常熟悉的,同時,在評審過程中,一定會產(chǎn)生并利用很多證明文檔,于是評審就迫使開發(fā)者同時產(chǎn)出許多有用的文檔,如果不進行評審,這些文檔可能在整個項目周期都不會生產(chǎn)。
軟件評審包括管理評審、技術(shù)評審、文檔評審、過程評審。其中主要應用的方法有:
(1)特別檢查:通常應用于平常的小組合作,非正式的評審;
(2)輪查:又稱為分配審查方法。項目人員向評審者作簡要介紹,但不參加評審過程;評審者獨立進行評審,并記錄發(fā)現(xiàn)的結(jié)果,準備報告;
(3)走查:一種非正式的評審方法,在軟件企業(yè)中廣泛應用。項目成員向他人介紹,并收集意見。在走查中,項目人員占有主導地位,由其描述產(chǎn)品的功能和結(jié)構(gòu)以及完成任務的情況等。走查的目的是希望參評者可以發(fā)現(xiàn)產(chǎn)品中的錯誤,了解產(chǎn)品,并對模塊功能和實現(xiàn)達成一致的建議;
(4)團隊評審:有計劃和機構(gòu)化的,評審的參與者在會議前拿到評審材料,并對其進行獨立研究,同時,評審還定義了評審會議中各種角色和相應的責任。但是評審后期的問題跟蹤和分析往往被簡化或忽略;
(5)檢視:和團隊評審很相似,但比起更嚴格,是最系統(tǒng)化、最嚴密的評審方法。普通的檢視過程包括:制定計劃、準備和組織會議、跟蹤和分析檢視結(jié)果等。
以下就是軟件評審過程中主要應用的集中方法。其中廣泛采用的評審方法有檢視、團隊評審和走查。
七、容錯設計
提高可靠性的技術(shù)一般可以分為兩類,一類是避免故障,在開發(fā)過程中,盡可能不讓差錯和缺陷潛入軟件,這類常用的技術(shù)有:
(1)算法模型化:把可以保證正確實現(xiàn)需求規(guī)格的算法模型化。
(2)模擬模型化:為了保證在確定的資源條件下的預測性能的發(fā)揮,使軟件運行時間、內(nèi)存使用量及控制執(zhí)行模型化。
(3)可靠性模型:使用可靠性模型,從差錯發(fā)生頻度出發(fā),預測可靠性。
(4)正確性證明:使用形式符號及數(shù)學歸納法等證明算法的正確性。
(5)軟件危險分析與故障樹分析:從設計或編碼的結(jié)構(gòu)出發(fā),追蹤軟件開發(fā)過程中潛入系統(tǒng)缺陷的原因。
(6)分布接口需求規(guī)格說明:在設計的各階段使用形式的接口需求規(guī)格說明,以便驗證需求的分布接口實現(xiàn)可能性與完備性。
這些技術(shù)一般都需要比較深厚的數(shù)學理論知識和模型化技術(shù)。另一類就是采用冗余思想的容錯技術(shù)。容錯技術(shù)的基本思想是使軟件內(nèi)潛在的差錯對可靠性的影響縮小控制到較低程度。軟件的容錯從原理上可分為錯誤分析、破壞程度斷定、錯誤恢復、錯誤處理四個階段。
常用的軟件容錯技術(shù)有N-版本技術(shù)、恢復塊技術(shù)、多備份技術(shù)等。
N-版本程序設計是依據(jù)相同規(guī)范要求獨立設計N個功能相等的程序(即版本)。獨立是指使用不同的算法,不同的設計語言,不同的測試技術(shù),甚至不同的指令系統(tǒng)等。
恢復塊技術(shù)是使用自動前向錯誤恢復的故障處理技術(shù)。
再次要說的是防錯性程序設計,在程序中進行錯誤檢查。被動的防錯性技術(shù)是當?shù)竭_檢查點時,檢查一個計算機程序的適當點的信息。主動的防錯性技術(shù)是周期性地搜查整個程序或數(shù)據(jù),或在空閑時間尋找不尋常的條件。采用防錯性程序設計,是建立在程序員相信自己設計的軟件中肯定有錯誤的這一基礎上,有的程序員可能對此不大習慣,因為他可能太相信自己,相信自己的程序只有很少錯誤,甚至沒有錯誤,作為一個項目管理人員需要說服他或者強制他采用這種技術(shù),雖然在設計時要額外花費一定的時間,但這對提高可靠性很有用。
八、小結(jié)
以上就是通過從軟件設計、管理、評審、規(guī)范等多個方面來提高軟件可靠性的方法和技術(shù),通過這些方法可以實現(xiàn)在軟件開發(fā)過程中對其質(zhì)量可靠性的控制和提高。