中國軟件測試專家訪談錄(5)
如何把握軟件質(zhì)量
蔡:如何把握一個軟件的質(zhì)量呢?
邰:軟件測試的目的是什么?不僅是找bug,而是要隨時提供質(zhì)量相關的信息。質(zhì)量是什么?我比較喜歡的一個定義是RST課程里給出的:Quality is the value to someone who matters。做測試,首先要找到這個someone是誰,以及這個someone重視的value是什么。
問題里提到的"把握"軟件產(chǎn)品的質(zhì)量,我覺得這個詞用得很好,測試就像一把尺子,我們可以通過測試衡量一個產(chǎn)品的質(zhì)量,但不能"改變"一個產(chǎn)品的質(zhì)量。也許測試間接地提升了產(chǎn)品的質(zhì)量,但那不是測試本身最主要的目的。
如何把握一個產(chǎn)品的質(zhì)量?對這個問題,我們?nèi)匀豢梢詰肒now Your Mission的思路來回答。
第一,找到這個問題的客戶是誰。是開發(fā)團隊?運維團隊?最終的用戶?還是其他項目管理者?
第二,明白客戶在意的價值是什么,明白客戶希望測試提供什么樣的信息。
第三,制定測試策略,考慮如何開展測試以便盡可能提供實時準確的質(zhì)量相關信息給客戶。
如果不思考這些問題,一上來就開始測試,例如,測試了100個用例,這能說明什么?說明被測系統(tǒng)的質(zhì)量如何?我們知道,測試域是無窮盡的,這個數(shù)據(jù)只是part(部分),而不是整體,意義并不大。測試工程師要具有全局的視角,首先找到客戶關心的value,然后據(jù)此開展測試。當你知道要開展哪些測試活動后,如果此時發(fā)現(xiàn)測試時間不夠,沒有關系,你可以按照風險的大小程度開展測試,先測試風險高的。這樣,測試人員不僅可以告訴別人已經(jīng)測了什么,還可以告訴別人哪些還沒有測,哪些缺陷還沒有修復,哪些地方還存在潛在風險。這種信息對于決策者更為重要,要想把握一個產(chǎn)品的質(zhì)量,一定要有全局的視角。
旁觀者說:對于測試人員來說,不但要嘗試著站在客戶的立場去使用軟件,而且要了解客戶在意的是什么,了解什么對于客戶完成他(她)的工作是重要的,這些都是測試的重點。否則,在軟件測試中平均用力,事倍功半。
質(zhì)量度量過程中的數(shù)據(jù)分析
蔡:我同意你的觀點,在把握軟件質(zhì)量的時候的確是要有全局的觀點。那么,在具體做的時候,需不需要定義一些度量指標呢?
邰:需要的。定義度量指標有很多種方法,比如頭腦風暴(Broadband Delphi)、GQM(Goal-Question-Metric)等。大家可以到網(wǎng)上找一些,然后選擇一些符合自己要求的度量指標。在選擇度量指標的時候,大家要明確自己的目標。你關心的是什么?是bug相關的指標,還是人員相關的指標,抑或是流程相關的指標?不要拿來就用,要多思考。
我這里倒是想要就度量過程中的數(shù)據(jù)分析談一談。大家知道,決定了度量方法后,就要開始收集數(shù)據(jù)。作為一個測試管理者,在面對度量結(jié)果,對這些統(tǒng)計數(shù)據(jù)進行分析的時候,"要更像一名測試人員"--我的意思是,管理者此時要充分發(fā)揮自己作為一名測試工程師的長處,要挑剔地思考(Critical Thinking),多疑多問,去挖掘這些數(shù)字背后的真實現(xiàn)象,而不僅僅是憑表面的一些數(shù)字就下結(jié)論,這種做法和Rick Craig提到的"Meta-Measure"這個詞的含義很像,也就是說,去度量你的度量項。
旁觀者說:不滿足于已經(jīng)得到的,多問幾個為什么。
當我們看到產(chǎn)品的bug數(shù)連續(xù)很多天下降時,不要光顧著高興。在高興之前,多問幾個問題,有哪些原因可能導致缺陷趨勢下降了:是產(chǎn)品變好了?還是測試工作受到什么方面的阻礙導致有些地方?jīng)]有辦法測試?抑或是測試用例的有效性變低了?有沒有測試人員積極性下降的因素在里面?等等。
無論對于測試管理者還是普通的測試人員,都要學會多問問題,挑剔地思考,逆向地思考,問各種各樣的問題。James Bach在"Critical Thinking For Testers"這門課程里講了一個簡單易用的三步法,當你需要挑剔地思考時,只要問自己三個問題:
第一步,Huh?(嗯?)就是問:你說什么?你是說你執(zhí)行了100個用例而且全部pass?在得到數(shù)據(jù)時要做一個確認,確保自己聽到的是對方所要表達的意思。這一步可以避免交流中的誤會和傳遞錯誤信息。
第二步,Really?(真的嗎?)反問對方,這是不是真的?這個過程可以去偽存真。
第三步,So?(接下來怎么做?也許事實比你認為的還要嚴重。)和對方一起分析,基于這條信息,接下去我們需要做些什么。
旁觀者說:簡單實用的三步,做好確認,展開深入的思考。
所以,總結(jié)下來,測試度量要做,測試數(shù)據(jù)要收集,但當我們面對這些度量統(tǒng)計數(shù)據(jù)時,把它們當做Heuristics,我們不會完全Follow這些數(shù)據(jù),而是試圖去Apply這些數(shù)據(jù),再加上我們挑剔地思考,做正確的數(shù)據(jù)分析,讓這些數(shù)據(jù)為我所用。
做一個好的協(xié)調(diào)者
蔡:如何做一個優(yōu)秀的測試管理者呢?
邰:這個問題很大,我沒有全面地想過這個問題,這里我只想談一點:一個好的測試管理者一定是一個非常好的協(xié)調(diào)者。他(她)對內(nèi)協(xié)調(diào)測試團隊,對外代表測試團隊做各種溝通。
你知道,測試行業(yè)的特殊性之一就是總會有一些測試人員對自己的職業(yè)有困惑,有職業(yè)危機感,沒有信心。團隊的管理者應當在團隊里建立積極向上的氛圍,宣揚和培養(yǎng)正面的職業(yè)認識。軟件測試是一個非常有挑戰(zhàn)性、富有激情、充滿樂趣的職業(yè),值得為之奮斗,這是對內(nèi)協(xié)調(diào)很重要的一個方面。
旁觀者說:團隊的管理者應當是團隊的核心,成為團隊的精神領袖。
對外協(xié)調(diào)就更難了,因為在測試團隊之外,有不少人并不了解測試。測試團隊怎么做測試他們并不關心,但是產(chǎn)品一旦出了問題,就會來指責測試。測試管理者應當做好對外協(xié)調(diào),讓測試團隊之外的人了解和理解測試,進而理解測試團隊,這會方便測試工作的開展。
比如,測試的基本原則之一"窮盡測試是不可能的"。但是,有的測試之外的管理者并不是這么認為的,而是認為測試應該抓住所有的bug。測試管理者應當通過各種方法讓他們對測試有正確的期待。我講課的時候,如果有測試之外的人來聽,例如開發(fā)經(jīng)理、一線的開發(fā)人員等,我會很歡迎他們,因為這會幫助他們更多地了解測試。
旁觀者說:對于測試團隊之外的人對測試的誤解,管理者要做好解釋工作。如果有的人很沒有禮貌,輕視測試人員,這個時候測試團隊管理者強勢一些也是好事。對于虛心想來了解測試工作的,則給予耐心和友好的幫助與解釋。
當然,我們不能坐等別人改變想法,而是應當積極地去與他們密切合作,在合作中增進相互了解。其實,測試外部的角色都是"測試的客戶",我們?yōu)樗麄兲峁y試服務。像敏捷里提倡的,"與客戶合作勝過合同談判",測試管理者要想辦法讓這些"測試的客戶"參與到測試工作中來,與他們緊密合作。實際上,我們別無選擇,測試必須與其他角色緊密合作。大家知道,窮盡測試是不可能的,我們必須基于風險來開展測試。但是,誰更了解風險信息呢?我們應該看到,測試外部的人可能更了解客戶,更了解需求,更了解風險所在,例如做需求設計的人,做開發(fā)的人,做售前、售后支持的人,銷售人員,經(jīng)驗豐富的項目經(jīng)理等,我們應該向他們學習,邀請他們和我們一起做產(chǎn)品的風險分析,幫助我們決策哪里可以測試得更深入一些,哪里可以測試得淺一些,讓"測試的客戶"參與到測試中來。
旁觀者說:利用一切可以利用的力量,做好測試工作,就像統(tǒng)戰(zhàn)工作。
如何提高測試分析能力
蔡:你剛才也提到了,你是很看重測試設計的,我也認為測試設計能力是測試工程師的核心能力之一。那么,一位測試工程師應該如何提高自己的測試設計能力呢?
邰:簡單點說,其實不是如何去提高測試設計能力,而是如何去提高他們的分析能力。拿到需求后,如何得到有效的測試用例?這中間有個很重要的步驟就是分析。我們需要使用某種方法或手段去分析被測對象,真正了解被測對象,不僅能了解需求文檔中描述的內(nèi)容,還能挖掘出文檔中沒有提到的或者寫錯的內(nèi)容,這都需要很強的分析能力。經(jīng)過分析,你就會清楚,針對這樣的一個被測對象,應該從哪些方面對其開展測試會比較好,這樣你就明確了這次測試任務的測試目標,確定了測試點。接下來,你如何達成這個測試目標,如何測試這些測試點,就是測試設計的工作了。
測試工程師具備了分析能力,測試就會做到有的放矢。如果什么都是拍腦袋,臨時決定,這樣做缺乏全局觀,看到的是部分,而不是整體。得到的結(jié)果也是部分,不是整體。
蔡:那么,具體如何提高分析能力呢?
邰:你知道,分析能力不是知識,而是一種skill(技能)。知識的提高可以通過看書、參加培訓來實現(xiàn),技能的提高只能靠多實踐。我建議大家多拿一些需求來練習。例如,如果是學習Model Based Testing(基于模型的測試),就拿需求來多練習建模,甚至針對同一個需求用多種模型建模,去比較這之間的差異。如果可能的話,多個人一起學習,可以拿自己的model和別人的做比較,當然,如果能得到有經(jīng)驗的人從旁指點就更好了。這樣的練習做多了,就會形成自己的分析型思維。
旁觀者說:學習既要個人獨自的努力,也要公開討論,二者各有好處。
招聘測試工程師時的要求
蔡:你負責招聘的時候,對于測試工程師有什么要求?
邰:回想過去招聘的時候,我覺得有的時候沒有招對人。如果我現(xiàn)在做招聘的話,我會重點考察面試者是否具備測試人員必備的一些測試技能。
比如,給面試者一個小程序去測試,或者給他一個小游戲去玩,或者問他一些問題,觀察他的反應,這個過程可以體現(xiàn)面試者的測試思維。再比如,觀察面試者的問問題的能力、邏輯思考的能力、逆向思考的能力、觀察是否細致等。
還可以給面試者一個有些挑戰(zhàn)性的任務,觀察候選人的學習能力、分析能力、解決問題的能力,以及是否有面對挑戰(zhàn)的激情。如果一遇到問題,就不知道怎么做,或者沒有興趣去解決問題,原地待命,等待領導,這樣的人不適合做測試。
有一點需要分清楚的是,有測試經(jīng)驗并不等于具備測試思維,因為二者是兩回事。
旁觀者說:我在面試中比較看重發(fā)散思維能力。
在面試中,我不會問“什么是等價類”之類的直白的理論問題,因為沒有意義。候選人即使不會,也會很快學會。
敏捷讓測試如魚得水
蔡:現(xiàn)在敏捷已經(jīng)流行開來,很多公司采用了這種軟件研發(fā)方法。你對軟件測試如何適應敏捷有什么建議?
邰:對于這個問題,我覺得可能換一種問法更好,并不是“軟件測試如何適應敏捷”,而是“軟件測試如何適應瀑布模型的?”
我在了解了敏捷之后,覺得這才是軟件測試應該處于其中的開發(fā)模式。敏捷中的很多理念把測試的本質(zhì)充分發(fā)揮出來。
“個體和交互勝過流程和工具”強調(diào)的是以人為中心,而不是以流程和工具為中心。測試中以人為中心,強調(diào)的就是通過個人技能的發(fā)揮、通過與其他角色有效的溝通獲得有價值的信息,做高效的測試,這比一味地遵守流程和規(guī)范重要得多。
“可以工作的軟件勝過面面俱到的文檔”,這當然是測試想要做到的。以前測試沒有辦法在項目早期就拿到可以工作的軟件開展測試,敏捷以后,測試不用等那么久了,我們可以盡早開展測試了。
“與客戶合作勝過合同談判”,這也是測試人員一直希望做到的。以前我們想找到客戶,想了解客戶到底在意哪些方面,我們希望站在客戶角度測試,可是很難做到,測試和客戶的距離太遠,我們只能把自己假象成客戶去測試。現(xiàn)在客戶和我們緊密合作,我們有很多機會和客戶接觸,了解客戶真實的需求,我們可以開展更有針對性的測試。
“響應變化勝過遵循計劃”,這也是測試提倡的。測試要基于風險,而風險是一直在變化的,我們必須擁抱變化、響應變化,而不是只知道遵循一個事先制訂好的測試計劃,我們的被測對象一直處于變化中,我們要找的bug也不是按照計劃出現(xiàn)的,我們必須基于風險、調(diào)整測試,準備隨時、隨地發(fā)現(xiàn)各種類型的bug。
在我看來,敏捷讓軟件測試如魚得水。所以,倒是以前在瀑布模型的時候測試需要去“適應”。
旁觀者說:敏捷的好處前面邰曉梅已經(jīng)說得比較細了,我這里再來補充幾點個人的認知,嘗試讓讀者朋友們得到一個全面的認識。
(1)敏捷中仍然需要編寫和保留一定的重要的文檔,例如主要功能的設計。有的團隊在實施敏捷的時候打著敏捷的旗號不寫文檔了,項目信息都存在組員的腦袋里。這樣做的風險是,每個人對于應該做成什么樣子可能有不同的理解,而且當有員工流動的時候會有比較大的挑戰(zhàn)。
(2)客戶的參與在國內(nèi)是雙刃劍。有的客戶做事并不專業(yè),認為自己是甲方就隨便更改需求,直接給研發(fā)團隊下指令,導致研發(fā)團隊疲于奔命。最好是既讓客戶參與,又讓客戶與研發(fā)團隊保持適當距離,避免干擾。
(3)是響應變化,還是遵循計劃,需要單獨分析,看優(yōu)先級。
開發(fā)和測試會融合嗎
蔡:根據(jù)經(jīng)典的敏捷理論,在敏捷中就不再區(qū)分開發(fā)和測試了,你覺得這兩個角色在將來會融合嗎?
邰:這要看情況。有的公司開發(fā)人員很強,他們?nèi)プ鰷y試也能做得很好,有的公司則不是這樣。所以我想,不需要把開發(fā)和測試在角色上鮮明地分開,說開發(fā)人員和測試人員,這不是問題的關鍵,而是可以把它們從工作上分開:有開發(fā)類的工作和測試類的工作。從這個角度看,測試類的工作一定會存在,至于是誰去做,就要看實際情況和能力了,這在ISTQB里稱為測試的獨立性(Independence of Testing),可以是開發(fā)人員做測試,他們可以把測試做得很好;也可以是專業(yè)的測試人員去做測試;還可以是獨立的第三方測試團隊去做。
不管誰來做測試,都要保持一定的測試獨立性,畢竟測試有其特有的思維方式。這里的獨立性指的是精神上的獨立,而不是物理上的獨立(測試人員屬于專門的測試團隊,有自己單獨的辦公區(qū)域等)。
旁觀者說:保持測試力量的獨立的確重要,這有利于測試人員做出質(zhì)量方面的判斷。至于是否保持獨立的測試團隊,可根據(jù)測試團隊的成熟程度而定。一般來說,我推薦成立獨立的測試小組,讓測試工程師有歸屬感。
對于軟件測試行業(yè)前景的看法
蔡:對于測試行業(yè)的前景你怎么看?
邰:我認為測試從業(yè)人員面臨的挑戰(zhàn)會越來越大。現(xiàn)在測試環(huán)境越來越復雜,例如云計算環(huán)境、復雜的網(wǎng)絡環(huán)境,被測對象也越來越復雜,bug也隱藏得越來越深,測試人員要充分了解測試環(huán)境和測試對象。
不管是測試新人還是有多年經(jīng)驗的測試工程師,都有必要認識自己的測試思維,不斷有意識地提升自己的測試技能。
書籍推薦
1、《Secrets of A Buccaneer Scholar》,作者James Bach,中文版書名為《學習要像加勒比海盜》。這是一本關于自我教育的書,也是James本人最滿意的一本著作,書雖然很薄,但James花了二、三十年時間才終于寫成,書中每一篇都是精華,記錄了James對自我教育、自我學習方面的認識和經(jīng)驗,測試即學習,相信本書能讓很多愛學習的人深受啟發(fā)。
2、《Lessons Learned in Software Testing》,作者Cem Kaner, James Bach, Bret Pettichord, 中文版書名為《軟件測試的經(jīng)驗與教訓》。本書堪稱軟件測試的“紅寶書”,書中以293條經(jīng)驗教訓的形式闡述了上下文驅(qū)動測試學派(Context-Driven School)的各種啟發(fā)式(Heuristics)的觀點,內(nèi)容涵蓋了測試認知、測試技術、測試管理、測試職業(yè)等方方面面,本書可以作為測試人員的參考寶典,隨時翻閱。
3、《Essential Software Test Design》,作者Torbjorn Ryber。這是一本關于測試設計的書,書中以測試分析設計4步法的方式講述了常用的十幾種測試設計技術的應用,并輔以實例。
4、《XUnit Test Patterns:Refactoring Test Code》,作者Gerard Meszaros,中文版書名為《XUnit測試模式:測試代碼重構》。對于從事單元測試的人來說,這是一本難得的好書,書中談到了很多測試代碼的壞味道,以及大量已經(jīng)被證明的好的測試模式,使得測試代碼更易編寫和維護。
小結(jié)
邰曉梅在這次采訪中和我們分享了很多寶貴的經(jīng)驗,總結(jié)如下:
1、能夠被人所信任、所依賴,是價值的體現(xiàn)。
2、測試并不僅僅是發(fā)現(xiàn)bug,預防bug也非常重要。
3、開發(fā)和測試是一個完整的團隊,不要把開發(fā)和測試分隔得太“開”。
4、如果一個產(chǎn)品或項目有大量的bug暴露出來,作為項目管理者要注意了,這意味著項目本身有很大的改進空間,產(chǎn)品的質(zhì)量不容樂觀。
5、測試團隊的第一目標是要得到一個可發(fā)布的高質(zhì)量軟件,而不是找到盡可能多的bug。
6、我們要學會應用(Apply)測試流程,而不是遵守(Follow)測試流程。
7、做任何測試工作,首先要做的是Know Your Mission(知道你的任務所在)。
8、如果不知道客戶的期望是什么,則容易出現(xiàn)偏差。要了解客戶在哪里,期望的價值在哪里。
9、測試要以人為中心。不再以流程為中心,把流程、模板放到邊上,而把人放在中心的位置上。把測試工程師的能力和潛能發(fā)揮出來,這是比流程更重要的事情。
10、年復一年,不斷地覺得有新的值得去學習的東西,我也在一路不斷成長。當你一直在學習一直有收獲的時候,就會感覺很充實。我喜歡這種充實的感覺。
11、對于培養(yǎng)測試新手而言,我的觀點是,并不一定一開始就要學習系統(tǒng)的軟件測試知識,或者去學習測試新技術,而應當是多實踐并且多思考。給他們一個測試任務,讓他們?nèi)プ觥_@對于新手來說肯定是個挑戰(zhàn),但是在這種情況下他們也會發(fā)揮自己的各項能力去做。當然,指導者也不是撒手不管,可以和他們一起結(jié)對測試,發(fā)現(xiàn)他們的不足,指導他們?nèi)プ鰷y試。通過實踐,新人對軟件測試的認識和興趣都會得到提高,然后再去教他們測試理論知識,例如等價類邊界值等,效果會更好。
12、人與人之間傳遞信息最有效的方式就是面對面的交流,比看文檔、讀書、參加培訓效果更好。
13、如何成為測試牛人:① 描述你的目標;② 如果要實現(xiàn)這些目標,要掌握哪些技能和知識?③ 如何掌握這些技能和知識?
14、軟件測試的目的是什么?不僅是找bug,而是要隨時提供質(zhì)量相關的信息。質(zhì)量是什么?我比較喜歡的一個定義是RST課程里給出的:Quality is the value to someone who matters。做測試,首先要找到這個someone是誰,以及這個someone重視的value是什么。
15、作為一個測試管理者,在面對度量結(jié)果,對這些統(tǒng)計數(shù)據(jù)進行分析的時候,“要更像一名測試人員”--我的意思是,管理者此時要充分發(fā)揮自己作為一名測試工程師的長處,要挑剔地思考(Critical Thinking),多疑多問,去挖掘這些數(shù)字背后的真實現(xiàn)象。
16、測試度量要做,測試數(shù)據(jù)要收集,但當我們面對這些度量統(tǒng)計數(shù)據(jù)時,把它們當做Heuristics,我們不會完全Follow這些數(shù)據(jù),而是試圖去Apply這些數(shù)據(jù),再加上我們挑剔地思考,做正確的數(shù)據(jù)分析,讓這些數(shù)據(jù)為我所用。
17、一個好的測試管理者一定是一個非常好的協(xié)調(diào)者。他(她)對內(nèi)協(xié)調(diào)測試團隊,對外代表測試團隊做各種溝通。
18、經(jīng)過分析,你就會清楚,針對這樣的一個被測對象,應該從哪些方面對其開展測試會比較好,這樣你就明確了這次測試任務的測試目標,確定了測試點。接下來,你如何達成這個測試目標,如何測試這些測試點,就是測試設計的工作了。
19、分析能力不是知識,而是一種skill(技能)。知識的提高可以通過看書、參加培訓來實現(xiàn),技能的提高只能靠多實踐。
20、在我看來,敏捷讓軟件測試如魚得水。
21、不需要把開發(fā)和測試在角色上鮮明地分開,說開發(fā)人員和測試人員,這不是問題的關鍵,而是可以把它們從工作上分開:有開發(fā)類的工作和測試類的工作。從這個角度看,測試類的工作一定會存在,至于是誰去做,就要看實際情況和能力了。
22、不管誰來做測試,都要保持一定的測試獨立性,畢竟測試有其特有的思維方式。這里的獨立性指的是精神上的獨立,而不是物理上的獨立。
(連載完)
posted on 2013-07-12 10:14 順其自然EVO 閱讀(406) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄