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