比爾●蓋茨曾經(jīng)說過:“微軟不是一家軟件開發(fā)公司,而是一家軟件測試公司! 足見其對于軟件測試的重視程度。 ATC( advanced Technology Center,微軟亞洲工程院)測試組負責微軟某些產(chǎn)品的測試工作。其測試工作的方法沿襲微軟的工作習慣和軟件測試的普遍方法,同時因其測試對象的特殊性,又具有其自身的特點。從本期開始,我們將陸續(xù)邀請ATC測試組的相關負責人來介紹他們所認識的測試工作,以及如何進行測試工作的。

  你喜歡“找茬兒”么? 或者你有著和別人不一樣的思維方式,總能發(fā)現(xiàn)問題的存在?是不是從小被稱之為“破壞”呢? 或者能夠靜下來,在紛繁復雜的事物里找到你想要的東西?如果你滿足以上兩條或者更多的條件,那么請關注一下你可能非常適合的行業(yè)――軟件測試。

  認識測試工作

  由于種種原因,國內(nèi)的軟件測試并沒有規(guī)范化,也沒有真正地被重視起來,甚至沒有被足夠地了解。許多軟件公司都沒有自己獨立負責測試的部門,也不會把測試工作外包出去,開發(fā)人員往往是自己開發(fā)自己測試,邊開發(fā)邊測試,這種很原始的測試方式,沒有比較科學的方法指導,更沒有文檔可依。這樣的局面讓之前提到的軟件測試天才們沒有足夠的用武之地。

  然而,軟件測試是在有限的時間內(nèi)提供高質量軟件的保證,是一個完整正規(guī)的軟件開發(fā)過程中非常重要的一個部分。在大型的軟件公司里,往往軟件測試工作被高度重視,在微軟也不例外。ATC測試組負責Exchange Server、MSN Search、IE、Office Communicator等產(chǎn)品的測試工作。在這些產(chǎn)品發(fā)布之前,都要經(jīng)歷無數(shù)次嚴格地測試,并且測試工作不是從開發(fā)人員開始編寫代碼的時候才開始,而是從該產(chǎn)品建立研發(fā)項目伊始,一直作為項目進行的一項重要工作而伴隨項目的進行貫穿始終的。

  軟件測試的任務不僅包括通常認識中的找出軟件中存在的缺陷和錯誤,在不同的操作平臺下軟件的兼容性以及是否存在安全漏洞等等,作為一個的軟件,還要在用戶使用習慣和體驗方面進行大量深入的考慮,所以要找出軟件提供的功能和用戶需求有出入的地方,在檢測軟件 的執(zhí)行效率和對于破壞性操作的承受能力是否在用戶容忍度范圍內(nèi)等等,這些涉及到非軟件功能上問題的測試工作同樣很重要,但是通常容易在工期或者其他因素影響下被忽視。微軟件的產(chǎn)品之所以能被廣大用戶接受,其良好的用戶體驗是一個非常重要的因素,其中有測試人員在改善用戶體驗和使用習慣方面所做出的巨大貢獻。

  工作的角色和職業(yè)的發(fā)展

  如同大家對測試工作知之甚少一樣,對于測試人員的職業(yè)道路的發(fā)展也不被大多數(shù)人熟知。興趣和個人的期望發(fā)展方向因人而異,測試工作人員也能夠選擇駕馭還是領導團隊。

  在ATC成為軟件測試工程師)SET-Software Test Engineer)后,可以按照自己的喜好和特長繼續(xù)發(fā)展。通過努力,可以成為在測試方面的軟件設計工程師(SDET-Software Design Engineer In Test),之后,如果癡迷于具體技術的研究和應用,可以繼續(xù)發(fā)展成為測試技術主管)Technical Lead), 后成為測試架構師(Test Architect)――測試技術方面的頂峰職位;若是有領導才能,鐘情于在團隊中扮演領導角色,可以嘗試發(fā)展成為測試主管(Test Lead)和測試經(jīng)理(Test Manger), 終成為測試總監(jiān)(Test Director)。

  不同階段的測試工作

  在微軟,軟件產(chǎn)品的研發(fā)項目一般都分為產(chǎn)品定義階段、設計階段、開發(fā)階段、確認階段和發(fā)行階段,測試工作則覆蓋到這里的每個階段,在每個階段的工作重點都有不同。

  通常大家認為在產(chǎn)品定義階段,測試工作的介入還為時尚早,事實上測試人員在這個時候也已經(jīng)開始忙碌起來。他們會根據(jù)產(chǎn)品規(guī)格書的描述理解產(chǎn)品,然后對照需求文檔,找到其中不符點,并綜合考慮項目的要求和資源,對納入需求和開發(fā)目標的功能進行取舍,然后向項目經(jīng)理反饋變更,同時開始構建測試的基礎架構。在產(chǎn)品的設計階段,測試人員在開發(fā)人員忙于設計產(chǎn)品同時,審視開發(fā)設計的文檔并給出反饋意見,同時準備制訂測試計劃和開發(fā)測試工具的工作。開發(fā)階段可能是Bug多的時期,ATC測試組的工作人員會將找到的Bug提交到開發(fā)組中一個共有的數(shù)據(jù)庫中以供開發(fā)人員參考。為了防止針對某個Bug的修正引發(fā)更多的問題,他們在開發(fā)人員修正完Bug之后經(jīng)過嚴格反復的測試,才能將修正后的代碼重新發(fā)布到團隊共有的代碼庫中。產(chǎn)品在確認階段將不再有大的變動,這個時候測試工作仍然緊張地進行,不但針對功能進行測試,還會進行針對性能,壓力和安全的測試。目的是為了保證產(chǎn)品的穩(wěn)定性和提高用戶體驗方面。測試人員的神經(jīng)在發(fā)布階段通常仍然非常緊張,擔心在這個時候出現(xiàn)較大的問題而影響產(chǎn)品的發(fā)布。然而眾所周知,沒有完美的軟件,所以在這個階段查找出來的Bug需要測試人員去全面權衡是否那么重要,一定要去修復,如果時間緊急并且不那么重要,要對這樣的Bug進行有效的取舍了。

  在產(chǎn)品進行測試的過程中,有時候也會發(fā)現(xiàn)操作系統(tǒng)和其他產(chǎn)品的安全漏洞和Bug。與軟件公司不同的是, ATC測試組將會把這些問題及時反饋給微軟件負責相關產(chǎn)品研發(fā)的部門,或者累積到下一個版本集中解決,或者是發(fā)布補丁來進行修下。

  另外,由于測試工作是個“得罪人”的職業(yè),測試人員如何能和開發(fā)人員進行有效且友好的溝通需要他們在平時提升自己的溝通水平和人格魅力了。

  人工測試和自動測試的選擇

  對于一些大型的軟件來說,測試工作確實是非常復雜和繁重的。在繁重的測試工作中,善于平衡人工測試和自動測試來進行工作可以節(jié)省很多的人力和時間,也能將工作做得更好。例如很多時候,對于軟件測試中存在要在一定時間內(nèi)完成類似枚舉的大量重復或者需要模擬大量用戶訪問的服務器壓力承載能力的工作時,測試人員往往會借助測試工具或者自己編寫測試代碼進行軟件的自動測試來代替人工測試以節(jié)省時間和人力。例如,在測試BizTalk Server的時候,由于該產(chǎn)品涉及到26種人類語言,需要在多種不同的操作平臺和不同的編碼語言的情況下對軟件進行全面的測試,浩大工作只能交給測試工具和軟件自動測試來進行。在這種繁重的工作下,利用自動測試來能夠避免由于人工的疲倦和其他影響因素造成的誤操作帶來的無效或者不準確的測試結果,而這是測試工具和自動測試所不會有的問題。

  在對于產(chǎn)品的性能、壓力承載能力方面,自動測試能夠模擬出例如大量的訪問量這親的場景來進行測試,這個優(yōu)勢是人工測試無法涉及的。對于像產(chǎn)品的功能以及本地化/全球化這樣方面的測試,也同樣是自動測試的優(yōu)勢所在。