天天看點

提供軟體可靠性的方法

1.建立以可靠性為核心的品質标準

在軟體項目規劃和需求分析階段就要建立以可靠性為核心的品質标準。這個品質标準包括實作的功能、可靠性、可維護性、可移植性、安全性、吞吐率等等,雖然還沒有一個衡量軟體品質的完整體系,但還是可以通過一定的名額來指定标準基線。

軟體品質從構成因素上可分為産品品質和過程品質。

産品品質是軟體成品的品質,包括各類文檔、編碼的可讀性、可靠性、正确性,使用者需求的滿足程度等。

過程品質是開發過程環境的品質,與所采用的技術、開發人員的素質、開發的組織交流、開發裝置的使用率等因素有關。

還可把品質分為動态品質和靜态品質。靜态品質是通過審查各開發過程的成果來确認的品質,包括子產品化程度、簡易程度、完整程度等内容。動态品質是考察運作狀況來确認的品質,包括平均故障間隔時間(MTBF)、軟體故障修複時間(MTRF)、可用資源的使用率。在許多實際工程中,人們一般比較重視動态品質而忽視靜态品質。

所定的品質标準度量,至少應達到以下兩個目的:

(1).明确劃分各開發過程(需求分析過程,設計過程,測試過程,驗收過程),通過品質檢驗的回報作用確定差錯及早排除并保證一定的品質。

(2).在各開發過程中實施進度管理,産生階段品質評價報告,對不合要求的産品及早采取對策。

确定劃分的各開發過程的品質度量:

(1).需求分析品質度量

需求分析定義是否完整、準确(有無二義性),開發者和使用者間有沒有了解不同的情況,文檔完成情況等,要有明确的可靠性需求目标、分析設計及可靠性管理措施等。

(2).設計結果品質度量

設計工時,程式容量和可讀性、可了解性,測試情況數,評價結果,文檔完成情況等。

(3).測試結果品質度量

測試工時,差錯狀況,差錯數量,差錯檢出率及殘存差錯數,差錯影響評價,文檔等,以及有關非法輸入的處理度量。

(4).驗收結果品質度量

完成的功能數量,各項性能名額,可靠性等。

最後選擇一種可靠度增長曲線預測模型,如時間測量、個體測量、可用性,在後期開發過程中,用來計算可靠度增長曲線的差錯收斂度。

在建立品質标準之後,設計品質報告及評價表,在整個開發過程中就要嚴格實施并及時作出品質評價,填寫報告表。

2. 選擇開發方法

軟體開發方法對軟體的可靠性也有重要影響。

目前的軟體開發方法主要有Parnas方法、Yourdon方法、面向資料結構的Jackson方法和Warnier方法、PSL/PSA方法、原型化方法、面向對象方法、可視化方法、ICASE方法、瑞理開發方法等,其他還有BSP方法、CSF方法等。這裡特别要提一下的是Parnas方法。

Parnas方法是最早的軟體開發方法,是Parnas 在1972年提出來的,基本思想是在概要設計時預先估計未來可能發生變化,提出了資訊隐藏的原則以提高軟體的可靠性和可維護性。

在設計中要求先列出将來可能要變化的因素,在劃分子產品時将一些可能發生變化的因素隐含在某個子產品的内部,使其他子產品與此無關,這樣就提高了軟體的可維護性,避免了錯誤的蔓延,也就提高了軟體的可靠性。還提出了提高可靠性的措施:

(1)考慮到硬體有可能出故障,接近硬體的子產品要對硬體行為進行檢查,及時發現錯誤。

(2)考慮到操作人員有可能失誤,輸入子產品對輸入資料進行合法性檢查,是否合法、越權,及時糾錯。

(3)考慮到軟體本身有可能失誤,加強子產品間檢查,防止錯誤蔓延。

對瑞理方法可能許多人還不熟悉,這裡簡要介紹一下。

瑞理(Rational)模式是美國瑞理軟體工程公司發展出來的,其模式是:

面向對象;

螺旋式上升;

管理與控制;

高度自動化;

以管理觀點和技術觀點把軟體生命周期劃分為起始、規劃、建構、轉移、進化五個階段,也可把這五個階段歸并為研究時期(起始和規劃)和生産時期(建構和轉移),最後是維護時期(進化),特别适合對高風險部分及變動需求的處理。

在以上的衆多方法中,可視化方法主要用于與圖形有關的應用,目前的可視化開發工具隻能提供使用者界面的可視化開發,對一些不需要複雜圖形界面的應用不必使用這種方法;ICASE 技術還沒有完全成熟,是以可視在方法和ICASE方法最多隻能用作輔助方法。面向資料結構的方法、PSL/PSA方法及原型化方法隻适合于中小型系統的開發。

面向對象的方法便于軟體複雜性控制,有利于生産率的提高,符合人類的思維習慣,能自然地表達現實世界的實體和問題,具有一種自然的模型化能力,達到從問題空間到解空間的較為直接自然的映射。

在面向對象的方法中,由于大量使用具有高可靠性的庫,其可靠性也就有了保證,用面向對象的方法也利于實作軟體重用。

是以建議采用面向對象的方法,借鑒Parnas和瑞理模式的思想,在開發過程中再結合使用其他方法,吸取其它方法的優點。

3.軟體重用

最大限度地重用現有的成熟軟體,不僅能縮短開發周期,提高開發效率,也能提高軟體的可維護性和可靠性。因為現有的成熟軟體,已經過嚴格的運作檢測,大量的錯誤已在開發、運作和維護過程中排除,應該是比較可靠的。在項目規劃開始階段就要把軟體重用列入工作中不可缺少的一部分,作為提高可靠性的一種必要手段。

軟體重用不僅僅是指軟體本身,也可以是軟體的開發思想方法、文檔,甚至環境、資料等,包括三個方面内容的重用:

(1)開發過程重用,指開發規範、各種開發方法、工具和标準等。

(2)軟體構件重用,指文檔、程式和資料等。

(3)知識重用,如相關領域專業知識的重用。

一般用的比較多的是軟體構件重用。

軟體重用的過程如下:候選,選擇,資格,分類和存儲,查找和檢索。在選擇可重用構件時,一定要有嚴格的選擇标準,可重用的構件必須是經過嚴格測試的、甚至是經過可靠性和正确性證明的構件,應子產品化(實作單一、的完整的功能)、結構清晰(可讀、可了解、規模适當),且有高度可适應性。

4.使用開發管理工具

開發一個大的軟體系統,離不開開發管理工具,作為一個項目管理者,僅僅靠人來管理是不夠的,需要有開發管理工具來輔助解決開發過程中遇到的各種各樣的問題,以提高開發效率和産品品質。

如Intersolv公司的PVCS軟體開發管理工具,在美國市場占有率已超過70%,使用PVCS可以帶來不少好處:規範開發過程,縮短開發周期,減少開發成本,降低項目投資風險;自動創造完整的文檔,便于軟體維護;管理軟體多重版本;管理和追蹤開發過程中危及軟體品質和影響開發周期的缺陷和變化,便于軟體重用,避免資料丢失,也便于開發人員的交流,對提高軟體可靠性,保證品質有很大作用。

在大陸,開發管理工具并沒有得到有效地使用,許多軟體公司還停留在人工管理階段,所開發的軟體品質不會很高。

人的管理比較困難,在保證開發人員素質的同時,要保持人員的穩定性,盡可能避免人員的經常流動。人員流動影響了軟體的品質,工作連續性難保證,繼承者不可能對情況了解很清楚等,也可能影響工作程序等。PVCS也提供了适當的人員管理方法。

5.加強測試

軟體開發前期各階段完成之後,為進一步提高可靠性,隻有通過加強測試來實作了。為最大限度地除去軟體中的差錯,改進軟體的可靠性,就要對軟體進行完備測試。要對一個大的軟體系統進行完備測試是不可能的,是以要确定一個最小測試數和最大測試數,前者是技術性的決策,後者管理性的決策,在實際過程中要确定一個測試數量的下界。總的來說,要在可能的情況下,進行盡可能完備的測試。

誰來做測試呢?一般說來,使用者不大可能來進行子產品測試,子產品測試應該由最初編寫代碼的程式員來進行,要在他們之間交換程式進行子產品測試,自己設計的程式自己測試一般都達不到好的效果。

測試前要确定測試标準、規範,測試過程中要建立完整的測試文檔,把軟體置于配置控制下,用形式化的步驟去改變它,保證任何錯誤及對錯誤的動作都能及時歸檔。

測試規範包括以下三類文檔:

(1)測試設計規範:較長的描述測試方法,規定該設計及其有關測試所包括的特性。還應規定完成測試所需的測試用例和測試規程,規定特性的通過/失敗判定準則。

(2)測試用例規範:列出用于輸入的具體值及預期輸出結果。規定在使用具體測試用例時對測試規程的各種限制。

(3)測試規程規範:規定對于運作該系統和執行指定的測試用例來實作有關測試所要求的所有步驟。

測試的方法多種多樣:

(1)走查(Walk-through),即手工執行,由不同的程式員(非該子產品設計者)讀代碼,并進行評論。

(2)機器測試,對給定的輸入不會産生不合邏輯的輸出。

(3)程式證明或交替程式表示。

(4)模拟測試,模拟硬體、I/O裝置等。

(5)設計審查,關于設計的所有各方面的小組讨論會,利用所獲得的資訊,找出缺陷及違反标準的地方等。

以上可以交替并行循環執行,在實際測試過程中要使用測試工具提高效率。

除正常的測試之外,還要對軟體進行可靠性測試,確定軟體中沒有對可靠性影響較大的故障。制定測試計劃方案,按實際使用的機率分布随機選擇輸入,準确記錄運作時間和結果,并對結果進行評價。

沒有錯誤的程式同永動機一樣是不可能達到的。一般常用排錯方法有試探法、追溯法、歸納法、演繹法。還要使用适當的排錯工具,如UNIX提供的sdb和dbx編碼排錯工具,這些排錯工具隻有浏覽功能,沒有修改功能,是實際的找錯工具。

6.容錯設計

提高可靠性的技術一般可以分為兩類,一類是避免故障,在開發過程中,盡可能不讓差錯和缺陷潛入軟體,這類常用的技術有:

算法模型化,把可以保證正确實作需求規格的算法模型化。

模拟模型化,為了保證在确定的資源條件下的預測性能的發揮,使軟體運作時間、記憶體使用量及控制執行模型化。

可靠性模型,使用可靠性模型,從差錯發生頻度出發,預測可靠性。

正确性證明,使用形式符号及數學歸納法等證明算法的正确性。

軟體危險分析與故障樹分析:從設計或編碼的結構出發,追蹤軟體開發過程中潛入系統缺陷的原因。

分布接口需求規格說明:在設計的各階段使用形式的接口需求規格說明,以便驗證需求的分布接口實作可能性與完備性。

這些技術一般都需要比較深厚的數學理論知識和模型化技術。

另一類就是采用備援思想的容錯技術。

容錯技術的基本思想是使軟體内潛在的差錯對可靠性的影響縮小控制到最低程度。

軟體的容錯從原理上可分為錯誤分析、破壞程度斷定、錯誤恢複、錯誤處理四個階段。

常用的軟體容錯技術有N-版本技術、恢複塊技術、多備份技術等。

N-版本程式設計是依據相同規範要求獨立設計N個功能相等的程式(即版本)。獨立是指使用不同的算法,不同的設計語言,不同的測試技術,甚至不同的指令系統等。

恢複塊技術是使用自動前向錯誤恢複的故障處理技術。

以上這些技術可參考有關文獻,這裡要說的是防錯性程式設計,在程式中進行錯誤檢查。被動的防錯性技術是當到達檢查點時,檢查一個計算機程式的适當點的資訊。主動的防錯性技術是周期性地搜查整個程式或資料,或在空閑時間尋找不尋常的條件。采用防錯性程式設計,是建立在程式員相信自己設計的軟體中肯定有錯誤這一基礎上的,有的程式員可能對此不大習慣,因為他可能太相信自己,相信自己的程式隻有很少錯誤,甚至沒有錯誤,作為一個項目管理者應該能說服他或者強制他采用這種技術,雖然在設計時要花費一定的時間,但這對提高可靠性很有用。

軟體測評報告請聯系王經理:18684048962 更多資訊請關注公衆号:軟體測評閑聊站