林振文
(同濟(jì)大學(xué),中國(guó) 上海 200092)
許多測(cè)試類(lèi)的書(shū)籍都有大幅篇章介紹用例的設(shè)計(jì)方法,如等價(jià)類(lèi)劃分,邊界值,錯(cuò)誤推斷,因果圖,判定表等。但實(shí)際應(yīng)用中這些理論卻不能給我們很明確的行為指導(dǎo),尤其是業(yè)務(wù)復(fù)雜、關(guān)聯(lián)模塊緊密、輸入標(biāo)準(zhǔn)和輸出的結(jié)果之間路徑很多的時(shí)候,一味的遵循固有的方法只能夠在心理層面上得到滿(mǎn)足,而無(wú)法真正有效地提高測(cè)試的效果,并且我們也沒(méi)有足夠的時(shí)間和資源編寫(xiě)完備的用例。通常我們只能依靠以前項(xiàng)目的用例編寫(xiě)經(jīng)驗(yàn)(或習(xí)慣),希望能夠在一個(gè)完整的項(xiàng)目中更做的加規(guī)范化,但絕大多數(shù)的情況是只停留在“書(shū)寫(xiě)的規(guī)范”的層面上,真正的測(cè)試用例設(shè)計(jì)上還是存在很多的問(wèn)題。
知道如何執(zhí)行這個(gè)用例,但它要說(shuō)明什么呢?(多數(shù)用例給我們的感覺(jué)是“只見(jiàn)樹(shù)木,不見(jiàn)森林”,只說(shuō)明某一功能的實(shí)現(xiàn),無(wú)法串起)通過(guò)上面的一系列問(wèn)題可以看到,似乎測(cè)試用例給我們帶來(lái)的問(wèn)題遠(yuǎn)多于益處,也正是因?yàn)樵趯?shí)際過(guò)程中遇到的問(wèn)題積累,導(dǎo)致我們有很充分的理由忽視或拒絕用例的應(yīng)用。但沒(méi)有用例或簡(jiǎn)略用例的編寫(xiě)我們又會(huì)舒服很多么?不言自明,誰(shuí)也不想倒退發(fā)展。
事實(shí)上我們?cè)跍y(cè)試用例編寫(xiě)和設(shè)計(jì)上遇到的一系列問(wèn)題只是一種表面的呈現(xiàn),究其原因我認(rèn)為有如下幾點(diǎn):
“適合的規(guī)范”或稱(chēng)“本地化的規(guī)范”。這是我們?cè)跍y(cè)試過(guò)程中遇到的第一個(gè)問(wèn)題,通常也是很容易習(xí)慣且淡忘的。我們擁有相當(dāng)多的流程文檔、指導(dǎo)步驟和書(shū)本上的定義,但它適合我們當(dāng)前的項(xiàng)目么?每一個(gè)測(cè)試工程師在進(jìn)入這個(gè)職業(yè)的初期都會(huì)了解一些測(cè)試上的概念和術(shù)語(yǔ),進(jìn)入公司或項(xiàng)目組后也會(huì)進(jìn)一步學(xué)習(xí)相應(yīng)的文檔,例如怎樣規(guī)范編寫(xiě),怎樣定義bug級(jí)別,軟件實(shí)現(xiàn)的主要業(yè)務(wù)等。但當(dāng)測(cè)試經(jīng)理開(kāi)始給我們分配某一模塊的用例編寫(xiě)時(shí),又有多少人知道該怎樣去寫(xiě),怎樣寫(xiě)算是好?
在測(cè)試論壇中常能看到介紹用例編寫(xiě)方法的帖子,而迷茫于怎樣應(yīng)用到實(shí)踐的回復(fù)也不為少數(shù)。為何我們無(wú)法在公司和項(xiàng)目組內(nèi)找到明確且適合的規(guī)范?于是我們只得選擇從書(shū)本或之前的用例中復(fù)制,不管是結(jié)構(gòu)還是方式都依賴(lài)于以往的經(jīng)驗(yàn),我并不是說(shuō)這樣就是錯(cuò)誤的,但不能總結(jié)成文的經(jīng)驗(yàn)無(wú)法給予測(cè)試更多幫助。我們有太多經(jīng)驗(yàn),但卻沒(méi)有形成適合的規(guī)范。
舉個(gè)例子來(lái)說(shuō),現(xiàn)在的技術(shù)往往是知道如何進(jìn)行一個(gè)輸入框的測(cè)試,而卻忽略了對(duì)此輸入框的功能來(lái)進(jìn)行說(shuō)明,深入的分析下去我們會(huì)發(fā)現(xiàn),測(cè)試用例的選取和其功能存在著越細(xì)致分離其聯(lián)系越緊密的特點(diǎn)。往往我們采用的測(cè)試用例選取方法如:邊界值分析、等價(jià)類(lèi)選取、因果圖法,而這些選取用例的方法往往停留在理論層面的方法,是一種經(jīng)驗(yàn)的總結(jié),其本身比較偏向代碼方面的考量,而對(duì)實(shí)際業(yè)務(wù)層面的測(cè)試用例的選取還需要更多的去考慮其功能上面的影響和測(cè)試。
整個(gè)軟件中存在很多復(fù)雜的業(yè)務(wù),也涉及了很多功能,其內(nèi)部的分支更是繁多,這樣一來(lái)測(cè)試用例的涉及就需要簡(jiǎn)明、準(zhǔn)確。對(duì)于功能的測(cè)試用例往往依賴(lài)于程序界面,對(duì)其業(yè)務(wù)的描述往往依賴(lài)于需求分析文檔。這樣一來(lái)對(duì)于測(cè)試就需要更偏向于依照實(shí)際的用戶(hù)接口來(lái)編寫(xiě)測(cè)試用例,找到其邊界值,給出其等價(jià)類(lèi)的代表性測(cè)試用例。對(duì)于業(yè)務(wù)流程只能憑借測(cè)試經(jīng)驗(yàn)來(lái)進(jìn)行理解,這時(shí)測(cè)試出來(lái)的BUG是最多的,可能無(wú)法使這個(gè)BUG對(duì)應(yīng)到具體的用例上,只能自己添加note向開(kāi)發(fā)人員指出可能出錯(cuò)的源頭。正因?yàn)槲覀儧](méi)有很好的積累在業(yè)務(wù)上的測(cè)試用例,才使得我們感到執(zhí)行測(cè)試用例時(shí)發(fā)現(xiàn)的錯(cuò)誤不多。
當(dāng)我們?cè)絹?lái)越多的聽(tīng)到開(kāi)發(fā)人員在那里高呼“擁抱變化”“敏捷開(kāi)發(fā)”的時(shí)候,測(cè)試又有什么舉措,當(dāng)?shù)貐^(qū)特性,軟件版本越來(lái)越多的時(shí)候,測(cè)試是否在積極響應(yīng),程序的變化往往是我們面臨的最大的挑戰(zhàn),測(cè)試未能跟上變化是造成測(cè)試過(guò)程中遇到種種問(wèn)題和矛盾的主要原因。
上述問(wèn)題也許在成熟的公司和項(xiàng)目組內(nèi)很少遇到,而遇到問(wèn)題的也需根據(jù)不同的情況單獨(dú)考慮。分析錯(cuò)誤并不能給我們帶來(lái)成功,而成功的特質(zhì)也不會(huì)盡為相同。所以在這里我希望以探討的方式提出一些可能的解決辦法,不拘泥形式,以結(jié)果來(lái)確定,最適合的就是最好的。
“驅(qū)動(dòng)測(cè)試開(kāi)發(fā)”(TDD)是一個(gè)非常新的測(cè)試概念,各類(lèi)刊物上也有對(duì)其描述,主要研究的是如何使代碼更奏效 (Work)、更潔凈(Clean),“驅(qū)動(dòng)測(cè)試開(kāi)發(fā)的基本宗旨是在軟件開(kāi)發(fā)相應(yīng)的功能前,先對(duì)于其所實(shí)現(xiàn)的功能編寫(xiě)測(cè)試用例代碼”。顯而易見(jiàn),TDD是在“代碼”級(jí)的驅(qū)動(dòng)觸發(fā)的,但目前研究的問(wèn)題是如何在黑盒測(cè)試過(guò)程中實(shí)現(xiàn)“驅(qū)動(dòng)測(cè)試開(kāi)發(fā)”,一般認(rèn)為可從測(cè)試用例的級(jí)別開(kāi)始做起,用具體實(shí)際的業(yè)務(wù)來(lái)指導(dǎo)實(shí)現(xiàn)的結(jié)果。
軟件開(kāi)發(fā)人員往往注重代碼如何實(shí)現(xiàn)其功能,而對(duì)業(yè)務(wù)上的實(shí)際操作的理解并不透徹,而需求分析報(bào)告有不會(huì)全面的給出具體要實(shí)現(xiàn)什么樣的功能和場(chǎng)景,這就樣一來(lái)就存在了程序開(kāi)發(fā)人員和實(shí)際需求者的不一致的現(xiàn)象,如果最后發(fā)現(xiàn)程序錯(cuò)了就需要重做,這樣不僅耗費(fèi)人力更加對(duì)公司的開(kāi)發(fā)進(jìn)度有著很大的影響。軟件測(cè)試人員與最終用戶(hù)不用過(guò)分關(guān)心軟件實(shí)現(xiàn)的細(xì)節(jié),所以用業(yè)務(wù)用例來(lái)對(duì)開(kāi)發(fā)進(jìn)行驅(qū)動(dòng),是一個(gè)比較合適的選擇。給出一個(gè)明確的預(yù)期結(jié)果,指導(dǎo)開(kāi)發(fā)人員如何界定是否達(dá)成目標(biāo),還需要用到各種軟件測(cè)試方法來(lái)分析出各個(gè)業(yè)務(wù)過(guò)程中需要測(cè)試的等價(jià)類(lèi)和邊界值。
為不同時(shí)期的測(cè)試用例設(shè)置不同的版本能夠起到基準(zhǔn)的作用,標(biāo)明項(xiàng)目進(jìn)度過(guò)程中的每一個(gè)階段,使用例直接和需求基線(xiàn)、軟件版本對(duì)應(yīng)。同樣這需要規(guī)范流程,也是對(duì)變更的一種確認(rèn)和控制?;蛘呖梢詾橛美黾右粋€(gè)狀態(tài),指明這個(gè)用例目前是否與程序沖突,當(dāng)程序變更時(shí)改變用例的狀態(tài),并更新用例版本。
負(fù)責(zé)整個(gè)測(cè)試的管理人員對(duì)用測(cè)試?yán)M(jìn)行審核能夠?qū)τ美M(jìn)行補(bǔ)充和校正,可現(xiàn)實(shí)的測(cè)試過(guò)程中往往比較難實(shí)現(xiàn),而普遍采用的方式是結(jié)對(duì)編寫(xiě)測(cè)試用例 (前提是你有兩個(gè)以上的測(cè)試人員),內(nèi)部審核。測(cè)試用例非自己編寫(xiě)自己執(zhí)行,而是需要其他測(cè)試人員來(lái)進(jìn)行測(cè)試并有著很好的可讀性。這樣一來(lái)所編寫(xiě)的測(cè)試用例的可移植性和可維護(hù)性大大提高,同時(shí)能拓展了測(cè)試思維,加強(qiáng)了對(duì)測(cè)試重點(diǎn)的確認(rèn),進(jìn)而使得小組內(nèi)部達(dá)到了統(tǒng)一。一定程度上結(jié)對(duì)編寫(xiě)也可以減少測(cè)試負(fù)責(zé)人的工作壓力,提高組員的參與積極性。
上面的這些解決方法只是一種建議,具體如何實(shí)施到項(xiàng)目中還需根據(jù)情況而定。同時(shí)即使我們正在積極的尋求改變,我們還是會(huì)碰到無(wú)數(shù)的新問(wèn)題和新苦惱,也許會(huì)比以前更為眾多,這是我們必須付出的。
可以看到測(cè)試的發(fā)展方向很多很廣,即使傳統(tǒng)的黑盒測(cè)試并不是毫無(wú)新意,高級(jí)的測(cè)人員必須同時(shí)在測(cè)試技巧和專(zhuān)業(yè)領(lǐng)域方面都有很高的“修為”。測(cè)試工作怎樣更適合我們而發(fā)展,將給予我們更多的思考。
[1]景宏磊,林丁報(bào).軟件性能測(cè)試的基本概念和一般過(guò)程[J].科技資訊,2011.
[2]林丁報(bào),景宏磊.WEB 應(yīng)用前端性能優(yōu)化淺析[J].科技資訊,2011.