軟件測試是為了發現故障而執行程序的過程。其目的是以盡可能少的時間和人力發現并改正軟件中潛在的各種故障及缺陷。因此,軟件測試與軟件可靠性緊密相關。軟件中隱藏的故障數目,直接決定軟件的可靠性。所以,在軟件投入運行之前必須進行軟件測試,以盡可能多地發現軟件中的故障,提高軟件可靠性。而在軟件運行過程中,則需要軟件維修測試。
隨著人們對軟件測試重要性認識的加深以及軟件系統的日益復雜,軟件測試在整個軟件開發周期中所占的比例日益增大。目前,許多軟件開發機構已將研制力量的40%以上花費在軟件測試上。特殊情況下,對于要求高可靠性的軟件,例如飛行控制、核反應堆監控軟件等,其軟件測試費用甚至高達軟件開發其它階段所用費用總和的3-5倍。
1. 軟件測試工程
軟件測試的實質是根據軟件開發各階段的規格說明和程序的內部結構精心選取一批測試數據,形成測試用例,并用這些測試用例去驅動被測程序,觀察程序的執行結果,驗證所得結果與預期結果是否一致,然后做相應的調整。所以,軟件測試本身是一個工程。軟件測試的團隊必須不同于該軟件的設計團隊,它必須獨立地確定軟件測試規范、生成測試數據、進行測試結果分析、寫出測試報告。這一過程可能要反復進行多次,以達到預定的可靠性。在此過程中,測試數據生成是軟件測試的核心與關鍵。不同測試數據對發現軟件故障的能力差別很大。某些測試數據能夠有效地發現故障,而其他一些測試數據也可能完全是徒勞。為了節約時間和資源,提高測試效率,必須從大量的輸入數據中精心挑選出少數有代表性的測試數據,使得采用這些測試數據能夠達到最佳的測試效果,高效地把隱藏的故障揭露出來。為此,探討如何生成高質高效的測試數據,至關重要。而軟件測試生成與被測軟件的性質、功能和可靠性要求緊密相關。
2.基于程序結構的測試生成
基于規范的功能測試又稱黑盒測試,是以檢查程序功能來檢測程序是否按照規格說明書的規定正確地運行,它以規范說明為依據,選擇和設計測試用例;诔绦虻慕Y構測試又稱白盒測試,則根據程序的內部結構設計測試用例,檢測程序在各種不同的情況下是否都按預定的要求正確地運行;谝幏兜臏y試數據生成和基于程序的測試數據生成是兩類常用的軟件測試數據生成方法。
結構測試要求對被測程序的結構特性作到一定程度的覆蓋。覆蓋準則一般有以下幾種:
① 語句覆蓋
希望用測試數據運行被測程序時,被測程序的每一個語句都能被執行。至少說明每一個語句都是可達的,在該測試條件下,程序是正確的。當然我們并不能保證在其他條件下,程序執行該語句時是否也能正確。
② 分支覆蓋
在If … then … else …語句中,條件語句測試執行一次是不夠的。因為必須讓條件為真和為假,至少執行兩次。而在Case語句中必須運行所有的情況,而且,還要運行不屬于所列情況的default情況。所以,對這些分支語句,必須覆蓋所有可能的分支。分支覆蓋率就是考察測試數據覆蓋了百分之多少的分支。
③路徑覆蓋
由于程序中有分支、循環、遞歸、調用、跳變等語句,一個程序可以用一個控制流或數據流圖來表示。程序的每一次運行都是沿著某一條路徑走的。程序在運行這些測試數據時,沿著許多路徑都運行過。如果能沿著所有路徑都運行一遍,當然很好。如果能做到完全的路徑覆蓋,就必然達到100%的分支覆蓋和語句覆蓋。但是,對于較大的程序,基本上不可能沿著所有路徑都運行一遍,因為路徑數太多了。運行過的路徑數對所有路徑數的百分比就是路徑覆蓋率。
文章來源于領測軟件測試網 http://www.kjueaiud.com/