從微軟的今天看軟件測試的明天

  陳天的辦公室並不小,但卻因堆 滿了機器而顯得狹仄不堪。他解釋說,因爲微軟亞洲工程院(ATC)部門準備擴充,而“新的幾個實驗室還在裝修中”,所以就形成了現在的這個局面——幾十臺Dell主機和一箱箱顯示器堆放在眼前的辦公空間裏。當聽說微軟亞洲工程院的測試工程師人均擁有四五臺計算機、且正在搭建的測試實驗室將擁有上千臺機器時,我跟陳天開玩笑說,看來你是微軟亞洲工程院最大固定資產的擁有者,陳天微笑着對這一判斷表示認同。

“人機比例”如此懸殊,並不是說微軟亞洲工程院的測試工程師都是多臂超人——事實上,這是由微軟獨特的測試文化所決定的。陳天表示,“微軟的軟件測試80%-90%都是自動化的。所謂自動化,就是由測試工程師寫出測試程序來運行測試案例,而並非人們所想象的人工點、點、點的那種測試方式。”

在拜訪微軟亞洲工程院之前,提到微軟的測試,我會想到比爾蓋茨說的一句話:“很多人都認爲微軟是一家軟件開發公司,而事實上,我們是一家軟件測試公司”。這種說法也讓我們對微軟亞洲工程院的測試團隊充滿了好奇。

微軟亞洲工程院創立之初,僅有兩位從微軟亞洲研究院轉過來的測試人員,而且這兩個人還不屬於任何一個組,只是在項目組有測試需求的時候臨時幫一下忙。對於一支完整的產品開發體系,軟件測試團隊是極其重要的組成部分。因此,院長張宏江對此高度重視——於是,從微軟總部找來了在微軟從事測試五年的陳天和周慶暉擔當起了搭建微軟亞洲工程院軟件測試團隊的重任。

招募到合適的測試人員是工作的第一步,由於國內對軟件測試工作的重視不夠,有經驗的人員因而少得可憐,培養剛畢業的學生便成爲了優先的選擇,不過,“我們的學生由於勤奮好學成長得很快”。到現在,微軟亞洲工程院已擁有一百多名測試工程師,其中有一些人已經成長爲技術骨幹和Leader。

在微軟的測試體系中,主要的測試人員分爲兩種,一種是SDET(Software Design Engineer Tester),一種是STE(Software Test Engineer)。對SDET編程能力的要求和對開發人員的要求基本上是一樣的。他們都須有紮實的計算機基礎知識和編程能力。區別可能在於開發人員對算法更加精通,或某一方面的技術鑽研的更深入一些。而微軟亞洲工程院要求SDET的技術面很寬,要能使用很多種技術,比如可以用C、C#、腳本等來寫程序。陳天說:“我喜歡在面試的時候看他們直接在電腦上編程。如果一個人經常寫程序,他調試程序的表現會與編程不熟練的人有很大的不同。”

因爲SDET懂開發,有紮實的編程能力,所以他能夠做一些其他普通測試人員做不了的工作,比如可以將源代碼打開做代碼的靜態分析,還可以做測試用例的代碼覆蓋率調查。所謂的代碼覆蓋率調查,是指考察測試用例能否將所有的源代碼都調用到,是一種對測試質量的初步評估標準。

更高深的一些測試方法還包括錯誤注射(Fault Injection),也就是將錯誤注射到源程序中。因爲很多錯誤很不容易在某種機器環境中出現,比如一個用戶的機器內存特別少的時候,微軟要求程序仍然不能丟失數據和發生安全漏洞,但測試人員不能把測試機器的內存拆下來,也不能非常精確的把內存消耗到期望的數值,這時他們會通過注射一段代碼來模擬內存的分配。要做到這點,需要掌握編程及熟悉操作系統的內存分配算法。由於SDET的存在,微軟可以更加有效地對軟件進行測試。

當然,STE的角色也很重要。這些人必須非常聰明,解決問題的能力特別強;有鑽研精神,絕不放棄;很細心,而且很有創造力。陳天說:“好的STE不是隻按照規定好的測試用例來執行,而是可以想到很多一般用戶想不到的地方,他可以用非常規的思路來尋找軟件的bug。而且他會懂很多各種各樣的軟件。事實上,很多bug不是在程序本身找到的,而是在其與其它程序交互時找到的。”不過,就測試工作而言,微軟未來的趨向是,純粹的STE將越來越少,而且微軟會要求STE“也要學會用程序工具去進行測試”。

普通的測試工程師若想臻至“優秀”,需要經歷很長的階段。除了要學習很多測試方面的技巧外,還需對測試全局有着全面的瞭解和充分的掌控——這同樣是實現個人成長的重要前提。“測試人員一開始學到的信息都是分塊的,比如開始會寫測試用例,後來知道了要做代碼覆蓋率,而後可以學到更深的知識,但最終是要把這些知識都融會貫通起來,大家都需要經歷這樣一個過程,這是很難避免的。”陳天說,“因此,我要求大家不要只看自己做的部分,而要看其他人做的事情,要看產品開發到哪個階段,就像玩拼圖一樣, 只有對整個軟件開發流程瞭解,這個時候你才知道每塊拼圖應該在哪裏。” 爲了讓測試工程師更快速地成長,微軟亞洲工程院經常讓大家轉換角色,輪流負責不同的任務,或者將一個大的部分拆分爲幾個小塊,每個人負責其中一個小塊的全部測試內容。

對於微軟亞洲工程院的測試工程師新手來說,工作既充滿挑戰又非常充實。不過,首先要改變的是“心態”。一方面,不能僅僅滿足於完成自己的工作。陳天表示,“如果讓一個新人進行瀏覽器的測試,他可以寫很多測試用例,比如測試各種按鈕是否可用等等;但對於軟件來說,是不是隻要經過了這些測試,就立刻可以上市銷售了?不能僅僅滿足於找到BUG, 要真正做到質量保證. 時常問自己,是不是這樣的質量軟件明天就能上市?很多新來的員工沒有這樣的意識,也就是對整個產品質量負責的意識。我經常給我們的工程師講,儘管微軟有幾萬名工程師,但測試某一個功能點的人就你一個,如果漏過了任何一個bug,等到上市之後,受到影響的可能是數以千萬計的微軟用戶。所以我們要求責任感對一個測試工程師甚至比他的測試技能更加重要。”

當然,對於新人來說,有一套學習的途徑可以讓他們實現快速地成長——除了陳天等資深測試經理和Test Lead的指導外,微軟內部還積累了一整套測試流程、工具和模板。首先,測試工程師要對負責的產品非常瞭解,要看PM和開發人員的文檔,然後根據模板進行工作,而Test Lead也會審查他們的工作。“每個產品的測試都包含了基本的測試,如功能測試壓力測試、代碼覆蓋率校驗、插入測試、與其他產品交互的測試,還有全球化和本地化測試。”在測試用例上,幾乎永遠是越多越全面越好。在陳天測試Windows XP操作系統某項目時,僅對幾個Dll文件的測試就寫了兩千多個測試用例。陳天說:“微軟的測試工具基本上都是自己開發的,雖然商業性比較差,但對產品的針對性很強。除了常用的十種左右的測試工具外,往往需要測試人員針對項目開發很多測試工具。”

談及未來的發展,陳天對自己的測試團隊充滿了信心。從院長張宏江到技術總監林斌,微軟亞洲工程院闔院上下都對測試工作非常重視。陳天希望將他的團隊變成“微軟最好的測試組之一”。他說:“雖然目前還不是,但對此我非常有信心,我們的員工技術水平還可以提高,我們的測試流程還可以更適合開發的需求,員工們的測試理念也還應不斷增強, 最後,,我們也正在形成自己的測試文化並用次來推動ATC的進一步高速發展。”


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章