2019軟體測試工程師技能樹知識全面梳理

2022-02-05 51Testing軟體測試網

軟體測試工程師是一個歷史很悠久的職位,可以說從有軟體開發這個行業以來,就開始有了軟體測試工程師的角色。隨著時代的發展,軟體測試工程師的角色和職責也在悄然發生著變化,從一開始單純的在瀑布式開發流程中擔任測試階段的執行者,到敏捷開發流程中QA(Quality Assurance)角色,為整個團隊和產品的質量負責,測試工程師的職責和邊界不斷的擴大。近年來網際網路行業的很多測試工程師被稱為是測試開發工程師,也就是要具備自動化測試和測試工具開發能力的測試工程師,可以說是對測試工程師的能力要求達到了一個新的高度。

  相信有過測試工作經驗的同學都會深有體會,不管是瀑布式還是agile模式,測試人員的工作總是被壓在產品發布的最後階段,整個團隊的壓力似乎都壓在測試工程師身上,沒有人會理會開發過程中產生的延誤,因為那已經過去,可以在retro meeting的時候diss,但是目前最重要的問題是完成產品的發布上線。所以在尋找測試工程師需要什麼技能之前,測試工程師的核心問題是什麼,這是我們要搞清楚的。

  這個問題相信大家都有所體會,商業社會追求的就是效率,甚至是極致的效率。測試工程師也不能例外,不管是叫測試工程師,QA,或者是聽著高大上的測試開發工程師,其實老闆們的目標是一致的,就是在儘可能少的投入,最大程度保證產品的質量。說得現實一點,你的薪資水平就取決於你能解決這個核心問題的能力。

  明確了我們的目標,我們所需要的能力,也是圍繞著這一個目標來設定的。

  按照筆者的經驗和理解,一個軟體測試工程師需要具備以下的技能:

測試設計能力

代碼能力

自動化測試技術

質量流程管理

行業技術知識

資料庫

業務知識

作為一名測試工程師,最基礎的能力應該就是根據產品來設計測試用例的能力。最基礎的能力往往也是最難做到精通的能力。要設計好的測試用例,需要對產品的特性和業務非常的熟悉,對用戶的使用場景有著系統化的思考。除此之外,還有一些科學的測試用例設計方法可以幫助我們設計規範化的用例,而不是僅僅根據經驗或者天馬行空的想法來設計用例。

  業界有一些經典的測試用例設計方法需要測試工程師掌握:

  上述的這些方法並不是教條,而是幫助我們理清測試用例設計的思路和提高效率的工具。

在傳統的思維中,對測試人員的代碼能力要求似乎不是很高,在業界確實也是這樣的。很多測試工程師基本上不具備代碼的能力,更多是測試的執行者。

  但是在當今這個時代下,要想突破傳統功能測試人員的天花板,代碼能力是必須的。

  具備代碼能力的測試工程師有這樣兩個優勢:

      閱讀開發代碼

  如果能夠具備閱讀開發代碼的能力,對於提高測試人員的效率是很有幫助的,它可以幫助我們做到這些一些事情

  通過開發修改的代碼預估影響的範圍,即測試的範圍

  參加技術評審,預估測試的風險,難點,重點

  通過代碼的邏輯設計測試用例,強化測試用例的覆蓋程度

  對缺陷進行初步的定位

  其實可以做到的事情還有很多,體現在測試過程的很多細節當中

  自動化測試的開發

  自動化測試是測試發展的方向,也是提高效率的有效方法。具備了代碼能力,你可以輕鬆的駕馭各種流行的自動化測試框架和用例開發。

接著上面關於自動化測試的討論。在目前的熱門公司的招聘中,自動化能力已經是必備的能力,也是大家很關注的一個領域。

  目前可以粗略的把自動化測試分為這麼幾類:

       UI自動化

  UI自動化實現的目標是模擬人在產品UI界面上的操作,從而觀察結果來完成測試的執行。UI自動化也可以從客戶端的形態上分為PC端和移動端的自動化測試,有這樣一些著名的自動化工具需要我們掌握:

  Selenium

  Selenium是一個很經典的WEB端產品的UI自動化工具,針對不同的開發語言都有很好的支持。它的原理簡單來說就是通過WebDriver把腳本產生的操作指令傳遞到瀏覽器,執行我們需要的操作並且獲取相應的反饋,在腳本中完成校驗。

  Appium

  從這個名字就可以看出這個工具和Selenium的相似之處。其實Appium可以理解為就是移動端的Selenium。同樣也是在移動端模擬人的操作來實現執行測試用例的目的。

  隨著移動網際網路時代的到來,更多的業務已經從PC的WEB端轉移到了移動端,移動端的自動化測試越來越重要。

  其實UI的自動化實現的原理都是很類似的,基本的邏輯都是:

  最後通過某種測試用例框架來管理測試用例,例如python的unittest,JAVA的TestNG,Ruby的respec等等。

  所以說了解了某一種UI自動化的框架和工具,很容易的就能觸類旁通的學習新的框架和工具。

  接口自動化

  在目前SaaS成為主流的情況下,API,即接口,成為了支撐業務的核心部分。前端頁面和App裡面的業務數據都是通過各種API與伺服器進行通信,從而實現業務功能。

  目前大多數的接口都是基於HTTP協議的,其中Restful的接口又佔大多數。而很多語言,例如Python和Ruby都有很好的庫來支持HTTP協議的請求,這就為我們設計接口自動化提供了很好的基礎。

  回到我們的核心問題,投入產出比的衡量。UI的自動化無論是從實現的成本還是維護的成本來說都是巨大的,所以業界越來越把重心放到了接口層的自動化實現上。

  接口的自動化具備這樣的優勢:

運行效率高

開發成本低

維護成本低

可以與開發代碼同步開發

  接口自動化的實現思路也是簡單明了的,那就是模擬瀏覽器,發送HTTP請求來實現對接口的調用,然後比較返回與期望值,達到驗證結果的目的。

  當然,要設計一套真正高效的接口自動化框架也是不容易的。這裡面涉及到如何提高用例的開發效率,降低開發維護成本等關鍵問題。同時還可以把接口測試與性能測試結合起來,豐富接口自動化測試的內涵。

在敏捷開發的流程中,測試工程師有了一個新的定義:Quality Assurance Engineer。而測試的執行僅僅是職責中的一部分,更為重要的是要為整個團隊的產品質量負責。

  從整個sprint的周期來看,QA工程師都要始終如一的貫徹質量保證的意識,與開發的關係也從早期的發現bug,轉變為如何幫助開發團隊一起提高產品的質量。同時還要和產品團隊密切的合作,在需求的分析階段就介入,分析質量保證工作如何規劃和設計,而不是在產品發布前的測試執行階段才介入。

  這個裡面還包含很多Soft skill的要求,包括如何與團隊合作,溝通等等,這也是敏捷開發模式的關鍵之一。

這一部分內容其實涵蓋的內容是非常豐富的,就以網際網路行業舉例吧。

  對於一個網際網路產品,測試工程師需要了解的甚至是精通的知識是很多的,從前端頁面的技術棧,API的設計,後端伺服器的設計,後面會專門提到的資料庫,還有整個服務的架構等等,測試工程師都需要有所了解。

  針對這個問題,其實有一個非常好的問題可以幫助大家去梳理涉及到的知識,這就是:

從在瀏覽器的輸入框輸入一個網址,到看到網頁的內容,這個過程中發生了什麼?

  回答這個問題的深度和廣度,基本就能反映一個測試工程師對於網際網路產品技術的掌握情況。

  在這裡呢,我簡單的羅列一些涉及到的技術和概念,這些內容對於我們測試產品,都是非常有幫助的。

      DNS

  TCP/IP

  HTTP

  SSL

  Restful

  HTML

  DOM

  CSS

  Render

  Xpath

  伺服器

  nginx

  SQL

  Cookie&Session

  XSS,CSRF這裡僅僅是涉及到一部分內容,具體的內容可以根據工作中遇到的場景去深入學習和了解。

之所以把資料庫單獨列出來,是因為資料庫的知識對於當今的很多產品都是非常核心的內容。

  不管是在手動測試還是自動化測試中,都有需要到資料庫進行數據校驗的時候。

  目前主要使用的資料庫可以分為兩類:

  關係型資料庫

  關係型資料庫是最常見的資料庫類型,這類資料庫通過RDBMS資料庫程序來進行管理和使用,常見的有SQL Server, MySQL等等。

  關係型資料庫中強調一個事務(Transaction)的概念。所謂事務是用戶定義的一個資料庫操作系列,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作單位。例如在關係資料庫中,一個事務可以是一條SQL語句、一組SQL語句或整個程序。

  事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

原子性(Atomicity):事務作為一個整體被執行,包含在其中的對資料庫的操作要麼全部被執行,要麼都不執行。

一致性(Consistency):事務應確保資料庫的狀態從一個一致狀態轉變為另一個一致狀態。一致狀態的含義是資料庫中的數據應滿足完整性約束。

隔離性(Isolation):多個事務並發執行時,一個事務的執行不應影響其他事務的執行。

持久性(Durability):一個事務一旦提交,他對資料庫的修改應該永久保存在資料庫中。

  對於實際的應用來說,SQL語言是必須要掌握的。能夠通過SQL語句在資料庫中找到需要的數據,是測試工程師必備的技能。SQL語句的語法大體上比較類似,在一些細節上不同的RDBMS會有些許的差別。

  對於自動化實現來說,在自動化測試中通過訪問資料庫來獲得期望值也是很常見的場景。不同的語言都有訪問資料庫的庫,整體來說應用也很簡單。

  非關係型資料庫

  隨著網際網路中大量的非結構化數據的產生,例如社交網絡等等應用,用戶的個人信息,社交網絡,地理位置,用戶生成的數據和用戶操作日誌已經正在以幾何級數的速率增加,同時還面臨大量的數據挖掘工作,傳統的關係型資料庫已經無法滿足。所以NoSQL漸漸的發展了起來。

  NoSQL最突出的特點就是數據的非結構化,通俗的講,就是數據不再是以列和行這樣的形式存儲的。

  NoSQL存儲數據的方式很多:值對存儲,列存儲,文檔存儲。

  例如比較常見的MongoDB就是將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。欄位值可以包含其他文檔,數組及文檔數組。

  RDBMS vs NoSQL

  RDBMS

      高度組織化結構化數據

  結構化查詢語言(SQL) (SQL)

  數據和關係都存儲在單獨的表中。

  數據操縱語言,數據定義語言

  嚴格的一致性

  基礎事務

  NoSQL

      代表著不僅僅是SQL

  沒有聲明性查詢語言

  沒有預定義的模式:鍵 - 值對存儲,列存儲,文檔存儲,圖形資料庫

  最終一致性,而非ACID屬性

  非結構化和不可預知的數據

  CAP定理

  高性能,高可用性和可伸縮性

對於測試工程師來說,所測試產品的業務知識也是非常重要的。

  一個測試工程師可能已經具備了上述的所有技能,但是怎麼把這些技能用來解決我們最先提到的軟體測試的核心問題呢?這個裡面的關鍵,或者說中心點,就是你所測試的產品的業務。

  測試的方法,規劃,實施方法都是多種多樣的,如果在這些方法中進行選擇,所依賴的正是對產品的業務的深刻理解。

  這裡的產品業務不僅僅指產品的特性,同時還包括了產品的用戶特徵,用戶的使用習慣,以及由此帶來的對產品的流量趨勢。也可以說,測試人員必須要站在用戶的角度來分析產品,而不是產品開發人員的角度。

  測試人員還需要找到產品的核心功能和核心業務,通過這樣的分析來進行測試優先級的劃分,以及缺陷的定級。同時對於自動化測試的規劃和架構也有著重要的影響。例如在自動化測試中要首先覆蓋那些核心的業務和功能,同時根據業務的特性,用自動化的方法去模擬用戶的使用場景,把有限的自動化資源投入到最關鍵的部分。

  這一塊技能聽起來可能很虛,好像沒有什麼具體的知識點,但是在不斷的工作和總結中,優秀的測試工程師是能夠總結出一套符合某一類產品的測試方法的,甚至還可以提煉出一些更具備通用性的best practice,用到不同的產品中。

或者這樣一篇短短的文章無法涵蓋軟體測試的內涵,但是筆者也只是想拋磚引玉,讓讀者能夠通過這樣一種不能算全面的梳理,結合自己的工作經驗,對自己所從事的軟體測試工作有一個更深的理解。

  筆者計劃根據這篇文章所列出的技能樹,分別寫文章進行更加細緻的梳理和總結,希望能夠和各位同行一起學習,一起進步,同時非常歡迎大家指正我的錯誤和不足。

相關焦點

  • 一文全面梳理測試工程師的7大技能點
    按照筆者的經驗和理解,一個軟體測試工程師需要具備以下的技能:測試設計能力代碼能力自動化測試技術質量流程管理行業技術知識資料庫業務知識作為一名測試工程師,最基礎的能力應該就是根據產品來設計測試用例的能力。
  • 十年測試老兵教你構建軟體測試知識體系和技能樹(附思維導圖)
    想成為一名合格的軟體測試工程師,和其他任何 IT 工程師一樣,在工作中紮實的計算機基礎知識都是至關重要的。無論是從個人的職業發展角度,還是從公司招聘候選人的角度,計算機基礎知識都是必備條件和必考內容。某種程度上說,計算機基礎知識掌握的程度,決定了軟體測試工作的優秀程度,也決定了軟體測試職業生涯的高度。
  • 軟體測試工程師必讀——軟體測試工程師的職業規劃
    由於新時代下國內軟體測試行業目前的發展迅速、需求旺盛,在國內的軟體測試職位晉升一般要比國外快,但因行業本身太年輕,大家對軟體測試中軟體測試職業的發展了解不夠,從而導致許多有志在此發展的年輕人舉步不前。所以下面介紹一下海外公司成熟的軟體測試行業職位分布情況,我國一些在軟體測試行業中處於前端的公司與之也相仿,這可以作為軟體測試工程師的參考,給新人一個導向。
  • 軟體測試工程師的6+1種技能
    如此一個面面俱到的崗位,他需要具備的技能到底有哪些呢?曾經接觸過一些軟體測試工程師,他們幹了一段時間軟體測試工作後返回去又開始去做開發工作了,問他們為啥?答案是軟體測試工作太難了,開發是順向思維,而測試是逆向思維,老要找一些稀奇古怪的思路去操作軟體。
  • 軟體測試工程師職業規劃
    第三階段:(高級測試工程師)程序分析員   自身條件:有3~4年經驗的測試工程師或程式設計師。具有一定的行業業務知識,儲備系統分析員的能力。  具體工作:幫助開發或維護測試或編程標準與過程,分析軟體需求,獲得測試需求。確定測試需求相應的測試方法,獲得測試策略方案。
  • 什麼是軟體測試工程師呢?
    近年來,在IT行業衍生出很多新的職業,軟體測試工程師就是其中一種。那什麼是軟體測試工程師呢?軟體測試工程師是指理解產品的功能要求,並對其進行測試,檢查軟體有沒有錯誤,決定軟體是否具有穩定性,寫出相應的測試規範和測試用例的專門工作人員。簡單來說,軟體測試工程師在一家軟體企業擔任的是「質量管理」的角色,需要及時糾錯及指正,確保產品的正常運作。
  • 【職業解讀】軟體測試工程師
    行業知識背景1、測試崗位對知識的廣度有一定的需求:從OS到伺服器到程式語言、網絡,甚至算法、複雜度,測試開發工程師要求具備開發能力。2、測試開發工程師要求具備開發經驗和測試經驗,以及溝通能力等。專業知識背景測試開發工程師一般為計算機相關專業本科及以上學歷畢業,如計算機科學、軟體工程、網絡通信工程等,這些專業對於計算機及網絡通信原理比較熟悉,具有一定優勢。其他專業的學生在通過自學後也可以從事。專業要求計算機科學與技術、軟體工程。
  • 軟體測試工程師需要掌握哪些技能
    軟體測試工程師需要掌握哪些技能大家都知道功能測試是測試工程師的基本功,今天就來和大家說說功能測試需要掌握哪些技能2.查看日誌如何寫好測試用例在測試過程中很重要的一類文檔,它是測試工作的核心、是在測試時輸入輸出的標準、是軟體需求的具體對照。編寫測試用例,是測試人員的基本功,但是真正能寫好的人並不多。
  • 軟體測試工程師同行工資居然已經達到這個水平了?
    再往上面走,就是我們的自動化/性能測試工程師。3-5年左右的工作經驗可以達到15-25K這樣子的一個範圍。如果有5-8年軟體測試相關技術經驗,那就是25K往上走了,如果能達到測試總監,就是30K以上。其實在我們軟體測試行業中間,更關注的是你的技能(技術)你的技術越高,你對應的一個薪資報酬也會越多。
  • 如何成為軟體自動化測試工程師
    由於,崗位需求量大,薪資高的特點,軟體自動化測試工程師已經是當下最熱門的職業之一。如何成為軟體自動化測試工程師呢?只要學習和掌握了相關的技能,就可以成為軟體自動化測試工程師。那麼,具體需要掌握哪些技能呢?不同類型的軟體自動化測試,對於崗位所需的技能要求各不相同。
  • 射頻測試工程師,這五大技能你不能不知!
    打開APP 射頻測試工程師,這五大技能你不能不知!     以下是射頻測試工程師所需具備的五大技能:   一、RF 知識>   對於大多數求職來說,他們可能只掌握基礎的 RF 知識,但是一般射頻測試工程師應該對蜂窩或 Wi-Fi 技術具有深入的了解,包括如何測量和描述各種類型的光譜等等。
  • 想成為一名軟體測試工程師需要認證嗎?
    軟體測試工程師是一個崗位,其實這個崗位是不需要有證上崗的,只要你掌握了做軟體測試的相關專業知識和技術,你就能成為一名軟體測試工程師。當然也有比較權威的軟體測試工程師認證,比如:ISTQB。那麼做軟體測試工程師都需要掌握哪些知識和技能呢?1.計算機基礎知識想成為一名軟體測試工程師,首先得對計算機基礎知識有所了解,比如計算機的工作原理、計算機作業系統類型、計算機的軟體程序、作業系統的接口等!
  • 軟體工程師必不可少的5種基本技能
    確保將這些技能添加到您的武器庫中Photo by Rich Tervet on Unsplash如今,軟體工程師需要掌握多種技能。 我們都知道明顯的那些。 在該列表的頂部,您會發現需要了解如何編程的知識,因此需要了解一種程式語言。
  • 一名優秀的射頻測試工程師需要掌握這五大技能
    有人說,做射頻前景不好,測試崗位更是不值錢,但據雷鋒網了解,這一崗位在通信行業甚至是軍工航天領域的需求非常大,根據 Glassdoor 的統計,射頻測試工程師的平均年薪達到了 77300 美元。那麼,一名合格的射頻測試工程師應具備哪些技能呢?
  • 軟體測試工程師的工作累嗎
    軟體測試工程師門檻低,薪資較高,簡單易學,是很多IT小白轉行的主要選擇。那麼軟體測試工程師的工作累嗎?U妹今天就來帶大家了解一下。軟體測試工程師一般是正常上班族的工作8小時,雙休的作息,加班往往也很少,只要按時按量完成工作就可以。軟體測試工作也並不需要太多腦力,只要按照經驗和方法去進行測試就可以了。所以其實軟體測試工作是不太累的。另外軟體測試人員把測試出來的bug提交後,在軟體著急上線的情況下,軟體開發工程師往往要加班修改代碼。所以軟體測試人員加班的情況下,軟體開發人員一般要陪同。
  • 軟體測試工程師的自我認識和定位
    在談論軟體測試之前,我作為一個有一定工作經驗的工程師,我想發表一些自己的想法和觀點,這些觀點雖然不是完全正確的,但是確實是我在工作中不斷的去沉澱,去理解,去思考才得來的一些看法。…看完這些,希望你能從中獲得一些想要的答案軟體測試工程師(Software Testing Engineer)指理解產品的功能要求,並對其進行測試,檢查軟體有沒有缺陷(Bug),測試軟體是否具有穩定性(Robustness)、安全性、易操作性等性能,寫出相應的測試規範和測試用例的專門工作人員。軟體測試就是使用人工或自動手段,來運行或測試某個系統的過程。
  • 軟體測試工程師前景分析
    在軟體項目開展過程中,程序質量管理、程序的正常運營以及應用程式在開發周期中的貫穿都要軟體測試工程師來完成。   根據頂測科技相關資料統計,目前在國內軟體從業人員中,真正等擔當軟體測試職位的人員不足10%,而且人才缺口比較大並成逐年增長的趨勢,軟體測試工程師人才的極度匱乏為許多IT企業的軟體項目帶來了消極因素。
  • ISTQB軟體測試認證介紹
    其主要負責制訂和推廣國際通用資質認證的「軟體測試工程師認證」( ISTQB® Certified Tester ) 項目。該項目由ISTQB® 授權各國分會組織本國的軟體測試工程師的認證,並接受ISTQB® 質量監控,合格後頒發全球通用的軟體測試工程師資格證書。ISTQB® 目前擁有58個分會,覆蓋包括美國、德國、英國、法國、印度等在內的120多個國家和地區。
  • 初級軟體測試工程師工資(薪資待遇)一般是多少?
    這是阿沐從招聘網站上,截取的面試崗位信息。這兩個都是初級軟體測試工程師,初級測試工程師有一個範圍5-10K。我們想要更全面的去把控軟體的質量,那我們就要用各種類型的測試方法,來對軟體進行測試。因此,功能測試、性能測試、安全測試用到的測試方法與測試工具也是不一樣的。要提升效率就是我們的自動化測試,自動化測試也有很多不同類型的測試框架,有UI自動化有接口自動化,那麼這一些測試策略,其實也就是你技能不斷的提升增長的一個過程。
  • 得軟體測試的門檻低?工程師有話說
    打開APP 得軟體測試的門檻低?工程師有話說 啄木鳥學院 發表於 2021-01-07 10:55:08 隨著網際網路產品功能的日漸複雜,企業越來越重視中高級軟體測試工程師在研發團隊中的比重,高需求促使轉行的人也越來越多,可能很多人都覺得軟體測試的門檻很低,很容易進入到這個行業