實不相瞞,早就已經有很多一路「躺贏」的同窗,拿着offer功成身退,早早開啓了無甚煩擾的大四時光。
可是也有不少
測試小夥伴向小拿反應:找工做很難,特別是進大一點的廠!他們特別挑!
代碼要會寫,要有軟件架構能力,問一大坨平時根本用不到的
技術問題,還挑經驗,挑溝通能力,挑這挑那,有時候還特麼挑學歷、挑年齡。
而招聘者一樣也面臨招人難的局面。想找到一個合適的人難於上青天,天天各類撒網,簡歷看幾百份,面大幾十人,能撈到一箇中意的小夥伴就謝天謝地了。
總的來講:「供求難以匹配,雙方都很痛苦!」
今天小編就來聊聊IT行業中這個讓人既愛又恨的職位:
測試
能力要求是核心問題
軟件、
互聯網近20年來飛速成長,其實也經歷了不少階段。
行業軟件興盛階段和外包興盛階段(2000-2010年)行業進入了大量的測試人員,當時最主流的測試實踐是:重心放在系統驗收階段。測試人員的主要工做基本都投入在了基於業務的
黑盒測試上,對代碼能力、系統理解的能力要求很少。
2010年後,互聯網行業的真正興起讓國內
軟件開發模式開始緩慢調頭,快速迭代的模式逐步興起,開發週期愈來愈短,迭代愈來愈快,但系統愈來愈越龐大、複雜。
原來的測試工做模式和工做範圍愈來愈沒法知足要求了。但大量從業人員技能範圍轉變是一件很難的事情,行業是有巨大慣性的。從宏觀上看大量QA技能轉變跟不上需求轉變是形成市場供求不匹配的主要緣由。
什麼樣的人搶手
那麼到底什麼樣的人才纔會讓大廠伸出橄欖枝呢?
1.測試的底子-項目經驗:
有比較複雜系統的測試實戰經驗,你就超過了50%以上的應聘者。
什麼叫作比較複雜系統呢?投入50人年開發出來的系統就能夠稱做一個複雜系統了。所以,複雜系統並非很罕見。可是,若是你只接觸一個簡單的模塊,甚至只是測試一個穩定模塊的維護性開發,而不是通盤理解,不能說是測試過複雜系統。有從頭至尾接觸一個完整項目的經歷很寶貴。
2.測試的底子-基礎知識:
對照三本書:《ISTQB基礎教程》 《高級
軟件測試設計》 《高級軟件測試管理》(後兩本是ISTQB的高級認證教程)。
這裏邊的內容你都能熟練應用(真的是熟練應用,而不僅是有概念),你就能超過80%以上的應聘者了。
面試官一般會喜歡問幾個問題:
若是測試時間不夠,你會怎麼辦?
若是讓你去測試一個你徹底不熟悉的系統,你會怎麼辦?
你平時會使用那些測試設計方法?
看似很稀鬆日常的問題,很是考驗人。由於大部分從業者都沒有經受過系統訓練和學習,工做多年,依然技能不足,意識跑偏。
3.熟練使用一門主語言:
知足這條,你就超過了70%的應聘者)
什麼叫作熟練呢?
拿Java來講吧:系統學習過Java的教程,高頻面試50題 這樣的題能夠自測一下,能夠回答上35個以上;
熟悉最主流的Spring框架,可以寫出一個簡單的網站,實現基礎的Restful 服務;
讀懂過一個測試框架,如mockito或者Junit的源碼;
可以熟練實施
接口測試(基於一些測試框架 如:rest-assured+Junit);
可以讀懂開發的業務代碼,對他們的代碼進行Code Review。d(′ω`*)
4.對一門語言有比較深刻了解:
知足這條,你就超過了90%的應聘者。(妙啊~)
什麼叫有深刻了解呢?
還拿Java來講吧):
熟練使用Java的常見API;
深刻理解基於語言特性/系統特性的知識,如Collections的實現機制、類型系統、I/O、網絡、多線程等;
熟知設計模式(廣義範圍的設計模式,不侷限於GOF的設計模式);
熟悉JVM的工做模式;熟練使用調試排查工具解決性能問題;
熟練掌握市面上常見的腳手架;
熟練掌握周邊知識(OPs相關,網絡知識相關)有不錯的實戰開發經驗(作過真正被生產檢驗的東西);
對於測試開發,AOP,Java字節碼技術是很重要的知識。。。 這是一個很長的學習list,須要幾年時間來養成。作到這點,其實你能夠勝任普通的開發崗位了,這也是高級測試開發崗位的技術底子。
5.在一個領域知識有不錯的瞭解:
人不可能什麼都懂,但工做幾年以後,會在工做的域內必定要有積累才行。
例如,你測試一個核心電商系統的交易模塊三年了,業務上你必定要熟練講出來:商品列表、購物車、下單、退單、廢單、支付、發貨、庫存、退款、優惠使用等等一坨業務流程,和可能出現的常見的坑(各種問題產生的資損、各種問題產生的服務不可用、邏輯矛盾),否則根本沒法體現你經驗沉澱和深刻思考;技術角度上,你要可以畫得出來系統的交互圖,熟悉最核心的接口和最核心的參數,可以讀懂開發的代碼,熟練使用trace和監控工具,診判定位線上問題到代碼行。
6.用技術保障質量的能力:
測試開發崗必定會問到一個問題:你可以舉一個你用技術手段提升測試效率,加強測試能力的例子麼?
這是面試時最大的一個坎。 不少人會講一些
自動化測試迴歸的例子,可是真正成功的例子很是少,由於爲何作,怎麼作都沒有想好就照網上一個教程攢了一個,結果變成了玩具。
作好自動化,不只僅是會使用工具、框架,其實要對被測物特性,軟件生命週期有很深的理解而且有很強的開發知識才行。
實際上,在環境、CI、數據、
測試用例生成、數據比對的很小的一些點上,都能有不錯的提效產出,從這些點可以作得好,會獲得不錯的加分。有一個不錯的成功案例,你勝出的概率就超過了80%,沒有短板,就十拿九穩了。
7.技能之外的東西- 實戰案例:
之前的工做印證了你的能力。
可以講清楚一件特別拿得出手的工做,證實你能力的案例是面試時候最有用的投名狀。
8.技能之外的東西 - 你的我的特質:
通常有以下特質會大大加分:快速學習、系統性學習、學以至用、系統性思考、強大的推進力、技術思惟、突出的溝通能力、條理性、抗壓性、樂觀精神、抗挫折能力、迅速調整的能力、迭代改進的意識、ownership、團隊合做、願景和規劃。
這些特性體現人的內核,有強大內核的人,作什麼都行,技能暫時不足,也必定能補足。因此,在招聘的時候每每對是否錄用的判斷起決定性做用。
高段位要求(高級職位需求)
1.計算機領域知識的通盤理解:
這條範圍很是大,人不可能什麼都懂。但最最基礎的知識是不能有盲點的:
操做系統工做基礎原理與基礎操做:如linux,要通讀過linux操做系統的書,熟悉最基本的概念,基本命令要熟悉,
shell要能寫和讀;
網絡知識特別是TCP/IP, HTTP知識:推薦兩本書 《圖解tcp/ip》 《圖解Http》這兩本書裏的東西要懂。
數據庫知識:市面常見數據庫(redis,mysql,oracle)的常見DBA操做,問題排查;
SQL的熟練使用;
Web及移動端知識:可以懂HTML,CSS,可以讀懂Javascript代碼,可以讀懂
Android或者iOS的代碼,作簡單開發最好。
安全知識:常見的安全防禦方法、工具使用;基本的安全攻防原理;
軟件工程/開發過程管理:實戰中各類磨練,建議系統的學習PMP,敏捷開發的一些認證課程。
2.在一個域的深耕:
人不可能什麼都懂,但在一個領域是須要深耕的。
好比,在作了4、五年移動端測試之後。android和iOS都要具有必定的開發能力了,能讀懂開發的業務代碼是最基礎的,可以代替開發實現部分業務功能,完成部分組件開發是個很是好的自檢點。可以對移動端自動化工具棧、監控工具棧(如友盟、bugly、newrelic等)、內存泄露檢測、卡頓檢測、耗電量、弱網、流量、埋點、灰度、版本控制、兼容性、用戶體驗、安全等等的質量保障方案有通盤搞定能力。
什麼叫搞定呢?
舉個例子:好比,使用多種手段把崩潰率下降到千分之一如下。對於一個小團隊,這是個很不容易實現的坎。作到這點,你須要瞭解如何收集崩潰率,如何使用一系列工具來定位核心問題,如何推進開發改動,而且預防(靜態代碼掃描工具引入,阻止亂用第不成熟的第三方插件,代碼reivew防止常見pattern如空指針引起的崩潰,推進開發養成良好的log習慣,推進移動端防護性編程編程開發習慣,推進後端開發按照規範吐接口,幫助開發引入內存泄露、卡頓工具,趨勢報表,警鐘長鳴,各類灰度方式設置,線上監控。。。一個數據的改觀,背後要有大量的質量相關工做)。
使用綜合手段來保障軟件質量提高效能的能力。
你能講出本身作過5個以上這樣的成功例子,我敢保障,你會被一線大廠瘋搶。職級基本都是專家起。
3.持續學習能力和複雜問題解決能力:
例子1:
你近期的工做是幫助團隊提高後臺服務穩定性。你看到了netflix內部使用一個叫作ChaosMonkey的東西來隨機對生產服務期進行攻擊,而逼迫工程師提升穩定性,因此,你也實現了相似(更溫和)的內部機制,推進團隊穩定性的提升。
你怎麼知道這個叫作ChaosMonkey的東西呢? 由於你會習慣性瀏覽一線廠商的技術博客,參與行業大會,關注各種新技術。持續性的養成習慣。
例子2:
作大規模接口自動化好難,外部數據依賴太難搞,參數構造太費勁,assert太難寫。若是可以簡單的錄製回放就行了。
可是,外部依賴是個天坑,寫操做mock也是個天坑,assert也是個天坑。
實際的案例是,通過幾年多個團隊持續不屑的填坑,阿里內部已經有應用級的錄製回放工具了,數百個應用成功的是用了它,把不可能迴歸的任務變成了可能(上萬數量級的case當天生成,當天投入使用,並能夠分析覆蓋率),自動化測試實施須要付出的工做時間革命性下降(不足原來付出時間的10%)。
其它能力 測試是個萬金油,高階一些的職位須要什麼都要會一些 ,由於越高階的職位須要解決的問題越綜合,須要打交道的人的種類越多。否則很容易變成你職業短板,作個list吧(必定不全):
很好的
項目管理能力,至少與開發經理能力同級,甚至要強於他。
必定的軟件架構能力。
必定的產品sense:能夠跟一個資深的產品經理可以順暢的交流,明白知道他爲何會這麼想,所要實現產品的意義,路徑;從產品質量方面的考慮要超過產品經理,給他輸出。
極好的溝通能力。
團隊管理能力(這個過重要)
目標管理能力
有一個好的內核
怎麼轉型/怎麼進階
其實不難,沒有什麼高端的方法。下面這4條就夠了,核心祕密就是堅持不懈。
1.熟悉你的被測系統,熟悉你的被測系統,熟悉你的被測系統。
可以從技術、業務角度作到對被測系統熟悉是作一個好QA的最基本職業素養,也是能力提高的最主要源泉。
自檢點:我可以畫出系統的架構圖麼?我可以讀懂開發的代碼麼?我熟悉常見的業務監控系統麼?熟悉日誌系統麼?知道開發是如何調試和定位問題的麼?給我一個線上問題,我能定位麼?我能給別人完整的介紹這個域的核心業務麼?我能本身直接動手發佈上線一個系統麼?知道如何回滾麼?灰度是如何作的? 我知道全部關鍵的技術點麼,如一個交易的冪等性是如何實現的?我在團隊中有:「這傢伙對系統最熟」的口碑麼?
若是自檢點所有是否認答案。。。 花一年時間把它全變成確定答案。這一過程,你必定被迫學到了不少不少,而且得到了極爲長足的成長,這是進階的必由之路,也是卡了不少人的地方。若是說作不到,後面不用看了,前面的也所有忘掉吧。
方法:通讀全部文檔,強迫本身讀代碼,積極參與開發全部討論,不懂的狂問,觀察開發如何上線,如何排查問題,模仿,學習,善用搜索引擎,總結。
2.找到問題解決問題,找到問題解決問題,找到問題解決問題。
你必定有一堆問題,若是你以爲本身作得挺好,沒有問題要解決,那必然是你本身有巨大的問題!
自檢點:找一支筆,寫出你以爲質量方面,你的team的10個問題,作排序。排出最重要的3個。
方法:找到top3的問題,選一個,列個接話,去解決。若是找不出來,使勁去觀察,而後去看看作的好的同行,比比你比人家差在哪裏。嘗試去解決這些問題,從小問題,可以見到效果的問題入手,設置一個時間點。你真正解決了5個以上問題之後,感受必定會有。
3.系統學習,系統學習,系統學習
自檢點:我係統的學過一門知識麼?我能講清楚我這麼操做,我寫的這行代碼的原理麼?
方法:從工做出發,確認你須要補足哪些知識。從網上找一個具體知識的學習路線圖,訂個計劃,照着來。 參加學習小組,找到幫你解決難題的人,多請他吃飯,多請教他。獲取知識後,立刻回到工做中作檢驗。仍是學以至用纔能有所增加。結合工做來系統學習的效果是最好的。
再舉個例子:
上家公司有個小夥伴(他應該也會泡這個社區),開始應聘的時候,他說熟悉jenkins,用的不少。因此第一份工做是:把全部CI的平常工做交給了他,並告知2個月內要所有搞定。
他一下懵逼了,原來那些不深刻的理解支撐不了工做要求。後來他天天死磕,看了jenkins全部的文檔(對,幾乎全部文檔通讀了一遍),翻了無數問題的解決帖子,
記錄了上百個問題解決的過程,寫了上百篇jenkins的小blog(如今還沒公佈出來)。
幾個月之後,他比我熟了,他的一項基礎能力成長爲:能夠獨自給一個小公司完整的搞定前端、後端、移動端的一整套CI解決方案。其實單憑這一套,就能找到不錯的工做了。這是依託工做,系統性學習的結果。
看到有同窗說要裸辭,去接受培訓。個人建議是,別這樣。裸辭你就失去了學以至用的陣地,失去了真正解決問題的機會,還失去了資金來源。依託工做,自主學習是王道。本身饒過不去坎,其實有不少網上教程和非脫產培訓班啊。
4.選擇有挑戰的團隊,選擇有挑戰的團隊
自檢點:在團隊裏有不少人比我強麼?周圍的同事都是我佩服的麼?我作的事兒有挑戰麼?
方法:若是這三點都是否認的,而且你處於職業生涯的早期。也許(只是也許),你該考慮一下換個團隊了)