減少軟件測試的時間和成本(一)
雖然人們普遍關注軟件開發(fā)成本,并且從提供開發(fā)生產(chǎn)率改進的技術中獲得了激動人心的進步,但軟件測試成本和生產(chǎn)率往往被忽視,或者干脆說“這就是它的成本,這就是它的生產(chǎn)率。”具有諷刺意味的是,軟件測試成本和時間通常與開發(fā)軟件所需要的時間和成本相近。
Boris Beizer報告稱,“開發(fā)一個可工作的程序的一半工作量一般都消耗在測試活動上。”
IDT對軟件測試進行獨立調(diào)查(詳見第4章),收到超過700份回復。其中我們提出的一個問題是總程序的計劃百分之多少消耗在測試上。46%的回復認為占30%~50%,另外19%認為占50%~70%。
與軟件測試相關的成本和時間占項目總成本和計劃的很大一部分,因此,對提高測試效率和減少勞動時間的改進會有顯而易見的效果。評估影響的主要考慮因素有:
哪些方面,有多少測試可以自動化?
預期減少多少測試時間和計劃?
對提高測試覆蓋率和質(zhì)量的影響的期望是什么?
是否還需考慮其他要降低的因素?
有多少測試程序可以自動化?并非項目中所有測試都能夠或應該自動化。作為AST的最佳對象是那些最常重復和勞動密集型的測試。只運行一次或很少運行的測試是不值得進行自動化的測試,除非規(guī)定的環(huán)境中要求自動化,例如,手動測試很困難或非常耗時。此外,如果每次發(fā)布測試用例都會變化,從而AST每次都需要改變也不值得自動化。第6章將進一步介紹“是否需要自動化以及哪些要自動化”。
對大部分項目而言,我們的經(jīng)驗是40%~60%的測試能夠且應該自動化。對每個項目都應該進行初步的高層次評估。第6章詳細介紹了這種做法。隨著在更多項目中實施AST的經(jīng)驗積累,將不斷地改善你根據(jù)歷史數(shù)據(jù)對測試程序中應用AST的等級的精確估算能力。
預期減少多少測試時間和計劃?在任何測試自動化之前,應計算ROI。計算ROI的細節(jié)參見第3章。此外,還要考慮在這些測試領域中可自動化的最佳候選測試的需要:自動化測試計劃和開發(fā)、測試數(shù)據(jù)生成、測試執(zhí)行和結果分析、錯誤狀態(tài)和監(jiān)視以及報告的生成,這會在下一節(jié)討論。
經(jīng)驗表明,在測試執(zhí)行階段中,AST對減少項目進度有很大的影響。這個階段一般包括的活動有:執(zhí)行測試、分析測試結果、修正錯誤和生成測試報告。根據(jù)經(jīng)驗,如果這些過程自動化了,可以節(jié)省大量的時間。
經(jīng)驗還表明,在最初的測試自動化實施階段,即測試自動化的開發(fā)階段,將會有初始的時間增長。
1、自動測試計劃和開發(fā)——初始測試的工作量增加
自動化測試初期增加了測試工作的復雜程度。在決定引入自動測試工具之前,需要考慮許多特殊的地方,關于這一點的討論將貫穿整本書。例如,需要回顧計劃的AUT或SUT,以確定它是否與測試工具兼容。有時市場上沒有能滿足自動化需求的工具,這時就需要自己開發(fā)測試軟件和框架。此外,需要審查未自動化測試提供支持的樣本數(shù)據(jù)的有效性。需列出所需數(shù)據(jù)的種類和變體,然后為獲取或開發(fā)需要創(chuàng)建的樣本數(shù)據(jù)制定計劃,這將在下一節(jié)中討論。還需要考慮測試腳本的模塊化和復用。自動化測試具有自己的開發(fā)工作類型,具備自己的小型開發(fā)生命周期。必須支持測試開發(fā)生命周期的計劃,可以與應用程序開發(fā)工作同時進行,具有增加測試計劃工作的效果。
過去,測試過程的開發(fā)是一個緩慢、昂貴且耗時的過程。當軟件需求或軟件模塊改變時,測試工程師往往要重新開發(fā)已有的測試過程,并從頭開始創(chuàng)建新的測試過程。利用測試管理和自動測試工具的能力來生成或修改測試過程(參考第1章的介紹),花費的時間只是耗費手動測試過程的一小部分。
2、生成測試數(shù)據(jù)——測試工作/計劃減少
使用測試數(shù)據(jù)生成工具也有助于減少測試工作。有效的測試策略需要仔細獲取和準備測試數(shù)據(jù)。如果測試數(shù)據(jù)不佳,功能測試將遭受挫折。相反,如果測試數(shù)據(jù)良好,將有助于改善功能測試。好的測試數(shù)據(jù)是結構化的,可以增進理解,提高可測性。正確選擇數(shù)據(jù)的內(nèi)容,可以減少維護工作,并更具靈活性。在需求模糊的情況下,數(shù)據(jù)的準備工作有助于將注意力集中在業(yè)務上。
數(shù)據(jù)字典和詳細的設計文檔對確定樣本數(shù)據(jù)非常有用。除了提供數(shù)據(jù)元素名稱,數(shù)據(jù)字典還可能提供數(shù)據(jù)結構、基數(shù)、使用規(guī)則和其他有用信息。設計文檔,特別是數(shù)據(jù)庫模式(schema)的設計文檔,同樣有助于確定程序與數(shù)據(jù)之間的交互情況,以及數(shù)據(jù)和元素之間的關系。
因為有太多的可能性,通常無法測試所有的輸入輸出的組合和變體,以檢驗應用程序的功能性及非功能性需求是否得到滿足。但是,自動化測試以及各種測試設計技術可幫助縮小大量的數(shù)據(jù)輸入輸出組合和變體。其中一種測試技術是“數(shù)據(jù)流覆蓋”,旨在將數(shù)據(jù)流包含進所選擇的測試過程步驟中。使用這種技術有助于確定測試路徑的選擇,以便滿足所有適合的路徑的數(shù)據(jù)流的某些特性。還有其他一些技術,比如邊界條件測試技術。
【編輯推薦】