1、能發(fā)現到目前為止沒(méi)有發(fā)現的缺陷的用例是好的用例:
首先要申明,其實(shí)這句話(huà)是十分有道理的,但我發(fā)現很多人都曲解了這句話(huà)的原意,一心要設計出發(fā)現“難于發(fā)現的缺陷”而陷入盲目的片面中去,忘記了測試的目的所在,這是十分可怕的。我傾向于將測試用例當作一個(gè)集合來(lái)認識,對它的評價(jià)也只能對測試用例的集合來(lái)進(jìn)行,測試本身是一種“V&V”的活動(dòng),測試需要保證以下兩點(diǎn):
* 程序做了它應該做的事情
* 程序沒(méi)有做它不該做的事情
因此,作為測試實(shí)施依據的測試用例,必須要能完整覆蓋測試需求,而不應該針對單個(gè)的測試用例去評判好壞。
2、測試用例應該詳細記錄所有的操作信息,使一個(gè)沒(méi)有接觸過(guò)系統的人員也能進(jìn)行測試;
不知道國內有沒(méi)有公司真正做到這點(diǎn),或者說(shuō),不知道有國內沒(méi)有公司能夠將每個(gè)測試用例都寫(xiě)得如此詳細。在我的測試經(jīng)歷中,對測試用例描述的詳細和復雜程度也曾有過(guò)很多的彷徨。寫(xiě)得太簡(jiǎn)單吧,除了自己沒(méi)人能夠執行,寫(xiě)得太詳細吧,消耗在測試用例維護(別忘了,測試用例是動(dòng)態(tài)的,一旦測試環(huán)境、需求、設計、實(shí)現發(fā)生了變化,測試用例都需要相應發(fā)生變化)上的時(shí)間實(shí)在是太驚人,在目前國內大部分軟件公司的測試資源都不足的情況下,恐怕很難實(shí)現。但我偏偏就能遇到一些這樣的老總或者是項目負責人,甚至是測試工程師本身,全然不顧實(shí)際的資源情況,一定要寫(xiě)出“沒(méi)有接觸過(guò)系統的人員也能進(jìn)行測試”的用例。
在討論這個(gè)問(wèn)題之前,我們可以先考慮一下測試的目的。測試的目的是盡可能發(fā)現程序中存在的缺陷,測試活動(dòng)本身也可以被看作是一個(gè)Project,也需要在給定的資源條件下盡可能達成目標,根據我個(gè)人的經(jīng)驗,大部分的國內軟件公司在測試方面配備的資源都是不足夠的,因此我們必須在測試計劃階段明確測試的目標,一切圍繞測試的目標進(jìn)行。
除了資源上的約束外,測試用例的詳細程度也需要根據需要確定。如果測試用例的執行者、測試用例設計者、測試活動(dòng)相關(guān)人對系統了解都很深刻,那測試用例就沒(méi)有必要太詳細了,文檔的作用本來(lái)就在于溝通,只要能達到溝通的目的就OK。
在我擔任測試經(jīng)理的項目中,在測試計劃階段,一般給予測試設計30% - 40%左右的時(shí)間,測試設計工程師能夠根據項目的需要自行確定用例的詳細程度,在測試用例的評審階段由參與評審的相關(guān)人對其把關(guān)。
3、測試用例設計是一勞永逸的事情;
這句話(huà)擺在這里,我想沒(méi)有一個(gè)人會(huì )認可,但在實(shí)際情況中,卻經(jīng)常能發(fā)現這種想法的影子。我曾經(jīng)參與過(guò)一個(gè)項目,軟件需求和設計已經(jīng)變更了多次,但測試用例卻沒(méi)有任何修改。導致的直接結果是新加入的測試工程師在執行測試用例時(shí)不知所措,間接的后果是測試用例成了廢紙一堆,開(kāi)發(fā)人員在多次被無(wú)效的缺陷報告打擾后,對測試人員不屑一顧。
這個(gè)例子可能有些極端,但測試用例與需求和設計不同步的情況在實(shí)際開(kāi)發(fā)過(guò)程中確是屢見(jiàn)不鮮的,測試用例文檔是“活的”文檔,這一點(diǎn)應該被測試工程師牢記。
4、測試用例不應該包含實(shí)際的數據;
測試用例是“一組輸入、執行條件、預期結果”、毫無(wú)疑問(wèn)地應該包括清晰的輸入數據和預期輸出,沒(méi)有測試數據的用例最多只具有指導性的意義,不具有可執行性。當然,測試用例中包含輸入數據會(huì )帶來(lái)維護、與測試環(huán)境同步之類(lèi)的問(wèn)題,關(guān)于這一點(diǎn),《Effective Software Test》一書(shū)中提供了詳細的測試用例、測試數據的維護方法,可以參考。
5、測試用例中不需要明顯的驗證手段;
我見(jiàn)過(guò)很多測試工程師編寫(xiě)的測試用例中,“預期輸出”僅描述為程序的可見(jiàn)行為,其實(shí),“預期結果”的含義并不只是程序的可見(jiàn)行為。例如,對一個(gè)訂貨系統,輸入訂貨數據,點(diǎn)擊“確定”按鈕后,系統提示“訂貨成功”,這樣是不是一個(gè)完整的用例呢?是不是系統輸出的“訂貨成功”就應該作為我們唯一的驗證手段呢?顯然不是。訂貨是否成功還需要查看相應的數據記錄是否更新,因此,在這樣的一個(gè)用例中,還應該包含對測試結果的顯式的驗證手段:在數據庫中執行查詢(xún)語(yǔ)句進(jìn)行查詢(xún),看查詢(xún)結果是否與預期的一致。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/