你是一家大公司里不得志的程序員。和你同年進(jìn)公司的那些人在核心業(yè)務(wù)上拼命工作,被客戶罵,加班,交付,開慶功會(huì),拿獎(jiǎng)金。而你,不知道怎么的被放到一個(gè)叫做“測(cè)試工具開發(fā)”的邊角部門里,干著一些不疼不癢不影響公司業(yè)績的工作。你恨。你要報(bào)復(fù)。你要拿回本該屬于自己的一切。

  現(xiàn)在我教你怎么做。

  首先,你要啟動(dòng)一個(gè)自主開發(fā)自動(dòng)化測(cè)試工具的項(xiàng)目。讓老板們相信自動(dòng)化測(cè)試的重要性并不困難,世界上有無數(shù)的文章和書籍在講這件事,你們公司請(qǐng)的咨詢顧問一定也會(huì)說到這件事,這些都是你的幫手。真正難的部分是“自主開發(fā)”。你用得上一個(gè)百試百靈的招數(shù)。告訴老板們,一個(gè)自主開發(fā)的工具可以由自己來維護(hù)和支持,只有這樣才能把核心技術(shù)的命脈掌握在自己手里,而不用向別人支付維護(hù)支持的費(fèi)用──小心,千萬不要提到那些開源的工具,因?yàn)槔习鍌內(nèi)f一真的弄懂了“開源”這兩個(gè)字的含義,你的整個(gè)大計(jì)劃泡湯了。拿IBM的RFT當(dāng)靶子。除了后面我會(huì)說到的各種好處之外,IBM的咨詢價(jià)格足以幫你嚇到老板從而啟動(dòng)這個(gè)項(xiàng)目。

  然后,你要精心選擇一個(gè)自動(dòng)化測(cè)試執(zhí)行引擎。你需要這么一個(gè)引擎,因?yàn)槟悴荒茏约喝プ鲆粋(gè)──工作量還在其次,要是連這都能做,你也不在這個(gè)邊角部門里郁悶了。同時(shí)這個(gè)引擎又不能太穩(wěn)定,更不能太開放,這都是你大計(jì)劃中不可或缺的要素。所以,你看,我說過了,RFT是好的靶子:它的開放程度確保了你要花好幾個(gè)月時(shí)間才能把它嵌在自己的工具里而且以后再也不會(huì)有別人嘗試干這件事。而且,想想吧,當(dāng)你跟老板們報(bào)告說你hack了IBM的軟件從而省下了licence費(fèi)用時(shí),他們?cè)撚卸嚅_心。

  接下來,你要發(fā)明一套自己的測(cè)試腳本語法。沿用RFT的語法當(dāng)然輕松,但這樣使用它的人會(huì)發(fā)現(xiàn)自己使用的其實(shí)是RFT,然后在該死的互聯(lián)網(wǎng)上找到相關(guān)的資料。不能讓這樣的事發(fā)生。始終記住,你的目標(biāo)是讓自己變得重要。你發(fā)明的語法應(yīng)該基于XML。不僅因?yàn)閷?shí)現(xiàn)簡單,而且因?yàn)樗艽_保測(cè)試腳本無法被閱讀和重構(gòu),從而讓使用這工具的人跪在你腳邊求你支持。關(guān)于使用XML的好處,稍后我還會(huì)說到。

  當(dāng)然你不希望向領(lǐng)導(dǎo)演示時(shí)用記事本編輯XML。所以你得同時(shí)實(shí)現(xiàn)一個(gè)支持拖拽的測(cè)試用例編輯界面。把一個(gè)測(cè)試步驟表示為一個(gè)圖標(biāo),把幾個(gè)圖標(biāo)往測(cè)試用例里一拖,一個(gè)測(cè)試用例好了。別忘了,執(zhí)行用例的功能也得在這個(gè)界面里實(shí)現(xiàn)。千萬別為了偷懶而實(shí)現(xiàn)一個(gè)命令行來執(zhí)行用例,這很重要。好了,現(xiàn)在你可以去演示了,領(lǐng)導(dǎo)一定會(huì)喜歡的!笆髽(biāo)拖拽其實(shí)比鍵盤輸入慢多了!”旁邊一個(gè)傻逼顧問叫喊著。領(lǐng)導(dǎo)們不會(huì)聽懂他的話。不用理會(huì)他,更不要嘗試跟他爭論,那只會(huì)給你自己帶來麻煩。

  現(xiàn)在這個(gè)工具可以小范圍試用了。那些麻煩的用戶會(huì)抱怨:“我每次都要重復(fù)這幾個(gè)同樣的操作!我想把它們合并成一個(gè)步驟!”鎮(zhèn)靜。不要罵他們(盡管你一直想罵他們)。記得嗎?讓測(cè)試用例不可被重構(gòu)是你大計(jì)劃中的一部分,F(xiàn)在你要笑容可掬說。我們?cè)缈紤]到了這個(gè)問題,我們的工具可以把幾個(gè)步驟封裝成一個(gè)更大的、具有業(yè)務(wù)含義的東西……嗯,姑且把它叫做“操作詞匯”吧。現(xiàn)在我來幫助你們做這個(gè)抽象和封裝。當(dāng)然了,操作也要用XML來承載,并且在提供給用戶時(shí)要先做一次編譯或者打包或者加密,總之是不能讓他們看到源文件。這樣他們才能永遠(yuǎn)依賴你。

  小范圍試用很重要。你必須努力工作,幫用戶寫測(cè)試用例,幫他們封裝操作,找你能找到的一切資源來幫他們,然后把投入二十個(gè)人月干出來的成果全都描述成你的工具帶來的神奇變化。放心,你只需要這么干一次(或者兩次)。為了把這些愚蠢的家伙踩在腳下,有時(shí)你得先紆尊降貴。這是策略。

  試用結(jié)束,你回到自己的辦公室,這些愚蠢的用戶還會(huì)不停地找你幫忙更新被封裝的操作。這是設(shè)計(jì)中的一環(huán)。現(xiàn)在你應(yīng)該做一個(gè)中央服務(wù)器,把他們的測(cè)試用例和操作全都保存在上面,讓他們每次執(zhí)行測(cè)試都從服務(wù)器上取用例腳本。然后告訴他們,這叫云計(jì)算,這叫測(cè)試工廠。當(dāng)然這些傻瓜不會(huì)懂得云計(jì)算是什么玩意,但他們會(huì)發(fā)現(xiàn)你幫他們更新操作的速度變快了,然后他們會(huì)認(rèn)為這是云計(jì)算帶來的效果。把他們感謝你的話搜集起來,很快你會(huì)用得上。

  現(xiàn)在萬事俱備,可以向老板匯報(bào)了。這次匯報(bào)的重點(diǎn)是兩個(gè)關(guān)鍵詞。這也是今后宣傳這個(gè)工具時(shí)的常用語。一定要背熟。

  關(guān)鍵詞1:“第四代自動(dòng)化測(cè)試工具”。你要告訴老板,用Java啦Ruby啦C#啦這些編程語言來編寫測(cè)試用例,那是第三代(前兩代是什么隨便你編吧)。第四代的特征是“基于操作詞匯”──也是圖形界面上可以拖的那個(gè)玩意,盡管你知道它背后是一坨不能讀、不能改、連SVN合并都困難的 XML。

  關(guān)鍵詞2:“測(cè)試工廠”。這時(shí)候把界面打開,連上中央服務(wù)器,讓老板看試點(diǎn)項(xiàng)目的測(cè)試用例!白谵k公室能知道所有項(xiàng)目的測(cè)試進(jìn)展情況。”這句話是殺手锏。老板們一定會(huì)喜歡,而且會(huì)幫你推廣這個(gè)工具。

  只要被推廣到更多的項(xiàng)目組,你會(huì)變成紅人,F(xiàn)在前面那些設(shè)計(jì)決策的重要性逐漸體現(xiàn)了。因?yàn)闇y(cè)試用例不可重構(gòu),任何一個(gè)項(xiàng)目想要正經(jīng)用你的工具都得找你幫忙做操作詞匯,為此你可以成立一個(gè)部門,拉更多的人來給你打這份苦工,自己當(dāng)領(lǐng)導(dǎo)。但你又怕別人真的用得太多太頻繁,那樣的話你得疲于支撐了。放心,因?yàn)镽FT不穩(wěn)定,因?yàn)槊看螆?zhí)行都要連到中央服務(wù)器來取用例,因?yàn)椴荒芡ㄟ^命令行或者Ant之類的辦法把它放進(jìn)持續(xù)集成,還因?yàn)橛檬髽?biāo)拖拽是比用鍵盤慢得多,自動(dòng)化測(cè)試的進(jìn)展會(huì)非常緩慢,你大可以安心享受自己的新辦公室。

  先別急著享受,好事才剛開始呢。那些深思遠(yuǎn)慮的設(shè)計(jì)決策確保了很多項(xiàng)目不會(huì)認(rèn)真用你的工具。這時(shí)候作為推行先進(jìn)自動(dòng)化測(cè)試?yán)砟畹募t人,你正好可以在老板耳邊吹吹風(fēng),讓他們強(qiáng)迫所有項(xiàng)目使用。強(qiáng)迫的方式有很多,但你必須記住的手段是給測(cè)試人員做職業(yè)技能鑒定考試:必須學(xué)會(huì)用你的工具才能評(píng)級(jí)加薪。這招的關(guān)鍵在于一箭雙雕:不僅可以強(qiáng)迫他們使用,而且確保了他們沒時(shí)間沒動(dòng)力去了解別的測(cè)試工具──你當(dāng)然不想這些傻瓜突然冒出來說“這個(gè)開源的工具比我們自己的好用多了,而且還有那么多社區(qū)高手在維護(hù)和支持,為什么不用它”,對(duì)吧?

  強(qiáng)行推廣之后,你接到的支撐需求肯定會(huì)劇增。這時(shí)你得好好培訓(xùn)一下客服的小弟。要讓他們分清用戶的來頭。如果是老板重視的項(xiàng)目,如果辦公室離你或者離老板很近,得大力支持。如果來自什么邊遠(yuǎn)山區(qū)的支撐需求,那把它撂到一邊涼快去吧。這些邊遠(yuǎn)山區(qū)經(jīng)常會(huì)提些奇怪的需求,例如“能不能不連中央服務(wù)器執(zhí)行用例?我們這里無法連通公司內(nèi)網(wǎng)”。讓小弟們直接回復(fù)“不行”可以了。無法連通公司內(nèi)網(wǎng)的人同樣無法有效地跟領(lǐng)導(dǎo)告狀,不用擔(dān)心他們。

  好了,F(xiàn)在你已經(jīng)從一個(gè)邊緣程序員成功晉升為公司的紅人。不僅有一幫小弟鞍前馬后,而且一大幫項(xiàng)目頭頭們都得求著你優(yōu)先支撐。這快感,又豈是交付一兩個(gè)項(xiàng)目、開一兩次慶功會(huì)所能比擬的?恭喜你。你不僅改變了自己的命運(yùn),還很有可能改變整個(gè)公司的命運(yùn)呢。

  噢,差點(diǎn)忘了重要的……千萬別用你們的測(cè)試工具來給自己的項(xiàng)目做自動(dòng)化測(cè)試。微軟那幫傻逼把這種行為叫做“吃自己的狗食”,可你做的是毒藥,吃下去會(huì)害死自己的。切記,切記。