有沒有想過這樣一個問題毡惜,即使測試一個很簡單的應(yīng)用程序時弯囊,要用所有可能的輸入進行測試也通常是不可能的潘明,無論使用手動測試還是自動化測試蛋欣。
比如有這樣一個應(yīng)用:
我們有一個應(yīng)用程序寡夹,界面上有兩個字段年份和月份处面,用戶可以輸入年份和和月份去查詢當(dāng)年當(dāng)月的消費明細(xì)。年份的范圍到從2000年到至今菩掏,月份范圍在1到12月魂角。
如果現(xiàn)在是2019年9月,那么所有有效輸入的測試用例個數(shù)就是(2019 - 2000) * 12 + 9 = 237智绸。采取手動測試野揪,執(zhí)行完所有測試用例肯定讓測試工程師測到懷疑人生。
然而除了有效輸入瞧栗,無效輸入也必須考慮在測試范圍內(nèi)斯稳,那么針對這個應(yīng)用,它是無窮盡的迹恐,2020挣惰、2021、2022...你無法窮舉所有輸入。
所以答案就是憎茂,我們應(yīng)該去尋找一把鑰匙——用最少的輸入去覆蓋最全面的測試珍语。為了打開這所大門,一種測試方法被引入唇辨,那就是等價類劃分廊酣。
等價類劃分是最典型的軟件測試技術(shù),它把程序輸入劃分成若干集合赏枚,然后從中選取代表性數(shù)據(jù)作為測試用例亡驰。集合中的一個數(shù)據(jù)相對集合中的其他數(shù)據(jù)對于程序輸出效果都是一樣的,什么意思呢饿幅?拿前面的例子來說凡辱,無論你輸入2000、2001栗恩、2002還是2019透乾,這些數(shù)據(jù)對于程序的效果都是相同的。
等價類劃分分為兩種:有效等價類 和?無效等價類
有效等價類磕秤,顧名思義乳乌,有效等價類的輸入數(shù)據(jù)對于程序的定義說明來說是合理的,比如2000市咆。利用有效等價類可以檢驗程序是否按照產(chǎn)品定義去設(shè)計汉操。
無效等價類,和有效等價類相反蒙兰,其中的輸入數(shù)據(jù)是異常和不合理的磷瘤,比如1999,它可以檢驗程序的健壯性和可靠性搜变。
套路
我們再舉例一個應(yīng)用程序的例子采缚,這是一個我們再熟悉不過的新用戶注冊功能,頁面上需要用戶填寫用戶ID和密碼挠他,用戶ID只能包含字母和數(shù)字扳抽,最長字符大小不超過10,密碼只能包含字母和數(shù)字绩社,長度最小6摔蓝,最大10。
那么我們?nèi)绾瓮ㄟ^等價類劃分去設(shè)計我們的測試用例呢愉耙?
? ? ? ? 1.建立等價類表,為每個等價類規(guī)定一個唯一的編號拌滋。
? ??????2.設(shè)計測試用例朴沿,盡可能覆蓋未被覆蓋的有效等價類,重復(fù)這個步驟,直到所有有效等價類被覆蓋赌渣。
? ??????3.設(shè)計測試用例魏铅,盡可能覆蓋未被覆蓋的無效等價類,重復(fù)這個步驟直到所有無效等價類被覆蓋坚芜。
測試用例
小貼士
等價類確定的原則
? ??????a.輸入條件是布爾類型览芳,那么顯然意見,可以確定只有一個有效等價類和一個無效等價類鸿竖,不是true就是false啦沧竟。
? ??????b.輸入數(shù)據(jù)必須遵守規(guī)則,可確立一個有效等價類(符合規(guī)則)和若干個無效等價類(從不同角度違反規(guī)則)缚忧。
? ??????c.輸入數(shù)據(jù)是一組值(n個)悟泵,并且程序?qū)γ恳粋€輸入值分別處理,可確立n個有效等價類和一個無效等價類闪水。
? ??????d.在已劃分的等價類中糕非,各元素在程序處理中的方式不同,應(yīng)再將該等價類進一步劃分為更小的等價類球榆。
? ??????e.輸入條件規(guī)定了取值范圍朽肥,可確立一個有效等價類和兩個無效等價類。
等價類劃分的好處
? ? ? ? 擁有等價類可以在不影響測試覆蓋率或測試質(zhì)量的情況下大大減少測試用例的數(shù)量持钉。由于測試數(shù)據(jù)集的減少衡招,它有助于減少整個測試執(zhí)行時間。
? ? ? ? 它可以應(yīng)用于所有級別的測試右钾,如單元測試蚁吝、集成測試、系統(tǒng)測試等舀射。
等價類劃分的缺點
????????它不考慮邊界值的條件窘茁。
????????等價類的識別很大程度上依賴于測試人員的專業(yè)知識。