我接受了圖靈社區的訪問,圍繞個人新書《軟件測試實戰:微軟技術專家經驗總結》和測試人員職業發展,展開了 討論。如下是採訪全文。程序員
簡介:史亮,東南大學計算機軟件與理論專業博士,研究領域爲軟件分析與測試。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發佈的移動應用成爲用戶的新寵。相比之下,套裝軟件顯得不那麼「時髦」。所以,微軟的測試給人以「傳統」的印象。
可是,若是仔細觀察,不難發現微軟的產品已經發生了深入的變化,且還在持續演變中。伴隨而來的是軟件開發和測試方式的轉變。如下是一些例子。
我相信,隨着微軟業務模式的轉變,微軟的軟件研發會持續演化。在此過程當中,好的思想和經驗會被傳承下去,而新語境勢必催生出新的實踐,並讓一些在其餘公司得到成功的方法在微軟獲得應用。此外,微軟擁有許多有特色的項目,項目組之間的交流經驗會催生出一批優秀的實踐。
圖靈訪談:手動測試和自動測試各自的優缺點是什麼?微軟在實踐上是如何結合這兩種測試方法的?
史亮:微軟是一家大型企業,擁有多種類型的項目。不一樣的項目對於測試提出了不一樣的要求,所以項目小組每每會採用不一樣的測試策略。通常而言,微軟要求測試人員具有較高的技術水平,可以熟練地開發自動化測試和測試工具。在許多項目組,測試人員須要編寫大量的代碼來測試產品,也須要花費至關的時間來手工測試產品。一般,第一線的測試人員最瞭解產品和技術,他們會主動探索各類技術,以發展出多樣性的測試策略。
在此,我介紹一些個人我的觀點(《軟件測試實戰》的第5章對詳細地討論了測試開發)。
首先,測試活動是相輔相成的。測試專家Jonathan Kohl將不一樣的測試活動比喻爲不一樣的交通方式,每種方式都有優勢與不足。
我喜歡走着上班。我很享受風景、運動,以及一邊漫步一邊思考問題的時光。在戶外新鮮的空氣中,在遠離電腦的思考中,我得到了一些極好的想法。沿途的觀察激發了靈感,將我引向創造性的解決方案。
可是步行是緩慢的,若是我駐足觀賞可愛的動物或享受日出霞光映紅的山脈,我極可能會遲到。因此,在趕時間的時候,我會搭乘公共交通。雖然公共汽車或列車仍舊伴隨着步行,可是我能用快得多的速度及時地到達目的地。我極少駕車上班,由於這讓我無暇去觀察並思考。可是,當別人駕車時,我可以從旅途中得到不少。例如,最近我坐城鐵去上班,在路上發現了之前從未注意到的河谷峭壁。我曾經屢次通過河谷,可是直到坐上輕軌的那天,在沒有步行或駕車分心的狀況下,我才能用全新的角度觀察到新的景色。
-- Jonathan Kohl, Man and Machine
在以上隱喻中:
可見,手工測試和自動化測試並非相互排斥的。若是綜合它們的優勢,就可能開發出更具威力的測試策略,以實現單獨的手工測試或自動化測試不能達到的效果。
第二,測試是爲了得到產品質量信息的技術調查,任何有助於周密調查的方法都是有價值的。在罪案偵查中,刑偵人員會利用多種方法,從各個信息源收集情報。他們會利用高精密的儀器提取證據,也會大範圍走訪以得到線索,更重要的是,他們會反覆思考當前的情報,以隨時調整調查方向。與之相似,測試人員也須要綜合運用多種技術和工具,去探究新的信息,並根據新發現及時調整測試方向。在調查過程當中,學習、分析、推斷、反思等思惟活動是必不可少的,而這些是沒法自動化的。
第三,利用自動化測試,測試人員能夠實施更有效的技術調查。如下是一個案例。
模糊測試是一種修改輸入數據來暴露軟件缺陷的方法。若是產品須要讀取複雜的文檔,測試小組可使用文件模糊器,對原始文檔進行隨機修改,生成大量的模糊文檔。而後,模糊測試框架啓動產品,令它讀取這批被篡改的文檔,並嚴密監控可能的異常狀況。在測試結束後,測試人員分析測試日誌中記錄的錯誤,以識別安全缺陷。模糊測試是一種暴力測試方法,一輪模糊測試會使用數萬個甚至更多的模糊文件。若是運用得當,模糊測試能夠發現許多手工測試或簡單的自動化測試沒法發現的問題,這對於提升軟件的安全性極具價值。例如Microsoft Office團隊在開發Office 2013時,經過模糊測試發現並修改了2100多個缺陷。
可見,新的測試挑戰要求測試人員從新思考自動化測試的使命,用創新思惟去充分利用計算資源,以提出更具威力的測試策略。
圖靈訪談:從測試人員的我的發展角度來看,您更鼓勵他們參與什麼樣的測試工做(手動測試、自動化測試,仍是測試用例的設計)?
史亮:我建議測試人員多方面的發展。一個測試新人須要避免的思惟誤區是用某個職務頭銜限制自身能力的發展。例如,我在測試論壇中發現一些測試人員常討論「白盒測試工程師」、「黑盒測試工程師」和「性能測試工程師」等職位。一部分人認爲它們是相互排斥的,即作白盒工程師就不用考慮用戶情景,作黑盒工程師就不要考慮代碼實現,作性能工程師就只要鑽研性能測試工具。其實,這些名詞只是某些公司所設定的職位而已,只表明他們對工程師的要求,並不體現軟件行業對高水平測試人員的指望。實際上,國內外的高水平科技企業都要求工程師可以獨當一面,可以獨立完成一個領域的大部分任務。對於測試人員而言,他須要可以獨立完成一個產品或組件的測試。不管測試活動是白盒測試、黑盒測試仍是性能測試,只要工做須要,他就應該有能力完成。所以,爲了長遠地發展職業生涯,測試人員不該該被頭銜所約束,而是要積極地拓展本身的知識儲備。
圖靈訪談:對在線服務的測試和對傳統軟件的測試有什麼不一樣?
史亮:通常說來,互聯網應用與客戶端軟件有以下不一樣。
不過,目前的趨勢是客戶端軟件也在「雲端化」,客戶端軟件的測試人員須要更多地借鑑互聯網應用的測試實踐。
客戶端軟件不會和互聯網應用如出一轍,可是它們將擁有更多的類似之處。在高速發展的軟件業,技術工做者須要「擁抱變化」,向同行學習一些新技術,作一些恰當的嘗試,會收穫好的成果。
圖靈訪談:在《軟件測試實戰》的結尾,您總結了不少幫助測試工程師高效學習的方法,其中提到了「耐心」、「堅持」和「知行合一」。您能總結一下一位優秀的測試工程師應該具有的性格特色嗎?
史亮:我認爲任何性格特徵的測試人員均可以得到成功,並且從團隊建設的角度,一個由不一樣性格成員所構成的團隊每每更有活力。
得到我的成功並不容易,我認爲最重要的基礎是對項目、對本身負責任的態度。對項目負責,測試人員須要提供高質量的測試服務來幫助項目成功;對本身負責,測試人員應該以專業人員(professionals)自居,堅持專業主義(professionalism),追求精湛的技藝和卓越的成果。好的態度會推進持續的努力,努力將得到項目成功和技能成長,它們會激發熱情,而熱情會燃起更積極態度。這樣的激勵循環將幫助測試人提高能力,並發展出適合自身特色的職業之路。
圖靈訪談:測試過程當中,工程師須要對產品和業務有至關地瞭解,是否是說測試工程師在某些方面對於產品的瞭解甚至超過了產品經理?
史亮:對於複雜的軟件,任何人都不可能掌握所有的信息。測試人員的主要任務是經過技術調查提供產品的質量信息,爲項目的關鍵決策提供支持。一方面,技術調查要求測試人員掌握產品和業務的知識,另外一方面,深刻的調查會幫助他更深入地理解產品和業務。因此,在許多問題上,測試人員的理解超過產品經理是很天然的狀況。
《軟件測試實戰》第7章「研究產品」從靜態分析、動態分析、業務研究等方面入手,討論瞭如何從測試視角來研究產品。所謂「優秀的測試」並非使用最前沿、最高級的測試技術,而是根據產品和項目的實際狀況選擇恰當的測試方法。因此,測試人員須要在整個項目過程持續地調研,並將研究成果應用於當前的測試。
圖靈訪談:將來辦公軟件產品將會朝什麼方向發展?Office系列產品在將來是否會出現重大革新?
史亮:微軟的總體戰略是「Mobile First, Cloud First」 (移動優先,雲端優先)。在Microsoft Office方面,該戰略大體有以下表現。