導航:首頁 > 研究方法 > 軟體靜態分析的方法和步驟

軟體靜態分析的方法和步驟

發布時間:2023-01-19 09:17:59

① 程序靜態分析的分析技術及實踐

程序靜態分析(Program Static Analysis)可以幫助軟體開發人員、質量保證人員查找代碼中存在的結構性錯誤、安全漏洞等問題,從而保證軟體的整體質量。還可以用於幫助軟體開發人員快速理解文檔殘缺的大規模軟體系統以及系統業務邏輯抽取等系統文檔化等領域。 如開發20年以上的金融核心COBOL系統,動輒上千萬行代碼的系統規模。對於理解這樣規模的系統,基於程序靜態分析的輔助理解工具就能發揮積極作用。
本文首先對程序靜態分析的特點、常用靜態分析技術、靜態分析實現方式進行描述,然後通過一個實例講解了程序靜態分析的執行過程。 程序靜態分析是與程序動態分析相對應的代碼分析技術,它通過對代碼的自動掃描發現隱含的程序問題,主要具有以下特點:
(1)不實際執行程序。動態分析是通過在真實或模擬環境中執行程序進行分析的方法,多用於性能測試、功能測試、內存泄漏測試等方面。與之相反,靜態分析不運行代碼只是通過對代碼的靜態掃描對程序進行分析。
(2)執行速度快、效率高。目前成熟的代碼靜態分析工具每秒可掃描上萬行代碼,相對於動態分析,具有檢測速度快、效率高的特點。
(3)誤報率較高。代碼靜態分析是通過對程序掃描找到匹配某種規則模式的代碼從而發現代碼中存在的問題,例如可以定位strcpy()這樣可能存在漏洞的函數,這樣有時會造成將一些正確代碼定位為缺陷的問題,因此靜態分析有時存在誤報率較高的缺陷,可結合動態分析方法進行修正。 (1)詞法分析:從左至右一個字元一個字元的讀入源程序,對構成源程序的字元流進行掃描,通過使用正則表達式匹配方法將源代碼轉換為等價的符號(Token) 流,生成相關符號列表,Lex為常用詞法分析工具。
(2)語法分析:判斷源程序結構上是否正確,通過使用上下文無關語法將相關符號整理為語法樹, Yacc為常用工具。
(3)抽象語法樹分析:將程序組織成樹形結構,樹中相關節點代表了程序中的相關代碼,目前已有javacc/ Antlra等抽象語法樹生成工具。
(4)語義分析:對結構上正確的源程序進行上下文有關性質的審查。
(5)控制流分析:生成有向控制流圖,用節點表示基本代碼塊,節點間的有向邊代表控制流路徑,反向邊表示可能存在的循環;還可生成函數調用關系圖,表示函數間的嵌套關系。
(6)數據流分析:對控制流圖進行遍歷,記錄變數的初始化點和引用點,保存切片相關數據信息。
(7)污點分析:基於數據流圖判斷源代碼中哪些變數可能受到攻擊,是驗證程序輸入、識別代碼表達缺陷的關鍵。
(8)無效代碼分析,根據控制流圖可分析孤立的節點部分為無效代碼。
程序靜態分析是在不執行程序的情況下對其進行分析的技術,簡稱為靜態分析。而程序動態分析則是另外一種程序分析策略,需要實際執行程序。大多數情況下,靜態分析的輸入都是源程序代碼,只有極少數情況會使用目標代碼。靜態分析這一術語一般用來形容自動化工具的分析,而人工分析則往往叫做程序理解。
靜態分析越來越多地被應用到程序優化、軟體錯誤檢測和系統理解領域。Coverity Inc.的軟體質量檢測產品就是利用靜態分析技術進行錯誤檢測的成功代表。國內某軟體公司的閃蝶(BlueMropho)代碼分析平台,是利用程序靜態分析技術專注於大型機遺留系統的代碼理解領域,尤其擅長分析千萬行代碼規模級的COBOL系統。

② 單元測試技術中,靜態分析的方法有哪幾種

單元測試技術中,靜態分析的方法有計算機輔助靜態分析。

單元測試對軟體中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義。

如C語言中單元指一個函數,Java里單元指一個類,圖形化的軟體中可以指一個窗口或一個菜單等。單元測試在軟體開發過程中要進行的最低級別的測試活動。

(2)軟體靜態分析的方法和步驟擴展閱讀:

單元測試(模塊測試)作為開發者編寫的一小段代碼,用於檢驗被測代碼的一個很小的、很明確的功能是否正確。

一個單元測試是用於判斷某個特定條件下某個特定函數的行為。例如,你可能把一個很大的值放入一個有序list中去,然後確認該值出現在list 的尾部。

③ 靜態測試和動態測試的方法有哪些

靜態測試和動態測試的區別如下:

1、測試部分的不同

靜態測試是指測試不運行的部分:只是檢查和審閱,如規范測試、軟體模型測試、文檔測試等。動態測試是通常意義上的測試,也就是運行和使用軟體。

2、測試方式不同

靜態測試,通過評審文檔、閱讀代碼等方式測試軟體稱為靜態測試,通過運行程序測試軟體稱為動態測試。

3、測試方法不同

靜態測試是指不用執行程序的測試,它主要採取方案—代碼走查、技術評審、代碼審查的方法對軟體產品進行測試。動態測試主要通過構造測試實例、執行程序、分析程序的輸出結果這三種方法來對軟體進行測試。

(3)軟體靜態分析的方法和步驟擴展閱讀:

靜態方法是指不運行被測程序本身,僅通過分析或檢查源程序的語法、結構、過程、介面等來檢查程序的正確性。對需求規格說明書、軟體設計說明書、源程序做結構分析、流程圖分析、符號執行來找錯。

靜態方法通過程序靜態特性的分析,找出欠缺和可疑之處,例如不匹配的參數、不適當的循環嵌套和分支嵌套、不允許的遞歸、未使用過的變數、空指針的引用和可疑的計算等。靜態測試結果可用於進一步的查錯,並為測試用例選取提供指導。

動態測試方法是指通過運行被測程序,檢查運行結果與預期結果的差異,並分析運行效率和健壯性等性能,這種方法由三部分組成:構造測試實例、執行程序、分析程序的輸出結果。

參考資料來源:網路-靜態測試

參考資料來源:網路-動態測試

④ 軟體測試的目標和准則是什麼有哪些測試方法測試步驟有哪些

軟體測試的目的;在規定的條件下對程序進行操作,以發現程序錯誤,衡量軟體質量,並對其是否能滿足設計要求進行評估。

准則:對計算機軟體進行測試前,首先需遵循軟體測試原則,即不完全原則的遵守。不完全原則即為若測試不完全、測試過程中涉及免疫性原則的部分較多,可對軟體測試起到一定幫助。

因軟體測試因此類因素具有一定程度的免疫性,測試人員能夠完成的測試內容與其免疫性成正比,若想使軟體測試更為流暢、測試效果更為有效,首先需遵循此類原則,將此類原則貫穿整個開發流程,不斷進行測試,而並非一次性全程測試。

測試方法:

1、靜態測試方法

軟體代碼的靜態分析測驗,此類過程中應用數據較少,主要過程為通過軟體的靜態性測試(即人工推斷或計算機輔助測試)測試程序中運算方式、演算法的正確性,進而完成測試過程,此類測試的優點在於能夠消耗較短時間、較少資源完成對軟體、軟體代碼的測試,能夠較為明顯地發現此類代碼中出現的錯誤。

2、動態測試

計算機動態測試的主要目的為檢測軟體運行中出現的問題,較靜態測試方式相比,其被稱為動態的原因即為其測試方式主要依賴程序的運用,主要為檢測軟體中動態行為是否缺失、軟體運行效果是否良好。

3、黑盒測試

通過數據輸入觀察數據輸出,檢查軟體內部功能是否正常。測試展開時,數據輸入軟體中,等待數據輸出。數據輸出時若與預計數據一致,則證明該軟體通過測試,若數據與預計數據有出入,即便出入較小亦證明軟體程序內部出現問題,需盡快解決。

4、白盒測試

白盒測試相對於黑盒測試而言具有一定透明性,原理為根據軟體內部應用、源代碼等對產品內部工作過程進行調試。測試過程中常將其與軟體內部結構協同展開分析,最大優點即為其能夠有效解決軟體內部應用程序出現的問題,測試過程中常將其與黑盒測試方式結合,當測試軟體功能較多時,白盒測試法亦可對此類情況展開有效調試。



(4)軟體靜態分析的方法和步驟擴展閱讀

軟體測試工具

開源測試管理工具:Bugfree、Bugzilla、TestLink、mantis zentaopms。

開源功能自動化測試工具:Watir、Selenium[1]、MaxQ、WebInject。

開源性能自動化測試工具:Jmeter、OpenSTA、DBMonster、TPTEST、Web Application Load Simulator。

其他測試工具與框架:Rational Functional Tester、Borland Silk系列工具、WinRunner、Robot等。

禪道測試管理工具:功能比較全面的測試管理工具,功能涵蓋軟體研發的全部生命周期,為軟體測試和產品研發提供一體化的解決方案。是一款優秀的國產開源測試管理工具。

Quality Center:基於Web的測試管理工具,可以組織和管理應用程序測試流程的所有階段,包括指定測試需求、計劃測試、執行測試和跟蹤缺陷。

QuickTest Professional:用於創建功能和回歸測試。

LoadRunner:預測系統行為和性能的負載測試工具。

國內免費軟體測試工具有:AutoRunner和TestCenter。

⑤ 軟體工程 靜態測試的主要方法有哪些

(1)人工檢測:是指不依靠計算機而是靠人工審查程序或評審軟體,包括代碼檢查、靜態結構分析和代碼質量度量等;

(2)計算機輔助靜態分析:利用靜態分析工具對被測試程序進行特性分析,從程序中提取一些信息,以便檢查程序邏輯的各種缺陷和可疑的程序構造。

靜態測試包括代碼檢查、靜態結構分析、代碼質量度量等。它可以由人工進行,充分發揮人的邏輯思維優勢,也可以藉助軟體工具自動進行。

(5)軟體靜態分析的方法和步驟擴展閱讀:

代碼檢查包括代碼走查、桌面檢查、代碼審查等,主要檢查代碼和設計的一致性,代碼對標準的遵循、可讀性,代碼的邏輯表達的正確性,代碼結構的合理性等方面;可以發現違背程序編寫標準的問題,程序中不安全、不明確和模糊的部分,找出程序中不可移植部分、違背程序編程風格的問題,包括變數檢查、命名和類型審查、程序邏輯審查、程序語法檢查和程序結構檢查等內容。

在實際使用中,代碼檢查比動態測試更有效率,能快速找到缺陷,發現30%~70%的邏輯設計和編碼缺陷;代碼檢查看到的是問題本身而非徵兆。但是代碼檢查非常耗費時間,而且代碼檢查需要知識和經驗的積累。

代碼檢查應在編譯和動態測試之前進行,在檢查前,應准備好需求描述文檔、程序設計文檔、程序的源代碼清單、代碼編碼標准和代碼缺陷檢查表等。靜態測試具有的發現缺陷早、降低返工成本、覆蓋重點和發現缺陷的概率高的優點以及耗時長、不能測試依賴和技術能力要求高的缺點。

閱讀全文

與軟體靜態分析的方法和步驟相關的資料

熱點內容
小孩的數學教學方法 瀏覽:368
怎麼備份系統的方法 瀏覽:580
三鉤的使用方法圖 瀏覽:833
塞納小桌板安裝方法 瀏覽:955
檸檬草茶的功效與作用及食用方法 瀏覽:331
個稅計算方法地區 瀏覽:144
吉列剃須刀使用方法 瀏覽:875
如何解釋命運的方法 瀏覽:918
肩肌訓練方法 瀏覽:396
2052除以57的簡單方法 瀏覽:74
胸軟筋挫傷治療方法 瀏覽:392
烤豬肉的簡單腌制方法 瀏覽:341
大腿外側冷的原因和解決方法 瀏覽:51
ddc樁工程計算方法 瀏覽:689
指針萬用表使用方法圖解 瀏覽:372
差熱分析最佳方法 瀏覽:631
收被子方法視頻 瀏覽:123
記憶宮殿方法如何訓練的壞處 瀏覽:58
材料進場驗收的基本方法有哪些 瀏覽:382
惠普後視鏡安裝方法 瀏覽:402