關鍵字:軟件測試
引言 軟件測試作為保證軟件質量和可靠性的關鍵技術手段正日益受到廣泛的重視。但如何進行測試,如何提高測試的質量和效率,從而確保軟件產品的質量和可靠性,仍是令許多人深感困繞的問題。本文僅根據筆者多年從事軟件測試研究與實踐的體會,簡要介紹軟件測試的基本過程,以及一些常用的技術手段、測試策略和準則,并介紹兩個很有特色并具有代表性的軟件測試支持工具,以期愈來愈多的人在認識到軟件測試的重要性的同時,能夠進一步了解應如何正確地選擇和有效地運用各種各樣的測試方法、技術和工具,來提高軟件的質量和可靠性。
一、軟件測試的基本過程
軟件測試是一個極為復雜的過程。如圖一所示,一個規范化的軟件測試過程通常須包括以下基本的測試活動。
·擬定軟件測試計劃
·編制軟件測試大綱
·設計和生成測試用例
·實施測試
·生成軟件問題報告
對整個測試過程進行有效的管理實際上,軟件測試過程與整個軟件開發過程基本上是平行進行的。測試計劃早在需求分析階段即應開始制定,其它相關工作,包括測試大綱的制定、測試數據的生成、測試工具的選擇和開發等也應在測試階段之前進行。充分的準備工作可以有效地克服測試的盲目性,縮短測試周期,提高測試效率,并且起到測試文檔與開發文檔互查的作用。
此外,軟件測試的實施階段是由一系列的測試周期(Test Cycle)組成的。在每個測試周期中,軟件測試工程師將依據預先編制好的測試大綱和準備好的測試用例,對被測軟件進行完整的測試。測試與糾錯通常是反復交替進行的。當使用專業測試人員時,測試與糾錯甚至是平行進行的,從而壓縮總的開發時間。更重要的是,由于專業測試人員豐富的測試經驗、所采用的系統化的測試方法、全時的投入,特別是獨立于開發人員的思維,使得他們能夠更有效地發現許多單靠開發人員很難發現的錯誤和問題。
軟件測試大綱是軟件測試的依據。它明確詳盡地規定了在測試中針對系統的每一項功能或特性所必須完成的基本測試項目和測試完成的標準。無論是自動測試還是手動測試,都必須滿足測試大綱的要求。
一般而言,測試用例是指為實施一次測試而向被測系統提供的輸入數據、操作或各種環境設置。測試用例控制著軟件測試的執行過程,它是對測試大綱中每個測試項目的進一步實例化。已有許多著名的論著總結了設計測試用例的各種規則和策略。從工程實踐的角度講有幾條基本準則:
1.測試用例的代表性:能夠代表各種合理和不合理的、合法的和非法的、邊界和越界的,以及極限的輸入數據、操作和環境設置等;
2.測試結果的可判定性:即測試執行結果的正確性是可判定的或可評估的;
3.測試結果的可再現性:即對同樣的測試用例,系統的執行結果應當是相同的。
二、測試方法
軟件測試的方法和技術是多種多樣的。從測試是否針對系統的內部結構和具體實現算法的角度看,通?煞譃閮深:白盒子方法(結構測試)和黑盒子方法(功能測試)。前者是針對系統內部實現的測試,而后者側重于系統的外部功能和特性。
三、軟件測試工具
一些受軟件開發人員歡迎的軟件測試工具為軟件測試提供了強有力的支持。本文將介紹美國Rational公司的著名套裝軟件SQA和Pure Atria公司極具特色的Purify。
SQA SuiteSQA直接支持對客戶/服務器應用軟件的測試,它的一個重要特點是可以自動驅動被測程序的運行。SQA可以自動記錄和重放程序執行過程,從而實現了對測試進行"復查"的自動化。
由于測試是一個需要反復進行的過程,常常要數十次甚至數百次地重復。因此,這一特性大大地提高了軟件"再測試"(Re-Test)和"回歸測試"(Regression)的自動化程度,把測試人員從繁雜的、重復性的手工測試中解脫出來,從而顯著地提高軟件測試效率。
除了這個最基本的自動錄放功能外,它還提供了一系列的輔助支持功能,比如,
· 被錄制的程序執行過程可以被自動轉換成具有良好可讀性的高級語言程序,從而使這個測試驅動程序可以由測試人員根據測試需要進行必要的修改,甚至完全用手工方式編制。
·自動記錄和分析比較測試的執行結果。不論是簡單的正文方式的輸出結果,還是任意的圖表、聲音、動畫、圖形用戶界面(GUI)中的任一構件,都可以根據測試人員的指定被自動記錄在測試結果庫中,并可對兩次測試的結果自動地進行比較,指出其差異部分。此項功能無疑對"自動查找錯誤"很有幫助。
·調節和設定事件的發生時間和速度。
·基本的測試庫管理功能。
此外,SQA還支持軟件測試人員進行以下工作:
·制定測試計劃和測試大綱,并將這些文檔按照自然的樹狀結構分層地管理起來,并據此控制和驅動整個測試過程。
·不僅能夠自動記錄各類測試結果,而且對其進行修改,從而使得測試人員可以在程序運行結果尚有許多錯誤的情況下,通過對所記錄下的結果做適當修正來獲得理想的"期望結果" ,為測試結果的自動比較奠定基礎。
·測試問題報告的記錄與管理。
總之,SQA Suite提供了一個比較完整的測試平臺,以支持軟件測試的各種基本活動,包括測試計劃與測試大綱的制定、回歸測試的自動化、測試結果的分析比較、軟件問題報告的生成與自動分發和控制等。對于許多應用軟件的開發無疑是個有力的測試支持工具。
Purify是原PureAtria公司(現已經與美國Rational公司合并,改名為美國Rational公司)于90年代初率先推出的專門用于檢測程序中種種內存使用錯誤的軟件工具。幾乎所有使用過C語言開發軟件的程序員都會有這樣的體會,C語言中使用極為靈活的指針給程序員帶來了很大便利,但同時也制造了許多的麻煩。由于指針使用不當而引起的錯誤通常是最難發現的,同時也是最難定位的一類錯誤。而Purify對多種常見的內存使用錯誤的檢錯能力和準確的定位,受到廣大軟件開發人員的青睞。
Purify可以自動識別出二十多種內存使用錯誤,包括
·未初始化的局部變量
·未申請的內存
·使用已釋放的內存
·數組越界
·內存丟失
·文件描述問題
·棧溢出問題
·棧結構邊界錯誤等
在下面的例子中,暗藏著兩個內存使用錯誤。第一行為指針數組pp申請的空間尺寸不對。這類錯誤往往不易發現,因為在C語言中,一些"輕微"的內存越界可能被系統所容忍。但這往往是導致更嚴重錯誤的根源。例如,可能破壞其它數據區等。最后一行的錯誤是在釋放pp 之前沒有釋放賦予它的字符串空間,從而把它們"丟失"了。這類錯誤猶如慢性自殺,它會逐漸消耗掉內存,降低系統的運行效率,直到完全崩潰。而真正的問題在于,這些程序中的"惡性腫瘤"用常規的測試手段和調試工具是極難發現和加以定位的。Purify則在此充分顯示了它的強大功效,所到之處,即對所測試過的情況,上述各種常見的內存錯誤都可以被一一揭露出來,并且準確地指出錯誤的類型和位置。從而大大地提高了測試和糾錯的效率,提高了軟件的可靠性。
…/"to get 10 words and print them out"/
if(!(pp=(char**)malloc(10))){
/*Size should be 10*sizeof(char*)*/
printf("Out of memory.\n");
exit(-1);
}
for(i=0;i<10;i++){
scanf("%s",buffer);
if(!(pp[i]=(char*)malloc(strlen(buffer)+1))){
print("Out of Memory.\ n");
exit(-1);
}
strcpy(pp[i],buffer);
printf(pp[i]);
}
free(pp);/*all the strings pointed by it are lost!*/
………
今年以來,原PureAtria公司陸續推出了其系列產品?/FONT>Pure,包括支持內存檢測的Purify ,支持路徑覆蓋的PureCoverage,支持多線程應用程序性能測試的Quantify,以及用以提高測試期間連接編譯被測程序效率的PureLink等。Pure系列現已支持C、C++、FORTRAN語言,以及UNIX和Window NT等操作系統,如Sun OS、Solaris 2.3,HP-UX,Windows NT Server以及IBM A/ X等。
四、結束語
充分認識軟件測試的重要性和復雜性,合理地選擇測試方法,有效地組織測試人員和安排測試任務,并且盡量使用軟件測試工具增強軟件測試的自動化程度,無疑可以幫助軟件開發和測試人員大大提高測試效率和軟件的質量。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/