軟件測試轉(zhuǎn)型之路
選擇測試之路——路上的迷茫
2010年 12 月 31 日,在網(wǎng)易從事了多年開發(fā)之后,依依不舍地離開,面臨的是一個(gè)完全從零開始的全新職位:SQA,也就是 tester。
當(dāng)時(shí)對為什么被選擇做軟件質(zhì)量保證,而不是繼續(xù)在研發(fā)上進(jìn)取,持有保留態(tài)度:憑什么要我轉(zhuǎn),不是別人?這個(gè)時(shí)候,多年的伙伴、領(lǐng)隊(duì)——雷叔就把我的優(yōu)點(diǎn)暴露出來了:認(rèn)真、心細(xì)、負(fù)責(zé);好吧,基于以上幾點(diǎn),只有“我行”,只能給力了。
從心底里,對質(zhì)量管理、SQA 等概念,我并沒有多想,因?yàn)楦鞠氩涣?,腦子里面沒有太全面的認(rèn)知,即使雷叔講過一些,我還是覺得不夠全面,不知道業(yè)界是如何做的?所以心里多多少少有點(diǎn)擔(dān)心!
幾個(gè)人成立一個(gè)新團(tuán)隊(duì),什么都是從零開始,關(guān)鍵還是要有一些流程,這幾年開發(fā)中也積累了些經(jīng)驗(yàn),總結(jié)了些問題。在 12 月底,我提交了《軟件質(zhì)量保證第一季度計(jì)劃》,這個(gè)計(jì)劃后來也成為了整個(gè)質(zhì)量保證體系的核心,大概綱要如下:
- 搭建項(xiàng)目管理平臺(tái)
- 搭建持續(xù)集成平臺(tái)
- 規(guī)范開發(fā)流程
- 制定軟件質(zhì)量保證規(guī)范流程
- 建立缺陷管理
- 建立風(fēng)險(xiǎn)管理庫、經(jīng)驗(yàn)教訓(xùn)庫(長遠(yuǎn)計(jì)劃)
2011年 1 月 25 日,苦于沒有規(guī)范的流程,做起事來還是不夠順暢,在奮戰(zhàn)多日之后,制定了《產(chǎn)品研發(fā)質(zhì)保流程手冊》,簡單來說,劃分了:需求、開發(fā)、發(fā)布三個(gè)階段,每個(gè)階段定義驗(yàn)收的產(chǎn)物。為什么要制定這個(gè)?必須有章可依,否則步伐不穩(wěn)健,走的再遠(yuǎn),也會(huì)亂。
道路上,難免遭遇坎坷,要不斷提升自己,也有三點(diǎn)切身體會(huì):
- 如電影《熱血教練》中卡特教練所說,先把基本功練扎實(shí)了,才能有勝算。既然從零開始,就不要被困惑不已的瑣事所糾纏著,下決心突破,可以研讀:質(zhì)量管理、缺陷預(yù)防、軟件測試、持續(xù)集成等書籍,并且通過互聯(lián)網(wǎng)了解一些公司是如何開展測試和質(zhì)量管理的方方面面。
- 個(gè)人價(jià)值迎合團(tuán)隊(duì)價(jià)值,果斷取舍,為團(tuán)隊(duì)利益著想。
- 堅(jiān)定信念,避免浮躁,把握遠(yuǎn)景,不要急于尋求成就感。
同時(shí),在調(diào)研期間,我意識(shí)到持續(xù)集成很重要,并按照當(dāng)前的需求,重點(diǎn)關(guān)注以下幾點(diǎn):持續(xù)測試、持續(xù)審查、持續(xù)反饋。
圖:早期的開發(fā)、測試流程原型圖
無悔選擇測試之路——路上的抉擇、進(jìn)取
有了流程規(guī)范,接下來是實(shí)施和持續(xù)改進(jìn)。這些規(guī)范運(yùn)用在一個(gè)項(xiàng)目上,先做了三個(gè)月,不停地測試,編寫功能測試用例,也走了 2 條彎路:
- 用例花了大量時(shí)間編寫,就連打開瀏覽器、輸入 xx、點(diǎn)擊登錄,這些也記錄了(這種是早期狀況)。 我居然還請纓加入開發(fā),因?yàn)榭吹揭恍┤蝿?wù)完成不了。后來雷叔也指明,測試做測試應(yīng)該去做的,如果我當(dāng)時(shí)幫忙做開發(fā),那么很多測試都完成不了,一樣保證不了質(zhì)量。
- 所以,測試人員除了要了解業(yè)務(wù),使用簡單、清晰的語言結(jié)構(gòu)來進(jìn)行測試之外,還應(yīng)該準(zhǔn)確定位自己,明白自己在整個(gè)版本迭代中,控制質(zhì)量的位置!
事后想想,那段日子鍛煉了什么?那三個(gè)月無法忘記,每天高強(qiáng)度測試,用的最多的就是:功能測試(邊界值、場景法),白盒測試。其實(shí)就是鍛煉了測試的基礎(chǔ)技能和流程管理。
后來測試管理流程逐步建立起來,但是在測試過程中,應(yīng)當(dāng)如何提高代碼質(zhì)量?這個(gè)階段我們參考了敏捷開發(fā)中高質(zhì)量 Java 代碼開發(fā)實(shí)踐,做了一些適合團(tuán)隊(duì)的改進(jìn),見下圖:
圖:質(zhì)量提升的模式
這種迭代版本中 java 代碼質(zhì)量提升的模式,已經(jīng)采用了將近一年,非常有效。
同年 Q2,我們對測試管理進(jìn)行了改進(jìn),其中是受到 @段念-段文韜《組織敏捷測試》影響,采用類似“一頁紙計(jì)劃”的測試文檔(在此要感謝@段念-段文韜)在 redmine 進(jìn)行管理。之前每次整理測試計(jì)劃,發(fā)送給開發(fā)人員,實(shí)際上耗費(fèi)了一些時(shí)間,并且成效不大,現(xiàn)在的任務(wù):需求、開發(fā)、測試,全部交給 redmine 管理,所有事情一目了然,對任何人都是可見的,有沒有完成,進(jìn)度如何,非常清晰。
為了規(guī)范整個(gè)開發(fā)測試流程的管理,包括開發(fā)、測試的交互,我們又制定了輕量級的 SQA 框架,見下圖:
圖:最初制定的 SQA 框架
不過此后這個(gè)框架也發(fā)生了比較大的變化,做得更好、更輕量級。無獨(dú)有偶,我偶然的機(jī)會(huì)買了一本@朱少民老師的:《全程軟件測試》,發(fā)覺這個(gè) SQA 框架也是滲透到目前的每個(gè)環(huán)節(jié),更適合目前團(tuán)隊(duì)的 scrum 模式,在此也要感謝@朱少民老師,真是相見恨晚,不然可以少走很多彎路!??!
大家可能會(huì)問:Scrum 模式、用戶故事,測試人員怎么利用?為什么想到這個(gè)?如果遺漏了測試場景,團(tuán)隊(duì)會(huì)很不爽,怎么避免呢?結(jié)合@Aullyxiao 的《軟件測試之魂》提到分層測試的想法,想了想,還可以這么整:
圖:分層測試圖
對于目前的開發(fā)架構(gòu)來說,一個(gè)用戶故事,涉及這四個(gè)點(diǎn),可以從這四個(gè)點(diǎn)入手來進(jìn)行質(zhì)量保證。如何做呢?單元測試就開發(fā)人員處理了;代碼審查,測試人員可以參與和監(jiān)督,其實(shí)就是要保證:將開發(fā)任務(wù)與提交到 SVN 的代碼進(jìn)行關(guān)聯(lián)。這樣一來,當(dāng)測試人員檢查開發(fā)任務(wù)的時(shí)候,就可以找到改變過的代碼。我曾經(jīng)試過從這些代碼里面查看邏輯,找到分支場景,補(bǔ)充到測試用例里面。
在此期間,我還看過@架構(gòu)師 Jack 原創(chuàng)的《功能測試用例基礎(chǔ)設(shè)計(jì)模型》,這個(gè)文檔 2 天轉(zhuǎn)發(fā)已超過 150 次,我也向所有同行推薦該測試設(shè)計(jì)模型實(shí)例化的測試用例,供大家消化該設(shè)計(jì)模型。想要的朋友可以去微盤下載《功能測試基礎(chǔ)設(shè)計(jì)模型(24個(gè)設(shè)計(jì)方法的實(shí)例化用例)》。
我當(dāng)時(shí)還借鑒了@季哥來自淘寶的《探索式測試》系列文章,包括:《探索式測試的秘密——記在淘兩年》、 《組合測試法中的全對偶測試法》、《探索式測試實(shí)踐之缺陷大掃除和結(jié)對測試》。
當(dāng)然這么多東西,我覺得自己還需要時(shí)間來消化。
繼續(xù)測試之路——路上的風(fēng)景
也許會(huì)有人問:有沒有后悔做 tester?
我過去也常問自己:做得開心嗎?產(chǎn)品質(zhì)量提升了嗎?看到自己的前景了嗎?找到 high 點(diǎn)了嗎?
現(xiàn)在我可以回答:OK,我做到了,并且還可以持續(xù)做得更好。
可能有很多測試人員會(huì)問:測試人員的價(jià)值到底何在?在這里,我套用和整合@朱少民老師的一些術(shù)語,給出我的回答。
我認(rèn)為,Scrum 中測試人員價(jià)值應(yīng)當(dāng)體現(xiàn)在:
-
預(yù)防缺陷的手段,提高洞察力,增強(qiáng)業(yè)務(wù)知識(shí)。
缺陷在需求、開發(fā)前期就已經(jīng)存在了,關(guān)鍵是用什么手段去挖掘出來預(yù)防。在 sprint 前獲取到的需求,測試人員可以站在客戶角度上來闡述自己的觀點(diǎn),與開發(fā)人員進(jìn)行充分交流和討論,使自己在用戶體驗(yàn)、業(yè)務(wù)邏輯等等方面的經(jīng)驗(yàn)充分體現(xiàn)出來。
-
在開發(fā)過程中,測試人員除了站在客戶的角度進(jìn)行測試,還應(yīng)當(dāng)提供更全面的質(zhì)量反饋,包括代碼質(zhì)量的檢查,這個(gè)可以通過 redmine 與 SVN 雙向關(guān)聯(lián)來做檢查依據(jù)。目前整個(gè)過程測試人員尚未參與代碼編寫,應(yīng)當(dāng)參與并推進(jìn)代碼評審,將代碼問題及時(shí)反饋出來;并且參與或者推進(jìn)單元測試,檢查單元測試狀態(tài)(確保單元測試達(dá)到 80% 以上覆蓋率,幫助開發(fā)人員開發(fā)出具有良好可測試性的代碼),自始至終將質(zhì)量問題及時(shí)反饋出來,保證在 sprint 的整個(gè)過程中質(zhì)量受到足夠的關(guān)注,提高質(zhì)量改進(jìn)的持續(xù)性和可視性。
-
隨著版本任務(wù)的增加,每個(gè)版本回歸測試的成本增加,可以適當(dāng)考慮部分穩(wěn)定功能進(jìn)行自動(dòng)化測試。當(dāng)然,這是遠(yuǎn)景。
-
持續(xù)改進(jìn)、反饋,充分發(fā)揮每個(gè)版本統(tǒng)計(jì)報(bào)告的作用,對缺陷進(jìn)行分析,總結(jié)出一些規(guī)律,幫助開發(fā)人員建立良好的習(xí)慣,改進(jìn)代碼的質(zhì)量。
測試人員,應(yīng)當(dāng)在自己的道路上看到風(fēng)景,以前作為開發(fā),寫好一個(gè)功能,很 high;測試人員也要有這種心境,提高了產(chǎn)品質(zhì)量,預(yù)防了缺陷,很 high。找到自己的 high 法,才可以把測試玩得更爽 ,我知道@朱少民老師、@季哥來自淘寶、@段念-段文韜、@架構(gòu)師 Jack,都玩得很爽,但是有一點(diǎn):要爽得靠自己,多跟高手交流,有利于提升自己,但是不要刻意復(fù)制別人成功的經(jīng)驗(yàn),因?yàn)槊總€(gè)團(tuán)隊(duì)的模式和環(huán)境不大相同。
總結(jié)
每個(gè)人離開自己熟悉的領(lǐng)域,投入到新的領(lǐng)域中(說實(shí)在軟件測試也囊括了開發(fā)領(lǐng)域),必然存在一些迷茫,不知如何入手,身邊如果有一個(gè)靠譜的高手,指點(diǎn)一下,眼前將會(huì)一片明亮??上ВF(xiàn)實(shí)總是殘酷的,往往很多時(shí)候,都要靠自己去摸索,只有經(jīng)歷了、深刻體會(huì)了,才知道如何改變,以及如何迎接新挑戰(zhàn),調(diào)整到恰到好處的心態(tài)。這樣子,才能夠穩(wěn)健進(jìn)入轉(zhuǎn)型的軌道。不要害怕改變和投入,一定要堅(jiān)定信念,在前進(jìn)的道路上,多參考同行的成功經(jīng)驗(yàn):@朱少民老師、@段念-段文韜、@季哥來自淘寶、@架構(gòu)師 Jack、@Aullyxiao,迎合團(tuán)隊(duì)價(jià)值,不斷修正自己的偏差,走出一條華麗的直路!
我很慶幸,經(jīng)歷了一個(gè)測試團(tuán)隊(duì)從無到有的創(chuàng)建,同時(shí)也幫助開發(fā)人員掌握了一些測試的基本技能,用于推進(jìn)質(zhì)量保證,讓整個(gè)團(tuán)隊(duì)達(dá)到共識(shí)?,F(xiàn)在的我,只是剛過了轉(zhuǎn)型的痛苦期,測試工作也僅僅是剛剛開始,還有很多有意義的事情需要去做。
路漫漫其修遠(yuǎn)兮,吾將上下而求索!