我接受了圖靈社群的訪問,圍繞我的新書《軟體測試實戰:微軟技術專家經驗總結》和測試人員職業發展,展開了 討論。以下是採訪全文。
簡介:史亮,東南大學計算機軟體與理論專業博士,研究領域為軟體分析與測試。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提出的概念模型,以展示不同測試方法的風格,其中最左側是嚴格指令碼化的測試,最右側是高度機動的自由式探索。高翔在論述探索式測試時,更著力於自由式探索並提出了一批他總結出的測試模型,我則沒有特別喜好的方法,較寬泛地介紹了一些技術和工具。從某個角度,我們的論述內容構成了深度與廣度的互補。
圖靈訪談:有人說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 2012、Visual Studio 2013和即將到來的Visual Studio 2014)和3個重要更新(如Visual Studio 2013 Update 1、2、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章對詳細地討論了測試開發)。
首先,測試活動是相輔相成的。測試專家Jonathan 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產品也需要“與時俱進”。