成為一個優秀的測試工程師需要具備哪些知識和經驗?


根據我的觀察,優秀的測試人員可以做的事情可以包括如下3點:

  1. 由單純的測試變成項目質量保證工作
  2. 持續集成探索和推動和自動化測試技術研究
  3. 測試相關工具的開發

1、我們先來講第一點,由單純的測試變成項目質量保證工作

測試,從狹義的角度來講,包括如下這些環節:

測試計劃和測試用例編寫-測試執行-質量報告書寫

測試人員一般會在開發階段就進行測試計劃和測試用例的編寫和準備工作;在測試階段,我們一般先會做功能測試,等項目功能基本穩定,bug較少了,就開始做兼容性測試、性能測試、安全性測試。兼容性測試保證了產品在多瀏覽器、APP在產品在不同機型下的兼容性;性能測試保證了產品在海量用戶大流量下的服務能力;安全測試能發現產品可能會被攻擊的各個隱患。做完了這些測試以後,人員發布質量報告,產品上線。

不過,優秀的測試人員需要向上游和下游拓展測試的領域,把自己放在「質量保障」的角色上,推動整個項目組一起保證質量,上游的工作包括:

  1. 在產品剛立項、進行需求確認的時候,測試人員就會參與進去,仔細地Review需求,看需求是不是完整、有沒有漏洞,這個時候還沒有進入正式開發,修改需求對於項目組來說代價是最少的。在這個環節,測試人員憑藉縝密的推演、發散性的思維,往往能發現很多需求的漏洞,提高了項目的整體效率。
  2. 另外,測試人員在完成測試計劃、測試用例以後,會邀請開發、策劃一起來評審測試用例,在這個環節,由於測試人員把每個需求如何細化測試都體現在了用例裡面,就相當於再次把需求分析了個透,往往還能發現很多需求的漏洞。這也是提早發現需求漏洞的有效環節。
  3. 我們知道,代碼的質量歸根結底是由開發保證的,測試做的工作,只是發現Bug讓開發修復。如果一個花瓶,一開始就是很完美的;另一花瓶經過了各種修補,看起來比較完美,大家覺得哪個花瓶比較好?當然是第一個花瓶。所以,測試人員應該站在質量保障的立場,想辦法跟項目組溝通、給開發提供工具,讓開發自己把質量保障工作做好。比較可行的一些方式是:提供一些手工用例讓開發自測;給一些自動化的介面和UI測試代碼讓開發自測;部署靜態代碼檢查工具,並推動開發分析和修改發現的問題;有一些做得好的項目已經實現了持續集成,也可以嘗試。

下游的工作包括:

  1. 在產品完成了測試以後,就是發布的環節了,測試人員在發布的環節也能發揮作用,首先,測試人員為了部署測試環境,研究自動化部署的技術,可以把上線部署的環節也自動化,以前需要2個小時的部署環節壓縮到半個小時甚至更少,而且更加準確可靠。
  2. 如果有些版本修改比較多,上線的質量風險大,測試人員會跟產品一起制定灰度發布的方案並在技術上進行實現,讓版本先面向一小部分用戶開放,如果發現Bug了,影響的用戶也比較小,Bug改掉以後,再逐漸擴大用戶範圍。

另外,優秀的測試人員還會發動項目組的其他人一起來保證項目質量,比如推動開發進行代碼Review;引入冒煙自測流程,讓開發先自測以後再提交給測試做冒煙測試;通過在項目組分析Bug,讓開發提高自測,降低Bug數量等;引入策劃、交互、視覺在測試階段進行走查,等等各種措施。

2、持續集成探索和自動化測試技術研究

業界都在說持續集成,那持續集成究竟是個什麼鬼呢?

持續集成原本的意思是讓開發每提交一次代碼就自動化測試一次,如果自動化測試發現問題了,測試用例就會失敗,開發就會馬上發現這個失敗,並修改代碼。

要做到持續集成可有很多工作要做。

  1. 首先就是編譯環節,要把所有編譯的環節都自動化起來,開發每次提交代碼都能進行自動編譯;
  2. 編譯完成後,就是靜態代碼檢查的環節,通過靜態代碼檢查的工具檢查代碼的問題,比如,資料庫連接池沒有釋放,參數不匹配等。
  3. 靜態代碼檢查完成後,就是單元測試了,單元測試用例一般是開發人員或者測試人員編寫,或者開發和測試合作編寫,保證的是開發內部函數的正確性。一個健康的自動化測試方案中,單元測試用例的佔比是最高的。
  4. 然後就是介面測試,一般保證的是後端開發提供給前端開發的HTTP介面,介面一般也比較穩定,用例比較容易維護,所以,介面測試的自動化佔比也可以做到很高。
  5. 在介面測試的上層就是針對用戶界面的UI測試了,就像測試人員手工執行一樣,UI自動化測試能操作頁面的元素,完成自動化。不過,由於用戶界面常常要重構,所以我們常常會控制UI自動化測試的規模,只覆蓋主幹的用例。

優秀的測試人員可以把自己的工作盡量自動化,並用持續集成框架串起來,提高工作效率和質量。

3、測試相關工具的開發

優秀的測試人員會開發其他好用、趁手的工具來提高工作效率,比如數據自動生成、報表自動生成、報bug工具等。

其實歸根結底就是一句話:測試人員最核心的工作就是保障項目的質量,各類測試流程、技術、工具和平台的發展讓我們可以更好地保證項目的質量。


說下知識方面吧,首先計算機基礎一定要好!計算機基礎一定要好!計算機基礎一定要好!

主要幾個方面一定要有一定的深刻理解:

1.計算機網路方面:tcp/ip,通信協議(http,soap等)

2.操作系統:Linux,如果是移動端也要看下相關知識,學好Linux其他系統學起來會很快

3.編程語言:不要求你像開發那樣多熟練掌握,但最起碼編程思想、python等腳本語言要掌握

不要信什麼掌握自動化工具或性能測試工具就能高薪就業,工具只是輔助而已,重要的是計算機基礎知識和你的測試思路,懂原理才能進行更好的測試,否則測出問題一是不好排查,二是測試數據的真實性有可能都說服不了自己,就不要怪開發看測試報告鄙視你了。

另外,測試基礎一定要熟練掌握,最起碼做到實際工作中可以隨意運用的程度,這方面建議報考下國家軟考的中級測試工程師考試,這證沒啥用,但學習下來對軟體測試的系統理解會有很大提升。

再者多多參加線下沙龍,關注行業動態,多和同行交流,不要一問自動化就qtp,一問性能測試久loadrunner


對於軟體測試有興趣的人,可能想知道 軟體測試需要學什麼 ,學的東西很多,話題太大,這裡就不展開技術方向的討論了。

1.軟體開發技術:程序設計語言有很多,而精通其中一門,能看懂代碼,可以幫助你更好的輔助你的測試工作,同時也可以也會定位缺陷,幫助開發人員更好的改造。在日常的測試工作中,想要編寫小工具以此來輔助測試,也是要一定的軟體開發基礎。像測試過程管理工具、測試用例管理工具、缺陷跟蹤工具、性能檢測工具等等。

2.網路技術:軟體是從字元界面產品發展到圖形界面產品,從單機版到網路版(C/S結構和B/S結構),經歷了一個漫長的過程。計算機網路的出現,改變了現實社會中人們的相互溝通方式,把一個小小的地球變成了一個地球村。所以,目前所有的軟體產品都從傳統的單機模式向網路模式轉變,網路技術就更加關鍵。

3.資料庫技術:在目前的軟體產品中,底層架構中就需要有資料庫進行數據存儲,那麼對數據的增刪改查的操作是軟體測試人員必須要必備的技能。資料庫測試也是測試技術的一種。

4.測試與質量保證技術:掌握軟體測試自動化工具,理解軟體測試自動化測試框架,能夠學會如何進行測試項目管理、回歸測試以及性能測試,能夠把性能缺陷進行定位。

5.行業知識:目前軟體測試涉及的行業是多種多樣的,從金融產品到電信、遊戲、汽車、殺毒、網站、企業管理、學校教育、本地化產品等等,各行各業的軟體產品都需要大量的測試,所以相關行業知識的儲備也是必須的。

除了要具備上面列舉的知識之外,職場規範也是需要注意的,無論在哪個公司都要有效的溝通。換句話就是,不止會做,還得會配合別人做。細節問題,歡迎私聊討論。


你需要如下技能:

1:計算機專業技能

(1)測試專業技能

(2)軟體編程技能

(3) 網路、操作系統、資料庫、中間件等知識:

2:行業知識

3:個人素養


我認為成為優秀的軟體測試最核心的是為你所負發布的版本負責。

1.在測試開始之前,一定要明白整個產品的業務邏輯,核心的用戶故事,用戶的操作,而這樣的操作到底會對系統帶來什麼樣的影響。最好是把自己當做使用這個系統的人,才會理解系統。

2.在測試中,明白測試的責任並不是提bug,也不是在意這些bug研發到底解決與否,只要研發給解決時限和解決方案,發給產品,研發,上級領導確認即可。這樣會大程度的避免與開發的矛盾。其實測試的核心任務並不是提bug,而是模擬用戶的各種常用的場景。一定要明白後端存儲,系統與系統之間的交互,日誌記錄,資料庫每個欄位的變化。

3.版本發布之後,注意發布版本之後系統變化,所修復的bug到底生效沒,核心流程受影響沒,不要版本發布了就離開。如果用戶反饋bug,不要把事情丟給研發或者運維,版本經你手發布出去,要為發布的版本負責,極力復現用戶使用場景,督促研發修改,運維發布,直至最終問題被解決。有bug其實是很正常的事情,測試擔當責任無可厚非,但是最終要的是解決客戶的問題。


@錢蓓蕾 錢總監的回復是基於測試理論的知識(需要花點時間,結合自己工作實踐),這邊我作為開發(和測試打交道是家常便飯),從實踐角度,給大家講講我心目中,優秀的測試工程師應該具備哪些技能and 素質?(非測試崗,有不足地方,煩請指正)

【技能】

1) 測試用例-xmind

一個好的思維導圖,可以涵蓋所有的測試路徑。(不要期待excel可以解決戰鬥,因為Excel是表哥,更適合報表,而思維導圖是樹狀,更適合來表示測試路徑的N種可能性)

比如,騰訊內部的測試用例基本採用思維導圖的方式來管理。

2) 自動化腳本- python

首先,自動化可以來做壓力測試,掌握一門腳本語言是必要的。而目前,自動化測試可能跑在多種系統上,比如window,mac,android,ios等,測試工作內容在變(跳槽頻率較高),跨平台是必要的。

比如,我們有一個python腳本專門用來測試app的fps。

3) 自動單元測試

「別指望開發做好單元測試」,一個既「運動員」又當「裁判」,靠譜嗎?

反正,目前,我還沒見過靠譜的,更多的是測試再幫忙做一些單元測試工具,但前提條件是足夠通用。

比如,我們app有廣告系統,涉及收入,至關年終kpi考核(一年收入上百億的產品,隨便一個版本疏忽,可能影響收入上百萬,神經高度繃緊)。所以,我們會收集廣告的規則,寫了一套bvt測試工具,用來驗證廣告系統是否OK。

4) bug管理工具-tapd

為什麼我不推薦禪道,試試騰訊開放的tapd就知道,這二者相差十萬八千里(傳統廠商與互聯網公司的區別)。

比如,騰訊內部使用tapd來管理(除了bug還可以做許多事情)

【素質】

1) 刨根問底

需求功能點,實現邏輯,參數設定,框架設計,乃至查閱代碼等等。

比如,我們的測試會在需求評審、用例評審、提測前等階段,詳細了解整個需求的設計和實現方案。這裡面與測試交流最多是開發。一般情況下,很多是基於線下溝通來了解細節的。

2) 輕重緩急

對事不對人,分事情當然要有輕重緩急。這也要與刨根問底相結合,因為不是所有的事情,我們都需要去追問。重點關注核心問題。

比如,我們app新支持h5離線緩存的能力,測試首先質疑我們的問題在於覆蓋率問題(機型/系統兼容性),我覺得這個蠻重要的,因為如果覆蓋面不廣,那麼做那麼多的工作也沒意義。

3) 風險意識

風險評估貫穿整個項目周期。這裡的風險更多集中在功能點異常case上。

比如,機型/系統兼容性、弱網路條件、性能瓶頸、壓力測試、告警提示等。

4) 主導者

在不少公司里,測試一直被當做邊緣崗位,一般都是按照部門負責人或是項目經理的安排,來被動執行測試工作。其實,這樣反而不會把事情做好。我們希望更多地起在項目質量環節起主導者作用,同項目經理和開發緊密配合。

比如,開發完成後,經常存在產品體驗不足、流程不順暢的地方。所以,測試要求我們引入show case環節。要求項目經理、產品、開發、設計師等一起來體驗功能,對功能提出問題點,保證發布後的產品質量。

4) 復盤

每次項目發布後,可以回歸整個測試流程,發現這個過程中出現的問題,想出一些問題的解決辦法,用來改進整個測試or開發流程。

比如,我們會收集re-open的bug,找出是測試用例不足還是開發不合理修改帶來的問題,從而想辦法去減少此類問題的出現幾率。

好吧,先寫到這!


簡單說幾個點:

1. 軟體工程的系統知識

2. 測試理論知識

3. 伺服器知識

4. DB知識

5. 簡單的網路基礎

6. 基本的腳本知識

關於能力:

1. 問題定位能力

2. 問題跟進能力

3. 嚴謹的思維

4. 問題歸類總結能力

5. 自驅動、學習能力

其他的看樓上其他同學的回答~~~~

不多說~~~~


兩個方面一個是人格品質、一個是技術實力。

知乎專欄:有道測試 中有兩篇文章,測試人的自我修養 或許可以解答你的問題。


門外漢路過,需要多多向各位大神學習


還是多做少看吧,有方法可以看,但是別光看不練。


想成為優秀的測試工程師,你首先要明確測試工程師的使命是什麼,為什麼不是開發工程師。首先,測試工程師就是來保證代碼和產品質量的,編寫測試用例,測試、發現BUG,和開發溝通修改代碼,最終目的就是為了優化代碼,優化產品結構來降低產品故障,提升產品性能,達到保證產品質量的目的。

細化來說,首先的靜態分析,代碼的人工走查非常有必要,測試工程師之間可以相互學習相互促進。另外,如果使用工具,還可以對代碼進行規則檢查,數據流分析(直接發現BUG)、以及各種度量分析、目前,很流行和持續集成系統進行集成,進行持續測試。

其次是單元測試,集成測試,核心是開發測試用例和測試驅動、尤其是涉及回歸測試的時候,人工來完成這部分工作,工作量之大,會佔非常大的時間。這裡也是開發人員吐槽測試耗時又看不到多少效果的核心地方。目前國內慢慢在普及自動化測試工具了。產品周期更新加快,手動測試時間來不及。

最後面就是系統級別的測試。核心在Debug和性能優化。

任何一種事業,都是需要堅持不懈的努力去做的,知識和經驗上的匱乏,隨著時間的推移,謾罵都會得到填補,核心是,是否具備一顆自我驅動的心,讓你能一直保持激情,去持續不斷的學習新東西。說起來容易,做起來太難


入門容易,精通難,雖然現在在做性能測試在,但是還是感覺自己是個門外漢,總想著要學習確一直沒有付出行動,好可怕這樣的自己


壓力好大,你們計算機基礎都這麼好,我只是個屌絲。最先做到干一行愛一行吧,有激情有學習的東西,其他的知識都是可以學習的


推薦閱讀:

計算機網路該怎麼學?表示不管看自頂向下,還是謝希仁,都是一個感覺:太抽象,看完就忘?
對於程序猿來說,代碼和妹子哪個重要?
程序員不想找有壓力的工作,心態是不是有問題了?
如何使 Windows XP 像 Windows 7 那樣自動換桌面背景?

TAG:測試 | 軟體測試 | 自動化測試 | IT行業 | 測試工程師 |