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