軟件可測試性

軟件可測試性(Software testability)是指一個軟件工件(軟件系統、模組、需求文件或設計文件等)在一給定的測試環境下,可支援測試的程度。

許多軟件系統是不可測試的,或是無法立即測試。例如Google的ReCAPTCHA,若沒有任何有關圖的元資料,則無法成為可測試的系統。不過若針對每一張圖,都有對應說明應有結果的標籤,就可以測試此一系統。因此軟件工件的可測試性不是內在英語Intrinsic and extrinsic properties性質,不像軟件大小一様可以直接量測。軟件可測試性是外在性質,由待測試的軟件及測試目標、方法及測試資源(測試環境)之間的相互關係來決定。

「可測試性」和設計良好程度的相關性可由以下現象看出:低內聚性、高耦合力、存在多餘程式碼,以及缺乏封裝的程式往往也是不容易測試的程式[1]。若軟件的可測試性低,可能會造成測試工作的增加。在一些極端的情形下,缺乏可測試性可能會使部份甚至全部的測試或對軟件需求英語Software requirements的評估無法進行。

為了要找到可測試性以及利用測試找到系統中潛在錯誤(假設有錯誤時)的難度的關係,有一種評估可測試性的相對指標,是每一次需要多少的測試用例才能形成完整的測試套件(在測試了所有測試用例後,所得到的結果可以確定此系統符合某規格,或不符合某規格,不會有模糊地帶)。若數量不大,表示程式的可測試性高。依照此方式,已有提出可測性等級(testability hierarchy)[2][3]

背景知識

依照實證的假設,軟件測試的工作量及有效性和以下幾個因素有關:

  • 軟件需求英語Software requirements的性質。
  • 軟件本身的性質(像大小、複雜度及可測試性)。
  • 測試方法的的性質。
  • 開始及測試流程的性質。
  • 和測試流程有關人員的資格和動機。

軟件元件的可測試性

軟件元件(模組或類別)的可測試性和以下因素有關:

  • 可控制性:是否可以將待測元件的狀態控制到如測試條件要求。
  • 可觀察性:是否可以觀察(中間或最後的)測試結果。
  • 可隔離性:待測元件是否可以隔離測試。
  • 關注點分離:待測元件是否有單一且清楚定義的任務。
  • 易懂性:待測元件是否有說明文檔,或是本身可讀性很高。
  • 可自動化性:待測元件是否可以自動測試。
  • 異質性:是否需要不同的測試方法及工具平行測試。

軟件元件的可測試性可以用以下方式提昇:

需求的可測試性

具有測試性的軟件需求英語Software requirements需求要符合以下的條件:

  • 一致性
  • 完整性
  • 明確不含糊
  • 可量化(像「反應時間快」的需求是無法被驗證的)
  • 實務上的軟件驗證及確認(不只是理論上可行,在有限資源下也是可實現的)

相關條目

參考資料

  1. ^ Shalloway, Alan; Trott, Jim. Design Patterns Explained, 2nd Ed . 2004: 133. ISBN 978-0321247148. 
  2. ^ Rodríguez, Ismael; Llana, Luis; Rabanal, Pablo. A General Testability Theory: Classes, properties, complexity, and testing reductions. IEEE Transactions on Software Engineering. 2014, 40 (9): 862–894 [2020-09-15]. ISSN 0098-5589. doi:10.1109/TSE.2014.2331690. (原始內容存檔於2021-04-17). 
  3. ^ Rodríguez, Ismael. A General Testability Theory. CONCUR 2009 - Concurrency Theory, 20th International Conference, CONCUR 2009, Bologna, Italy, September 1–4, 2009. Proceedings: 572–586. 2009. ISBN 978-3-642-04080-1. doi:10.1007/978-3-642-04081-8_38.