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