項目的第一階段是需求定義。需求定義遠(yuǎn)比我們尋常的理解要復(fù)雜得多:它不等同于用戶需要什么功能,我們把這個定義成一個產(chǎn)品需求。很多時候,用戶都并不清楚他們真正想要的是什么。用戶說,我很熱。你可以給他一個風(fēng)扇,甚至給他一臺空調(diào),但也許你給他一杯水能解決問題。用戶說,你們產(chǎn)品的更新過程太慢了,需要十幾分鐘!你可以去優(yōu)化下載流程,壓縮下載包尺寸,但也許你只要把更新工作放在后臺執(zhí)行而不影響用戶的正常操作,他很滿意了。需求定義的工作一般是PM的職責(zé),但是,開發(fā)團隊是終把需求轉(zhuǎn)換成產(chǎn)品的人,開發(fā)對產(chǎn)品需求的理解和定義,也在很大程度上決定了產(chǎn)品在用戶面前是什么樣。這個時候,測試需要參與進(jìn)來,和開發(fā)一起來理解需求,定義需求,Review需求。這個過程,在有些公司,叫做SRS(Software Requirement Specification)的形成。

  開發(fā)在理解需求之后,要開始設(shè)計了。設(shè)計決定了他將來的代碼會寫成什么樣。好的開發(fā)流程,測試一樣需要參與設(shè)計的Review;即使很多國內(nèi)公司把這個都省了,開發(fā)直接寫代碼了,測試仍然有機會參與?梢愿_發(fā)聊聊他會如何實現(xiàn),如果你經(jīng)驗豐富,他一樣會很感激你給予他的反饋和幫助。代碼寫好之后,在正式Check In之前,還會有一個非常重要的環(huán)節(jié):Code Review。作為測試,你如果想要知道你將來的測試用例該如何更有效率、更有針對性,你得好好利用這個機會,好好Review。

  測試參與CodeReview的好處遠(yuǎn)不止幫助開發(fā)發(fā)現(xiàn)一些顯而易見的代碼錯誤或是其他一些Code Review可以發(fā)現(xiàn)的Bug。Code Review可以幫助測試從設(shè)計上更好的理解產(chǎn)品。也許你不需要理解具體每一行代碼他為什么要這樣寫,但你必須了解他的大體程序邏輯,有哪些輸入場景、輸出場景,有哪些條件判斷,有哪些是復(fù)用穩(wěn)定的舊的代碼、哪些是全新寫的代碼,還有哪些是會被其他模塊、甚至是需求從沒講過模塊調(diào)用的代碼功能......這些都是你后面設(shè)計測試用例的絕好素材。同時,你還可以根據(jù)你的經(jīng)驗,提醒開發(fā)應(yīng)該把某些適合的基礎(chǔ)場景實現(xiàn)單元測試,或是讓開發(fā)自己做一些基礎(chǔ)的冒煙測試。這些都對你后面的測試工作大有幫助。

  好的開發(fā)流程對于軟件質(zhì)量的保障作用是非常大的。也有人抱怨,如果公司的開發(fā)很不講流程怎么辦?我個人的答案是,別人可以不講流程,但如果你是一個的測試,如果你懂流程、你可以證明按照你的流程結(jié)果更好,你還有一個責(zé)任,是需要你去推動別人來遵循流程。不要以為那是經(jīng)理們的事情;很多經(jīng)理在這方面經(jīng)驗也許都沒有你多;但好的經(jīng)理他們會看清什么是對的,如果你在做對的事情,你肯定能夠得到他們的支持。重要一點還在于,如果你一直能夠在帶頭做對的事情,在做你認(rèn)為是TL、經(jīng)理該做的事情,你離經(jīng)理的位置也不會遠(yuǎn)。況且,測試流程也不是只有經(jīng)理們才需要關(guān)注的事情。

  (這部分按照開發(fā)流程,應(yīng)該寫到設(shè)計用例的前面。)

  如果這三個工作都做好了,可以說測試工作的大部分工作都完成了;剩下來的是測試用例的執(zhí)行了,以及為了提高效率的自動化、一些工具的實現(xiàn)、測試框架的精煉和使用,或其他一些瑣碎的事情了,F(xiàn)在很多公司開始把測試用例執(zhí)行外包了,說明這確實有需求市場;也有人在討論這樣會不會讓外包公司的測試人員覺得測試低級而無趣了?我覺得對也不對。對確實是因為相比測試用例設(shè)計而言,單純的測試執(zhí)行在技術(shù)程度上要求要低;但不對,是想說,盡管是執(zhí)行,測試人員一樣有很多空間可以發(fā)揮。誰說測試執(zhí)行過程中間不能擴展更多、更有效率的測試用例了?被大家一直都看好的自動化測試難道解決的不是測試執(zhí)行的問題嗎?探索性測試(ET)研究的重點不也是單純的測試執(zhí)行問題么?同一條測試用例,好的測試人員和普通的測試人員的執(zhí)行結(jié)果和價值也是有很多不一樣的。

  這些工作做好了并不意味著,這些工作在前面階段做完了,后面再不需要做了。實際上,很多問題都是在測試過程中,根據(jù)自己經(jīng)驗調(diào)整原有的測試用例、甚至新增加一些測試用例發(fā)現(xiàn)的。我強調(diào)的是這些工作內(nèi)容應(yīng)該是測試人員日常工作中的主體。在整個開發(fā)流程上,它們往往會呈螺旋疊加的。

  所以,我們用什么來做測試?答案絕不應(yīng)該是某一個測試框架,或是某一個自動化工具。

  如果你也是測試,你的答案是什么?