Google 測(cè)試總監(jiān)聊如何經(jīng)營(yíng)成功的測(cè)試職業(yè)生涯
你是如何開(kāi)始做測(cè)試工作的?
1989 年,我在田納西大學(xué)讀研究生的時(shí)候,完成了從軟件開(kāi)發(fā)人員到軟件測(cè)試人員的轉(zhuǎn)型。而這一轉(zhuǎn)型并非出于我自己的選擇。我命運(yùn)的改變發(fā)生在一個(gè)早晨,我的教授質(zhì)問(wèn)我為什么缺席那么多開(kāi)發(fā)會(huì)議。我解釋說(shuō)因?yàn)闀?huì)議被安排在星期六早上,很不方便。
而作為一個(gè)生平第一次離開(kāi)家的新入校的研究生,這個(gè)時(shí)間段有些麻煩。十分有意思的是,等待我的懲罰并不是一紙解聘通知書(shū),而是被判罰為該小組的唯一一個(gè)測(cè)試人員,且不能與開(kāi)發(fā)團(tuán)隊(duì)有任何交流。
對(duì)于我的職業(yè)生涯來(lái)說(shuō),這是一個(gè)意義多么重大的決定?。≌沁@個(gè)決定最終成就了幾十篇關(guān)于測(cè)試的論文,構(gòu)建了多得連我自己也記不清的各種工具,出版了五本書(shū),帶來(lái)了無(wú)盡的快樂(lè)工作時(shí)間。測(cè)試一直就是我擁有的那份具有創(chuàng)造性和技術(shù)挑戰(zhàn)性的快樂(lè)職業(yè)。不過(guò),并不是所有人都喜歡這樣??梢哉f(shuō)我最早接觸測(cè)試是在攻讀研究生期問(wèn),不可否認(rèn),那時(shí)的高強(qiáng)度學(xué)習(xí)和工作確實(shí)讓我受益匪淺。
另外,我認(rèn)為從初學(xué)者階段到專(zhuān)家階段之間存在著一個(gè) “測(cè)試的山峰”,人們需要通過(guò)一系列個(gè)人輔導(dǎo)、獲取信息和接受常規(guī)指導(dǎo)來(lái)翻越山峰。成為一個(gè)測(cè)試初學(xué)者是很容易的,成為職業(yè)的測(cè)試人員也并不艱難。本章的重點(diǎn)正是討論如何翻越那座位于職業(yè)測(cè)試人員和測(cè)試專(zhuān)家之間的山峰。
回到未來(lái)
在軟件測(cè)試領(lǐng)域,時(shí)間似乎已經(jīng)停滯了。我們?cè)?21 世紀(jì)做事的方法與上個(gè)世紀(jì)幾乎完全相同。Bill Hetzel 在 1972 年出版的測(cè)試知識(shí)叢書(shū)至今仍然相當(dāng)有價(jià)值。而我自己所寫(xiě),于 2002 年首次出版的 How to Break Software(如何攻破軟件) 系列,到今天仍被作為實(shí)用軟件測(cè)試技術(shù)主要資源的代名詞。
確實(shí),如果我們可以把 20 世紀(jì) 70 年代的測(cè)試人員轉(zhuǎn)換時(shí)空用在今日,我猜想他們的的技巧足夠應(yīng)付現(xiàn)代軟件的測(cè)試。當(dāng)然,他們需要學(xué)習(xí)網(wǎng)絡(luò)和各種網(wǎng)絡(luò)協(xié)議,但是他們擁有的實(shí)際測(cè)試技術(shù)將能得到很好的應(yīng)用。如果從 20 世紀(jì) 90 年代找一個(gè)測(cè)試人員,則不幾乎不需要任何訓(xùn)練。
對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),卻不是這樣,他們所掌握的那些上世紀(jì)的技巧幾乎已經(jīng)完全過(guò) 時(shí)。讓一個(gè)有一段時(shí)間不寫(xiě)代碼的人重新開(kāi)始編程,看看會(huì)有什么樣的反應(yīng)。讓我感到很不安的是,我們可以從馬路上直接雇用人手,而雇來(lái)的這些人從第一天起就能夠測(cè)試,就能夠有收獲。事情真的有那么簡(jiǎn)單嗎?或者是我們的期望值只有那么低?讓我更加不安的是,我們沒(méi)有任何可預(yù)測(cè)的方式將合適的測(cè)試人才從勝任工作狀態(tài)訓(xùn)練為測(cè)試專(zhuān)。測(cè)試真的就那么困難嗎?
這又是那個(gè)山峰了。門(mén)檻很低,但通往精通的道路卻很艱難。
在通往測(cè)試山峰的入口,我們倚仗的是這樣一個(gè)事實(shí):測(cè)試的很多方面都很容易掌握。大多數(shù)人都可以學(xué)得有模有樣。甚至只要將一點(diǎn)點(diǎn)常識(shí)應(yīng)用于輸入的選擇 , 就可以找出缺陷。這個(gè)層次的測(cè)試就如同在桶里釣魚(yú),簡(jiǎn)單到足以讓任何人都認(rèn)為自己很聰明。然而過(guò)了入口以后,道路迅速陡峭起來(lái),而測(cè)試知識(shí)變得越來(lái)越晦澀難懂。我們發(fā)現(xiàn)有人擅長(zhǎng)于此,我們稱(chēng)這些人為 “有天賦的人”,并欣賞他們的本能。
難道一定要依靠本能么?對(duì)于那些看起來(lái)不具備特長(zhǎng)的人們,是否存在著一條翻越山峰的途徑?是否可以以某種方法傳授測(cè)試技能以培養(yǎng)出更多的專(zhuān)家呢?為認(rèn)為這座山峰是可以通行的,而這一章正是我關(guān)于應(yīng)該如何走這條路的筆記,你可以在自己的職業(yè)生涯中加以應(yīng)用。這并不是一份食譜配方,一份職業(yè)生涯烹調(diào)書(shū)。不過(guò)你可以做一些事情來(lái)加速你的職業(yè)成長(zhǎng)。但是,正如你可能已經(jīng)猜到的,真正是說(shuō)來(lái)容易,做起來(lái)難。
上山
測(cè)試職業(yè)的早期階段主要是為征服測(cè)試山峰的漫長(zhǎng)攀登做準(zhǔn)備。我所能給出的最好的建議是從兩個(gè)方面來(lái)思考問(wèn)題。對(duì)于你參與的每一個(gè)項(xiàng)目,都有兩部分(不一定相等)的任務(wù)。第一部分的任務(wù)是保證當(dāng)前的測(cè)試項(xiàng)目獲得成功。而第二部分的任務(wù)是學(xué)習(xí)你應(yīng)該做些什么以便使下一個(gè)測(cè)試項(xiàng)目更加容易。我把它稱(chēng)為 “測(cè)試今天的項(xiàng)目,準(zhǔn)備明天的項(xiàng)目”。如果你做每一個(gè)項(xiàng)目把它都分割成為上述的兩半,那么幾乎可以保證你能持續(xù)獲得進(jìn)步。這樣,你就可以隨著每一個(gè)參與的項(xiàng)目逐漸成長(zhǎng)為更優(yōu)秀的測(cè)試人員。
現(xiàn)在就讓我們來(lái)關(guān)注第二部分的任務(wù)——為下一個(gè)項(xiàng)目做準(zhǔn)備。我們需要注意三個(gè)概念:重復(fù)、技術(shù)和漏洞。
重復(fù)
做任何一件事,絕不要重復(fù)兩次而不意識(shí)到或質(zhì)疑這其實(shí)是個(gè)問(wèn)題。我希望所有年輕的測(cè)試人員都牢記這一點(diǎn)。我見(jiàn)過(guò)很多初學(xué)者,他們?cè)趩握{(diào)的任務(wù)上浪費(fèi)了太多的時(shí)間,比如,設(shè)置測(cè)試機(jī)器,配置測(cè)試環(huán)境,在實(shí)驗(yàn)室里安裝待測(cè)試的應(yīng)用程序,選擇一個(gè)產(chǎn)品版本來(lái)測(cè)試等,這些任務(wù)列表可以變得很長(zhǎng),最后你會(huì)發(fā)現(xiàn)真正花在測(cè)試軟件上的時(shí)間少得可憐。
這是許多新手常犯的錯(cuò)誤。他們沒(méi)能看到他們?nèi)諒?fù)一日所做的工作的重復(fù)本質(zhì),兒當(dāng)他們意識(shí)到這種重復(fù)時(shí),幾個(gè)小時(shí)已經(jīng)過(guò)去了,而在這幾個(gè)小時(shí)內(nèi)他們沒(méi)有做任何實(shí)際的測(cè)試工作。關(guān)注這些重復(fù)勞動(dòng),并且留意由此造成的真正的軟件測(cè)試工作時(shí)間的流逝。為了能翻過(guò)測(cè)試的山峰,必須做一個(gè)測(cè)試人員應(yīng)該做的工作,而不是實(shí)驗(yàn)室管理員或者測(cè)試機(jī)管理員的工作。
測(cè)試自動(dòng)化是解決重復(fù)勞動(dòng)的方案,也是本章稍后的主題。
技術(shù)
測(cè)試人員常常會(huì)對(duì)軟件失效進(jìn)行分析。分析缺陷時(shí),我們從開(kāi)發(fā)人員的失敗中學(xué)習(xí)如何編寫(xiě)可靠的代碼。我們也分析那些被我們忽略的缺陷。在應(yīng)用程序上市以后,客戶(hù)就會(huì)開(kāi)始報(bào)告缺陷,我們將要面對(duì)處理一大堆失效的情形并尋找其中的重要缺陷。用戶(hù)報(bào)告的每一個(gè)缺陷都說(shuō)明我們的流程有問(wèn)題,我們的測(cè)試知識(shí)還不夠完善。
但是分析我們的成功也同樣重要,而許多新入職的測(cè)試人員卻沒(méi)能利用這個(gè)唾手可得的資源。我們?cè)跍y(cè)試中找到的每一個(gè)缺陷都說(shuō)明我們的的測(cè)試流程正在有效工作,都是一次成功。我們需要緊緊抓住這種絕好的機(jī)會(huì),只有這樣才能使成功不斷的重復(fù)下去。
運(yùn)動(dòng)隊(duì)常常這樣做,他們會(huì)觀看比賽錄像,并分析每一個(gè)動(dòng)作為什么奏效或者為什么不奏效。我清楚地記得一個(gè)小故事,我的一個(gè)朋友拍下了我兒子踢足球的一些照片。其中一張照片記錄了她踢球的瞬間,那個(gè)球超過(guò)對(duì)方守門(mén)員成功進(jìn)球了。當(dāng)我把它給我兒子看時(shí),我之處他站立的那條腿的姿勢(shì)非常完美,他踢球的腳尖緊繃且出球點(diǎn)在鞋帶間恰到好處的位置上。他盯著那張照片很長(zhǎng)時(shí)間,從那以后他很少用不正確的姿勢(shì)踢球。他那次得分可能只是碰巧做對(duì)了,但從此以后他有意識(shí)的運(yùn)用這些技術(shù)使之接近完美。
現(xiàn)在回到新手測(cè)試人員的課程上來(lái)。我們每一個(gè)人都會(huì)有得意的時(shí)刻。我們找到重要的漏洞或發(fā)現(xiàn)優(yōu)先級(jí)很高的缺陷,并為此雀躍不已。不過(guò)先花點(diǎn)時(shí)間考慮一下整體狀況。
我們使用什么技術(shù)找到了那個(gè)缺陷?
我們是否可以創(chuàng)建一種方法來(lái)找到更多這類(lèi)缺陷?
我們是否可以記住…些實(shí)際的測(cè)試經(jīng)驗(yàn)并不斷地加以應(yīng)用來(lái)幫助提高我們的工作效率?
軟件的哪些癥狀可以提示我們它具有缺陷?
我們將來(lái)能否從那些癥狀中得到更多的警示?
換句話說(shuō),這不僅僅是一個(gè)缺陷或是一次成功,這個(gè)缺陷教會(huì)了我們什么,是否使得我們將來(lái)成為更好的測(cè)試人員正如我兒子的進(jìn)球一樣,盡管第一個(gè)缺陷是偶然間發(fā)現(xiàn)的,但它不代表其余的成功都是偶然。理解我們成功的原因很重要,只有這樣做,成功才能被復(fù)制。對(duì)于測(cè)試人員來(lái)說(shuō),這種保證成功的原因就是一系列的測(cè)試技術(shù)、建議和工具,它們可以提高我們?cè)谖磥?lái)項(xiàng)目中的工作效率。
漏洞
測(cè)試人員最終都會(huì)變得很擅長(zhǎng)尋找缺陷,但是要翻過(guò)測(cè)試的高峰,我們必須更快并且更有效率:高速低阻。換句話說(shuō),我們必須擁有一種本身不含缺陷的缺陷查找技術(shù)!
我喜歡這樣來(lái)考慮問(wèn)題:測(cè)試人員檢視自己的工作時(shí)也需要發(fā)揮那種尋找缺陷的能力。我們必須使用和尋找產(chǎn)品缺陷一樣的流程來(lái)尋找我們自己的測(cè)試流程,測(cè)試過(guò)程中的缺陷。
我的測(cè)試流程是不是有問(wèn)題?
這里面是否有缺陷?
這里是否存在著妨礙我提高效率的障礙?
你必須一直尋找更好的方法。有意識(shí)地去確定那些限制能力、阻礙前進(jìn)、減緩速度的東西。就像缺陷限制了軟件滿(mǎn)足用戶(hù)需求的能力一樣,是什么限制了測(cè)試的能力?使用你擁有的測(cè)試能力來(lái)最優(yōu)化自己的測(cè)試流程,這會(huì)幫助你在測(cè)試的山峰上快速攀登并增加你翻越山峰后成為專(zhuān)家的機(jī)會(huì)。
測(cè)試山峰的巔峰處是一個(gè)美好的地方。如果你成功地到了那里,恭喜你.但這并不是最終日標(biāo)。這表示你已經(jīng)成為一個(gè)杰出的測(cè)試人員。而此時(shí)的下坡路就是用你的洞察力和專(zhuān)家知識(shí)來(lái)幫助周?chē)娜艘渤蔀閮?yōu)秀的測(cè)試人員。自己一個(gè)人登頂是一回事,幫助其他人(那些能力不如你的人)登頂卻完全是另外一回事。
一般來(lái)說(shuō),那些成功登上測(cè)試巔峰的人會(huì)成為使用工具的大師。那些商業(yè)工具、開(kāi)源免費(fèi)工具 , 和自己寫(xiě)的工具(我個(gè)人最喜歡的工具)是極好地提高工作產(chǎn)出、增加工作成效的方法。
不過(guò),工具只是實(shí)現(xiàn)該目標(biāo)的一種方法,但在許多其他方面它反而是一種限制,因?yàn)樘嗟娜丝床坏焦ぞ叩墓δ苤獾臇|西。他們被限制在工具能為他們所做的事情中,沒(méi)能看到或理解對(duì)工具還有更多的需求。登頂需要真正掌握的是 “信息”。因?yàn)楹芏喙ぞ吣芴幚硇畔?,并使得信息的獲取更加容易,所以測(cè)試人員變得過(guò)于依賴(lài)于他們的工具。但是信息本身以及如何利用這些信息才是真正的成功關(guān)鍵。
熟練掌握信息,指理解有哪些信息,這些信息將如何影響測(cè)試,保證最大限度地利用這些影響。有幾類(lèi)信息是測(cè)試登頂者必須關(guān)注的。這里我要談的是其中兩種:來(lái)自應(yīng)用程序的信息和來(lái)自之前測(cè)試的信息。
來(lái)自應(yīng)用程序的信息包括需求、體系結(jié)構(gòu)、代碼結(jié)構(gòu)、源代碼……甚至是關(guān)于應(yīng)用程序在執(zhí)行時(shí)做了哪些事情的運(yùn)行信息。在編寫(xiě)和執(zhí)行測(cè)試用例時(shí),需要考慮這類(lèi)信息,但信息的多寡在很大程度上取決于測(cè)試人員的能力,這是一種能夠使測(cè)試更高效的能力。在測(cè)試中使用這類(lèi)信息越多,測(cè)試就越偏向于工程而不是猜測(cè)。
在微軟,我們有一個(gè)游戲測(cè)試組織(Games Test Organization,GTO),負(fù)責(zé) Xbox 和 PC 游戲的測(cè)試。談到利用應(yīng)用程序的信息,他們是最優(yōu)秀的。游戲是難以想象的豐富,測(cè)試起來(lái)非常復(fù)雜。游戲中很多可測(cè)試的內(nèi)容都是隱藏的(因?yàn)樽屇切┩婕艺覍た梢越粨Q的物品正是游戲的樂(lè)趣之一)。
如果 GTO 的測(cè)試人員所做的僅僅是玩游戲,那么他們找到的問(wèn)題不會(huì)比最終用戶(hù)更多。為了能做得更好,他們與游戲的開(kāi)發(fā)人員合作創(chuàng)建了一些信息控制板,這些控制板暴露了一些基本上可以算得上作弊的信息給測(cè)試人員。這樣,測(cè)試人員就能提前知道怪物會(huì)被投放在何處、物品被隱藏在哪里,他們可以看到墻的另一邊,可以控制敵方的某些行為。他們的作弊工具(即測(cè)試工具)基本上使他們成為游戲里的神,讓他們可以控制看到的信息以便更快更巧妙地測(cè)試。這個(gè)例子給有測(cè)試人員都上了一課。
來(lái)自測(cè)試的信息意味著你必須關(guān)注在測(cè)試時(shí)所做的一切,并使用獲得的信息來(lái)影響今后的測(cè)試。
你是否知道你的測(cè)試是如何與需求結(jié)合的,知道何時(shí)某一特定需求已經(jīng)得到足夠的測(cè)試?
你是否使用代碼覆蓋率來(lái)影響未來(lái)的測(cè)試?
你知道當(dāng)代碼更新或缺陷修復(fù)時(shí)那些測(cè)試會(huì)受到影響,還是知識(shí)重新運(yùn)行所有的測(cè)試?
理解測(cè)試進(jìn)行到什么程度并隨著測(cè)試調(diào)整測(cè)試策略,這是測(cè)試成熟的標(biāo)志。
我以前曾在微軟的 Visual Studio 的一個(gè)小組工作過(guò),我們大量使用代碼改動(dòng)量(由于添加新特性或修復(fù)缺陷而改變的代碼)和代碼覆蓋來(lái)影響我們的測(cè)試。我們花了很大的力氣將代碼覆蓋和代碼改動(dòng)量通知測(cè)試人員,幫助他們理解哪些測(cè)試用例對(duì)覆蓋率有貢獻(xiàn),幫助他們測(cè)試改動(dòng)過(guò)的或修改過(guò)的組件。最終的結(jié)果是在代碼確實(shí)被改動(dòng)時(shí),我們清楚地知道哪些測(cè)試會(huì)被影響而只重新運(yùn)行那些測(cè)試。
我們還知道每個(gè)新的測(cè)試用例是如何對(duì)總體的接口,特性和代碼覆蓋率產(chǎn)生作用的,從而指導(dǎo)我們的測(cè)試人員,讓團(tuán)隊(duì)中的每個(gè)人在他們所創(chuàng)建的所有測(cè)試用例基礎(chǔ)上,寫(xiě)出更有意義的測(cè)試。
你用哪些信息來(lái)指導(dǎo)你的測(cè)試?
你如何保證信息是可獲取的,以便在測(cè)試中隨時(shí)可以得到?
你如何使得信息變得有用,以便它能以良好的方式影響你的測(cè)試?
這些問(wèn)題的答案將決定你在走下專(zhuān)家測(cè)試山峰時(shí)的前進(jìn)速度。
下山
到達(dá)測(cè)試山峰頂峰的時(shí)候,你已經(jīng)成為一個(gè)十分能干的測(cè)試人員了,能力也許相當(dāng)于你組里所有同事能力的總和。無(wú)論你在做什么,請(qǐng)不要試圖做得比你的整個(gè)團(tuán)隊(duì)都好,不管你對(duì)此感覺(jué)有多好,或是你的老板對(duì)你遏得有多緊。一旦你走在下坡的路上,就不要再去爭(zhēng)取 “找到最多缺陷的人” 或是 “找到最有意義缺陷的人” 這樣的榮譽(yù)頭銜。反而我推薦你減少花在測(cè)試上的時(shí)間,而把創(chuàng)新作為你的首要任務(wù)。
在測(cè)試上創(chuàng)新指不急于向前,而是仔細(xì)觀察、洞察先機(jī)、找到瓶頸并改進(jìn)團(tuán)隊(duì)中所有其他人的工作方式。你的工作變?yōu)閹椭渌诉M(jìn)步。在微軟,我們有一個(gè)專(zhuān)門(mén)為此而設(shè)的正式職位——測(cè)試架構(gòu)師。不過(guò),不要因?yàn)槿鄙僖粋€(gè)很酷的頭銜而讓你沮喪。
無(wú)論別人怎么稱(chēng)呼你,當(dāng)你在“下坡”的路上,你能做的最好的事就是盡量保證更多的人能成功地爬上山峰的另一側(cè)。
作者:Python測(cè)試社區(qū)
歡迎關(guān)注微信公眾號(hào) :Python測(cè)試社區(qū)