再聊一聊测试职业发展
2019/2020 跨年之際,測試同學一起重溫下霍格沃茲測試學院特邀顧問、TesterHome
社區專家劉曉光老師解讀測試工程師職業發展的經典好文,也認真思考下 2020 新年計劃,給自己定個職業發展小目標吧!
測試行業人才普遍現象
測試招聘者,特別是一、二線互聯網公司的招聘者最苦惱的事兒就是 招人
。想找到一個合適的人難于上青天,每天各種撒網,簡歷看幾百份,面大幾十人,能撈到一個中意的小伙伴就謝天謝地了。
但同時很多測試小伙伴發現找工作很難,特別是進大一點的廠,他們特別挑:代碼要會寫,要有軟件架構能力,問一大坨平時根本用不到的技術問題,還挑經驗,挑溝通能力,挑這挑那,有時候還特么挑學歷、挑年齡。。。供求總難以匹配起來,造成了雙方都很痛苦。
Why?
能力要求不匹配是最核心的問題。軟件、互聯網近 20 年來飛速成長,其實也經歷了很多階段。行業軟件興盛階段和外包興盛階段(2000-2010
年)行業進入了大量的測試人員,當時最主流的測試實踐是:重心放在系統驗收階段。測試人員的主要工作基本都投入在了基于業務的黑盒測試上,對代碼能力、系統理解的能力要求不多。
2010
年后,互聯網行業的真正興起讓國內軟件開發模式開始緩慢調頭,快速迭代的模式逐步興起,開發周期越來越短,迭代越來越快,但系統越來越越龐大、復雜。原來的測試工作模式和工作范圍越來越無法滿足要求了。但大量從業人員技能范圍轉變是一件很難的事情,行業是有巨大慣性的。
從宏觀上看大量 QA 技能轉變跟不上需求轉變是造成市場供求不匹配的主要原因
So What?
三個觀點:
1. 只做手工測試,不懂系統實現的測試工程師的職業發展會越來越受限。
2. 能夠轉型成適應市場需求的同學將在近幾年的時間獲得超額回報(因為市場供不應求,企業不得不抬高價格來尋找這樣的人)。
到底什么樣的測試最搶手?
按照我一點理解講一講什么樣子的測試人才會搶手吧,限于篇幅會偏重技術角度來講。個人之見,歡迎討論和拍磚。
-
測試的底子-項目經驗
有比較復雜系統的測試實戰經驗,你就超過了 50%以上的應聘者。什么叫做比較復雜系統呢?投入 50
人年開發出來的系統就可以稱作一個復雜系統了。因此,復雜系統并不是很罕見。但是,如果你只接觸一個簡單的模塊,甚至只是測試一個穩定模塊的維護性開發,而不是通盤理解,不能說是測試過復雜系統。有從頭到尾接觸一個完整項目的經歷很寶貴。 -
測試的底子-基礎知識
對照三本書:《ISTQB 基礎教程》 《高級軟件測試設計》 《高級軟件測試管理》(后兩本是 ISTQB
的高級認證教程)。這里邊的內容你都能熟練應用(真的是熟練應用,而不只是有概念),你就能超過 80%以上的應聘者了。
面試過數百人,我經常會問幾個問題:如果測試時間不夠,你會怎么辦?如果讓你去測試一個你完全不熟悉的系統,你會怎么辦?你平時會使用那些測試設計方法?看似很稀松平常的問題,非常考驗人。因為大部分從業者都沒有經受過系統訓練和學習,工作多年,依然技能不足,意識跑偏。
-
熟練使用一門主編程語言
滿足這條,你就超過了 70% 的應聘者。什么叫做熟練呢?拿 Java 來說吧:系統學習過 Java 的教程,高頻面試 50 題[1]
這樣的題可以自測一下,可以回答上 35 個以上;熟悉最主流的 Spring 框架,能夠寫出一個簡單的網站,實現基礎的 Restful
服務;讀懂過一個測試框架,如 mockito 或者 Junit 的源碼;能夠熟練實施接口測試(基于一些測試框架 如:rest-
assured+Junit);能夠讀懂開發的業務代碼,對他們的代碼進行 Code Review; -
對一門語言有比較深入了解
滿足這條,你就超過了 90% 的應聘者。什么叫有深入了解呢?還拿 Java 來說吧:熟練使用 Java 的常見
API;深入理解基于語言特性/系統特性的知識,如 Collections
的實現機制、類型系統、I/O、網絡、多線程等;熟知設計模式(廣義范圍的設計模式,不局限于 GOF 的設計模式);熟悉 JVM
的工作模式;熟練使用調試排查工具解決性能問題;熟練掌握市面上常見的腳手架;熟練掌握周邊知識(OPs
相關,網絡知識相關)有不錯的實戰開發經驗(做過真正被生產檢驗的東西);對于測試開發,AOP,Java 字節碼技術是很重要的知識…
這是一個很長的學習 list,需要幾年時間來養成。做到這點,其實你可以勝任普通的開發崗位了,這也是高級測試開發崗位的技術底子。 -
在一個領域知識有不錯的了解
人不可能什么都懂,但工作幾年之后,會在工作的域內一定要有積累才行。例如,你測試一個核心電商系統的交易模塊三年了,業務上你一定要熟練講出來:商品列表、購物車、下單、退單、廢單、支付、發貨、庫存、退款、優惠使用等等一坨業務流程,和可能出現的常見的坑(各類問題產生的資損、各類問題產生的服務不可用、邏輯矛盾),不然根本無法體現你經驗沉淀和深入思考;技術角度上,你要能夠畫得出來系統的交互圖,熟悉最核心的接口和最核心的參數,能夠讀懂開發的代碼,熟練使用
trace 和監控工具,診斷定位線上問題到代碼行。 -
用技術保障質量的能力
測試開發崗一定會問到一個問題:你能夠舉一個你用技術手段提高測試效率,增強測試能力的例子么? 這是面試時最大的一個坎。 ****
很多人會講一些自動化測試回歸的例子,但是真正成功的例子非常少,因為為什么做,怎么做都沒有想好就照網上一個教程攢了一個,結果變成了玩具。
做好自動化,不僅僅是會使用工具、框架,其實要對被測物特性,軟件生命周期有很深的理解并且有很強的開發知識才行。實際上,在環境、CI、數據、測試用例生成、數據比對的很小的一些點上,都能有不錯的提效產出,從這些點能夠做得好,會得到不錯的加分。有一個不錯的成功案例,你勝出的幾率就超過了
80%,沒有短板,就十拿九穩了。
-
技能以外的東西- 實戰案例
以前的工作印證了你的能力。能夠講清楚一件特別拿得出手的工作,證明你能力的案例是面試時候最有用的投名狀。 -
技能以外的東西 - 你的個人特質
一般有如下特質會大大加分:快速學習、系統性學習、學以致用、系統性思考、強大的推動力、技術思維、突出的溝通能力、條理性、抗壓性、樂觀精神、抗挫折能力、迅速調整的能力、迭代改進的意識、ownership、團隊合作、愿景和規劃。
這些特性體現人的內核,有強大內核的人,做什么都行,技能暫時不足,也一定能補足。所以,在招聘的時候往往對是否錄用的判斷起決定性作用。
高段位測試要求(高級職位)
-
計算機領域知識的通盤理解
這條范圍非常大,人不可能什么都懂。但最最基礎的知識是不能有盲點的:操作系統工作基礎原理與基礎操作:如 linux,要通讀過 linux
操作系統的書,熟悉最基本的概念,基本命令要熟悉,Shell 要能寫和讀;網絡知識特別是 TCP/IP, HTTP 知識(推薦兩本書 《圖解 tcp/ip》
《圖解 Http》這兩本書里的東西要懂)。數據庫知識:市面常見數據庫(redis,mysql,oracle)的常見 DBA 操作,問題排查;SQL
的熟練使用;Web 及移動端知識:能夠懂 HTML,CSS,能夠讀懂 Javascript 代碼,能夠讀懂 Android 或者 iOS
的代碼,做簡單開發最好。安全知識:常見的安全防護方法、工具使用;基本的安全攻防原理;軟件工程/開發過程管理:實戰中各種磨練,建議系統的學習
PMP,敏捷開發的一些認證課程。 -
在一個域的深耕
人不可能什么都懂,但在一個領域是需要深耕的。比如,在做了四、五年移動端測試以后。Android 和 iOS
都要具備一定的開發能力了,能讀懂開發的業務代碼是最基礎的,能夠代替開發實現部分業務功能,完成部分組件開發是個非常好的自檢點。能夠對移動端自動化工具棧、監控工具棧(如友盟、bugly、newrelic
等)、內存泄露檢測、卡頓檢測、耗電量、弱網、流量、埋點、灰度、版本控制、兼容性、用戶體驗、安全等等的質量保障方案有通盤搞定能力。
什么叫搞定呢?舉個例子:比如,使用 多種手段
把崩潰率降低到千分之一以下。對于一個小團隊,這是個很不容易實現的坎。做到這點,你需要了解如何收集崩潰率,如何使用一系列工具來定位核心問題,如何推動開發改動,并且預防(靜態代碼掃描工具引入,阻止亂用第不成熟的第三方插件,代碼
reivew 防止常見 pattern 如空指針引發的崩潰,推動開發養成良好的 log
習慣,推動移動端防御性編程編程開發習慣,推動后端開發按照規范吐接口,幫助開發引入內存泄露、卡頓工具,趨勢報表,警鐘長鳴,各種灰度方式設置,線上監控。。。一個數據的改觀,背后要有大量的質量相關工作)。
- 使用綜合手段來保障軟件質量提升效能的能力
聽起來很抽象,舉幾個例子吧。
例子 1 :你所在的 team 總在被開發抱怨測試用的時間太長。如何能縮短一下測試時間呢?
通過調研,發現測試小伙伴詬病的最多的就是環境不可用。環境到底多不可用呢?你基于 Grafana 和 Prometheus
做了一個環境可用的監控報表,使用后,發現環境在工作日整體可用率只有 35%左右,主要原因是:幾個核心熱點應用經常掛了沒人管。你拉了整個
team,明確了部署責任人,約定了部署規則:只能中午飯和晚飯時間部署,并且部署后要自己看一下是不是 OK。一周后,環境可用度上升到了 65%。
再深入分析,發現 2 個同學不守規矩,總是他們在破壞規則,你去找他們單獨談話。一周后,環境可用度上升到了 80%。還是有少量人不守規矩。你找 SRE
的同學提需求,做了部署卡點,非部署時間部署必須 TL 審批。一周后,環境可用度上升到了 85%。有些 TL
也不守規矩。你建了個報警,環境亂部署,壞掉了,在大團隊的群里@全體,告知誰搞壞了環境。一周后,環境可用度達到了 92%。
你加了一個
feature:應用掛了一段時間無人響應,自動重啟服務功能,仍然有問題,就自動回滾上一版本。你推動了開發解決了某個應用啟動時間過長的問題。你推動了環境分組。你推動了測試環境版本上線的規范流程實施。你推動了冒煙自動化用例卡點。你推動了環境部署人備份機制。你推動了全員基礎環境部署培訓。你總結了部署手冊。你做了…
最后,環境可用度穩定到了 97%以上。你為測試節省了 60%以上 block 時間(原來可用度未 35%)
例子 2
:上面的問題,除了環境,還有一個槽點:開發提測質量不高。測試的頭幾天,很多主流程都走不通,導致測試總是在等待,或者是跟著開發一起聯調。而這段時間,已經被習慣性的認為是測試時間了,因為:
提測了 。
你推動了:測試提供冒煙用例,開發必須完成一定程度的自測才能提測。你推動了:測試和開發做自動化同期共建,在開發過程中,核心功能就被自動化用例保護起來了。你推動了:開發切分
feature 提測,而不是攢一個大招一下子提一坨。你推動了:代碼 Codereview 變成團隊常規活動,QA
在早期跟進核心代碼,把問題坑殺在萌芽階段。你推動了:外部資源聯調非常早的進行,不會讓它在測試后期成為測試 blocker …
例子 3 :你發現測試時間長,QA 自己也有問題。
你推動了:有明確的測試計劃,并讓所有干系人都有明確的預期。你推動了:測試依據風險測試,最大的風險得到最快的 cover,科學分配時間,明顯縮短 bug
反饋時間弧。你推動了:bug 嚴格管理,所有重要 bug 都及時修復。你推動了:良好的溝通和匯報機制,
每天讓團隊主要干系人清晰的知道,距離發布還差多遠。 ****你推動了…
你能講出自己做過 5 個以上這樣的成功例子,我敢保障,你會被一線大廠瘋搶。職級基本都是專家起。
- 持續學習能力和復雜問題解決能力
你能講出自己做過 5 個以上這樣的成功例子,我敢保障,你也會被 1 線大廠瘋搶。職級基本都是專家起。
例子 1 :你近期的工作是幫助團隊提升后臺服務穩定性。你看到了 netflix 內部使用一個叫做 ChaosMonkey
的東西來隨機對生產服務期進行攻擊,而逼迫工程師提高穩定性,所以,你也實現了類似(更溫和)的內部機制,推動團隊穩定性的提高。你怎么知道這個叫做
ChaosMonkey 的東西呢?因為你會習慣性瀏覽一線廠商的技術博客,參與行業大會,關注各類新技術。持續性的養成習慣。
例子 2 :做大規模接口自動化好難,外部數據依賴太難搞,參數構造太費勁,assert
太難寫。如果能夠簡單的錄制回放就好了。但是,外部依賴是個天坑,寫操作 mock 也是個天坑,assert
也是個天坑。實際的案例是,經過幾年多個團隊持續不懈的填坑,阿里內部已經有應用級的錄制回放工具了,數百個應用成功的是用了它,把不可能回歸的任務變成了可能(上萬數量級的
case 當天生成,當天投入使用,并可以分析覆蓋率),自動化測試實施需要付出的工作時間革命性降低(不足原來付出時間的 10%)。
- 其它綜合能力
測試是個萬金油,高階一些的職位需要什么都要會一些
,因為越高階的職位需要解決的問題越綜合,需要打交道的人的種類越多。不然很容易變成你職業短板,做個 list 吧(一定不全): - 很好的項目管理能力,至少與開發經理能力同級,甚至要強于他。
- 一定的軟件架構能力。
- 一定的產品 sense:可以跟一個資深的產品經理能夠順暢的交流,明白知道他為什么會這么想,所要實現產品的意義,路徑;從產品質量方面的考慮要超過產品經理,給他輸出。
- 極好的溝通能力。
- 團隊管理能力(這個太重要)
- 目標管理能力
- 有一個好的內核(上面提到過)
怎么轉型/怎么進階?
其實不難,沒有什么高端的方法。下面這 4 條就夠了,核心秘密就是 堅持不懈 。
- 熟悉你的被測系統,熟悉你的被測系統,熟悉你的被測系統。 ****
能夠從技術、業務角度做到對被測系統熟悉是做一個好 QA
的最基本職業素養,也是能力提升的最主要源泉。自檢點:我能夠畫出系統的架構圖么?我能夠讀懂開發的代碼么?我熟悉常見的業務監控系統么?熟悉日志系統么?知道開發是如何調試和定位問題的么?給我一個線上問題,我能定位么?我能給別人完整的介紹這個域的核心業務么?我能自己直接動手發布上線一個系統么?知道如何回滾么?灰度是如何做的?我知道所有關鍵的技術點么,如一個交易的冪等性是如何實現的?我在團隊中有:“這家伙對系統最熟”的口碑么?如果自檢點全部是否定答案。。。花一年時間把它全變成肯定答案。
這一過程,你一定被迫學到了很多很多,并且獲得了極為長足的成長,這是進階的必由之路,也是卡了很多人的地方。
如果說做不到,后面不用看了,前面的也全部忘掉吧。
****方法:通讀所有文檔,強迫自己讀代碼,積極參與開發所有討論,不懂的狂問,觀察開發如何上線,如何排查問題,模仿,學習,善用搜索引擎,總結。。。
- 找到問題解決問題,找到問題解決問題,找到問題解決問題。 ****
你一定有一堆問題,如果你覺得自己做得挺好,沒有問題要解決,那必然是你自己有巨大的問題!
自檢點:找一支筆,寫出你覺得質量方面,你的 team 的 10 個問題,做排序。排出最重要的 3 個。方法:找到 top3
的問題,選一個,列個接話,去解決。如果找不出來,使勁去觀察,然后去看看做的好的同行,比比你比人家差在哪里。嘗試去解決這些問題,從小問題,能夠見到效果的問題入手,設置一個時間點。你真正解決了
5 個以上問題以后,感覺一定會有。
- 系統學習,系統學習,系統學習 ****
自檢點:
我系統的學過一門知識么?我能講清楚我這么操作,我寫的這行代碼的原理么?方法:從工作出發,確認你需要補足哪些知識。從網上找一個具體知識的學習路線圖,訂個計劃,照著來。參加學習小組,找到幫你解決難題的人,多請他吃飯,多請教他。獲取知識后,馬上回到工作中做檢驗。還是學以致用才能有所增長。結合工作來系統學習的效果是最好的。
再舉個例子:上家公司有個小伙伴(他應該也會泡這個社區),開始應聘的時候,他說熟悉 jenkins,用的很多。所以第一份工作是:把所有 CI
的日常工作交給了他,并告知 2 個月內要全部搞定。他一下懵逼了,原來那些不深入的理解支撐不了工作要求。后來他每天死磕,看了 jenkins
所有的文檔(對,幾乎所有文檔通讀了一遍),翻了無數問題的解決帖子,記錄了上百個問題解決的過程,寫了上百篇 jenkins 的小
blog(現在還沒公布出來)。幾個月以后,他比我熟了,他的一項基礎能力成長為:可以獨自給一個小公司完整的搞定前端、后端、移動端的一整套 CI
解決方案。其實單憑這一套,就能找到不錯的工作了。這是依托工作,系統性學習的結果。
-
看到有同學說要裸辭,去接受培訓。
我的建議是,別這樣。裸辭你就失去了學以致用的陣地,失去了真正解決問題的機會,還失去了資金來源。依托工作,自主學習是王道。自己饒過不去坎,其實有很多網上教程和非脫產培訓班啊。 -
選擇有挑戰的團隊,選擇有挑戰的團隊
自檢點:在團隊里有很多人比我強么?周圍的同事都是我佩服的么?我做的事兒有挑戰么?方法:如果這三點都是否定的,并且 你處于職業生涯的早期
。也許(只是也許),你該考慮一下換個團隊了。
總結
偏重技能角度講了講市場的需求和 QA 如何做如何滿足市場需求。行文倉促,認識有限,其實也并沒有什么新東西。歡迎討論拍磚啊:)
掃碼回復「職業發展」入群
測試開發技術直推 BAT 名企測試經理
福利 | 測試跨年狂歡
霍格沃茲測試學院年底特別活動,測試工程師跨年狂歡,掃碼領萬元紅包,Kindle,小米藍牙耳機、測試好書!大家一起來!
** END **點一下好看,就少一個 Bug!******************************
往期回顧
-思寒漫談測試工程師職業發展
-面試|測試你完全不熟悉的系統,你會怎么辦?
-
面試|測試時間不夠了怎么辦?
-面試|互聯網大廠測試開發崗位會問哪些問題?
-面試|百度測試開發崗位面試題目回顧
來霍格沃茲測試開發學社,學習更多軟件測試與測試開發的進階技術,知識點涵蓋web自動化測試 app自動化測試、接口自動化測試、測試框架、性能測試、安全測試、持續集成/持續交付/DevOps,測試左移、測試右移、精準測試、測試平臺開發、測試管理等內容,課程技術涵蓋bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相關技術,全面提升測試開發工程師的技術實力
QQ交流群:484590337
公眾號 TestingStudio
視頻資料領取:https://qrcode.testing-studio.com/f?from=CSDN&url=https://ceshiren.com/t/topic/15844
點擊查看更多信息
總結
以上是生活随笔為你收集整理的再聊一聊测试职业发展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最新版2017安装教程
- 下一篇: 清华大学 谭浩强c语言课件,C语言课件