摘要:雖然很多公司企業(yè)都開始重視測試,明白測試對產(chǎn)品質(zhì)量的影響,但能否正確的理解測試,將是影響測試活動成敗的關(guān)鍵因素。
關(guān)鍵詞:測試;單元測試;集成測試;系統(tǒng)測試
中圖分類號:TN919.1 文獻標(biāo)識碼:A 文章編號:1007-9599 (2012) 17-0000-02
隨著軟件和IT技術(shù)的發(fā)展,測試工作也被更多的企業(yè)單位所認(rèn)可,有資料顯示,在微軟公司,測試人員和開發(fā)人員的比例可以達(dá)到2:1,這也彰顯出微軟對測試工作的重視。但仍有一些單位,對測試的理解存在誤區(qū)。
誤區(qū)一:測試的目的就是要找出軟件或系統(tǒng)中所有的bug,使軟件可以正確執(zhí)行它應(yīng)有的功能。
誤區(qū)二:只有測試人員才需要做測試工作,開發(fā)人員只管設(shè)計和編寫軟件,然后交給測試人員測試就行了。
事實上,同這些理解正好相反。
1 測試真正可以達(dá)到的目的
“誤區(qū)一”的觀點是無法實現(xiàn)的,比如windows下的文件拷貝功能,這是windows中比較簡單的一個功能了,但就是這么一個簡單的功能,我們也無法向“誤區(qū)一”說的那樣,找出所有bug,因為我們不可能把所有的可能性都測試到。文件拷貝功能絕不是簡單的選擇一個源文件,然后拷貝到目的目錄那么簡單,有各種各樣的情況場景需要考慮,比如目的目錄中已有同名文件、比如目的目錄所在磁盤空間不足、比如目的目錄層次過深超過windows支持的最大目錄長度、比如原文件是否允許拷貝、比如目的目錄是否可寫、比如當(dāng)前用戶是否有拷貝文件的權(quán)限、比如內(nèi)存不足或CPU忙時的拷貝、比如其他程序執(zhí)行對拷貝的影響等等,對這些情況的考慮已經(jīng)可以設(shè)計出許許多多的測試用例,何況還有許多我們想不到的情境,所以,想窮舉測試一個功能的所有路徑,找出所有bug是不可能的。這樣的目標(biāo)只會阻礙測試人員的思考,引導(dǎo)測試走向極端。
測試是假定程序中存在錯誤而去執(zhí)行程序來發(fā)現(xiàn)盡可能多的錯誤的行為,當(dāng)然這個假設(shè)幾乎對所有軟件都是合理的,沒有bug的軟件幾乎是不存在的。為什么強調(diào)測試的目的是找bug,而不是證明軟件中已經(jīng)不存在bug了呢?
因為這會影響到測試是否成功:如果測試的目的是為了說明程序中沒有錯誤,測試人員思維和行為就會向這個目標(biāo)靠攏,因而下意識的選用一些不易暴露錯誤的測試用例。但是,如果我們的目標(biāo)是證實程序中有錯誤,測試人員就會選用一些更能暴露錯誤的測試用例。
所以正確理解測試,對測試設(shè)計、測試執(zhí)行等測試活動有很大的影響。進而決定這會不會是一個有效的測試活動。
2 測試應(yīng)在什么時機如何開展
“誤區(qū)二”的觀點是目前很多公司都容易犯的錯誤,他們已經(jīng)成立了專門的測試團隊(這是好的一面),但將產(chǎn)品質(zhì)量過多的押寶在系統(tǒng)測試階段,開發(fā)寫完代碼后基本不經(jīng)過什么自測,就將軟件進行系統(tǒng)測試,由于系統(tǒng)測試的時間、人力以及測試工作的特性等因素,這樣系統(tǒng)測試后的軟件中仍然存在著大量的bug,甚至存在很致命的bug,這將導(dǎo)致發(fā)布軟件的質(zhì)量下降和不穩(wěn)定,而使用戶失去信心。
為什么會這樣呢?這正是測試的特性決定的,軟件中的bug是永遠(yuǎn)發(fā)現(xiàn)不完的,并且發(fā)現(xiàn)的越晚,修改的成本就越高,這是微軟公司從二十幾年的實踐中明白的道理,所以要想得到高質(zhì)量的軟件產(chǎn)品,我們就需要系統(tǒng)的規(guī)劃測試,讓不同角色的人參與進來。在軟件開發(fā)過程,一般測試可以分為三個階段進行,它們分別是單元測試、集成測試和系統(tǒng)測試,三個活動相輔相成相互影響。
單元測試是對軟件的基本組成部分進行測試,如模塊、過程等,其目的是根據(jù)模塊的功能說明檢驗?zāi)K的正確性。因為單元測試需要了解程序內(nèi)部的設(shè)計和編碼細(xì)節(jié),所以一般應(yīng)由程序員進行測試,單元測試主要使用白盒測試,可以發(fā)現(xiàn)詳細(xì)設(shè)計和編程時犯下的錯誤,如變量賦值錯誤、判斷條件錯誤等。
單元測試是軟件測試最基本的部分,非常重要,如果單元測試做不好,后續(xù)的集成測試和系統(tǒng)測試將無法順利進行,軟件開發(fā)進度會嚴(yán)重延遲或者被迫發(fā)布一個低質(zhì)量的軟件。
集成測試是根據(jù)系統(tǒng)的整體流程,將各個模塊連接起來進行的測試。集成測試的主要目的是發(fā)現(xiàn)軟件模塊間的接口錯誤,檢查各模塊組成的系統(tǒng)運行是否正確,各組成模塊是否合拍。集成測試通常使用黑盒測試,也可以加入部分白盒測試,可以發(fā)現(xiàn)概要設(shè)計時犯的錯誤,如軟件邏輯錯誤、模塊接口錯誤等。軟件通過集成測試,是可以進入系統(tǒng)測試的前提,對未通過集成測試的軟件進行系統(tǒng)測試,將導(dǎo)致系統(tǒng)測試顧此失彼,影響測試的輸出質(zhì)量。
系統(tǒng)測試將系統(tǒng)硬件、軟件和用戶等視為一個整體,檢查系統(tǒng)在功能、性能等方面是否有不符合需求說明書的地方,所以系統(tǒng)測試應(yīng)以需求說明書為測試依據(jù),站在用戶的角度,通過不斷的使用和攻擊被測對象,盡可能多的找出系統(tǒng)中的bug。系統(tǒng)測試主要使用黑盒測試方法,并且可以借助測試工具等外部力量,來模擬和攻擊被測對象。系統(tǒng)測試可以發(fā)現(xiàn)設(shè)計和分析階段的錯誤,以及系統(tǒng)性能穩(wěn)定性等方面的錯誤,如用戶需求理解錯誤、未完全實現(xiàn)用戶需求、長期運行系統(tǒng)崩潰等。系統(tǒng)測試需要由專門的團隊進行,一般不建議由開發(fā)人員進行,因為開發(fā)人員對待自己的程序,就像對待自己的孩子一樣,會下意識的手下留情,而系統(tǒng)測試需要的是強攻擊性。高效的系統(tǒng)測試并不是在軟件提交系統(tǒng)測試時才開始的,那已經(jīng)太晚了。系統(tǒng)測試需要在需求分析時就開始了解需求,分析測試需求,并隨著軟件的開發(fā)同步進行測試用例設(shè)計,確定測試方法等。開始對軟件進行系統(tǒng)測試的測試執(zhí)行階段,只占系統(tǒng)測試總時間的一半左右。系統(tǒng)測試只有和軟件開發(fā)同步進行,才能更好的理解需求,并且同步的測試設(shè)計準(zhǔn)備,也可以大大縮短軟件的發(fā)布周期,并提高測試的質(zhì)量。
3 結(jié)束語
軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行軟件的過程,是不能找出軟件中所有bug的,錯誤的測試?yán)砟顣?dǎo)致測試走入歧途,而達(dá)不到提升產(chǎn)品質(zhì)量的目標(biāo)。
測試活動應(yīng)貫穿于產(chǎn)品開發(fā)的整個過程,合適的人做合適的測試,正確的進行單元測試、集成測試和系統(tǒng)測試,將使軟件質(zhì)量產(chǎn)生質(zhì)的飛躍。
參考文獻:
[1]潘錦平,施小英,姚天昉.軟件系統(tǒng)開發(fā)技術(shù)[M].西安:西安電子科技大學(xué)出版社,1997.
[2]張海藩.軟件工程導(dǎo)論[M].北京:清華大學(xué)出版社.2008.