說(shuō)實(shí)話,在我看來(lái),左耳朵耗子的《我們需要專職的QA嗎?》這篇文章的觀點(diǎn)并不算過(guò)激。多是一篇從開(kāi)發(fā)工程師的角度來(lái)商討是否需要設(shè)立“專門做測(cè)試的崗位”,讓“不熟悉或是不懂開(kāi)發(fā)的人”來(lái)做測(cè)試工作。如果這個(gè)問(wèn)題擺在我的面前,在大多數(shù)情況下,我的答案可能和左耳朵耗子一樣:“不需要”。

  作為一個(gè)在測(cè)試行業(yè)工作了10多年的“老人”,在這里贊同左耳朵耗子的觀點(diǎn)似乎是對(duì)自己過(guò)去這么多年工作的否定,但實(shí)際上,正是因?yàn)橛羞@么多年的經(jīng)驗(yàn),我才真正能夠深刻的體會(huì)專職測(cè)試工程師在工作中的局限和不足。

  為了避免本文引發(fā)類似“混淆了QA和測(cè)試角色”之類的毫無(wú)營(yíng)養(yǎng)的評(píng)價(jià),在下文中,我一概使用“測(cè)試人員”來(lái)指代從事“專職測(cè)試”工作的角色,那些喜歡拿“QA層次更高,是管過(guò)程的”各位看管請(qǐng)自行繞道(順便說(shuō)一句,我在google的時(shí)候,是十分反感自己的團(tuán)隊(duì)被稱作QA團(tuán)隊(duì)的,如果有人這樣說(shuō),我一定會(huì)認(rèn)真的糾正:“不,我們不是QA,我們是測(cè)試工程師”,關(guān)于google有沒(méi)有QA,各位可以自行g(shù)oogle)。

  “軟件需要測(cè)試”應(yīng)該是不會(huì)有人反對(duì)的觀點(diǎn)。問(wèn)題是,設(shè)置專職的“測(cè)試人員”是否會(huì)比“讓開(kāi)發(fā)做測(cè)試”更能有效的做好測(cè)試。從1998年開(kāi)始,在華為我開(kāi)始了自己的測(cè)試生涯。關(guān)于為什么需要測(cè)試工程師,在我的測(cè)試工程師職業(yè)生涯中,聽(tīng)到得多的是兩種論調(diào):其中之一是“測(cè)試工程師需要的技能與開(kāi)發(fā)工程師不同,測(cè)試工程師需要的是發(fā)現(xiàn)問(wèn)題的能力”,另一種是“開(kāi)發(fā)人員無(wú)法保證產(chǎn)品質(zhì)量,因此需要測(cè)試人員”。后一種論調(diào)其實(shí)是有很大的問(wèn)題的,“開(kāi)發(fā)人員無(wú)法保證質(zhì)量”不意味著測(cè)試人員可以保證質(zhì)量,在大多數(shù)企業(yè)中,說(shuō)的不客氣一點(diǎn),“保證質(zhì)量”通常只是測(cè)試部門可以繼續(xù)存在的表面上的理由而已。至于說(shuō)到開(kāi)發(fā)工程師與測(cè)試工程師所需技能的不同,這一點(diǎn)倒是存在的事實(shí)。在一個(gè)組織中,測(cè)試人員通常會(huì)花主要的精力去設(shè)計(jì)測(cè)試用例,評(píng)價(jià)覆蓋度,嘗試從不同的角度攻擊應(yīng)用,從表面上看,的確,測(cè)試和開(kāi)發(fā)需要的技能很不同。

  但是,我要問(wèn)兩個(gè)問(wèn)題:

  這些技能開(kāi)發(fā)工程師不能具備嗎?

  設(shè)計(jì)測(cè)試用例,評(píng)價(jià)覆蓋率這類工作是否真的需要專職的人員去做?

  所謂的黑盒測(cè)試技術(shù),有多大的難度?平心而論,一個(gè)智商正常的具有較好計(jì)算機(jī)基礎(chǔ)的人,一個(gè)下午能完全理解常用的黑盒測(cè)試技術(shù),白盒測(cè)試技術(shù)也不會(huì)難到哪里去。只要開(kāi)發(fā)工程師愿意,這些工作他們完全可以承擔(dān)。只所以開(kāi)發(fā)工程師沒(méi)有承擔(dān)這些任務(wù),原因恐怕不是他們不能做,而是像在《我們需要專職的QA嗎?》文章后的評(píng)論中某位做開(kāi)發(fā)的仁兄說(shuō)的那樣:“如果有一個(gè)比較專業(yè)的QA來(lái)幫助我們,我們能把自己的時(shí)間花在更有用的地方”。

  社會(huì)分工的細(xì)化自然是提供效率的方式,但社會(huì)的發(fā)展并不只伴隨著分工的細(xì)化,由于開(kāi)發(fā)工具和開(kāi)發(fā)基礎(chǔ)的變化,分工的“合并”也是一個(gè)一直在持續(xù)的趨勢(shì)。幾年前,大多數(shù)公司都傾向于有單獨(dú)分工的“前端工程師”和“后端工程師”,但現(xiàn)在的趨勢(shì)不也是在融合?至少,F(xiàn)acebook要求自己的工程師能同時(shí)承擔(dān)前后端的任務(wù),google也是如此。測(cè)試工作和開(kāi)發(fā)工作難道不能融合?讓開(kāi)發(fā)人員做測(cè)試怎么不行?

  其實(shí),《我們需要專職的QA嗎?》中的不少觀點(diǎn)我都非常贊同,鑒于左耳朵耗子已經(jīng)寫了這么大一篇,我不再重復(fù)這些觀點(diǎn)了,作為對(duì)這些觀點(diǎn)的一些佐證,我來(lái)說(shuō)說(shuō)我自己經(jīng)歷過(guò)的幾件事情。

  故事1

  在Google中國(guó)的時(shí)候,我們團(tuán)隊(duì)負(fù)責(zé)的某個(gè)項(xiàng)目,開(kāi)發(fā)工程師每天忙死忙活的加新功能,趕上線,整個(gè)團(tuán)隊(duì)的開(kāi)發(fā)和SET(Software Engineer in Test)都忙得不行。從傳統(tǒng)的對(duì)測(cè)試工程師的角度來(lái)評(píng)價(jià)的話,這個(gè)團(tuán)隊(duì)的一個(gè)SET工作得十分出色:她幾乎能發(fā)現(xiàn)所有的缺陷,她幾乎把自己所有的時(shí)間都投入到項(xiàng)目中去發(fā)現(xiàn)缺陷;她是整個(gè)開(kāi)發(fā)團(tuán)隊(duì)喜歡和感激的人,因?yàn)椤皼](méi)有她,這個(gè)產(chǎn)品簡(jiǎn)直不可能發(fā)布”。但是,這個(gè)產(chǎn)品在發(fā)布了一段時(shí)間后,每個(gè)RC的缺陷始終居高不下,這位盡職的SET幾乎投入了全部時(shí)間和精力,仍然無(wú)法讓這個(gè)產(chǎn)品的質(zhì)量提高分毫。為什么?因?yàn)殚_(kāi)發(fā)人員從來(lái)沒(méi)有意識(shí)到他們的代碼有多爛!當(dāng)有一個(gè)可以幫你發(fā)現(xiàn)所有錯(cuò)誤的人的時(shí)候,我相信,你犯錯(cuò)的勇氣一定會(huì)更大。這個(gè)問(wèn)題后是如何解決的?說(shuō)起來(lái)很諷刺,解決這個(gè)問(wèn)題的第一步是讓開(kāi)發(fā)意識(shí)到“你們需要自己為代碼質(zhì)量承擔(dān)責(zé)任”,當(dāng)這位SET改變工作方式,不再嘗試把自己的業(yè)務(wù)時(shí)間全部投入來(lái)發(fā)現(xiàn)無(wú)盡的缺陷之后,開(kāi)發(fā)人員立刻意識(shí)到自己遇到了大麻煩。然后,他們主動(dòng)來(lái)找我商討解決方案,當(dāng)他們終發(fā)現(xiàn)自己不得不改變自己的做法,自己來(lái)控制自己錯(cuò)誤的時(shí)候,事情立刻開(kāi)始好轉(zhuǎn)。當(dāng)他們的單元測(cè)試達(dá)到40%的覆蓋率的時(shí)候,所有人都變得更輕松了。這位SET負(fù)責(zé)推動(dòng)了單元測(cè)試,推動(dòng)了為了讓代碼具有良好可測(cè)試性而進(jìn)行的重構(gòu),設(shè)立了組織的代碼提交規(guī)則(強(qiáng)制提交的新代碼必須包含單元測(cè)試),然后,產(chǎn)品質(zhì)量在接下來(lái)的一段時(shí)間內(nèi)持續(xù)上升。

  故事2

  Google內(nèi)部有一個(gè)Test Certified的認(rèn)證,該認(rèn)證是針對(duì)開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行的。認(rèn)證的主要要點(diǎn)都是基于單元測(cè)試覆蓋率,基于持續(xù)集成建立的開(kāi)發(fā)規(guī)則,自動(dòng)化測(cè)試(以小測(cè)試為主)。這個(gè)認(rèn)證分為5個(gè)級(jí)別,1級(jí)低,5級(jí)高。Test Certified和CMMI一樣有5個(gè)級(jí)別,可是出發(fā)點(diǎn)卻大不相同。這個(gè)認(rèn)證中涉及的全部事情都能(且主要是)由開(kāi)發(fā)工程師搞定,越接近高的級(jí)別,需要的專職SET越少。(詳細(xì)內(nèi)容參見(jiàn)James近出版的《How google test software》,雖然書中的觀點(diǎn)有些和我不一致,但在Test Certified的描述上是完全沒(méi)有問(wèn)題的)

  故事3

  后一個(gè)故事是近我遇到的一個(gè)測(cè)試工程師的故事。她從一開(kāi)始表明自己有很強(qiáng)的“做自動(dòng)化測(cè)試”的意愿,因此,她所在的項(xiàng)目團(tuán)隊(duì)的技術(shù)負(fù)責(zé)人很高興地給她分配了一些技術(shù)性的任務(wù),包括使用工具監(jiān)控應(yīng)用的內(nèi)存使用情況,找到一個(gè)方案能夠方便的定位crash發(fā)生等等,誰(shuí)知道這位測(cè)試工程師的第一反應(yīng)是,“這難道不是開(kāi)發(fā)工程師的活嗎?”,在她看來(lái),測(cè)試工程師完全不應(yīng)該了解程序是如何工作的,所謂的自動(dòng)化測(cè)試應(yīng)該是“使用某種手段把自己現(xiàn)在的手工勞動(dòng)重復(fù)下去”。

  專職測(cè)試人員是否毫無(wú)存在的必要?當(dāng)然不是。至少,我們必須承認(rèn),在有些必須大量依靠“體驗(yàn)”進(jìn)行測(cè)試的行業(yè),如游戲行業(yè)中,專職的測(cè)試人員是有存在的必要的。但我想,在類似google,facebook這樣的環(huán)境中(我猜測(cè)在左耳朵耗子所在的環(huán)境中也差不多),不能深刻理解開(kāi)發(fā)和具有深入的開(kāi)發(fā)技術(shù)的測(cè)試人員(SET)的確沒(méi)太多價(jià)值。真誠(chéng)的希望各位測(cè)試工程師在讀左耳朵耗子的文章時(shí),不要糾結(jié)于他的結(jié)論,而去看看他提到的問(wèn)題,是不是真的切中了專職測(cè)試的痛處。至少對(duì)我來(lái)說(shuō),文章中提到的這些熟悉的問(wèn)題每一個(gè)都能讓我想起一些故事。

  對(duì)于我從事了10多年的測(cè)試行業(yè),即使我現(xiàn)在的角色有所變化,這個(gè)行業(yè)的每一個(gè)變動(dòng)和變革都會(huì)讓我關(guān)注。這種感情是不可能割舍的。所以,真誠(chéng)的希望每一位測(cè)試的工作者,能夠真正思考我們?nèi)绾巫龅母。測(cè)試和開(kāi)發(fā)之間有更多配合,更多相親相愛(ài),把測(cè)試當(dāng)成提高和推動(dòng)質(zhì)量的手段,不正應(yīng)該是測(cè)試的方向嗎?