功能測試中遇到不可重現軟體缺陷的解決策略

寒凝雪發表於2017-07-03

測試人 員提交軟體缺陷報告後,最不希望看到的這些缺陷被開發人員忽略,儘管你堅信這一定是軟體缺陷,而罪魁禍首就是這些缺陷不可重現!一旦出現這樣的情況,測試 人員會很被動,開發人員也會對測試人員有意見。這就使得關係本來就不怎麼融洽的測試人員和開發人員之間的關係更加緊張;對於整個時間緊湊的專案來說,無異 於是火上澆油。為了減少這種尷尬情況的出現,非常有必要分析一下軟體缺陷不能重現的原因。

  1. 測試環境不一致

  從廣義上來說,保證或影響軟體的任何因素都是環境,例如,系統的構造版本、應用伺服器的型別和版本、瀏覽器的語音和版本等。

  以下就是我們會遇見的錯誤:某個B/S(Web應用)架構的系統軟體執行於IE8上,出現了JS(Java Script)指令碼錯誤導致頁面瀏覽異常的軟體缺陷,把IE8降級到IE6或7後,此軟體缺陷就自動消失了。

  2. 測試配置不一致

  程式執行都是基於一定的配置條件下進行的,包括被測系統引數設定、基礎資料完整性、業務流程完整性等,比如,我們曾經在某資料庫產品測試過程中,由於在安裝介面中選擇了非預設路徑進行安裝,結果導致該資料庫物理備份會恢復功能出錯,而對方在核對缺陷時按照預設路徑進行了安裝,因此缺陷總是無法重現。

  3. 記憶體洩露

  某些系統長期執行後出現速度慢的原因是開發人員未養成回收記憶體的習慣。這類錯誤在短期內不會出現,但當系統長期執行時就會出現,並且由此會引發一系列的問題。

  4. 資料介面不匹配

  一般只有在檢視原始碼後才能發現。某些型別的資料會被系統自動轉換,有些資料被截斷或被強制轉換成另外一種資料型別時,會出現一些潛在的錯誤。

  基於以上測試過程中出現的軟體缺陷不能重現的原因,我們提出如下一些解決策略,以更好地從源頭上減少不可重現軟體缺陷的出現。

  1. 測試環境配置充分細緻

  測試人員在測試前,嚴格核對系統的執行環境配置要求,並充分考慮系統線上執行後的環境變化,做好測試環境配置的全面規劃,注意細節。另外可以使用Ghost對硬體或某個分割槽進行映象備份。

  2. 捕獲系統日誌,分析異常資訊

  測試人員應養成記錄系統錯誤日誌的習慣,保留系統在出錯時的真實狀態。比如將IE瀏覽器高階選項設定為“顯示每個指令碼錯誤的通知”。

  3. 監測系統狀態,異常及時告警

  在實施系統測試過程中,我們必須充分關注系統執行狀態的變化,一旦系統執行狀態發生較大的波動,勢必會對後期的業務執行帶來較大的影響。因此,系統執行監測的一個重要內容是需要及時反饋系統執行異常,並提供異常報告。

  4. 測試資料翔實,易於追溯

  測試資料是軟體測試的 核心,很多情況下,測試人員為了縮短測試周期,在實際測試前並沒有充分編寫足夠的測試資料,也沒有記錄這些測試資料的執行順序和執行軌跡,一旦程式在某個 節點出現問題,我們無法判斷其產生的過程和引起這個缺陷的具體測試資料,對我們進一步分析軟體缺陷產生的原因會造成一些不必要的障礙。

  正是基於此我們強調在軟體測試開始前,我們必須制定完整的測試用例,輔以詳細的測試資料,並明確測試資料的操作步驟和每一步的預期結果,這樣,一旦軟體出現問題,我們可以很快進行重現和定位。

附錄1:常用正交表

(1)L4(23

列號
1
2
3
試驗號
1
1
1
1
2
1
2
2
3
2
1
2
4
2
2
1

(2)L8(27)

列號
1
2
3
4
5
6
7
試驗號
1
1
1
1
1
1
1
1
2
1
1
1
2
2
2
2
3
1
2
2
1
1
2
2
4
1
2
2
2
2
1
1
5
2
1
2
1
2
1
2
6
2
1
2
2
1
2
1
7
2
2
1
1
2
2
1
8
2
2
1
2
1
1
2

(3)L12(211)

列號
1
2
3
4
5
6
7
8
9
10
11
試驗號
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
2
2
2
2
2
2
3
1
1
2
2
2
1
1
1
2
2
2
4
1
2
1
2
2
1
2
2
1
1
2
5
1
2
2
1
2
2
1
2
1
2
1
6
1
2
2
2
1
2
2
1
2
1
1
7
2
1
2
2
1
1
2
2
1
2
1
8
2
1
2
1
2
2
2
1
1
1
2
9
2
1
1
2
2
2
1
2
2
1
1
10
2
2
2
1
1
1
1
2
2
1
2
11
2
2
1
2
1
2
1
1
1
2
2
12
2
2
1
1
2
1
2
1
2
2
1

 

(4)L9(34

列號
1
2
3
4
試驗號
1
1
1
1
1
2
1
2
2
2
3
1
3
3
3
4
2
1
2
3
5
2
2
3
1
6
2
3
1
2
7
3
1
3
2
8
3
2
1
3
9
3
3
2
1

(5)L16(45

列號
1
2
3
4
5
試驗號
1
1
1
1
1
1
2
1
2
2
2
2
3
1
3
3
3
3
4
1
4
4
4
4
5
2
1
2
3
4
6
2
2
1
4
3
7
2
3
4
1
2
8
2
4
3
2
1
9
3
1
3
4
2
10
3
2
4
3
1
11
3
3
1
2
4
12
3
4
2
1
3
13
4
1
4
2
3
14
4
2
3
1
4
15
4
3
2
4
1
16
4
4
1
3
2

(6)L25(56

列號
1
2
3
4
5
6
試驗號
1
1
1
1
1
1
1
2
1
2
2
2
2
2
3
1
3
3
3
3
3
4
1
4
4
4
4
4
5
1
5
5
5
5
5
6
2
1
2
3
4
5
7
2
2
3
4
5
1
8
2
3
4
5
1
2
9
2
4
5
1
2
3
10
2
5
1
2
3
4
11
3
1
3
5
2
4
12
3
2
4
1
3
5
13
3
3
5
2
4
1
14
3
4
1
3
5
2
15
3
5
2
4
1
3
16
4
1
4
2
5
3
17
4
2
5
3
1
4
18
4
3
1
4
2
5
19
4
4
2
5
3
1
20
4
5
3
1
4
2
21
5
1
5
4
3
2
22
5
2
1
5
4
3
23
5
3
2
1
5
4
24
5
4
3
2
1
5
25
5
5
4
3
2
1

(7)L8(4×24

列號
1
2
3
4
5
實驗號
1
1
1
1
1
1
2
1
2
2
2
2
3
2
1
1
2
2
4
2
2
2
1
1
5
3
1
2
1
2
6
3
2
1
2
1
7
4
1
2
2
1
8
4
2
1
1
2

(8)L12(3×24

列號
1
2
3
4
5
試驗號
1
1
1
1
1
1
2
1
1
1
2
2
3
1
2
2
1
2
4
1
2
2
2
1
5
2
1
2
1
1
6
2
1
2
2
2
7
2
2
1
2
2
8
2
2
1
2
2
9
3
1
2
1
2
10
3
1
1
2
1
11
3
2
1
1
2
12
3
2
2
2
1

(9)L16(44×23

列號
1
2
3
4
5
6
7
試驗號
1
1
1
1
1
1
1
1
2
1
2
2
2
1
2
2
3
1
3
3
3
2
1
2
4
1
4
4
4
2
2
1
5
2
1
2
3
2
2
1
6
2
2
1
4
2
1
2
7
2
3
4
1
1
2
2
8
2
4
3
2
1
1
1
9
3
1
3
4
1
2
2
10
3
2
4
3
1
1
1
11
3
3
1
2
2
2
1
12
3
4
2
1
2
1
2
13
4
1
4
2
2
1
2
14
4
2
3
1
2
2
1
15
4
3
2
4
1
1
1
16
4
4
1
3
1
2
2

 

本文出自seven的測試人生公眾號最新內容請見作者的GitHub頁:http://qaseven.github.io/


相關文章