不漏掉一個Bug,你需要怎樣做?
原創(chuàng)【51CTO獨(dú)家特稿】軟件測試人員的工作之一就是查找Bug,找出軟件中的Bug,除了需要“火眼金睛”般的能力外,也需要對Bug了如指掌,對此,51CTO專訪了中國軟件評測中心軍工測試部副總經(jīng)理李亞偉老師,來聽一聽他對Bug的理解。
51CTO:Bug大都出現(xiàn)在程序員的編碼過程中。測試人員工作之一就是找出Bug,面對那些難以被人發(fā)現(xiàn)的Bug,測試人員通常會采取哪些手段?以您的經(jīng)驗,對廣大測試人員有什么好的建議?對于開發(fā)人員,您有什么建議讓他們減少Bug的產(chǎn)生?
李亞偉老師:是否能充分發(fā)現(xiàn)軟件的Bug,首先軟件測試管理過程很重要,其次是測試人員的技術(shù)基礎(chǔ)和經(jīng)驗等。
手段之一是嚴(yán)謹(jǐn)?shù)倪^程管理。比如你必須遵行規(guī)范的測試管理過程,首先進(jìn)行測試需求分析,充分了解測試范圍和測試內(nèi)容,然后經(jīng)過評審,這一個過程會避免測試人員對測試需求的理解錯誤,遺漏測試內(nèi)容。其次進(jìn)行軟件測試用例的設(shè)計,明確對每一項測試怎樣進(jìn)行測試,包括選擇什么樣的測試工具,操作流程和輸入數(shù)據(jù)等,同樣經(jīng)過評審。
這一過程可以避免測試人員選擇工具錯誤,操作或輸入數(shù)據(jù)錯誤,遺漏測試內(nèi)容等。第三個階段是執(zhí)行測試,測試最好紀(jì)錄詳細(xì)測試結(jié)果,在什么樣的輸入情況下產(chǎn)生什么結(jié)果,仔細(xì)比對軟件開發(fā)需求,確定軟件是否發(fā)現(xiàn)問題。測試執(zhí)行完畢后,也需要進(jìn)行評審,主要檢測測試是否進(jìn)行充分,記錄是否準(zhǔn)確,軟件問題提出正確的。
手段之二就是技術(shù)保障。技術(shù)關(guān)鍵就是怎么樣設(shè)計一個更好更全面的測試用例,從而保證測試的充分性和正確性。設(shè)計好的測試用例要保證兩個方面,一是你的技術(shù)基礎(chǔ),二是業(yè)務(wù)也就是軟件需求。你只有在非常了解軟件開發(fā)需求的情況下,進(jìn)一步了解軟件的設(shè)計,基于這些,結(jié)合你的技術(shù)基礎(chǔ)和經(jīng)驗,采用合適的測試工具、設(shè)計合理的輸入數(shù)據(jù)和操作流程,才能保證測試的充分性。
測試過程中我們也常常憑借測試工具來發(fā)現(xiàn)更多的問題,比如說代碼規(guī)則檢查、代碼邏輯測試、代碼質(zhì)量度量、性能測試、安全性測試、強(qiáng)度測試等等。使用工具前提是你得知道在什么樣的情況下選擇什么樣的工具,其次會使用測試工具,憑借你的技術(shù)基礎(chǔ)和經(jīng)驗制造測試場景和測試數(shù)據(jù),同時會分析測試結(jié)果,從測試結(jié)果中尋找蛛絲馬跡。有時候商業(yè)或者通用的測試工具不適用的情況下,也可針對測試需求開發(fā)相應(yīng)的測試工具。
對于開發(fā)人員,減少Bug的產(chǎn)生,同樣需要從管理和技術(shù)方面來要求。眾所周知,開發(fā)過程越規(guī)范,軟件出現(xiàn)問題的可能性更少;其次技術(shù)越好,經(jīng)驗越豐富,出現(xiàn)問題的可能性也更少。這些是大道理,但是得承認(rèn)它是正確的。不管怎么樣,我認(rèn)為以下幾個方面對開發(fā)人員提高軟件質(zhì)量,減少Bug的產(chǎn)生很重要:
1.盡可能了解用戶需求,從而轉(zhuǎn)化為軟件需求,組織用戶進(jìn)行需求評審。重點(diǎn)強(qiáng)調(diào)的是軟件開發(fā)需求,不僅僅是描述用戶需要完成什么功能指標(biāo)和性能指標(biāo),而是要轉(zhuǎn)化為軟件開發(fā)必須界面要求、數(shù)據(jù)元素要求、業(yè)務(wù)操作流程要求等。因需求不明確、業(yè)務(wù)流程不清晰、軟件需求規(guī)格說明不細(xì)致等導(dǎo)致軟件問題太常見了。
2.進(jìn)行充分的設(shè)計,并經(jīng)過評審,集合項目組的經(jīng)驗和智慧,對軟件的架構(gòu)、數(shù)據(jù)結(jié)構(gòu)、邏輯處理流程等進(jìn)行充分論證。個人的經(jīng)驗和智慧是有限的,經(jīng)過評審或者小組討論,往往使你思路更清晰,少走錯誤路線或者彎路。
3.編碼遵循一定的編碼規(guī)范,養(yǎng)成良好的編碼習(xí)慣,提高代碼的可讀性。開發(fā)通常是一個長期的過程,依靠標(biāo)準(zhǔn)的規(guī)則和注釋而不是考驗?zāi)愕挠洃浟Α?/p>
4.做好自測工作。開發(fā)過程中,不斷的進(jìn)行單元測試或者集成測試。借助于測試工具或者自己寫代碼測試的方式,首先保證每一個小模塊、函數(shù)或者算法的正確性和合理性。測試時不僅僅是驗證功能是否實現(xiàn),還必須包括對各種異常輸入的處理是否正確,往往軟件的Bug出現(xiàn)在軟件的異常處理不正確或者不充分。
5.做好配置管理。借助于一些成熟的版本管理工具管理好自己的代碼,避免因版本錯誤導(dǎo)致新的問題或者舊問題重復(fù)出現(xiàn)。
6.開發(fā)是一個技術(shù)和經(jīng)驗不斷積累的過程,需要不斷地學(xué)習(xí)各種基礎(chǔ)知識,規(guī)范管理開發(fā)過程,總結(jié)教訓(xùn)、通過各種方式和平臺交流經(jīng)驗。沒有人開發(fā)出的軟件沒有問題,只是多和少的問題,只有不斷地學(xué)習(xí)、交流和總結(jié),才能開發(fā)出更好的軟件。
51CTO:Bug除了出現(xiàn)在程序員編碼階段外,在測試過程中,會不會因為測試人員的操作失誤,亦或是其他原因,導(dǎo)致軟件出現(xiàn)Bug呢?
李亞偉老師:完全有可能在測試過程中導(dǎo)致軟件出現(xiàn)Bug,但不是一定的。比如在進(jìn)行代碼單元測試時,我們通常需要在代碼中進(jìn)行插樁,有可能就插入錯誤,或者在測試執(zhí)行完畢后,未刪除插樁代碼,導(dǎo)致軟件出現(xiàn)Bug。
需要明確的是,如果是因為測試人員改變軟件代碼導(dǎo)致軟件出現(xiàn)Bug那時測試人員操作問題,除此之外,測試過程中的比如軟件操作流程不正確、配置錯誤、數(shù)據(jù)輸入錯誤等等導(dǎo)致軟件出錯均是軟件自身的問題,因為軟件自身應(yīng)該對任何輸入(包括外部數(shù)據(jù)輸入和操作)都是有預(yù)期的,也就是不過什么輸入,均有預(yù)判的正確的響應(yīng)結(jié)果。
此外,因為管理上的原因也可能導(dǎo)致軟件出現(xiàn)Bug,比如配置管理混亂導(dǎo)致軟件部分部件版本錯落,軟件出現(xiàn)問題。
51CTO:對于測試人員來講,除了借助于一些測試工具外,還應(yīng)具備什么樣的個人能力?是否需要具備自己動手處理Bug能力?再則您認(rèn)為軟件開發(fā)人員是否需要具備自我測試的能力?
李亞偉老師:測試工具不是最重要的,測試工具只是一個提高工作效率的輔助工具,不是測試人員必須掌握的,這個隨時可以學(xué)習(xí)使用,使用測試工具只是一個熟練程度的問題,關(guān)鍵還是你的綜合技術(shù)基礎(chǔ),測試經(jīng)驗。
通常認(rèn)為軟件測試人員具備的基本素質(zhì)按重要等級依次是:技術(shù)、溝通能力、自信心、責(zé)任心、耐心和細(xì)心等。
技術(shù)是基礎(chǔ),作為測試人員,你應(yīng)該具備一定的軟件開發(fā)基礎(chǔ),了解軟件的運(yùn)行環(huán)境、生產(chǎn)過程、常見的軟件開發(fā)問題等,同時你需要知道在軟件的開發(fā)過程中各個階段需要進(jìn)行什么測試,選擇什么樣的測試工具,怎樣分析測試工具進(jìn)行測試的結(jié)果等。
其次是你的溝通能力,因為在測試過程中,你需要不斷地跟開發(fā)人員、項目管理人員等溝通協(xié)調(diào),溝通能力是你測試工作順利進(jìn)行的重要保障。測試人員發(fā)現(xiàn)問題最重要,在技術(shù)基礎(chǔ)的保障下,你得知道什么是軟件問題,什么情況下出現(xiàn)問題,出現(xiàn)在什么地方,最好知道因為什么原因出現(xiàn)問題,最最好知道怎么去修改這個問題,這樣的話你跟開發(fā)人員更好溝通,你的測試工作就會進(jìn)行得更順利。
再次,作為測試人員,你得有自信,首先測試工作是一項技術(shù)要求很高的工作,測試并不比開發(fā)地位低。在技術(shù)基礎(chǔ)的保障情況下,你應(yīng)該非常自信地進(jìn)行自己的工作,理直氣壯地向開發(fā)人員提出軟件問題,并堅持自己的觀點(diǎn),明確各方責(zé)任。
最后,測試工作非常重要,你擔(dān)負(fù)著軟件質(zhì)量驗收責(zé)任,你必須有責(zé)任心,耐心和細(xì)心地工作,爭取不放過任何一絲一毫的軟件錯誤和缺陷。
測試和開發(fā)工作是獨(dú)立的,你可以具備動手處理Bug的能力,或者可以協(xié)助開發(fā)人員定位問題,提出修改建議,但是絕對不可自己去修改Bug。自己動手處理Bug的能力能具備更好,但不是必須的。
開發(fā)人員必須具備自我檢測的能力,我們說調(diào)試也是一種測試,但不是系統(tǒng)的或者正規(guī)的測試工作。通常開發(fā)人員需要進(jìn)行編碼規(guī)則自查、單元測試工作等,同時開發(fā)人員在提交測試之前一般也需要先進(jìn)行自我檢測,誰也不愿意把更多的問題讓測試人員發(fā)現(xiàn)。另一個方面,開發(fā)人員只有自己具備自我檢測的能力,才會知道在開發(fā)過程中注意避免產(chǎn)生問題,減少軟件Bug產(chǎn)生隱患。
#p#
51CTO:我們經(jīng)??吹揭豢钴浖谡桨l(fā)布后,仍存在很多Bug。在產(chǎn)品發(fā)布后,是否還需要人員去進(jìn)行測試Bug?對一款產(chǎn)品的測試工作,Bug率達(dá)到一個怎樣的狀態(tài)才算作合格產(chǎn)品?
李亞偉老師:軟件測試是一個有計劃的活動,產(chǎn)品發(fā)布意味著當(dāng)前版本軟件開發(fā)和測試工作完畢,所以嚴(yán)格上來講,有計劃的測試活動已經(jīng)結(jié)束。然后眾所周知有限的測試不可能發(fā)現(xiàn)軟件所有的Bug,我們也經(jīng)常看到,幾乎所有的軟件產(chǎn)品都會有后續(xù)的升級版本,升級的原因:一是因為新增功能,其二就是修改舊版本的Bug,這也說明在行業(yè)實際運(yùn)營過程中,測試在產(chǎn)品發(fā)布后仍然延續(xù)。
軟件測試是一個有計劃的活動,測試活動再次進(jìn)行前必須是軟件代碼在上一次測試活動結(jié)束后進(jìn)行過修訂。軟件測試需要投入人力和物力,產(chǎn)品發(fā)布之后是否需要繼續(xù)進(jìn)行測試,可根據(jù)人員情況和軟件產(chǎn)品自身的情況決定,人員充足,自身認(rèn)為產(chǎn)品質(zhì)量需要繼續(xù)提高,便可繼續(xù)進(jìn)行測試。
Bug率評價產(chǎn)品是否合格我認(rèn)為是不正確的,一個產(chǎn)品也許只有一個Bug,但是這個Bug是致命的,那這個軟件規(guī)模再大,它的Bug率非常小,其產(chǎn)品也是不合格的。另外,這個軟件在應(yīng)用上基本滿足用戶要求,但也存在一些易用方面的小問題,其Bug率較大,但其質(zhì)量我認(rèn)為比存在一個致命Bug的產(chǎn)品質(zhì)量要好。
51CTO:您認(rèn)為測試人員有沒有必要與開發(fā)人員在同一個項目組工作,能將Bug扼殺在萌芽狀態(tài)嗎?如果采用這樣的工作方法,責(zé)任應(yīng)該如何界定,避免互相推諉?
李亞偉老師:測試人員有沒必要與開發(fā)人員在同一個項目組工作,跟公司的管理制度、項目規(guī)模和人員素質(zhì)等有關(guān)系。必須明確一點(diǎn)的事,測試工作和開發(fā)工作必須獨(dú)立,測試人員與開發(fā)人員獨(dú)立。
測試人員與開發(fā)人員在同一個項目組工作,而且人員與工作獨(dú)立,理論上講,如果測試人員素質(zhì)沒有問題,項目管理正常,在軟件開發(fā)的需求分析、設(shè)計以及編碼階段、集成階段等均進(jìn)行了必要的測試工作的話,在前期很大程度上能減少Bug的發(fā)生,也能提高軟件質(zhì)量。但是測試工作是有限的,并不能將所有的Bug都發(fā)現(xiàn)或者預(yù)防其產(chǎn)生。
如果測試人員與開發(fā)人員同在一個項目組,首先工作應(yīng)該獨(dú)立。工作分工非常明確,項目組通常稱包括開發(fā)人員和測試人員,嚴(yán)格上來講,項目組包括項目經(jīng)理、需求分析人員、軟件設(shè)計人員、編碼人員和質(zhì)量管理人員、測試人員等,一般來說,開發(fā)人員兼任需求分析、設(shè)計、編碼工作,質(zhì)量管理人員兼任測試和質(zhì)量管理工作。我們必須清楚一個事實:“設(shè)計而不是測試決定軟件的質(zhì)量”,軟件測試是一個驗證的活動,其依據(jù)是軟件需求規(guī)格說明和軟件設(shè)計說明。軟件測試的質(zhì)量跟測試過程管理、測試人員素質(zhì)有很大關(guān)系。
軟件產(chǎn)品發(fā)布后軟件出現(xiàn)質(zhì)量問題,軟件問題類型多樣,有設(shè)計問題、程序問題、文檔問題等,其責(zé)任要具體定論,一般來說,如果管理沒有問題,而且測試依據(jù)明確,軟件出現(xiàn)不應(yīng)該出現(xiàn)的問題,軟件測試人員有一定的責(zé)任,但主要責(zé)任應(yīng)該是開發(fā)人員的,首先沒有按照需求或者設(shè)計完成開發(fā)人員。
專家簡介:
李亞偉老師
李亞偉,男,31歲,計算機(jī)專業(yè)碩士研究生畢業(yè),中國軟件評測中心軍工測試部副總經(jīng)理,軟件開發(fā)工作三年,軟件測試工作五年,目前從事軍用武器裝備軟件測試項目管理和測試工作,有多年信息系統(tǒng)測試和代碼測試經(jīng)驗。
【51CTO獨(dú)家特稿,轉(zhuǎn)載請表明出處及作者!】
【編輯推薦】