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