@import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
第三章 人是軟件測試的中心 《轉(zhuǎn)載》
簡單的職業(yè)經(jīng)歷
蔡:請介紹一下你的職業(yè)經(jīng)歷。你是一直在華為工作?
邰:對,我的職業(yè)經(jīng)歷很簡單。碩士研究生畢業(yè)后,在華為從事軟件測試工作11年。
旁觀者說:從職業(yè)發(fā)展的角度來說,長期在一家公司工作和服務(wù)于不同的公司各有好處。換多家公司,可以接觸到不同的項目和不同團隊,見多識廣。長期在一家公司服務(wù),有利于經(jīng)驗和人脈方面的積累,增加獲得更高職位的可能性。
我本科和研究生的專業(yè)是機械電子,都是在天津大學(xué)上的。2001年3月,我研究生畢業(yè),當年4月9日,我進入華為工作,到今年(2012年)的4月9日離開華為,整整11年。
蔡:真是不容易,在一家公司服務(wù)了11年。這11年是一段豐富的經(jīng)歷,給我們介紹一下吧。
邰:回過頭來看,這11年可以分為兩個階段。2001年到2008年做具體產(chǎn)品的測試。在這個階段里,從測試執(zhí)行,到測試設(shè)計,再到團隊管理,也是一個逐步提升的過程。
旁觀者說:有一個問題,也簡單,也殘酷,就是回顧自己的職業(yè)經(jīng)歷,問自己:它是不是一個逐步提升的過程?如果沒有了提升,可能就是處于停滯狀態(tài)了。
從2008年開始,我的工作內(nèi)容發(fā)生了轉(zhuǎn)變:從"負責(zé)某個具體產(chǎn)品的測試"轉(zhuǎn)變到"負責(zé)幫助其他測試人員更好地做好他們的測試工作"上來。
當時正好我所在的測試部(華為上海研究所)和來自華為瑞典研究所的高端測試專家有一個TPI(Test Process Improvement)合作項目,而我也希望自己能夠從管理路線轉(zhuǎn)到技術(shù)路線上來,希望自己在做了七、八年的軟件測試之后,能夠系統(tǒng)地、深入地思考一下怎樣把測試工作做得更好。我很幸運地參與了這個合作項目,并自此開始了測試理論方面的研究。
TPI的工作就是對現(xiàn)有的測試工作做評估,并給出評估報告,然后各利益相關(guān)人再根據(jù)評估報告以及項目上下文開展具體的測試改進實施。說實話,在參與這個合作項目之前,沒有想過要做測試理論方面的工作和研究,身邊也沒有這個氛圍。和來自瑞典研究所的專家接觸后,才意識到了測試理論與測試實踐相結(jié)合的重要性。
TPI合作項目持續(xù)了一年多,我從中受益匪淺。TPI項目結(jié)束后,我選擇了一個當時問題比較多的領(lǐng)域"測試設(shè)計領(lǐng)域",繼續(xù)開展更深入的調(diào)查和研究,提出了一套測試分析和測試設(shè)計的框架:MFQ&PPDCS ,該論文在葡萄牙的ICSEA2009會議上得到發(fā)表。基于這篇論文,我開發(fā)了相關(guān)的培訓(xùn)課程,在公司內(nèi)部講過十幾次,讓更多的同事了解了自己的主張。
旁觀者說:職業(yè)發(fā)展的路都是一步一步走的,我相信,在公司內(nèi)部的培訓(xùn)經(jīng)歷對于邰曉梅后來成為獨立測試咨詢顧問是有幫助的。
2008年,我代表部門參加了ISTQB -FL的培訓(xùn),覺得它不錯,把測試方面的知識做了系統(tǒng)化的梳理。參考ISTQB大綱,結(jié)合華為的工作經(jīng)驗,我開發(fā)出了"軟件測試基礎(chǔ)"這門課程。參加這門課程的人來自于各個產(chǎn)品線,而不僅僅局限于我所在的無線產(chǎn)品線。我從事測試工程領(lǐng)域的研究后,經(jīng)常會收到來自不同部門不同地域的求助郵件或者咨詢電話,有的時候可能都分不清楚對方來自哪里。但是,沒有關(guān)系,我愿意給大家提供測試方面的咨詢和服務(wù)。能夠被人所信任、所依賴,是價值的體現(xiàn)。
旁觀者說:有的人可能怕做多了,心想這又不是我的職責(zé)范圍;有的人則愿意為別人提供服務(wù),被別人需要。
2010年和2011年,我到美國參加了三次StarWest/StarEast會議,收獲非常大。回來后我做了詳細的總結(jié),覺得光是把從大會上學(xué)到的技術(shù)分享給大家,并不充分,我希望更多的同事也能感受到參會的氛圍,感受到測試工作的激情,于是就開始組織策劃公司內(nèi)部的軟件測試會議,這樣的會議共舉辦了兩屆,每年參加的人數(shù)大概有250人。
11年華為工作經(jīng)歷中印象深刻的事情
蔡:在一家公司能持續(xù)工作11年,挺不容易的。在這11年里,有哪些給你留下深刻印象的項目或者事情呢?
測試并不只是發(fā)現(xiàn)bug
邰:這方面的事情自然很多,我舉個例子吧。大概在2005年的時候,我?guī)б粋€測試組做一個小型產(chǎn)品的測試。這款產(chǎn)品的主要功能是配置和維護,功能并不算復(fù)雜,但是是新開發(fā)的產(chǎn)品,從零做起。我們測試組有十幾個人,大家的干勁都比較高。這是我第一次獨立帶團隊做測試,也是既興奮又緊張。我很看重這個項目,從計劃、人員配置到團隊氛圍等,我都處處留意。
在我的帶領(lǐng)下,我們測試組每天都能發(fā)現(xiàn)很多缺陷,開發(fā)改不過來了,因為新增的bug數(shù)量大于開發(fā)每天所能解決的數(shù)量,再加上開發(fā)團隊還要做新功能,這樣,就出現(xiàn)了測試壓倒開發(fā)的"態(tài)勢"。
旁觀者說:測試壓倒開發(fā),與開發(fā)壓倒測試一樣,不是好的項目狀態(tài)。二者應(yīng)當勢均力敵,互相制約,互相推動和促進,做出一個好的產(chǎn)品來。
整個項目進行期間,測試團隊不可謂不努力,但是績效卻不好,也算不上快樂。這其中的原因是什么呢?當時百思不得其解。現(xiàn)在回過頭來看,至少有兩個方面是可以從中吸取教訓(xùn)的。
第一,當時的理念認為測試就是提問題單。現(xiàn)在很多人都知道,這是不對的,測試并不僅僅是發(fā)現(xiàn)bug,預(yù)防bug也非常重要。
第二,沒有把開發(fā)和測試視作一個完整的團隊,而是開發(fā)和測試分隔得太"開"。
在產(chǎn)品bug非常多的時候,我們沒有想到去做缺陷分析,采取一些預(yù)防措施,沒有問:"這類缺陷怎么又出現(xiàn)了?我們能不能走到開發(fā)前期,去了解測試做哪些工作,可以幫助預(yù)防這類缺陷?甚至測試能不能幫助開發(fā)解決一些bug?因為未修復(fù)的bug已經(jīng)堆積很多了"等這樣的問題,不認為這些也是自己的工作職責(zé)。由于缺乏"預(yù)防測試(Preventive Testing)、完整團隊(Whole Team)"的思想,測試只是一味地發(fā)現(xiàn)缺陷,而大量的缺陷意味著產(chǎn)品質(zhì)量并不高,測試人員難免會有挫敗感。
旁觀者說:在實際的項目中,有的時候其實也能發(fā)現(xiàn)流程或者工作方法方面的一些問題,但是往往因為疲于應(yīng)對工作,下不了決心來做改進。項目結(jié)束后的總結(jié)過程是很有必要的,讓我們更加清晰地看到不足,制定出具體的改進辦法。
更多的啟發(fā)
如果深入思考,這個案例可以帶給我們更多的啟發(fā)。
第一,如果一個產(chǎn)品或項目有大量的bug暴露出來,作為項目管理者要注意了,這意味著項目本身有很大的改進空間,產(chǎn)品的質(zhì)量不容樂觀。
處理bug是很費時間的:測試提交一個bug,開發(fā)打回,說這不是bug;測試再打過去,證明這就是一個bug;開發(fā)修改后,不經(jīng)過單元測試,就打給測試去驗證;如果測試驗證沒有通過,還要打回給開發(fā),開發(fā)重新修復(fù),測試再重新驗證……可以想象,成千上萬個bug,如果每一個都要走這樣的流程,單是解決掉這些bug就要耗費多么大的精力!每一個bug就是對系統(tǒng)的一次change,軟件系統(tǒng)本身已經(jīng)很復(fù)雜了,再加上成千上萬次change,系統(tǒng)變得更加復(fù)雜,潛藏的缺陷有可能更多!
旁觀者說:對于全新的功能,我在自己的團隊有一個提法:剝筍子。軟件的功能都是逐步完善的,在初期很容易發(fā)現(xiàn)這樣、那樣不對的地方,這個時候不要開過多的bug,而應(yīng)該像剝筍一樣一層一層來。先提交最主要的幾個bug,開發(fā)修改了以后,測試人員得到新的build,再基于新的build提交另幾個主要的bug。bug分清楚主次,提交的時間分先后,能夠提高bug的有效性,也方便開發(fā)人員解決問題,提高研發(fā)效率。
第二,測試流程只起到輔助性的作用。
當時公司已經(jīng)有了非常不錯的測試流程,有很多測試工程方法可以使用,有很多測試文檔模板可以選用,我認為只要認真遵守流程規(guī)范,就一定能做好測試。在某一個時間點,應(yīng)該采用什么樣的模板、出具什么樣的測試文檔、使用哪些測試工程方法、開展哪些測試活動、做哪些測試總結(jié)和缺陷分析等,我都一一照做,花了不少的時間。但是,遺憾的是,我雖然努力了,卻沒有抓住事情的本質(zhì),忘記了我們的第一目標是要得到一個可發(fā)布的高質(zhì)量軟件,而不是找到盡可能多的bug。
旁觀者說:測試團隊天生有想發(fā)現(xiàn)更多bug的傾向,有的時候績效考核會起到推波助瀾的作用。但是的確,按時發(fā)布質(zhì)量達到標準的軟件產(chǎn)品是任何"參戰(zhàn)部隊"的最重要的目標。
實際上,我現(xiàn)在認為,測試流程是一種啟發(fā)式(Heuristics),遵守了流程,測試不一定就做得好;不遵守流程,測試也不一定就做不好。測試流程起到的更多的是一個輔助性的作用,而不是決定性的作用。所有的啟發(fā)式都可以幫助我們思考。我們要學(xué)會應(yīng)用(Apply)測試流程,而不是遵守(Follow)測試流程。
旁觀者說:讓測試流程為我所用,而不是機械地遵循。
第三,做任何測試工作,首先要做的是Know Your Mission(知道你的任務(wù)所在)。
測試是一種服務(wù),為我們的客戶(包括其他各種角色和最終的客戶)提供質(zhì)量相關(guān)的信息。當我們接收到一個測試任務(wù)時,首先要做的就是了解客戶是誰,客戶期望得到什么價值,希望測試為其提供什么樣的服務(wù)。有的朋友可能有這樣的工作習(xí)慣,不管軟件大小或者功能大小,一上來就動手測試,迫不及待地想提交bug。可是,如果不知道客戶的期望是什么,則容易出現(xiàn)偏差。要了解客戶在哪里,期望的價值在哪里。
旁觀者說:我很贊同測試是服務(wù)的提法。記得幾年前在一家企業(yè)做演講,當我提出測試是一種服務(wù)的時候,就有朋友表示不理解,認為服務(wù)人員的地位太低了,這么說是看低了軟件測試。
在社會生活中,從事服務(wù)的人員沒有得到足夠的尊重。其實每一個人都是平等的,只是從事的職業(yè)不一樣而已。說測試是一種服務(wù),并不意味著測試低人一等。在大的研發(fā)體系中,軟件測試這支力量扮演的是服務(wù)的角色,為提高研發(fā)效率和提高產(chǎn)品質(zhì)量而奮斗。
對測試認識的三個階段
蔡:謝謝你的分享。雖然你的工作經(jīng)歷比較單純,但我相信你在華為工作的11年當中,對軟件測試的認識應(yīng)該是變化和逐步提高的。
以bug、流程、人為中心
邰:是,我對軟件測試的認識是有變化的。
在2008年之前,雖然我也一直在做測試工作,但是我的確思考不多。現(xiàn)在回過頭來看,如果在成長的道路上有人時不時地指點一下,那真是一件值得慶幸的事,會進步很快。從2008年開始,我會經(jīng)常瀏覽測試類的博客、網(wǎng)站,參加各種會議,多做交流,對測試的認識有明顯上升。
旁觀者說:找到自己的導(dǎo)師,虛心請教。有的時候經(jīng)驗豐富的人一句話,就能讓自己少折騰幾個月。
到現(xiàn)在為止,我對測試的認識可以大體劃分為三個階段。
第一階段,以bug為中心。認為測試就是找bug,bug越多越好。這可稱為原始階段。在這個階段里,一般都是拿到軟件就開測,流程不一定規(guī)范,也沒有想到要規(guī)范,只是找bug。
第二階段,以流程為中心。在測試工作中,認為應(yīng)該先定義各種測試流程和規(guī)范,認為只要follow這些流程和規(guī)范,就可以更有效、更高效地找bug,就可以做好測試。
第三階段,以人為中心。認為測試是以人為中心。我現(xiàn)在也還在這個階段。不再以流程為中心,把流程、模板放到邊上,而把人放在中心的位置上。把測試工程師的能力和潛能發(fā)揮出來,這是比流程更重要的事情。
旁觀者說:團隊的核心就是人,團隊管理者的主要工作始終是調(diào)動和保持員工的工作積極性。
注意:這三個階段對于我個人而言是個順序認知的過程,但不意味著每個組織都要串行依次經(jīng)歷這三個階段,也就是說,不一定要先建立測試流程,才談測試以人為中心的事情。
軟件測試在沒有規(guī)范的時候也能做,也能找到一些問題,有了規(guī)范之后你的測試看起來就會正式一些,但如果想把測試做好,就應(yīng)該以人為中心。最近國內(nèi)開始流行的探索性測試,就是以人為中心,充分發(fā)揮人的各項技能。
研究軟件測試思維
認識到測試以人為中心后,我開始研究"軟件測試思維"相關(guān)課題,這是一個很大的課題,不僅涉及測試領(lǐng)域的知識,還可以從心理學(xué)、社會學(xué)、人類學(xué)等很多領(lǐng)域獲得啟發(fā),這個課題的研究我也是剛剛起步,目前開發(fā)了"認識你的測試思維"這門課程,旨在幫助學(xué)員認識自己的測試思維,以實現(xiàn)改進和提高。
我通過和不同的測試人員開展結(jié)對測試發(fā)現(xiàn),在外部條件都相近的情況下,例如,在相同的時間內(nèi),相同的測試對象和測試環(huán)境,甚至相同的測試用例,不同的人卻得到不同的測試結(jié)果。在測試工作當中,測試思維扮演著重要的角色。但是,對于大多數(shù)人來說,測試思維--你測試時是如何思考的--是在潛意識下發(fā)生,很難用語言表達的,所以為了提高測試思維,首先得認識當前的測試思維。
測試深度圖
為了把看不見的東西可視化地表現(xiàn)出來,我提出了"測試深度圖(Test Depth Graph)"的概念。通過這張圖,可以展現(xiàn)出學(xué)員測試思維的特點,例如,是擅長深入思考(Focused Thinking)還是擅長廣度思考(Defocused Thinking)等。在觀察的過程中,我會告訴學(xué)員,哪些地方他(她)做得很好,這樣他(她)就會得到激勵,對測試工作更有信心。對于不足,我也會提起,這樣他(她)在下次遇到類似場景時就會有意識地提醒自己,去做改進。這樣的事情反復(fù)幾次,一個人在測試思維方面就會得到提高。
旁觀者說:表揚就是一種正面的引導(dǎo)。
蔡:對這三個階段的認識的跨越你都是在一家公司,你的職業(yè)生涯比較順利。
邰:是,我比較幸運,相對還是比較順利的。剛進華為時,我告訴自己,兩年后我就離開。過了兩年,我發(fā)現(xiàn)有很多東西要去學(xué)習(xí)。就這樣,年復(fù)一年,不斷地覺得有新的值得去學(xué)習(xí)的東西,我也在一路不斷成長。當你一直在學(xué)習(xí)一直有收獲的時候,就會感覺很充實。我喜歡這種充實的感覺。
重點測試技術(shù)
蔡:請你給大家介紹一下你認為重要的測試方面的技術(shù),或者新技術(shù)。
邰: 所謂的新技術(shù),是有context(上下文)的。例如ReqBT(Requirements Based Testing,基于需求的測試),我邀請了Richard Bender在ChinaTest 2012上做了介紹,有的朋友可能會認為這是測試新技術(shù),其實作者提出來已經(jīng)30多年了。新與不新,是個相對的概念,有的人感覺比較新,有的人則早就接觸過了。
不同的公司也有不同的情況。對于有些公司來說,在時間、資源等很有限的情況下,ReqBT這樣偏"重"型的方法可能就不適合,他們可能更需要類似于RST(Rapid Software Testing,快速軟件測試)這樣偏"輕"型的方法,RST是James Bach和Michael Bolton講述的一門課程,側(cè)重于如何在測試進度緊張、測試資源有限等條件下快速而有效地開展測試工作。所以,技術(shù)的應(yīng)用或者重要與否取決于項目上下文。
人也是有上下文的。不同資歷的人,看法會不一樣。當然,如果只是年資的增長但是見識沒有增長,這是自己要認真思考的問題。對于培養(yǎng)測試新手而言,我的觀點是,并不一定一開始就要學(xué)習(xí)系統(tǒng)的軟件測試知識,或者去學(xué)習(xí)測試新技術(shù),而應(yīng)當是多實踐并且多思考。給他們一個測試任務(wù),讓他們?nèi)プ觥_@對于新手來說肯定是個挑戰(zhàn),但是在這種情況下他們也會發(fā)揮自己的各項能力去做。當然,指導(dǎo)者也不是撒手不管,可以和他們一起結(jié)對測試,發(fā)現(xiàn)他們的不足,指導(dǎo)他們?nèi)プ鰷y試。通過實踐,新人對軟件測試的認識和興趣都會得到提高,然后再去教他們測試理論知識,例如等價類邊界值等,效果會更好。
旁觀者說:邰曉梅這里提出來一個新的觀點:對于軟件測試,可以走先實踐、后理論的學(xué)習(xí)路子。這里有新意,值得參考。對于公司內(nèi)部轉(zhuǎn)崗的情況,可以嘗試一下這種做法,先直接做測試,然后慢慢回過頭來學(xué)習(xí)理論。對于剛畢業(yè)的大學(xué)生朋友,因為需要找一份測試工作,先學(xué)習(xí)測試理論會有利于通過面試。
如何學(xué)習(xí)軟件測試
蔡:你對于正在學(xué)習(xí)軟件測試的朋友有哪些建議?
多實踐,多思考
邰:我強調(diào)的是,不管你是在學(xué)校里,還是在公司里,要多交流,多實踐。如果條件允許,最好找一個導(dǎo)師,項目里的最好,可以面對面交流,這對成長有很大的幫助。從我個人的體會來說,人與人之間傳遞信息最有效的方式就是面對面的交流,比看文檔、讀書、參加培訓(xùn)效果更好。
旁觀者說:尋找導(dǎo)師,向周圍的人學(xué)習(xí)。如果真能找到一位師傅,建立一種或密切或松散的師徒關(guān)系,收獲往往很大。除了技術(shù)方面,思維方式和做事風(fēng)格都是對人有很大影響的幾個方面。
找導(dǎo)師往往很難,因為這是要雙方愿意的事情。每個人對自己的師傅有一定的期望,有的時候你看準了一位師傅對方也不一定愿意來指點你。虛心請教,有利于學(xué)習(xí)和找到導(dǎo)師。
多實踐,多思考。如果工作了七、八年,在軟件測試方面的進步卻并不明顯,這是值得反思的:是不是自己思考不多?
三步法
如果你想學(xué)習(xí)軟件測試,甚至成為測試的牛人,我們可以應(yīng)用前面提到的Know Your Mission的方法思考這個問題。
第一步,請你描述自己的目標,你想成為什么樣的人?是想寫軟件測試方面的著作,還是要得到公司的認可?目標要定下來。
第二步,如果想要實現(xiàn)這些目標,需要具備哪些技能和知識?也許你需要了解測試設(shè)計技術(shù),也許你需要在某個方面很強,比如測試自動化、安全性測試、性能測試等。
第三步,如何掌握這些知識和技能?也許你要去學(xué)習(xí)一些相關(guān)的測試課程,瀏覽相關(guān)的網(wǎng)站,閱讀一些測試書籍,思考總結(jié)自己的測試經(jīng)驗等。

歸納起來,這是一個What'What'What(目標是什么-需要什么技能和知識-做些什么以獲取這些知識和技能)的過程。這3個What是一個迭代的過程,剛開始的時候?qū)γ恳粋€What的認知少一點沒有關(guān)系,循環(huán)執(zhí)行這個過程,就會一步步貼近你的目標。
旁觀者說:定一個目標何其容易,愿意一步一步、一天一天去實現(xiàn)它又何其難啊!
測試就是學(xué)習(xí)
我主張的一個觀點是,Testing is learning(測試即學(xué)習(xí))。誰的學(xué)習(xí)能力強,誰就可以快速地了解被測對象,快速地了解哪些區(qū)域bug比較多、風(fēng)險比較高,從而把測試做得很好。一個人要想成為測試高手,需要具備很強的學(xué)習(xí)能力。如果只是資歷高,但學(xué)習(xí)能力差,會很麻煩的。
(未完待續(xù))
天貓 軟件自動化測試開發(fā)
posted on 2013-09-27 11:09
zouhui 閱讀(188)
評論(0) 編輯 收藏 所屬分類:
2.軟件測試 基礎(chǔ)概念