外表簡(jiǎn)單內(nèi)里復(fù)雜的功能測(cè)試,如何進(jìn)行?
?問題引出
不知道大家有沒有遇到這樣的測(cè)試場(chǎng)景:一個(gè)Web應(yīng)用,待測(cè)功能很簡(jiǎn)單,只需要點(diǎn)擊按鈕啟動(dòng)運(yùn)行,經(jīng)過一系列內(nèi)部運(yùn)算,返回給用戶一個(gè)結(jié)果列表。
從可見的交付給用戶的最上層UI功能來看,待測(cè)功能只是一個(gè)簡(jiǎn)單的“啟動(dòng)”—“觀察結(jié)果”。
但是,我想當(dāng)測(cè)試人員接手這樣一個(gè)測(cè)試項(xiàng)目的時(shí)候,恐怕應(yīng)該是先“驚喜”后“恐慌”吧?!
“驚喜”:這么簡(jiǎn)單,點(diǎn)一下看一下結(jié)果不就測(cè)完了?
“恐慌”:這么簡(jiǎn)單?會(huì)不會(huì)還有什么測(cè)試點(diǎn)我遺漏了,怎么感覺有點(diǎn)惴惴不安呢?!
這樣的測(cè)試場(chǎng)景,我想幾乎每個(gè)測(cè)試人員在職業(yè)生涯中都會(huì)遇到。那么,是不是真的就是“點(diǎn)一點(diǎn)”看看結(jié)果就行了呢?顯然不是。
那么,對(duì)于這樣類型的待測(cè)項(xiàng)目我們應(yīng)該怎么去設(shè)計(jì)測(cè)試或者進(jìn)行測(cè)試呢,或者有什么測(cè)試技巧需要掌握的呢?
需要說明的是:在這里,我們不討論什么先進(jìn)行單元測(cè)試、再進(jìn)行集成測(cè)試、最后系統(tǒng)測(cè)試這類的分層測(cè)試設(shè)計(jì)理念,也不細(xì)致討論使用什么判定表、等價(jià)類等具體的黑盒或白盒測(cè)試方法。
我們本文討論的核心是:從業(yè)務(wù)層面出發(fā),思考如何進(jìn)行這類項(xiàng)目的測(cè)試,及我們需要借助或抓住的一些測(cè)試靈感。
問題思考
問題1:如何確定“點(diǎn)一點(diǎn)”返回的結(jié)果是正確的呢?
比如:點(diǎn)一點(diǎn)搜索某個(gè)“number=100”的數(shù)據(jù)有多少個(gè),返回結(jié)果有10個(gè)。
既然,我們不能確定“點(diǎn)一點(diǎn)”返回給我們的結(jié)果是正確的。那么,我們可以模擬數(shù)據(jù),以此判定結(jié)果的正確性。具體怎么做呢?
例如:確定系統(tǒng)內(nèi)沒有number=200的數(shù)據(jù),模擬、輸入100個(gè)number=200的數(shù)據(jù)。通過被測(cè)系統(tǒng)查詢,返回number=200的數(shù)據(jù)數(shù)量。
- 若返回?cái)?shù)量為100個(gè)則表明系統(tǒng)正確性,通過測(cè)試;
- 若返回?cái)?shù)量不是100個(gè),則表明系統(tǒng)存在錯(cuò)誤,測(cè)試失敗。
以此模擬數(shù)據(jù),來判定被測(cè)系統(tǒng)的正確性與否。
因此,如何進(jìn)行外表簡(jiǎn)單的應(yīng)用功能測(cè)試?需要掌握的第一個(gè)測(cè)試技巧是:學(xué)會(huì)模擬測(cè)試數(shù)據(jù)。
問題2:如何豐富測(cè)試數(shù)據(jù)樣本呢?
比如:在1中,我們證明了某類測(cè)試數(shù)據(jù)測(cè)試場(chǎng)景下,被測(cè)系統(tǒng)的正確性。但是,在其他類型測(cè)試數(shù)據(jù)輸入情況下,被測(cè)系統(tǒng)是否會(huì)響應(yīng)正確呢?
也許,看到這個(gè)問題,有的人會(huì)說:繼續(xù)模擬更多類型的測(cè)試數(shù)據(jù)唄,比如string啊、int啊、list啊等等。
不得不說,這的確是一個(gè)方法。但是,數(shù)據(jù)類型多種多樣,系統(tǒng)數(shù)據(jù)邊界我們也不得而知(從業(yè)務(wù)層面出發(fā),我們不知悉代碼內(nèi)部細(xì)節(jié)),我們?nèi)绾文軌蛎杜e完所有的數(shù)據(jù)類型和模擬數(shù)據(jù)邊界值呢?!
要解決這個(gè)問題,從用戶的角度出發(fā),有一個(gè)很好的建議:如果可以,盡量使用真實(shí)數(shù)據(jù)進(jìn)行測(cè)試。
如果我們能獲得真實(shí)數(shù)據(jù)采樣樣本,那么可以很好地解決我們模擬數(shù)據(jù)樣本不夠豐富和模擬數(shù)據(jù)與真實(shí)數(shù)據(jù)之間存在差異的問題。而且,真實(shí)數(shù)據(jù)能讓我們更接近用戶的使用環(huán)境。
問題3:對(duì)于內(nèi)部邏輯復(fù)雜的應(yīng)用,最終返回結(jié)果正確,但是我還是有點(diǎn)擔(dān)心內(nèi)部運(yùn)算有沒有出問題呢?
比如:某個(gè)應(yīng)用,只需web頁(yè)面點(diǎn)擊即可觸發(fā),但后臺(tái)程序涉及多個(gè)組件,如何確定運(yùn)算過程中各個(gè)組件的正確性。
解決多個(gè)組件聯(lián)合作業(yè)的問題,常用的方法是:階段性測(cè)試,即每次只測(cè)試一個(gè)組件正確性,最終聯(lián)合確定整個(gè)系統(tǒng)正確性。
但從業(yè)務(wù)層面出發(fā),有一個(gè)簡(jiǎn)單的技巧就是:如果可以,請(qǐng)隨時(shí)觀察后臺(tái)程序日志打印。
日志是一個(gè)很好的測(cè)試媒介,借助日志可以發(fā)現(xiàn)許多未曾暴露到前端呈現(xiàn)在用戶面前的問題。我們要善于抓住日志中的“error”、“warn”等等信息。
問題4:如何快速地了解被測(cè)系統(tǒng)的一些“不為人知“的細(xì)節(jié)?
比如:觀察到日志中某個(gè)”可疑“信息,但是無法確定是否是故障,或者系統(tǒng)重啟后,表現(xiàn)與預(yù)期不一致,無法確定是否是故障。
這個(gè)時(shí)候,作為場(chǎng)內(nèi)測(cè)試人員,你就需要同開發(fā)人員保持良好的伙伴關(guān)系。
開發(fā)人員對(duì)被測(cè)系統(tǒng)內(nèi)部細(xì)節(jié)的了解程度遠(yuǎn)勝于測(cè)試人員,同開發(fā)人員保持良好的伙伴關(guān)系,可以在遇到問題的第一時(shí)間求助開發(fā)人員而得到很好的答疑。并且,在開發(fā)人員的指導(dǎo)下,可以幫助我們更快地熟悉被測(cè)系統(tǒng)。
問題總結(jié)
針對(duì)本文的核心問題:如何進(jìn)行外表簡(jiǎn)單的應(yīng)用功能測(cè)試?在此給出了4點(diǎn)建議。如下表所示:
我們不談測(cè)試技術(shù),我們談的是如何思考測(cè)試。?