簡介
sdeT是產品質量和用戶的代言人,主要的工作是從客觀的角度去分析產品的質量以及給出系統化的反饋和建議,從而使整個開發團隊能夠及時地做出對正確的抉擇。要做到這點,SDET需要積極的參與產品的計畫、設計、和代碼檢驗,找出並分析問題的根本原因,以及提高產品和流程質量的系統化的方案。
SDET 和SDE的區別
SDET和SDE都需要有紮實的計算機科學基本功,包括編程能力。所不同的是,SDET的工作重點是用反向思維分析的方法找出對產品質量有負面影響的問題,帶領整個團隊解決這些問題,從而提高產品的質量。SDET需要掌握多種技術,用不同的方法去分析產品各個方面可能產生的種種問題。這裡所強調的是對問題的系統分析能力,以及預見到常人沒有想到的潛在問題。
SDET對人員的要求
SDET要求人員對質量的要求很高,並且喜歡拆東西,弄明白它是怎么工作的,而且喜歡改善它。一個SDET的最基本要求就是對質量的熱情:一定要找到所有的瑕疵從而達到完美。其次,喜歡鑽研、分析、並改善事物是成功的SDET的又一潛質。另外,喜歡學習並掌握多種不同的技能和知識也是SDET所需的技能。
SDET事業發展途徑
在微軟,SDET有非常明確的事業發展階段。從入門SDET開始,到與總監同級的Partner SDET,每一個階段都有充足的挑戰和機會。喜歡做技術,可以一直順著IC的事業模型做到Partner SDET甚至Distinguished Engineer;如果你喜歡管理,可以從測試組長一直做到VP of Test。而最好的一點是,不管是做技術還是做管理,在同一級別的待遇是同等的,也就是做技術沒有“頂”,不做manager也能晉升。
SDET,屬於開發和測試中間,屬於白盒測試範疇,要求發現代碼中的問題。
測試在微軟公司是一項非常重要的工作,微軟公司在此方面的投入是非常巨大的。微軟對測試的重視表現在工程開發隊伍的人員構成上,微軟的項目經理、軟體開發人員和測試人員的比例基本是1:3:3或1:4:4,可以看出開發人員與測試人員的比例是1:1。對於測試的重視還表現在最後產品要發布的時候,此產品的所有相關部門都必須簽字,而測試人員則具有絕對的否決權。
測試人員中分成兩種職位,Software Development Engineer in Test(測試組的軟體開發工程師)實際上還是屬於開發人員,他們具備編寫代碼的能力和開發工具軟體的經驗,側重於開發自動化測試工具和測試腳本,實現測試的自動化。Software Test Engineer(軟體測試工程師)具體負責測試軟體產品,主要完成一些手工測試以及安裝配置測試。
測試計畫是測試人員管理測試項目,在軟體中尋找Bug的一種有效的工具。測試計畫主要有兩個作用,一是評判團隊的測試覆蓋率以及效率,讓測試工作很有條理的逐步展開。二是有利於與項目經理、開發人員進行溝通。有了測試計畫之後,他們就能夠知道你是如何開展測試工作的,他們也會從中提出很多有益的意見,確保測試工作順利進行。總之,有了測試計畫可以更好的完成測試工作,確保用戶的滿意度。
測試人員在編寫測試計畫之前,應獲得以下文檔:
1)程式經理編寫的產品功能說明書或產品開發計畫;
2)程式經理或開發人員提供的開發進度表。
根據產品的特性及開發進度安排,測試人員制定具體的測試計畫。測試計畫通常包括以下內容:
1)測試目標和發布條件:
a. 給出清晰的測試目標描述;
b. 定義產品的發布條件,即在達到何種測試目標的前提下才可以發布產品的某個特定版本。
2)待測產品範圍:
a. 軟體主要特性/功能說明,即待測軟體主要特性的列表;
b. 特性/功能測試一覽,應涵蓋所有特性、對話框、選單和錯誤信息等待測內容,並列舉每個測試範圍內要重點考慮的關鍵功能。
3)測試方法描述:
a. 定義測試軟體產品時使用的測試方法;
b. 描述每一種特定的測試方法可以覆蓋哪些測試範圍。
4)測試進度表:
a. 定義測試里程碑;
b. 定義當前里程碑的詳細測試進度。
5)測試資源和相關的程式經理/開發工程師:
a. 定義參與測試的人員;
b. 描述每位測試人員的職責範圍;
c. 給出與測試有關的程式經理/開發工程師的相關信息。
6)配置範圍和測試工具:
a. 給出測試時使用的所有計算機平台列表;
b. 描述測試覆蓋了哪些硬體設備;
c. 測試時使用的主要測試工具。
此外,還應列出測試中可能會面臨的風險及測試的依賴性,即測試是否依賴於某個產品或某個團隊。比如此項測試依賴性WindowsCE這個作業系統,而這個系統要明年2月份才能做好,那么此項測試就可能只有在明年5月份才能完成,這樣就存在著依賴關係。如果那個團隊的開發計畫往後推,則此項測試也會被推遲。
一個好的測試用例就是有一個合理的機率來找到Bug,不要冗餘,要有針對性,一個測試只針對一件事情。特別是功能測試的時候,如果一個測試是測了兩項功能,那么如果測試結果失敗的話,就不知道到底是哪項功能出了問題。
測試用例開發中主要使用的技術有等價類劃分,邊界值的分析,Error Guessing Testing。
等價類劃分是根據輸入輸出條件,以及自身的一些特性分成兩個或更多個子集,來減少所需要測試的用例個數,並且能用很少的測試用例來覆蓋很多的情況,減少測試用例的冗餘度。在等價類劃分中,最基本的劃分是一個為合法的類,一個為不合法的類。
邊界值的分析是利用了一個規律,即程式最容易發生錯誤的地方就是在邊界值的附近,它取決於變數的類型,以及變數的取值範圍。一般對於有n個變數時,會有 6n+1個測試用例,取值分別是min-1, min, min+1, normal, max-1, max,max+1的組合。邊界值的分析的缺點,是對邏輯變數和布爾型變數不起作用,還有可能會忽略掉某些輸入的組合。
Error Guessing Testing完全靠的是經驗,所設計的測試用例就是常說的猜測。感覺到軟體在某個地方可能出錯,就去設計相應的測試用例,這主要是靠實際工作中所積累的經驗和知識。其優點是速度快,只要想得到,就能很快設計出測試用例。缺點就是沒有系統性,無法知道覆蓋率會有多少,很可能會遺漏一些測試領域。
實際上在微軟是採用一些專門的軟體或工具負責測試用例的管理,有一些測試信息可以被記錄下來,比如測試用例的簡單描述,在哪些平台執行,是手工測試還是自動測試,運行的頻率是每天運行一次,還是每周運行一次。此外還有清晰的測試通過或失敗的標準,以及詳細記錄測試的每個步驟。
在軟體開發項目中,測試人員的一項最重要使命就是對所有已知Bug進行有效的跟蹤和管理,保證產品中出現的所有問題都可以得到有效的解決。一般地,項目組發現、定位、處理和最終解決一個Bug的過程包括Bug報告、Bug評估和分配、Bug處理、Bug關閉等四個階段:
1)測試工程師在測試過程中發現新的Bug後,應向項目組報告該Bug的位置、表現、當前狀態等信息。項目組在Bug資料庫中添加該Bug的記錄。
2)開發經理對已發現的Bug進行集中討論,根據Bug對軟體產品的影響來評估Bug的優先權,制定Bug的修正策略。按照Bug的優先權順序和開發人員的工作安排,開發經理將所有需要立即處理的Bug分配給相應的開發工程師。
3)開發工程師根據安排對特定的Bug進行處理,找出代碼中的錯誤原因,修改代碼,重新生成產品版本。
4)開發工程師處理了Bug之後,測試人員需要對處理後的結果進行驗證,經過驗證確認已正確處理的Bug被標記為關閉(Close)狀態。測試工程師既需要驗證Bug是否已經被修正,也需要確定開發人員有沒有在修改代碼的同時引入新的Bug。
在某些情況下,Bug已處理並不意味著Bug已經被修正。開發工程師可以推遲Bug的修正時間,也可以在分析之後告知測試工程師這實際上不是一個真正的Bug。也就是說,某特定的Bug經開發工程師處理之後,該Bug可能包括以下幾種狀態。
已修正:開發工程師已經修正了相應的程式代碼,該Bug不會出現了。
可推遲:該Bug的重要程度較低,不會影響當前應提交版本的主要功能,可安排在下一版本中再行處理。
設計問題:該Bug與程式實現無關,其所表現出來的行為完全符合設計要求,對此應提交給程式經理處理。
無需修正:該Bug的重要程度非常低,根本不會影響程式的功能,項目組沒有必要在這些Bug上浪費時間。
五、成為優秀測試工程師的要求
要成為一名優秀的測試工程師,首先對計算機的基本知識要有很好的了解,精通一門或多門的程式語言,具備一定的程式調試技能,掌握測試工具的開發和使用技術。同時要比較細心,會按照任務的輕重緩急來安排自己的工作,要有很好的溝通能力。此外,還要善於用非常規的方式思考問題,儘可能多的參加軟體測試項目,在實踐中學習技能,積累經驗,不斷分析和總結軟體開發過程中可能出錯的環節。這樣,一名優秀的測試工程師就從軟體測試的實踐中脫穎而出了。