功能性測試軟件的6種常見故障模型
1 輸出不符合業(yè)務(wù)規(guī)則的無效輸出
1.1缺陷產(chǎn)生原因
有時開發(fā)人員也可能對業(yè)務(wù)了解不深刻,對有些問題也是一知半解,因此編寫出的軟件就會產(chǎn)生不符合業(yè)務(wù)邏輯的問題。另外在絕大多數(shù)情況下開發(fā)人員會忽略處理沒有遵循一般規(guī)則的輸進,如果不對這些特殊情況進行編程處理,軟件就會產(chǎn)生錯誤的結(jié)果。
1.2如何發(fā)現(xiàn)這類問題
測試人員應(yīng)該盡可能地學(xué)習(xí)的涉及問題的領(lǐng)域。
有時在列舉出無效輸出后,也很難知道哪些輸進組合能強制這些輸出產(chǎn)生。這時測試人員必須先要確定哪些輸入與輸出有關(guān),然后用產(chǎn)生意外結(jié)果的輸入組合進行測試,測試過程中要留意輸入執(zhí)行順序,用不同的順序執(zhí)行可能得到不同的結(jié)果。如果不能強制無效的輸出產(chǎn)生,就說明軟件沒有這方面的缺陷。
1.3測試方法小結(jié)
應(yīng)用場合:強制產(chǎn)生不符合業(yè)務(wù)背景的知識。
測試方法:列舉出所有的無效輸出,然后逐一測試。
測試知識儲備:全面理解需求規(guī)格說明書中的內(nèi)容,熟悉行業(yè)背景知識。
2 輸出屬性修改后的結(jié)果
2.1缺陷產(chǎn)生原因
輸出經(jīng)常具有可修改的屬性,如顏色、形狀、維數(shù)及大小等,用戶可以修改這些屬性。在這種情況下,開發(fā)人員必須編碼、設(shè)立初始或默認屬性值,然后編碼允許用戶編輯這些屬性。當(dāng)用戶改變了這些屬性后,內(nèi)部的相應(yīng)變量值也隨著變化,再次進行處理時,這些值沒有被重新恢復(fù)為默認值,輸出的屬性就被強制改變了。
2.2如何發(fā)現(xiàn)這類問題
該測試方法可以使用模型公司在那些輸出具有可編輯性、可修改性的功能中。測試人員首先要仔細了解能夠產(chǎn)生的輸出,特別要留意具有可編輯屬性的輸出。測試人員的任務(wù)就是強制每個輸出產(chǎn)生,并編輯其屬性,然后再次強制輸出產(chǎn)生。
2.3測試方法小結(jié)
應(yīng)用場合:輸出的結(jié)果,可以由用戶修改屬性得出。
測試方法:強制每個輸出產(chǎn)生,并編輯其屬性,然后再次強制產(chǎn)生輸出。
測試知識儲備:全面理解需求規(guī)格說明書中的內(nèi)容,了解能夠產(chǎn)生的輸出。
3 屏幕刷新顯示
3.1缺陷產(chǎn)生原因
通常GUI軟件會產(chǎn)生刷新問題,由于GUI在對窗口進行覆蓋、移動和調(diào)整大小時,必須刷新屏幕才能使對象重新顯示。但是如果經(jīng)常刷新,輕易減慢應(yīng)用程序的運行速度;如果不刷新,又會影響用戶對程序的使用,使用戶必須停止工作,去尋找刷新的方法才可以繼續(xù)工作。所以開發(fā)人員有時候不能很好地確定什么時候需要刷新,需要刷新多大范圍的區(qū)域,這就發(fā)生了令人煩惱的刷新問題。
3.2如何發(fā)現(xiàn)這類問題
測試刷新問題的方法是增加、刪除稱移動屏幕上的對象,這樣會使某些對象重新顯示。如果不能正確、及時地進行重新顯示,就產(chǎn)生了軟件缺陷。我們可以通過以下幾個方法來檢查刷新:
從起始位置移動對象。先移動一點,然后增加移動幅度;先移動一次或兩次,然后多次移動,確保覆蓋了所有區(qū)域。
從覆蓋對象的邊界開始一點點覆蓋,使其中一個對象遮住別一個對象。
使用不同類型的對象。如果應(yīng)用程序支持多種類型的對象,如文本對象、圖形對象等,就把這些不同對象混在一起使用。
3.3測試方法小結(jié)
應(yīng)用場合:一個對象包含在另一個對象中,拖動被包含教學(xué)模型對象時,可能出現(xiàn)刷新問題。
測試方法:增加、刪除和移動屏幕上的對象。
測試知識儲備:全面理解需求規(guī)格說明書中的內(nèi)容,了解程序中對象之間的關(guān)系。
4 數(shù)據(jù)結(jié)構(gòu)溢出
4.1缺陷產(chǎn)生原因
所有數(shù)據(jù)結(jié)構(gòu)的大小都有上限。一些數(shù)據(jù)結(jié)構(gòu)會逐步增加長度以布滿機器內(nèi)存容量或磁盤空間,而其它數(shù)據(jù)結(jié)構(gòu)具有固定的上限。開發(fā)人員經(jīng)常對有關(guān)數(shù)據(jù)結(jié)構(gòu)的內(nèi)容進行編碼,忘記結(jié)構(gòu)本身的物理局限。
4.2如何發(fā)現(xiàn)這類問題
確定數(shù)據(jù)結(jié)構(gòu)的界限,嘗試將過多的值輸入數(shù)據(jù)結(jié)構(gòu)。應(yīng)該特別留意界限為數(shù)據(jù)類型的邊界256、1024、等上溢的測試。
對于下溢的測試,可以嘗試多刪除一個數(shù)據(jù),例如當(dāng)結(jié)構(gòu)為空時,嘗試再刪除,或者添加一個數(shù)據(jù),嘗試刪除兩個數(shù)據(jù)時的情況。
4.3測試方法小結(jié)
應(yīng)用場合:程序中存在數(shù)組。
www.yknowyournumbers.com 測試方法:嘗試將過多的值輸入數(shù)據(jù)結(jié)構(gòu),測試上溢;對于下溢的測試,
可以嘗試多刪除一個數(shù)據(jù)。
測試知識準備:全面理解需求規(guī)格說明書中的內(nèi)容,確定數(shù)據(jù)結(jié)構(gòu)的界限。壁紙漆價格
5 數(shù)據(jù)結(jié)構(gòu)不符合約束
5.1缺陷產(chǎn)生原因
在編程過程中對內(nèi)部數(shù)據(jù)結(jié)構(gòu)都有所約束,包括大小、維數(shù)、類型、形狀、屏幕上的位置等。我們測試的重點就是用戶能夠設(shè)置的屬性,這些屬性使用了一組參數(shù)來約束。在建立數(shù)據(jù)項和隨后對數(shù)據(jù)項進行修改的任何時刻都要對數(shù)據(jù)屬性的約束進行檢查。初始化代碼中修改后的代碼有錯誤,在修改錯誤的時候只修改了初始化部分,而忽略了對其他部分的修改,使得其修改不完全,不徹底。
5.2如何發(fā)現(xiàn)這類問題
確認候選數(shù)據(jù),并列出其可修改的屬性。對每個屬性列出有效值的允許范圍、約束的條件等。
確定所有可修改屬性的功能位置。
對數(shù)據(jù)進行初始化,改變每個屬性以確定是否正確進行了約束。
如果數(shù)據(jù)約束遭到破壞,可能導(dǎo)致系統(tǒng)崩潰,或者表現(xiàn)為響應(yīng)時間延遲,錯誤信息,不正確以及使用錯誤數(shù)據(jù)產(chǎn)生的無效輸出。
5.3測試方法小結(jié)
應(yīng)用場合:應(yīng)用程序內(nèi)部的數(shù)據(jù)結(jié)構(gòu)存在約束。
測試方法:破壞內(nèi)部數(shù)據(jù)結(jié)構(gòu)的約束。
測試知識儲備:全面理解需求規(guī)格說明書中的內(nèi)容,確定內(nèi)部數(shù)據(jù)結(jié)構(gòu)的所有約束。
6 操縱數(shù)與操縱符不符
6.1缺陷產(chǎn)生原因
幾乎每個運算符都有它無效的操縱數(shù),對于具體的操縱符,開發(fā)人員在使用它們時,必須編寫錯誤檢查代碼。例如:除以零的問題。
6.2如何發(fā)現(xiàn)這類問題
找到程序中包含的數(shù)據(jù)或輸入(即操作數(shù))的計算(即操作符)、數(shù)學(xué)表達式(即操作符和操作數(shù)的組合)及對圖形的操作。另外,對多個操作數(shù)進行組合也更輕易發(fā)生錯誤。例如,字符和數(shù)字都可以使用“+”操作符。對字符通過“+”把它們連成一串;對數(shù)字通過“+”來進行加法運算。如果系統(tǒng)嘗試把字符和數(shù)字相加,即進行相互矛盾的操作,就會引起軟件失效。
6.3測試方法小結(jié)
應(yīng)用場合:需要進行數(shù)值計算的程序或圖形操作的程序。
測試方法:對于數(shù)值計算考慮操作數(shù)和操作符之間的限定關(guān)系,對于圖形計算還要考慮各種輸入數(shù)據(jù)之間的組合關(guān)系。
測試知識儲備:全面把握被測軟件中操作符對操作數(shù)的要求。把握不同的操作符和操作數(shù)具有的不同的有效和無效的取值范圍。
7 遞回調(diào)用自身
7.1缺陷產(chǎn)生原因
函數(shù)有時會遞歸調(diào)用自身,如果不限制執(zhí)行次數(shù),遞歸就會出現(xiàn)問題,它不斷地調(diào)用自身,很快地占用機器資源,最終產(chǎn)生溢出,使程序崩潰或掛起。產(chǎn)生這類問題的主要原因是開發(fā)人員沒有編碼來保證循環(huán)和遞歸調(diào)用的終止,通常是在循環(huán)的開始或結(jié)束時缺少檢查條件。
7.2如何發(fā)現(xiàn)問題
在軟件中尋找可以使用遞歸調(diào)用的功能。這時化工模型可以制作一個列表,標明軟件中可能嵌入遞歸的功能的列表,然后自己引用自己來檢查程序是否能正確處理。
7.3測試方法小結(jié)
應(yīng)用場合:需要和其它對象進行交互的地方。
測試方法:考慮對象的自我交互或復(fù)制。
測試知識儲備:全面把握被測軟件的需求。