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