官术网_书友最值得收藏!

第2章 程序靜態分析

2.1 程序靜態分析概述

程序靜態分析是指在不運行程序的前提下,僅通過分析或檢查程序的語法、結構、過程、接口等對程序進行分析的過程,其主要目的在于檢測軟件中的缺陷。統計表明,在整個軟件開發生命周期中,30%~70%的代碼邏輯設計和編碼缺陷是可以通過靜態代碼分析來發現和修復的。在程序靜態分析過程中,要盡可能多地發現代碼中的邏輯錯誤,讓代碼符合正確邏輯,并進一步滿足高效性、清晰性、規范性、一致性等要求。

程序靜態分析通過分析源程序的語法、結構、過程和接口等來檢查和驗證程序的正確性。其中,語法錯誤檢查是最基本的程序靜態分析工作之一,該檢查通常由編譯器完成。如圖2-1所示,編寫完成的程序會交由編譯器逐行分析,找出程序中存在的語法錯誤。當程序中語法錯誤被修正后,研發人員還需借助人工或其他靜態方法來進一步檢測程序中的非語法類型缺陷,如不匹配的參數、不適當的循環嵌套和分支嵌套、不允許的遞歸、未使用過的變量、空指針的引用以及可疑計算等。其中,代碼評審、結構分析是常用的程序靜態分析方法。

圖2-1 程序靜態分析示意圖

2.1.1 代碼評審

表2-1中給出了常見的代碼評審項目。與動態測試只能發現錯誤外部征兆不同,在代碼評審過程中一旦發現錯誤,通常能對其進行精確定位,由此可以降低錯誤修正的成本。此外,在代碼評審時,有時可以發現成批的錯誤,如分散在多處的同一類型錯誤,而動態測試通常只能檢測到單個錯誤。代碼評審法主要通過桌面檢查、代碼審查和代碼走查等方式對軟件代碼進行檢查。

表2-1 常見的代碼評審項目

(1)桌面檢查

桌面檢查是指開發人員通過閱讀程序、對照錯誤列表、推演測試數據等方式對代碼進行缺陷檢測的方法,是一種常用的代碼評審方法。

與其他代碼評審方法相比,桌面檢查的效率是比較低的,這主要是因為桌面檢查隨意性較大,除非有嚴格的管理和技術規范約束,否則檢查內容、檢查方式、檢查強度等內容基本都取決于開發人員個人意志,而一般情況下開發人員通常難以發現自己代碼中的問題。對此,在實踐中可以采用交叉桌面檢查的方法:兩個開發人員交換各自的程序進行檢查,而不是自己檢查自己的程序。

(2)代碼審查

代碼審查是指由若干開發人員和測試人員組成審查小組,通過閱讀、討論、評價和審議等,對程序進行靜態分析的過程。代碼審查通常分為兩步:第1步,小組負責人把設計規格說明書、控制流程圖、程序文本及有關要求和規范分發給小組成員,作為審查的依據;第2步,召開程序審查會,通過會議和集體討論、評價和審議,以集體的智慧從不同的角度分析程序中的問題。

代碼審查也是軟件開發中常用的手段,同其他測試手段相比更容易發現程序中與架構、時序相關的問題。同時,代碼審查還可以幫助團隊成員提高編程技能,統一編程風格。

(3)代碼走查

代碼走查是指由人扮演計算機的角色,把數據代入程序并模擬代碼的運行,觀察程序是否正常運行的過程。在代碼走查時,研發人員需要不斷觀察程序運行狀態和運行結果來判斷程序實現是否符合預期。與代碼審查相同,代碼走查過程也分為兩步:第1步,小組負責人把材料先發給走查小組的每個成員,讓他們認真研究程序;第2步,組織代碼走查會議。與代碼審查不同,與會人員不僅需要閱讀程序和對照錯誤檢查表進行檢查,還需要模擬代碼的運行,共同分析和檢查程序的運行過程和結果。

代碼審查與代碼走查等方法都以小組為單位進行。但與代碼審查不同,代碼走查著重于模擬程序的運行,它需要開發人員預先準備一批測試用例,推演每個測試用例的運行過程和結果,把測試數據沿程序的運行邏輯走一遍,過程和中間狀態記錄在紙張或白板上以供監視檢查。

2.1.2 結構分析

靜態結構分析是幫助測試人員理解軟件整體架構的有效方法。如圖2-2所示,借助于面向系統結構、數據結構、數據接口、內部控制邏輯等內部組織結構的測試分析工具,程序可被轉化為文件調用關系圖、模塊控制流圖、類間依賴關系圖、函數調用關系圖等圖表文件,從而使得測試人員可以更好地宏觀把握、微觀分析程序文件,更有效地發現程序當中的問題或者不合理的地方,便于進一步分析和定位缺陷。表2-2給出了常用的靜態結構分析方法。根據分析結果表現形式的不同,可將其進一步分為基于表、基于圖和其他類型的靜態結構分析方法。

圖2-2 靜態結構分析示意圖

表2-2 常用的靜態結構分析方法

主站蜘蛛池模板: 浦东新区| 都匀市| 广饶县| 屯昌县| 涿州市| 德钦县| 苍山县| 古浪县| 洮南市| 水城县| 涿鹿县| 濮阳市| 吴忠市| 兴海县| 元江| 海伦市| 应用必备| 榆树市| 古丈县| 普安县| 普安县| 泰来县| 固镇县| 黑山县| 香港 | 惠东县| 浪卡子县| 乐亭县| 利辛县| 周至县| 伽师县| 建昌县| 大城县| 新乡县| 措勤县| 新宾| 涿州市| 平凉市| 万盛区| 新巴尔虎左旗| 金塔县|