古人有云:千里之行,始于足下;九層之臺,起于壘土。在軟件測試中把每一個缺陷遏制在初期萌芽狀態,以最低的成本修復缺陷是每一個測試人員的最基本守則,也是每一個測試人員的夢想。近期,我在所負責的一個軟件測試項目中,因為時間緊張在接手項目后就立即開始運行程序進行測試,結果不盡人意。在反思中我得到一個經驗教訓是:軟件測試不應該忽視靜態測試,否則事后的補救將會是積重難返。
忽視靜態測試,后果將會積重難返
在G.J.Myers的經典著作《軟件測試之藝術》(The Art of Software Testing)中,軟件測試被定義為:程序測試是為了發現錯誤而執行程序的過程。他認為測試是執行程序的過程,也就是在代碼完成后,通過運行程序來發現程序代碼或軟件系統中錯誤的過程。但是,這種測試方式并不能在代碼完成之前就發現系統需求、系統設計上的缺陷,而是把需求、設計上的問題遺留到后期,結果就會造成設計、編程的部分返工。而且,需求階段和設計階段的缺陷還會產生放大效應,大大增加了軟件開發的成本和周期。這是非常不利于保證軟件質量的,這種測試思想主要是受軟件開發瀑布模型影響。
一般來說,在進行系統測試的功能測試階段時,基本上編碼工作已經完成。這個時候所發現的缺陷問題,是需要付出比較高的代價去修正它的。在分析缺陷成本上,有以下公認的結論,就是缺陷發現的越晚,修正的成本就越高。測試階段修正缺陷的成本是編碼階段約4倍的關系。所以,為了減少修正成本,缺陷被發現的越早越好。
因此,在編程階段就找到代碼缺陷是很多測試人員的夢想。幸運的是,我們的確有這樣的方法,就是不用等到編碼結束就可先做靜態測試,它可以在系統開始時的需求討論、功能設計的時候就進行測試。例如,所有的書面的甚至非書面的文檔、資料、方案等都可以成為靜態測試的對象。通過靜態測試在編碼之前就把問題遏制在萌芽中,從而大大降低開發和測試的成本。所以,為了更早地發現問題,我們需要將測試觀念延伸到需求評審、設計審查的活動中去。延伸后的軟件測試就引出了兩個概念,分別是靜態測試和動態測試,而且靜態測試顯得更為重要。
什么是靜態測試?
。1)什么是靜態測試
靜態測試是指不運行被測試程序而尋找程序代碼中可能存在的錯誤或評估程序代碼的過程。靜態測試的特點是不需要運行代碼,也不需要對代碼編譯、鏈接和生成可執行文件。它是通過分析或檢查源程序的方法、結構、過程、接口等來檢查程序的正確性。目的在于找出缺陷和可疑之處,糾正軟件系統的描述、表示和規格上的錯誤,也是進一步執行其它測試的前提。
。2)靜態測試的基本內容
在實際使用中,靜態代碼檢查比動態測試更有效率,更能快速找到缺陷。按經驗估算,一般能發現30%~70%的邏輯設計和編碼錯誤的缺陷。但是靜態代碼檢查非常耗費時間,而且代碼檢查需要豐富的知識和經驗積累。
靜態測試包括代碼檢查、靜態分析兩種途徑。它可以由人工進行,充分發揮人的邏輯思維優勢,也可以借助軟件工具自動進行。代碼檢查包括桌面檢查、代碼審查、代碼走查和技術評審等。主要檢查代碼的設計是否一致性、代碼是否遵循標準性和可讀性、代碼的邏輯表達是否正確性、以及代碼結構是否合理性等。靜態分析則是一種計算機輔助的靜態分析方法。主要對程序進行控制流分析、數據流分析、接口分析和表達式分析等。靜態分析的對象是軟件程序,程序設計語言不同,相應的靜態分析工具也就不同。
文章來源于領測軟件測試網 http://www.kjueaiud.com/