高欣
摘 要
互聯(lián)網(wǎng)信息高速發(fā)展的大背景下,無論硬件軟件的復雜程度,還是技術含量都在日益提高,人們對軟件的需求也越來越高。與此同時,軟件中存在的漏洞和缺陷也迅速成為黑客攻擊的對象,因此,建立一套高保障性的技術體系以保護軟件的研制和可靠性成為當下社會研究的當務之急。
【關鍵詞】軟件應用 軟件開發(fā) 軟件測試
1 工程實例
1.1 測試過程
軟件開發(fā)是一個常規(guī)的過程,在當今時代環(huán)境下,一般分為4個階段,每個階段中都需要對軟件進行內(nèi)部測試,一般分為:靜態(tài)分析、代碼審查、單元測試、部件測試、配置項測試。
1.1.1 靜態(tài)分析
使用專業(yè)靜態(tài)分析工具,對軟件應用的程序,數(shù)據(jù)等參數(shù)進行剖析,并進行深入的數(shù)據(jù)分析,將軟件應用內(nèi)部的靜態(tài)信息和代碼信息提取出來,為未來的動態(tài)測試提供參考數(shù)據(jù),并根據(jù)現(xiàn)在的軟件模型,對軟件的質量做出正確評價。
1.1.2 代碼審查
主要是對代碼進行一系列專業(yè)的檢查過程,對代碼的容錯綠,代碼運轉結果的一致性,代碼的可讀性等進行檢查分析。重點對代碼的邏輯性,完整性進行檢查,保證正確率。
1.1.3 單元測試
按照軟件設計的說明圖,模擬軟件運行環(huán)境和運行部件,針對軟件的環(huán)境進行接口模擬,并創(chuàng)造出軟件的真實運行環(huán)境,進行測試,監(jiān)測軟件的運行結果。
1.1.4 部件測試
按照被測軟件的說明圖,在單元測試的基礎上,將各個測試成功的單元模塊按需求和設計組裝成一個符合設計需求的整體功能模塊,并進行測試,其目的是監(jiān)測軟件各個單元和接口之間的兼容性和容錯率,保證軟件的設計成功。
1.1.5 配置項測試
所謂配置項是軟件中為滿足不同用戶的不通需求而設計的,能體現(xiàn)用戶個性化功能的配置功能項,測試的目的是監(jiān)測配置項在軟件中的一致性。
1.2 問題現(xiàn)象
某產(chǎn)品軟件到了后期階段仍在進行頻繁更改,通過對其分析,得出軟件復雜度高是其存在的主要問題:
(1)模塊在結構上應使用單出入口的結構,降低復雜性。
(2)在模塊的邏輯設計上進行改進,采用分層次的結構,并在不同層次上設計不同的扇入扇出數(shù),保證模塊的扇出數(shù)較低,一般不超過7,并且盡可能的增加模塊的扇入數(shù),以保證代碼的簡潔性。另外,高層模塊的設計應該采取不同策略,比如高層模塊扇出較高,低層模塊扇入較高等。
(3)軟件單元的圈復雜度(即McCabe 指數(shù))應小于10。
(4)簡化軟件單元的源代碼數(shù)量,高級語言實現(xiàn)的單元,不應超過60行。
1.3 問題分析
測試的目的是為了更正軟件的錯誤,降低風險率,一般來說經(jīng)過幾個階段的測試后,軟件中的缺陷基本都能被修復,但是沒有重視靜態(tài)分析中的軟件圈復雜度,基本復雜度超標的現(xiàn)象,軟件在后期的高復雜性往往會帶來潛在的風險。
2 測試指導設計
2.1 軟件質量的pareto原理
pareto原理[2] 指出,20%的軟件模塊包含了軟件中80%的缺陷,20%的軟件改進,需花費80%的適應性維護費用。從這里可以得出結論,高復雜的模塊會導致軟件中可能出現(xiàn)的絕大部分錯誤,而且不容易修復。因此,在軟件設計早起杜絕復雜度過高的風險十分必要。
2.2 降低軟件圈復雜度
2.2.1 圈復雜度定義
圈復雜度作為一個衡量軟件結構復雜性的標準,數(shù)量上表現(xiàn)為獨立線性路徑條數(shù),即合理的預防錯誤所需測試的最少路徑條數(shù)。1976年ThomasMcCabe提出了圈復雜度(Cyclomatic Complexity)的概念,依據(jù)圈復雜度定義了軟件的復雜性。1977年Halstead提出了軟件科學復雜度度量。文獻[3],在這個理念中重點分析了嵌入式軟件的位置的重要性,并通過模型的方式展示了軟件復雜度的度量對識別代碼錯位的重要性。可以看出,軟件的錯誤和缺陷并非隨機分布的,而是有跡可循,和軟件的個性化,復雜度息息相關。
2.2.2 復雜度計算方法
C語言常用的軟件模塊邏輯結構(結構流圖)有如下幾種,如圖3所示。
2.2.3 降低圈復雜度
如果圈復雜度高于標準值的時候,可以提前做出判斷,降低代碼的復雜度和重復性。在判斷語句中采取單一的判斷條件,或者將重復代碼用一個函數(shù)來替代。都是降低代碼復雜度和重復性的有力措施。
2.3 降低軟件基本復雜度
運轉正常的語句或代碼應帶保證單入口和單出口結構,保證程序的簡潔性,不應過多使用異常跳轉語句增加程序的運轉復雜度,如果非結構化語句過多,出入口增大,只會導致結構的復雜度增高,增加軟件后期運行的風險。
因此,只要控制程序語句的結構單一化,簡單化,避免各種非正常跳轉語句的使用,復雜度就會在可控制的范圍內(nèi),有利于程序的運行穩(wěn)定。
2.4 降低軟件扇出數(shù)
扇出的意思是函數(shù)調(diào)用其他函數(shù)的個數(shù),如果扇出過小,則會導致程序代碼過長,如果扇出過大,則會增加程序內(nèi)函數(shù)的調(diào)用次數(shù),影響速度,一般來說扇出最好為3或4個,最高不超過7個。
扇入的意思是一個函數(shù)被其他程序調(diào)用的次數(shù),扇入較多會增加模塊的使用頻率,但是過高的扇入會影響程序的聚合性,如果扇出扇入次數(shù)過高,可以考慮重新調(diào)整該函數(shù)或過程。
3 結語
本文通過以測試結果來倒向改進軟件設計的思路,提高了軟件的設計質量和可靠性,可以看出,在軟件代碼內(nèi)部進行早期分析,在軟件設計早期對軟件代碼,復雜度等指標進行優(yōu)化限制,對軟件后期的穩(wěn)定運行,錯誤率降低有非常大的影響和幫助,成為軟件改進的新思路。
參考文獻
[1]尹平,許聚常,張慧穎.軟件測試與軟件質量評價[M].北京:國防工業(yè)出版社,2008.
[2]SCHULMEYER G G.軟件質量保證[M].北京:機械工業(yè)出版社,2003.
[3]JOHN C,MUNSON.Software faults,software failures and software reliability modeling[J].Information and Software Technology,1996(02).
作者單位
天津濱海職業(yè)學院 天津市 300451