對于單元測試和接口測試的概念,我想即便是剛剛畢業參加工作的測試工程師都能在面試的時候說得出個一二三,市面上也有大量的書籍介紹單元測試接口測試,有些甚至還介紹了具體工具的使用方法。但是真正在項目中,對于習慣了按部就班地進行手工黑盒測試的測試部門而言,單元測試接口測試這種牽涉到代碼的“高技術含量”的測試方式往往讓人有望而卻步的感覺。雖然主觀上非常希望能接觸和開展這類測試工作,但是團隊整體代碼技能,與開發人員溝通配合的渠道經驗,執行結果的考量等,都成為阻礙測試經理在項目中普及單元測試和接口測試的瓶頸。以下便是結合自己的實際經驗,談談如何在項目中開展單元測試,接口測試工作。
做為項目測試經理,開展單元測試和接口測試工作時,需要依次做到三點:1、分析單元測試和接口測試在實際項目中的收益和可行性。2、與項目經理,開發經理溝通,使其理解單元測試接口測試的價值,并獲取相應的資源和支持。3、結合測試團隊實際能力,制定切實可行的測試策略。
一、分析單元測試和接口測試在實際項目中的作用,可行性以及收益。
在項目設計評審階段,測試經理就應當主動思考項目中能否進行單元測試和接口測試,思考的角度應當是“如何通過單元/接口測試提升測試質量,擴大測試覆蓋面,節省測試資源”,因為只有從這個角度思考才能真正做到有利于項目本身,同時也更能得到和項目經理開發經理的認可。切忌不要“為了單元測試而單元測試,為了擴大部門和個人影響力而單元測試”,這樣做的結果不僅不能提高項目質量,同時浪費大量測試資源(當然,這種情況非常普遍,不是么?)。
在分析收益時同時也需要考慮實際的可行性和資源的消耗。測試經理首先應當考慮一個往往很容易被忽視的因素——測試工程師本人的主觀意愿。我們總是過多關注一個人現階段的“能力”,用“能力”的高低決定誰能做什么事情,但事實上在一般互聯網IT企業中,不管他們面試的門檻有多高,真正在項目中做的事情,也都是一個經歷過一般高等教育的人能學得會,做得來的事情,哪怕就是看似難度很高的單元測試和接口測試,對于沒有代碼經驗的同學,經過一定的培訓,分工和幫助,也能參與到其中去從而逐漸積累經驗。真正決定一個測試工程師能不能做好單元測試接口測試的因素是在于自己的主觀能動性和學習意愿。
這話題扯遠了可能就會扯到測試人員的選拔甚至招聘上,我在面試的時候基本不會去會問“你為什么想來阿里巴巴”,因為大多數人找工作無非是為了混口飯吃,希望自己單位好點待遇高點是人之常情,但是我一定會問“你為什么想來做測試”,如果說“找工作混口飯吃”由不得我們選,那么從這么多混飯吃的行當里選擇了測試,那么多少都要對他有點興趣,有了興趣很多以前不會的東西自己就能學得會。其實我也見過很多人并不喜歡做測試,也有些人是因為開發部門投不進簡歷就轉投測試部門,這樣“人在曹營心在漢”的同學,即便有一定的技術功底,缺乏興趣和主觀能動性,最多也只是能完成每天分配的任務,很難做出超出期望的成果。
二、與項目經理,開發經理溝通,使其理解單元測試接口測試的價值,并獲取相應的資源和支持。
明確了目標和可行性之后,測試經理就需要向項目經理,開發經理闡述自己的想法并獲得支持。如果說之前的分析更多立足于測試團隊自身的角度,那么在獲取支持時就要注意站在對方的角度闡述單元測試接口測試的收益。
1、對于項目經理而言,不僅關注項目質量,也關注項目資源消耗,時間安排。測試經理可以從測試資源投入產出比的角度向項目經理闡述單元測試和接口測試的優勢:進行單元測試和接口測試可以在項目早期發現關鍵問題,在底層發現并處理問題可以節省開發和測試大量的時間;進行接口測試可以使測試提前介入,不必在等到UI等功能全部完成的情況下才倉促開始測試,既增加測試的時間,同時不會影響項目發布時間;自動化形式的單元測試接口測試在相同時間內的效率遠遠超過在測試工程師在UI層手動執行,并且準確率更高。
2、對于開發經理而言,則更多強調在單元測試接口測試層面,開發人員定位問題解決問題的難度大大降低;測試覆蓋率大大提高,實際減少后期bug數和故障數。
在得到項目經理和開發經理“官方層面”的認可和支持后,千萬不要忘記還要爭取獲得項目中每個開發工程師的“個人層面”的支持。因為即便有官方的授權,如果開發工程師個人并不理解單元測試和接口測試的意義,主觀上不愿意配合,那么真正運作起來執行成本會大大增加。對很多開發工程師而言,普遍存在著輕視測試工程師,認為測試工作沒有技術含量的觀念,對于這樣的偏見,不要試圖用書本概念或者規章制度去與之辯駁,而是就從技術角度入手,談單元測試接口測試的重要性,解鈴還須系鈴人,用他們熟知的角度入手說服對方,方能以理服人。除此之外,測試經理平時也應當和開發人員保持聯系,在關鍵時刻,規章制度的約束力比不上個人關系的影響力。
三、結合測試團隊實際能力,制定切實可行的測試策略。
在獲得各個層面的支持后,接下來測試經理就需要針對項目,測試團隊的實際情況制定切實可行的方案了。
1、制定合理,可行的目標
在決定單元測試接口測試策略,特別是第一次實踐時,目標最好是越小越細,不僅能夠實現,也能夠系統衡量產出。切忌不要一開始就制定很大的目標,如在沒有相關經驗和先例的情況下在一個項目里就要做覆蓋所有功能點的單元測試,一開始就制定一大籮筐規范,或者一夜之間就要搞出像微軟那樣的每日自動化集成體系。相反,從最小,最細的東西開始,選定幾個具有代表性的方法和接口,用Junit等成熟的框架先寫出一個能“跑得通”的Case,然后再在次基礎上逐漸添加完善。
2、合理分工,人盡其用
即便是大公司的測試團隊中,也不可能每個都是有開發經驗的代碼高手,在團隊里,根據代碼能力,工作經驗的不同,測試經理要制定好合理的分工。選擇代碼能力最強的同學負責和開發溝通,搭建環境和框架,寫出可供參考和復制的腳本模板,主持必要的培訓工作;讓熟悉業務的同學在明確方法和接口的作用后設計測試數據;同時讓開發同學處理一些環境,代碼依賴相關技術問題。
3、隨時跟蹤,考量產出
作為測試經理認真觀察測試團隊學習和執行情況,及時發現問題和短板。對于單元測試和接口測試發現的bug,認真分析并記錄,隨時改進測試方法。例如被測試的方法或接口最好本身是在業務上起到重要功能的方法或接口,這樣測試工程師就可以更多發揮自身在業務熟悉度上的優勢,相反一些涉及到開發框架和技術細節的方法或接口,一般的測試工程師很難設計出好的用例來發現問題,對于這樣投入產出過低的模塊可以果斷放棄。最后在項目結束后根據這些數據對單元測試接口測試工作進行總結,獲取更多的認可和支持。
對于很多高深的技術,我們常常被迷惑,常常被嚇唬,常常喜歡用“這不是那么簡單”這樣的話來敷衍別人和自己。勇敢地去嘗試,如果成功了,就會發現這沒什么大不了的;如果失敗了,嗯,其實也沒什么大不了的。