先講自己遇到的兩個(gè)小故事。

  去年底新開始負(fù)責(zé)一個(gè)項(xiàng)目的測試工作,這個(gè)項(xiàng)目在我之前,并沒有正式的測試人員,開發(fā)寫完代碼然后自己測試一下,沒問題上線。一次和相鄰團(tuán)隊(duì)活動(dòng),一開發(fā)技術(shù)牛人得知我是新來負(fù)責(zé)測試的,寒暄之余,他的第一個(gè)問題是,你是用什么來做測試的?

  聽到這個(gè)問題,我不禁一愣,他問的“什么”是什么意思?是指一種測試框架?或是一種測試工具?或是一種測試方法?還是其他?我趕緊回答,我正在準(zhǔn)備自己的一套測試框架,也在吸取社區(qū)上的各種成熟的東西,測試用例也在建設(shè)中。

  做測試5年多時(shí)間,之前從沒被問過這個(gè)問題。

  進(jìn)入項(xiàng)目的前兩個(gè)月,我在整理之前開發(fā)用到的各種測試方法和測試工具,一方面為了自己了解這個(gè)項(xiàng)目的狀況,另一方面也可以把以前的成果沉淀下來,為后面形成測試用例體系做準(zhǔn)備。這時(shí)候來了一個(gè)測試的助手,因?yàn)槭切氯,我讓他先看下我之前先整理出來的那些個(gè)測試用例,同時(shí)也可以結(jié)合自己的經(jīng)驗(yàn)做一些擴(kuò)展補(bǔ)充。他看了會(huì),也跟我拋了個(gè)讓我很吃驚的問題:你說的測試用例是指哪幾個(gè)工具?言外之意,是覺得那幾個(gè)工具是幾個(gè)命令行,運(yùn)行一下不可以了,還有什么可以擴(kuò)展補(bǔ)充的?后來知道,原來他想寫code,想做自動(dòng)化。

  我終于意識(shí)到,原來大家對(duì)測試的理解是有很大不同的。我不能講他們的理解不對(duì),因?yàn)樗麄兊墓ぷ鞅尘昂徒?jīng)驗(yàn)形成的對(duì)測試的一些看法,在某些場景下確是對(duì)的;但我覺得根據(jù)自己以前的經(jīng)驗(yàn)和個(gè)人認(rèn)識(shí),我對(duì)他們的理解有很大的不認(rèn)同。

  我來講講自己對(duì)測試的一些看法,完全是作為交流的目的,有講得不對(duì)的地方,懇請(qǐng)大家更正。

  測試是干什么的?本著以終為始的原則來分析問題,我們首先需要了解測試的職責(zé)是什么:毫無疑問,測試存在的價(jià)值是保證產(chǎn)品的質(zhì)量,讓產(chǎn)品給用戶提供好的服務(wù)。所以,這個(gè)目標(biāo)決定了測試該做的事情,一切與這個(gè)目標(biāo)一致的事情,都是測試需要做的;而所有對(duì)這個(gè)目標(biāo)無直接用處的事情,測試需要考慮是否該做;至于違背了這個(gè)目標(biāo)的事情,應(yīng)該杜絕去做。

  所以,對(duì)于測試,重要的第一件事情是需要了解產(chǎn)品?瓷先ミ@是一句廢話,項(xiàng)目中的任何人都需要了解產(chǎn)品!我想強(qiáng)調(diào)的是,測試需要比開發(fā)在某些方面更了解產(chǎn)品。對(duì)產(chǎn)品的了解分為兩個(gè)部分,一部分是需求,另一部分是設(shè)計(jì)。對(duì)測試來講,對(duì)前者的了解優(yōu)先級(jí)比后者更為重要。需求定義了這個(gè)產(chǎn)品需要做成什么樣,它可以為用戶解決什么樣的問題,以及為用戶提供了什么樣的功能。而設(shè)計(jì)僅僅是開發(fā)為了實(shí)現(xiàn)需求,在基于自己對(duì)需求的理解上,用某一種方式實(shí)現(xiàn)了產(chǎn)品。需求決定了設(shè)計(jì)。

  開發(fā)對(duì)產(chǎn)品的理解體現(xiàn)在設(shè)計(jì)上,而測試對(duì)產(chǎn)品的理解體現(xiàn)在測試用例上。

  回到主題來,測試該做的第一件事情,是測試用例的齊備。可以沒有所謂測試框架,也可以沒有自動(dòng)化,都不會(huì)從根本上影響測試質(zhì)量;測試用例、測試場景不齊全,會(huì)直接導(dǎo)致產(chǎn)品潛在Bug沒有被發(fā)現(xiàn),用戶拿到的產(chǎn)品服務(wù)質(zhì)量很差。而且,我覺得如果測試場景沒有完善,急匆匆的去做一種框架或是自動(dòng)化,也注定是很快要做重工的,因?yàn)楹艽罂赡苣愫竺嫘录尤氲拇罅繙y試場景會(huì)徹底推翻你前期實(shí)現(xiàn)的測試框架、自動(dòng)化模式。

  當(dāng)然,我也不是說要等所有測試場景都確定下來,才能開始自動(dòng)化;自動(dòng)化確實(shí)可以節(jié)省人力,騰出更多資源去做測試用例拓展;但要先確;A(chǔ)的測試場景完善。測試框架、自動(dòng)化只是工具,它們的價(jià)值在于幫助測試人員提高工作效率,把一些勞動(dòng)交給機(jī)器做,為測試人員省出時(shí)間去做更有價(jià)值的測試工作;但它們做到再好,對(duì)用戶來講,他們毫不關(guān)心;像有人提到,Windows Vista的自動(dòng)化測試程度很高,而忽視了用戶體驗(yàn),結(jié)果注定是一個(gè)失敗的產(chǎn)品。

  我這里的測試用例實(shí)際上是廣義上的測試用例,包含各種測試類型:功能測試用例,性能測試用例,系統(tǒng)測試用例,兼容性測試用例,安全測試用例,等等等等。我覺得根據(jù)產(chǎn)品的需求或者項(xiàng)目的需要,提高測試用例覆蓋度這個(gè)過程才是測試應(yīng)該花大氣力去做的事情、測試工作中的重中之重。至于如何去完善測試用例,有很多很多的方法、技巧和經(jīng)驗(yàn),我也在學(xué)習(xí)中,這里先不聊了。

  齊全的測試用例是為了可以盡量的覆蓋產(chǎn)品邏輯,盡量可以發(fā)現(xiàn)潛在的Bug,或是盡量確認(rèn)可以正常工作的場景。但這個(gè)過程的前提,是開發(fā)已經(jīng)實(shí)現(xiàn)了產(chǎn)品,他們已經(jīng)有Bug潛伏在某些地方了;事后盡早挽救是一個(gè)好的方法,但如果能夠事先預(yù)防,防患于未然,那更是大家期望的。在軟件開發(fā)中,測試在項(xiàng)目前期的參與,對(duì)于保障產(chǎn)品質(zhì)量非常有益。