軟件測試中的基于狀態(tài)轉換的測試
世間萬(wàn)物,緣起緣滅,每天都在經(jīng)歷著(zhù)各種各樣的狀態(tài)轉換。
作為一個(gè)測試人員,在工作過(guò)程中,經(jīng)常會(huì )碰到軟件中事物具有多個(gè)狀態(tài),各個(gè)狀態(tài)在滿(mǎn)足某些條件時(shí),實(shí)現狀態(tài)的轉換。
軟件中事物狀態(tài)間的轉換一般可分為兩類(lèi):一類(lèi)是各個(gè)狀態(tài)之間轉換有一定的序列關(guān)系,如工作流,必須先發(fā)生A狀態(tài),才能到B狀態(tài),狀態(tài)A和B之間有先后順序;一類(lèi)是各個(gè)狀態(tài)是并列關(guān)系,各個(gè)狀態(tài)間可以相互轉換,如狀態(tài)C和D,可以由C轉換成D,也可以由D轉換成C。這兩種類(lèi)型的狀態(tài)轉換,都需要注意用戶(hù)角色權限。
所謂狀態(tài)轉換的測試,是指在測試過(guò)程對于軟件中事物狀態(tài)的轉換,我們需要模擬使狀態(tài)發(fā)生轉換的各種用戶(hù)操作場(chǎng)景,以及通過(guò)一些非正常手段來(lái)校驗不允許發(fā)生的狀態(tài)流轉;旧蠈顟B(tài)轉換的測試,我們設計的用例需要涵蓋允許的狀態(tài)轉換和不允許的狀態(tài)轉換、以及用戶(hù)角色權限的校驗。
對于那些只有2個(gè)狀態(tài)轉換的情況,往往在基于主流程或備選流程的用例中添加狀態(tài)校驗項來(lái)實(shí)現;而對于那些有復雜的流轉過(guò)程或者有多種狀態(tài)的情況,只是通過(guò)用例中添加的狀態(tài)校驗項來(lái),很容易遺漏狀態(tài)的轉換關(guān)系,更主要的各個(gè)狀態(tài)的轉換被拆分到各個(gè)功能模塊的用例中,非常的零碎,如果希望就針對狀態(tài)轉換的一個(gè)回歸,篩選用例將會(huì )是一件非常麻煩的事情,而不存在的狀態(tài)轉換校驗則沒(méi)有辦法體現,由此我們很是需要專(zhuān)門(mén)針對狀態(tài)的流轉做一個(gè)測試設計。
無(wú)論是序列關(guān)系還是并列關(guān)系的狀態(tài)轉換,我們都可以從需求說(shuō)明書(shū)(PRD)中獲取狀態(tài)的流轉信息,為了更清晰的描述這種狀態(tài)流轉,我們可以通過(guò)狀態(tài)圖來(lái)表達。有了狀態(tài)圖,我們就可以從用戶(hù)使用的角度、結合用戶(hù)的實(shí)際需求去考慮,這些狀態(tài)的流轉是否符合用戶(hù)的操作習慣,檢查是否有冗余或者缺失的狀態(tài);程序的實(shí)現是否可以讓用戶(hù)操作盡可能的簡(jiǎn)單易用;狀態(tài)流轉路徑末端節點(diǎn)是否是終結狀態(tài),終結狀態(tài)是否存在逆向的狀態(tài)流轉。
下面就這兩種類(lèi)型的進(jìn)行實(shí)例說(shuō)明。
序列關(guān)系的狀態(tài)轉換:spu編輯狀態(tài)的轉換。
Spu編輯狀態(tài)的轉換,是一個(gè)有序的過(guò)程,在一個(gè)生命周期內,某個(gè)狀態(tài)下,滿(mǎn)足要求才會(huì )流轉到下一個(gè)狀態(tài),大部分狀態(tài)的流轉是單向的,任意一個(gè)狀態(tài)流轉分支都是從初始狀態(tài)出發(fā),到終結狀態(tài)終止。
并列關(guān)系的狀態(tài)轉換:商品狀態(tài)的轉換。
商品各個(gè)狀態(tài)間的轉換,也有起始狀態(tài)和終止狀態(tài),不同于序列狀態(tài),幾乎每個(gè)狀態(tài)都和多個(gè)狀態(tài)存在在轉換關(guān)系,且狀態(tài)之間的轉換是相互的,猶如蜘蛛網(wǎng)一樣,面對這種網(wǎng)狀的狀態(tài)圖,測試的時(shí)候需要特別注意狀態(tài)之間不允許發(fā)生的轉換是否存在。
從兩個(gè)實(shí)例,根據狀態(tài)圖,我們可以看到我們需要關(guān)注的內容:
狀態(tài):狀態(tài)圖中的每一個(gè)狀態(tài),都必須進(jìn)行測試,校驗該狀態(tài)下,向其他狀態(tài)的轉換是否如狀態(tài)圖中展示的一致。
狀態(tài)之間允許的轉換:可能是如下情況,相同數據,不同操作引起不同轉換;不同數據(前置條件不一樣),相同操作引起的不同轉換;不同數據,不同操作引起的不同轉換。對每一個(gè)允許的狀態(tài)轉換進(jìn)行驗證,設置狀態(tài)轉換的前置條件,操作使狀態(tài)發(fā)生轉換的功能,驗證操作是否正常、狀態(tài)是否如預期變化。對使用頻率特別高、或者特別容易出錯的轉換、以及最不常使用的轉換,需要構造更多的測試數據,做盡可能多的覆蓋。
狀態(tài)之間不允許的轉換:狀態(tài)之間不允許的轉換測試,關(guān)注系統返回的錯誤信息和狀態(tài)值是否變更,不需要對所有的不可能進(jìn)行驗證,應該挑選那些特別容易發(fā)生的轉換進(jìn)行測試。
狀態(tài)轉換的角色權限:狀態(tài)之間的轉換操作,是有用戶(hù)角色要求的,我們不僅要驗證有權限的角色能夠正常操作,還需要驗證沒(méi)有權限的角色是否能操作,對于沒(méi)有權限的角色驗證,在不可能全部驗證的情況下,也是挑選相對容易出錯的操作進(jìn)行。
狀態(tài)的轉換,在軟件中是非常普遍的,通過(guò)狀態(tài)圖梳理各個(gè)狀態(tài)轉換的關(guān)系,并在狀態(tài)圖的基礎上按照狀態(tài)和狀態(tài)轉換的覆蓋原則進(jìn)行測試設計,可以有效的保證軟件狀態(tài)轉換的正確性。測試過(guò)程中,還可以進(jìn)行隨機的狀態(tài)轉換測試。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/