測試工程師
測試技術經過這麼多年的發展,在大學已經有軟體測試的專業,在很多年前就有軟體測試研究方向。我讀碩士研究生時的研究方向就是網路通訊協定的一致性測試。在這裡只是介紹測試職位在實際工作中的具體工作是什麼。一個測試工程師的工作大致上是在完全理解軟體的業務需求後根據每個功能點和它的分類;編寫功能測試例,將測試例分組歸類成測試套件。測試例是測試文檔中最基礎的組成部門,測試工程師根據測試例去測試軟體,測試的軟體是在經過開發部門單元測試後提交給測試部門用來做整合測試和系統測試。隨後咱們介紹一下測試工作的種類:單元測試、整合測試、系統測試、迴歸測試、效能測試、安全性測試。測試軟體可以是人工操作通過滑鼠點擊鍵盤錄入來實現,也可以編寫測試指令碼,或者在人工操作測試的過程中通過專業測試軟體錄製測試指令碼,然後再手工修改部分代碼,以後就可以自動執行測試,不用再手工測試。提高了測試效率和測試的準確性。因為一個軟體的測試例在編寫的時候軟體業務需求、技術需求等文檔基本都已定稿,所以測試文檔確定以後是很少修改或變更。測試指令碼或測試程式也變化不大,每次的迴歸測試如果都是手工測試那麼工作量可想而知,迴歸測試一般都是由測試指令碼來自動化的測試。因為編寫的測試指令碼最終運行後要給出測試結果,一般的測試結果分三類:通過、失敗、未決。
關於測試的分類一般分為以下:單元測試、整合測試、系統測試、迴歸測試、效能測試、安全性測試。單位測試一般有開發部門自己完成,主要測試自己編寫的代碼實現的功能、組件介面是否符合設計文檔,輸入輸出是否正確。在完成單元測試後提交給測試部門。管理規範的公司或者通過CMM3級的組織都會有代碼管理工具如StarTeam SourceSafe等。測試部門會在開發部門提交代碼後下載最新版的代碼,集中編譯上傳到測試環境中,進行整合測試。整合測試用來測試軟體的各組成部分是否能按設計要求組合在一起實現預定的功能,做各模組聯調測試,檢查各模組的介面是否一致、各模組間的資料流和控制硫是否按照設計實現其功能、以及結果的正確性驗證,可以是整個產品的整合測試,也可以是大模組的整合測試。整合測試之後就是系統測試:它是針對整個產品的全面測試,既包含各模組的驗證性測試(驗證前兩個階段測試的正確性)和功能性(產品提交個使用者的功能)測試,又包括對整個產品的健壯性、安全性、可維護性及各種績效參數的測試。迴歸測試是當軟體需求發生變化,程式碼也完成更新,這時要測試一下修改或新增的代碼對已有未變化的功能是否有影響。防止修改了舊bug增加了新bug。或者增加了新功能原有的功能卻不能用了!效能測試一般會測試軟體並發使用者數,回應時間,大資料的處理,長交易處理能力,宕機恢複能力等一般會使用LoadRunner。安全性測試主要基於工具分析和掃描,檢查是否存在危險如:注入攻擊、拒絕服務、配置操縱、存取控制、日誌偽造等等。
產品測試經理
屬於測試工程師的老闆或上級,具有豐富的產品測試經驗和需求領悟能力。曾經的一個測試事故讓我對產品測試經理的能力有了非常深的印象。有一次系統新增加了一項與之前功能相關且名稱相似,測試工程師沒有理解業務需求編寫出來的測試例幾乎沒有覆蓋新增加的功能,被產品測試經理檢查出並糾正。敏銳的洞察力和良好的分析、研判能力來分析市場發展趨勢,可以提出軟體的發展或進步方向。把握使用者需求,完成需求分析到測試轉變,對產品設計的生機和改進要能提出關鍵的意見。負責或配合其他部門,持續改善產品。負責測試團隊的日常管理工作。
測試類別職位的特點
職位的重要性和地位在穩步上升,與開發類平分秋色。在前些年人們往往看不起測試職位,一方面它位於整個項目的下遊,如果沒有開發就沒有測試,測試總是跟在開發後面。另一方面軟體系統的複雜性和應用環境簡單,測試在項目起的作用較小。但是這兩方面隨著開發技術的發展尤其測試驅動開發TDD,還有是人們對軟體品質的關注使得測試逐漸和開發地位基本持平。我原來在的單位技術性的員工有100多,開發技術部的有40人,項目部30人,測試部30人。
且職業壽命在積累中逐漸增長類似醫師。自動化測試、一致性測試、互操作測試等等技術的發展使測試工程師在工作中不斷積累了經驗,不像開發類的技術和工具都不斷更新。而測試類別的工程越來越值錢,越老對軟體的理解越豐富。
在軟體業技術是非常重要的,在從事技術類進階職位的工程師,不僅有非常好的技術,還能帶領一支技術隊伍,像導師一樣協助他們給於支援人員和指導,確定工作方法,指明工作方向,解決隊伍在項目過程中遇到各種技術問題。同時還要具備領導能力。我在讀研究生的時候老師讓我給本科生帶輔導,我對這樣工作一點不重視,覺得不就是看著他們做實驗出錯的時候去給調試一下,但是我的老師很嚴肅的對我說:“你要給別人一滴水,你自己要有一桶水”,在完成輔導後我有又了一句,“如果你只有一滴水,你只會給別人一頭霧水”。我輔導的那個班普遍反映王老師是只給結果不給過程。