即使是一些資深的測試工程師,也會承認:
如果不知道什么樣的測試是“有效”的測試,項目組就會面臨這樣的問題:預(yù)留給測試的時間用完了,即使懷疑軟件中仍然遺漏很多缺陷,也只好匆匆收場,把麻煩留給將來。 怎樣的測試才是“有效”的測試?面對這一難題,估且談?wù)勛约旱囊恍┐譁\的看法,借以拋磚引玉。
測試活動是由人來完成的,所以測試是否“有效”要看執(zhí)行的人安排得是否恰當(dāng)。 1)程序員不能測試自己的程序 測試的思維和開發(fā)是完全不同的。開發(fā)者是從完成軟件功能以及軟件的質(zhì)量出發(fā)來考慮問題的,而測試人員則是從發(fā)現(xiàn)軟件缺陷的角度來考慮問題的。程序員要測試自己的程序,很難做好這種思維的轉(zhuǎn)變。從心理上,要對自己的作品挑錯,也是很難做到的一件事。 2)安排最好的程序員測試 測試并不是一件簡單的事。要能從一個功能已經(jīng)實現(xiàn)的軟件產(chǎn)品中找到錯誤,需要具備一定的經(jīng)驗程序員才有可能做好。如果隨便安排一個人來做測試,有可能只能給出一堆讓軟件產(chǎn)品順利通過的無用的測試用例而已。
測試是為了找出缺陷,不是為了證明程序是正確的。只有從這個目的出發(fā),才有可能發(fā)現(xiàn)程序中潛在的錯誤。
在進行測試設(shè)計的時候,不僅要編制有效輸入數(shù)據(jù)的測試用例,還要編制無效輸入數(shù)據(jù)的測試用例。有效輸入,只能驗證程序的功能性是否正確,對于程序的可靠性,安全性,它是無能為力的。
完成一輪測試之后,不僅要對發(fā)現(xiàn)的問題進行改錯,對更改的代碼進行回歸測試,還應(yīng)對測試結(jié)果進行分析,以決定: 1)是否滿足測試終止條件,可以結(jié)束測試。 2)在已發(fā)現(xiàn)的問題類型當(dāng)中,是否存在一些習(xí)慣性或普遍性的問題,如果有,分析其可能存在的位置,設(shè)計合適的測試用例,找出它來。 3)通常在已經(jīng)發(fā)現(xiàn)錯誤的地方會發(fā)現(xiàn)更多的錯誤。要分析已經(jīng)發(fā)現(xiàn)問題的測試用例設(shè)計的是否充分,是否需要設(shè)計新的測試用例,以找出尚未發(fā)現(xiàn)的問題。
測試一般包括單元測試、集成測試、系統(tǒng)測試、驗收測試。從開發(fā)與測試的關(guān)系來看,這些測試類型分別用于驗證詳細設(shè)計、結(jié)構(gòu)設(shè)計、需求規(guī)格說明、用戶需求。單元測試,用于驗證軟件單元的正確性;集成測試,用于驗證軟件單元和模塊接口的正確性;系統(tǒng)測試用于驗證軟件需求的實現(xiàn);用戶測試,用于驗證用戶需求的實現(xiàn)。這些測試類型驗證的對象完全不同,只有完成了這些測試工作,開發(fā)出來的軟件才滿足“正確的做”和“做的正確 ”。所以這些測試類型,一個都不能少。
1)單元測試的有效性 a)單元測試,要確保詳細設(shè)計的軟件單元的功能的實現(xiàn); b)最合理的單元測試,應(yīng)當(dāng)是邊開發(fā)、邊審查、邊測試。如果等到所有的軟件單元全部開發(fā)完成,才開始進行單元測試,你會耗費更多測試的時間; c)單元測試,要解決軟件單元代碼的規(guī)范性、正確性的問題; d)單元測試要滿足一定的代碼覆蓋率和路徑覆蓋率的要求,特別是關(guān)鍵的軟件單元。 2)集成測試的有效性 a)制定一個有效的集成策略。集成順序不應(yīng)是隨意的,應(yīng)優(yōu)先考慮那些關(guān)鍵的軟件單元(如果它出現(xiàn)問題,將給軟件帶來很大的影響后果)以及與軟件外部輸出有關(guān)系的軟件單元。 b)在開發(fā)軟件單元的時候就要考慮集成的順序,將單元測試和集成測試一并考慮,按照提成的先后順序開發(fā)軟件單元,邊開發(fā)邊審查邊測試邊集成。 3)系統(tǒng)測試和驗收測試的有效性 a) 系統(tǒng)測試和驗收測試,都不應(yīng)只關(guān)注功能測試、性能測試、接口測試,除此之外,還要考慮用戶界面測試、安全性測試、壓力測試、可靠性測試、安裝/反安裝測試等內(nèi)容。 b) 驗收測試是以用戶為主導(dǎo)的測試,驗收測試的測試用例應(yīng)從用戶使用的角度考慮。 以上零零散散地談了幾點如何“有效”測試的想法。這些是從過程方法上面談的,后面會從技術(shù)層面再來探討。 微信贊賞專用通道
|
|