6. 軟件系統的主要測試內容及技術
6.1 接口與路徑測試
u 數據一般通過接口輸入和輸出,所以接口測試是白盒測試的第一步。每個接口可能有多個輸入參數,每個參數有“典型值”、“邊界值”、“異常值”之分,所以輸 入的組合數可能并不少。根據接口的定義,可以推斷某種輸入應當產生什么樣的輸出。輸出包括函數的返回值和輸出參數。如果實際輸出與期望的輸出不一致,那么 說明程序有錯誤。白盒方式的接口測試和黑盒方式的功能測試,其方法十分相似。
u 一個函數體內的語句可能只有十幾條,但邏輯路徑可能有成千上萬條。想遍歷測試幾乎是不可能的,不測試或者胡亂找幾條路徑測試卻又不行。
u 對于非嚴格系統而言,在分析路徑方面化費很多精力是不值得的。我認為在構造接口測試的同時已經建立了測試路徑。因為每一種輸入將產生唯一的輸出,輸入與輸 出之間的路徑也是唯一的。由于接口測試中的輸入是有代表性的,因此相應的路徑也具有代表性,不用得著費煞苦心地去找測試路徑。
u 路徑測試的檢查表
數據類型、變量值、邏輯判斷、循環、內存管理、文件I/O、錯誤處理
u 由于接口測試是枚舉的,有可能漏掉某些狀況,導致一些重要的路徑沒有被測試。預防措施有:
觀察是否有程序語句從來沒有被執行過。如果發生在這種情況,要么是程序有錯誤,存在無用的代碼;要么是接口測試不充分,漏掉了一些路徑。
要特別留意函數體內的錯誤處理程序塊(如果存在的話),這是最易被人疏忽的路徑,隱患最多。
6.2 功能測試
u 功能測試的基本方法是構造一些合理輸入(在需求范圍之內),檢查輸出是否與期望的相同。如果兩者不一致,即表明功能有誤。也有例外的情況,如《需求規格說明書》中的某個功能寫錯了,而實際上軟件的功能卻是正確的,這時要更改的是《需求規格說明書》。
u 功能測試看起來比較簡單,只要看得懂《需求規格說明書》,誰都會做。難點在于如何構造有效的輸入。由于輸入空間通常是無限的,窮舉測試顯然行不通。那么隨便輸入一些東西,碰運氣行不行?
u 功能測試有兩種比較好的測試方法:等價劃分法和邊界值分析法。
等價劃分是指把輸入空間劃分為幾個“等價區間”,在每個“等價區間”中只需要測試一個典型值就可以了。等價劃分法來源于人們的直覺與經驗,可令測試事半功倍。
“缺陷遺漏在角落里,聚集在邊界上”。邊界值測試法是對等價劃分法的補充。如果A和B是輸入空間的邊界值,那么除了典型值外還要用A和B作為測試用例。
例如測試函數。憑直覺,等價區間應是(0, 1)和(1, +∞)??扇〉湫椭祒=0.5以及x=2.0進行“等價劃分”測試。再取 x=0以及x=1進行“邊界值”測試。
6.3 健壯性測試
u 健壯性是指在異常情況下,軟件還能正常運行的能力。健壯性有兩層含義:一是容錯能力,二是恢復能力。
u 容錯性測試通常構造一些不合理的輸入來引誘軟件出錯,例如:
(1)輸入錯誤的數據類型。如“猴”年“馬”月。
(2)輸入定義域之外的數值。如上海人常說的“十三點”
u 粗暴一些方式俗稱“大猩猩”測試法。除了不能拳打腳踢嘴咬外,什么招術都可以使出來。例如在測試客戶機-服務器模式的軟件時,把網絡線拔掉,造成通信異常中斷。
u 恢復測試重點考察一下幾項:
(1)系統能否重新運行;
(2)有無重要的數據丟失;
(3)是否毀壞了其它相關的軟件硬件。
6.4 性能測試
u 性能測試即測試軟件處理事務的速度,一是為了檢驗性能是否符合需求,二是為了得到某些性能數據供人們參考(例如用于宣傳)。
u 有時人們關心測試的“絕對值”,如數據送輸速率是每秒多少比特。有時人們關心測試的“相對值”,如某個軟件比另一個軟件快多少倍。
u 在獲取測試的“絕對值”時,我們要充分考慮并記錄運行環境對測試的影響。例如網絡環境、計算機主頻,總線結構和外部設備都可能影響軟件的運行速度。
u 性能測試的一些注意事項:
不要試圖讓人拿著鐘表去測時間,應當編寫一段程序用于計算時間以及相關數據。
應當測試軟件在標準配置和最低配置下的性能。
為了排除干擾,應當關閉那些消耗內存、占用CPU的其它應用軟件(如殺毒軟件)。
不同的輸入情況會得到不同的性能數據,應當分檔記錄。例如傳輸文件的容量從100K到1M可以分成若干等級。
由于環境的波動,同一種輸入情況在不同的時間可能得到不同的性能數據,可以取其平均值。
6.5 用戶界面測試
u 絕大多數軟件擁有圖形用戶界面。圖形用戶界面的測試重點是正確性、易用性和視覺效果。在評價易用性和視覺效果時,主觀性非常強,應當考慮多個人的觀點。
6.6 信息安全測試
u 信息安全性(security)是指防止系統被非法入侵的能力,既屬于技術問題又屬于管理問題。
u 信息安全性測試有如下步驟:
(1)為非法入侵設立目標,例如“盜竊某個文件”或“更改數據庫記錄”等。
(2)邀請(或懸賞)一些人扮演黑客,讓他們想盡辦法入侵系統,實現“目標”。
(3)如果有人成功了,請他詳述入侵的過程。別忘了給予獎勵。
6.7 壓力測試
u 壓力測試也叫負荷測試,即獲取系統能正常運行的極限狀態。了解“極限”是很有價值的,例如潛艇下潛極限深度…。
u 壓力測試的主要任務是:構造正確的輸入,使勁折騰系統卻讓它剛好不癱瘓。
u 壓力測試的一個變種是敏感測試。在某種情況下,微小的輸入變動會導致系統的表現(如性能)發生急劇的變化。敏感測試目的是發現什么樣的輸入可能會引發不穩定現象。
原文轉自:http://www.anti-gravitydesign.com