微軟測試工程師史亮:新的產品,新的挑戰

非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/114546程序員

史亮,東南大學計算機軟件與理論專業博士,研究領域爲軟件分析與測試。2006年加入微軟(中國)有限公司,任職軟件開發測試工程師,負責微軟在線業務與商業智能產品的測試工做。2011年調至微軟總部,從事Microsoft Office 2013的測試工做。2012年與淘寶測試工程師高翔合著了《探索式軟件測試實踐之路》一書。2014年,獨自出版了《軟件測試實戰:微軟技術專家經驗總結》。目前,史亮正從事下一代Microsoft Office產品的研發工做。面試

圖片描述

圖靈訪談:您從何時開始編程?是什麼讓你決定走上計算機這條路?編程

史亮: 1997年,我進入東南大學計算機系,開始正式學習軟件開發。由於時間久遠,我已經記不清當時選擇計算機專業的緣由。也許只是懵懂地認爲計算機行業有更好的發展前景,幸運的是整個行業在隨後的十餘年時間有爆發式的增加。設計模式

在攻讀博士學位時,我閱讀了《C++設計新思惟——泛型編程與設計模式之應用》(Andrei
Alexandrescu著,侯捷、於春景譯)。這本書引發了我對於軟件設計的熱情。此後,我閱讀了許多軟件開發的書籍,並經過實驗性項目實踐了不少編程技術。從某種意義上,這本書是我職業發展的轉折點。這並非由於它提供了我平常使用的技術,而是它激發了個人興趣,讓我有動力去深刻鑽研。在學習和實踐的過程當中,新問題又引出新的動力,這樣的激勵循環幫助我持續成長。瀏覽器

圖靈訪談:軟件測試的魅力何在?您爲何選擇測試一行而不作開發?安全

史亮: 2006年,我即將離開校園。在通信軟件MSN Messenger上,大學本科同窗尚雲飛建議我到北京來工做。當時,他與個人另外一位同窗宋顯祖在微軟亞洲工程院工做。在他們的熱心幫助下,我得到了去北京面試微軟測試開發工程師(Software Development Engineer in Test,簡稱SDET)的機會。隨後就加入微軟,並工做至今。回顧往事,當年那次聊天令個人人生髮生了改變。在此以前,我從沒有仔細考慮過離開家鄉到異地工做。李笑來老師(《把時間看成朋友》等書的做者)在演講中曾說:「改變咱們人生的關鍵事件都是沒法預期的偶然事件。」果真如此!服務器

在工做後,我逐步體會到軟件測試所面臨的困難,而這些有挑戰的問題就是測試魅力的根源。其中,根本性的困難是,隨着軟件行業的高速發展,「軟件的複雜度已經超越了人的理解能力」(我在《軟件測試實戰》第一章有詳細的討論)。爲了應對挑戰,測試人員須要綜合發展自身能力,以實施有針對性、聚焦風險、豐富多樣、注重實用的測試。在此過程當中,他須要解決一系列複雜問題,這對他的能力成長頗有幫助。微信

圖靈訪談:您在國內和國外都有至關豐富的測試經驗,您能對比一下國內國外兩種環境下的測試實踐的特色嗎?併發

史亮:我認同語境驅動測試(Context Driven Testing)的觀點:測試實踐的價值來自於它的語境。除了測試人員的態度和能力,軟件項目和測試團隊對測試實踐有最大的影響。測試人員須要根據項目語境(項目環境、產品元素、質量標準、產品質量等)選擇一組相互支持的測試實踐。框架

個人切身體會是,國內外的工做風格確實有所差異,可是測試實踐主要取決於產品、項目和團隊。並且,隨着國內大型企業的國際化,其文化氛圍和工做方式與國外企業並無太大的差異。在具體工做中,測試人員總須要研究產品(《軟件測試實戰》第7章),研究項目(《軟件測試實戰》第8章)並融入團隊(《軟件測試實戰》第9章)。只要採用積極的態度來面對職業發展,測試人員在各類環境中均可以得到成長。

圖靈訪談:國內有一些企業認爲相比於開發者,軟件測試人員能力差一些也能夠,您認同這種見解嗎?這種想法造成的緣由是什麼?

史亮:這裏,所謂「能力差一些」大多指「編程的能力差一些」。在一些軟件項目中(國內外皆有),測試人員的主要工做是手工測試,所以對編程能力沒有很高的要求。可是,測試是獲取信息的技術調查,須要多種能力,例如:

  • 交流協做:對於複雜的軟件,任何人都不可能掌握所有的信息。爲了更好地理解軟件,測試人員須要與項目經理、程序員、領域專家、測試同事等協做,還須要研究項目文檔、技術資料、領域專著等資料,並經過實際測試去得到第一手知識。
  • 測試報告:測試人員是項目的「車前燈」,他須要提供高質量的缺陷報告和測試報告,以幫助項目團隊掌握項目狀況並造成決策。
  • 測試建模:人們處理複雜問題的經常使用策略是「分而治之」。在測試領域,測試人員能夠創建產品的模型來幫助測試。在建模過程當中,他用當前測試目標爲指導,省略無關的產品細節,突出重要的產品元素。針對簡化後的產品模型,能夠更有效地實施測試設計。
  • 測試設計與執行:測試人員須要積累多種測試技術,將它們綜合運用於當前項目,並在測試執行的迭代過程當中,經過持續地評估和反思來逐步加強測試方案。
  • 測試開發:測試人員可使用或開發恰當的測試工具,以提升測試效率。

可見,測試人員須要多種能力才能勝任測試工做。其能力集合與開發人員有重疊,但不盡相同。不能單純用「編程能力」的強弱來評價測試人員的水平。

其實,不管主管是否要求,測試人員均可以主動學習編程技術,並應用於實際工做。在測試中,許多活動提供了自動化的機會,例如產品部署、環境配置、機械性的測試執行、信息收集、報表生成等。合理地運用開發技術,構建合適的工具,可以明顯提升測試效率。

平心而論,項目主管更看重編程工做有現實因素。軟件項目的目標是交付可以贏得競爭的軟件,而編程是產生軟件的最直接的活動,開發人員的水平對軟件質量有最直接的影響。測試人員的工做雖然重要,但不能直接產生代碼,因此容易被低估。測試人員應該正視這種狀況,但沒必要懷憂喪志。做爲一個專業人員(professional),他應該經過天天的努力來推進職業發展。

圖靈訪談:您與淘寶測試工程師高翔合著了《探索式測試實踐之路》一書的過程當中有沒有發現一些測試理念的分歧,這樣的分歧來源自哪裏?最後大家是如何解決的?

史亮:我和高翔經過彼此的博客發現雙方都對探索式測試有濃厚的興趣,因而常常交換意見和分享經驗,天然成爲好友。後來,咱們一塊兒合做撰寫了《探索式測試實踐之路》 一書,以分享所學所知。由於咱們都高度認同語境驅動測試和探索式測試的思想,因此並無根本性的分歧。咱們的主要差異在於如何論述探索式測試的實踐。

下圖是測試專家James Bach提出的概念模型,以展現不一樣測試方法的風格,其中最左側是嚴格腳本化的測試,最右側是高度機動的自由式探索。高翔在論述探索式測試時,更着力於自由式探索並提出了一批他總結出的測試模型,我則沒有特別喜愛的方法,較寬泛地介紹了一些技術和工具。從某個角度,咱們的論述內容構成了深度與廣度的互補。

01fsHE1YDI2q

圖靈訪談:有人說Microsoft算是在軟件測試方向上偏傳統的,您認同嗎?您能向咱們介紹一下其餘互聯網公司如Facebook、Google以及Amazon的測試風格嗎?

史亮:我並無在其餘互聯網公司工做過,雖然閱讀過一些報道,可是不能提供更多的信息。所以,難以置喙。我閱讀過原版的《Google軟件測試之道》(中文版由人民郵電出版社引進)。該書較生動地介紹了一些谷歌的測試實踐,部份內容頗有啓發性,值得一讀。

正如我以前提到的,測試實踐主要取決於產品、項目和團隊。在很長的一段時間內,微軟最知名的產品都是發佈週期爲2~3年的套裝軟件,如Windows和Office。這些產品的測試實踐很成熟,成爲微軟測試的表明。《微軟的軟件測試之道》(Alan Page, Ken Johnston, Bj Rollson著)較好地總結了相關方法和經驗。

隨着互聯網成爲新的計算平臺,商業社會的運做已經深度依賴於互聯網服務,所以互聯網服務的開發和測試成爲新的熱點。並且,智能手機和平板電腦主導了移動計算的發展,基於App Store發佈的移動應用成爲用戶的新寵。相比之下,套裝軟件顯得不那麼「時髦」。所以,微軟的測試給人以「傳統」的印象。

可是,若是仔細觀察,不難發現微軟的產品已經發生了深入的變化,且還在持續演變中。伴隨而來的是軟件開發和測試方式的轉變。如下是一些例子。

  • 必應的一些在線服務已經作到每日部署(daily deployment),即代碼簽入以後,若是成功經過編譯和自動化測試,能夠在24小時內部署到產品環境,整個流程(代碼編譯、自動測試、服務部署、在線監控)不須要人工操做。其自動化水平與其餘互聯網領軍企業至關。
  • Visual Studio是強大的集成開發環境,提供了很是豐富的功能。目前,Visual Studio團隊可以作到每一年發佈一個新版本(如Visual Studio 20十二、Visual Studio
    2013和即將到來的Visual Studio 2014)和3個重要更新(如Visual Studio 2013 Update
    一、二、3)。對於如此複雜的產品,可以作到持續交付,說明Visual Studio團隊擁有較高的研發和管理水平。
  • Windows團隊已經將Windows重要版本的發佈週期從3年壓縮到1年左右,例如Windows 8.1的研發用時約1年,Windows 8.1 Update 1的研發用時約半年。
  • OneNote團隊在多個平臺(Windows桌面、Windows Store、Windows Phone、Mac、iPad、iPhone、Android、Web)上推出了產品,並公佈了OneNote
    API,使第三方應用能夠將內容發佈到雲端的OneNote筆記本。其產品覆蓋桌面應用、平板應用、手機應用、Web應用、Web服務等,且在持續發佈中保持了較高的質量。

我相信,隨着微軟業務模式的轉變,微軟的軟件研發會持續演化。在此過程當中,好的思想和經驗會被傳承下去,而新語境勢必催生出新的實踐,並讓一些在其餘公司得到成功的方法在微軟獲得應用。此外,微軟擁有許多有特色的項目,項目組之間的交流經驗會催生出一批優秀的實踐。

圖靈訪談:手動測試和自動測試各自的優缺點是什麼?微軟在實踐上是如何結合這兩種測試方法的?

史亮:微軟是一家大型企業,擁有多種類型的項目。不一樣的項目對於測試提出了不一樣的要求,所以項目小組每每會採用不一樣的測試策略。通常而言,微軟要求測試人員具有較高的技術水平,可以熟練地開發自動化測試和測試工具。在許多項目組,測試人員須要編寫大量的代碼來測試產品,也須要花費至關的時間來手工測試產品。一般,第一線的測試人員最瞭解產品和技術,他們會主動探索各類技術,以發展出多樣性的測試策略。

在此,我介紹一些個人我的觀點(《軟件測試實戰》的第5章對詳細地討論了測試開發)。

首先,測試活動是相輔相成的。測試專家Johnathan Kohl將不一樣的測試活動比喻爲不一樣的交通方式,每種方式都有優勢與不足。

我喜歡走着上班。我很享受風景、運動,以及一邊漫步一邊思考問題的時光。在戶外新鮮的空氣中,在遠離電腦的思考中,我得到了一些極好的想法。沿途的觀察激發了靈感,將我引向創造性的解決方案。

可是步行是緩慢的,若是我駐足觀賞可愛的動物或享受日出霞光映紅的山脈,我極可能會遲到。因此,在趕時間的時候,我會搭乘公共交通。雖然公共汽車或列車仍舊伴隨着步行,可是我能用快得多的速度及時地到達目的地。我極少駕車上班,由於這讓我無暇去觀察並思考。可是,當別人駕車時,我可以從旅途中得到不少。例如,最近我坐城鐵去上班,在路上發現了之前從未注意到的河谷峭壁。我曾經屢次通過河谷,可是直到坐上輕軌的那天,在沒有步行或駕車分心的狀況下,我才能用全新的角度觀察到新的景色。

-- Jonathan Kohl, Man and Machine

在以上隱喻中:

  • 手工測試是步行。在漫遊產品的過程當中,測試人員能夠觀察到豐富的細節,可以隨時暫停預約的測試路線,對感興趣的局部進行細緻的測試。其不足是推動的速度較慢,有時不能在短期內完成長距離的旅行(覆蓋更多的測試目標)。
  • 自動化測試是駕車。其優勢是速度快,能在短期內測試大量的內容,其不足是自動化測試只作規定的檢查,會忽視其餘全部細節。即使軟件出現一望即知的問題,只要測試代碼沒有作相應的檢查,自動化測試就會放過它。其實,自動化測試更像地鐵,能夠將大量乘客快速準時地送到目的地,可是全部旅客都沒法觀察到地面的風景。
  • 計算機輔助測試是他人駕車。自動化測試或測試工具完成繁重的工做,帶着測試人員快速地漫遊產品。在測試過程當中,測試人員監控產品的表現,若是發現問題,他能夠「下車」調查。該策略綜合了手工測試和自動化測試的優勢,利用軟件工具來提升測試效率、豐富測試手段,讓測試人員可以更好地觀察、思考與行動。

可見,手工測試和自動化測試並非相互排斥的。若是綜合它們的優勢,就可能開發出更具威力的測試策略,以實現單獨的手工測試或自動化測試不能達到的效果。

第二,測試是爲了得到產品質量信息的技術調查,任何有助於周密調查的方法都是有價值的。在罪案偵查中,刑偵人員會利用多種方法,從各個信息源收集情報。他們會利用高精密的儀器提取證據,也會大範圍走訪以得到線索,更重要的是,他們會反覆思考當前的情報,以隨時調整調查方向。與之相似,測試人員也須要綜合運用多種技術和工具,去探究新的信息,並根據新發現及時調整測試方向。在調查過程當中,學習、分析、推斷、反思等思惟活動是必不可少的,而這些是沒法自動化的。

第三,利用自動化測試,測試人員能夠實施更有效的技術調查。如下是一個案例。

模糊測試是一種修改輸入數據來暴露軟件缺陷的方法。若是產品須要讀取複雜的文檔,測試小組可使用文件模糊器,對原始文檔進行隨機修改,生成大量的模糊文檔。而後,模糊測試框架啓動產品,令它讀取這批被篡改的文檔,並嚴密監控可能的異常狀況。在測試結束後,測試人員分析測試日誌中記錄的錯誤,以識別安全缺陷。模糊測試是一種暴力測試方法,一輪模糊測試會使用數萬個甚至更多的模糊文件。若是運用得當,模糊測試能夠發現許多手工測試或簡單的自動化測試沒法發現的問題,這對於提升軟件的安全性極具價值。例如Microsoft
Office團隊在開發Office 2013時,經過模糊測試發現並修改了2100多個缺陷。

可見,新的測試挑戰要求測試人員從新思考自動化測試的使命,用創新思惟去充分利用計算資源,以提出更具威力的測試策略。

圖靈訪談:從測試人員的我的發展角度來看,您更鼓勵他們參與什麼樣的測試工做(手動測試、自動化測試,仍是測試用例的設計)?

史亮:我建議測試人員多方面的發展。一個測試新人須要避免的思惟誤區是用某個職務頭銜限制自身能力的發展。例如,我在測試論壇中發現一些測試人員常討論「白盒測試工程師」、「黑盒測試工程師」和「性能測試工程師」等職位。一部分人認爲它們是相互排斥的,即作白盒工程師就不用考慮用戶情景,作黑盒工程師就不要考慮代碼實現,作性能工程師就只要鑽研性能測試工具。其實,這些名詞只是某些公司所設定的職位而已,只表明他們對工程師的要求,並不體現軟件行業對高水平測試人員的指望。實際上,國內外的高水平科技企業都要求工程師可以獨當一面,可以獨立完成一個領域的大部分任務。對於測試人員而言,他須要可以獨立完成一個產品或組件的測試。不管測試活動是白盒測試、黑盒測試仍是性能測試,只要工做須要,他就應該有能力完成。所以,爲了長遠地發展職業生涯,測試人員不該該被頭銜所約束,而是要積極地拓展本身的知識儲備。

圖靈訪談:對在線服務的測試和對傳統軟件的測試有什麼不一樣?

史亮:通常說來,互聯網應用與客戶端軟件有以下不一樣。

  • 互聯網應用運行在雲端,客戶端軟件運行在用戶計算機上。對於雲端服務,運營團隊只要發佈新版本就能夠當即覆蓋全部用戶,因此部署缺陷修復變得很容易。這推進項目團隊以更快地速度開發並測試軟件。反觀客戶端軟件,許多用戶並不常常更新軟件,這推進項目團隊花較多的時間來穩定產品,以減小錯誤。
  • 互聯網應用大可能是「服務器—瀏覽器」端,其中服務端的全部代碼都運行在受監控的環境中。項目團隊能夠經過服務日誌等了解用戶行爲和軟件行爲,這爲分析用戶習慣、發現程序錯誤、優化系統性能等提供了重要資料。這些信息經常是內部測試所不能提供的,對項目團隊提升產品質量有很大幫助。反觀客戶端軟件,項目團隊一般沒法訪問其運行環境,也很難收集到豐富的用戶反饋。這樣的信息缺口要求測試小組更努力的測試、更積極地與用戶交流,但很難到達互聯網項目的效果。
  • 互聯網應用每每擁有涉及多個軟件系統的工做流,每一個系統每每有不一樣的實現技術和測試策略。這要求測試人員掌握更多的方法和工具,並準備複雜的測試環境。客戶端軟件經常只有一個進程,測試人員只須要深刻了解它,就能夠勝任工做,且搭建測試環境比較簡單。

不過,目前的趨勢是客戶端軟件也在「雲端化」,客戶端軟件的測試人員須要更多地借鑑互聯網應用的測試實踐。

  • 許多客戶端軟件已經作到持續更新。例如,一些軟件會自動下載更新,而後提示用戶更新。有些軟件甚至會自動安裝更新,因此用戶每次啓動都是該軟件的最新發布版。在智能手機和平板電腦上,App Store也會提示用戶更新應用,並且在用戶容許的狀況下,有些App Store會自動安裝新版本的應用。此外,有些應用的顯示內容是HTML渲染的結果,只要服務器推送新的HTML頁面,應用的內容就會變化。從某種角度,此類應用與互聯網應用的瀏覽器端沒有什麼差別。
  • 許多客戶端軟件已經能夠持續收集質量信息。成熟的App Store都向開發者提供了豐富的質量信息,包括用戶下載次數、購買次數、用戶評價、軟件崩潰信息、軟件錯誤信息等。這都有助於開發者提升應用質量。此外,許多軟件會使用遙測(telemetry)技術,在用戶容許的狀況下,向服務端發送運行數據。這讓客戶端軟件的項目團隊也能得到豐富的質量數據。
  • 許多客戶端軟件都須要訪問互聯網服務。我回憶了一下平常使用的軟件,大部分都要與某些服務器通信——這也是大多數用戶的廣泛狀況。將來,純粹的「單機軟件」會越來越少,客戶端軟件與互聯網服務的結合會更緊密。所以,相關測試人員也須要掌握一些互聯網服務的測試技術。

客戶端軟件不會和互聯網應用如出一轍,可是它們將擁有更多的類似之處。在高速發展的軟件業,技術工做者須要「擁抱變化」,向同行學習一些新技術,作一些恰當的嘗試,會收穫好的成果。

圖靈訪談:在《軟件測試實戰》的結尾,您總結了不少幫助測試工程師高效學習的方法,其中提到了「耐心」、「堅持」和「知行合一」。您能總結一下一位優秀的測試工程師應該具有的性格特色嗎?

史亮:我認爲任何性格特徵的測試人員均可以得到成功,並且從團隊建設的角度,一個由不一樣性格成員所構成的團隊每每更有活力。

得到我的成功並不容易,我認爲最重要的基礎是對項目、對本身負責任的態度。對項目負責,測試人員須要提供高質量的測試服務來幫助項目成功;對本身負責,測試人員應該以專業人員(professionals)自居,堅持專業主義(professionalism),追求精湛的技藝和卓越的成果。好的態度會推進持續的努力,努力將得到項目成功和技能成長,它們會激發熱情,而熱情會燃起更積極態度。這樣的激勵循環將幫助測試人提高能力,並發展出適合自身特色的職業之路。

圖靈訪談:測試過程當中,工程師須要對產品和業務有至關地瞭解,是否是說測試工程師在某些方面對於產品的瞭解甚至超過了產品經理?

史亮:對於複雜的軟件,任何人都不可能掌握所有的信息。測試人員的主要任務是經過技術調查提供產品的質量信息,爲項目的關鍵決策提供支持。一方面,技術調查要求測試人員掌握產品和業務的知識,另外一方面,深刻的調查會幫助他更深入地理解產品和業務。因此,在許多問題上,測試人員的理解超過產品經理是很天然的狀況。

《軟件測試實戰》第7章「研究產品」從靜態分析、動態分析、業務研究等方面入手,討論瞭如何從測試視角來研究產品。所謂「優秀的測試」並非使用最前沿、最高級的測試技術,而是根據產品和項目的實際狀況選擇恰當的測試方法。因此,測試人員須要在整個項目過程持續地調研,並將研究成果應用於當前的測試。

圖靈訪談:將來辦公軟件產品將會朝什麼方向發展?Office系列產品在將來是否會出現重大革新?

史亮:微軟的總體戰略是「Mobile First, Cloud First」 (移動優先,雲端優先)。在Microsoft Office方面,該戰略大體有以下表現。

  • 除了Windows和Windows Phone,Office套件會進入其餘主流移動平臺,包括iPhone、iPad和Android等。目前,OneNote已經在這些平臺上發佈了相應版本。
  • Office套件會和微軟的雲服務(OneDrive、SharePoint Online等)深度集成,讓用戶能夠隨時隨地經過Office應用來訪問存放在雲端的信息。
  • Office365(Office套件與雲服務的集合)會在商業智能、團隊協做、業務管理等領域持續發力。 將來,移動計算與雲計算會深度集成,Office產品也須要「與時俱進」。

更多精彩,加入圖靈訪談微信!

圖片描述

相關文章
相關標籤/搜索