freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

高級(jí)軟件工程(2009)高效的靜態(tài)分析(編輯修改稿)

2024-11-12 06:47 本頁面
 

【文章內(nèi)容簡介】 8 if (size 0) 9 result = (char *)malloc(size)。 10 if (size = = 1) 11 return NULL。 12 result[0] = 0。 13 return result。 14 } 當(dāng) size = 0 時(shí),函數(shù)試圖解析一個(gè)未被初始化的指針 ( malloc in line 9 will not be executed). 第十一講 高效的靜態(tài)分析 22 /55 高級(jí)軟件工程 ?內(nèi)存(變量):值與斷言 – 模擬過程中函數(shù)使用的內(nèi)存需要盡可能準(zhǔn)確地跟蹤 – 每塊內(nèi)存都有值: 3個(gè)基本狀態(tài) ? 知道準(zhǔn)確的值(常量) ? 有一個(gè)初始化的值,但不知道準(zhǔn)確的值 ? 未初始化的值 – 斷言( predicate )也可能與值關(guān)聯(lián) ? 斷言可能是由 1 到 3 部分組成 –單個(gè): initialized –兩個(gè): x3 –三個(gè): a = b + c 第十一講 高效的靜態(tài)分析 23 /55 高級(jí)軟件工程 ?內(nèi)存操作:求值、測試與設(shè)置 – 設(shè)置 (setting)將一個(gè)值賦給內(nèi)存,改變了內(nèi)存的狀態(tài) ? 簡單推理: ( a3amp。 b4 ) = a+b7 – 測試 (testing)在一定的上下文中對表達(dá)式求值,得到一個(gè)布爾結(jié)果。需要進(jìn)行測試的三種情形: ? 需要判定表達(dá)式,以得到一個(gè)布爾結(jié)果 (例如:條件分支 ) ? 語言語義要求(例如:使用前必須初始化) ? 在模型中選擇可能的輸出 (例子見后面關(guān)于“模型”的內(nèi)容 ) 第十一講 高效的靜態(tài)分析 24 /55 高級(jí)軟件工程 ?條件 (condition)、假定 (assumption)與選擇點(diǎn) – 條件可以比路徑更清晰地描述缺陷 – 在路徑模擬執(zhí)行過程中,條件對應(yīng)于假定 – 當(dāng)變量出現(xiàn)在一個(gè)表達(dá)式中、且值不確定時(shí),可以進(jìn)行假定 ? 例子中的 “ size”: 輸入?yún)?shù),模擬是自底向上進(jìn)行的 ? 出現(xiàn)兩個(gè)假定,分別模擬執(zhí)行,并記憶當(dāng)前假定 – 當(dāng)作出一個(gè)假定時(shí),相關(guān)內(nèi)存的狀態(tài)被更新 ? 這個(gè)假定可能提高其它斷言的準(zhǔn)確性 – 對于 a=b+5, 當(dāng)假定條件表達(dá)式 a==2 為真時(shí), a 對應(yīng)的內(nèi)存狀態(tài)更新為 2, b 對應(yīng)的內(nèi)存狀態(tài)可以更新為 3。 – 此時(shí),控制流沒有由已知的值完全確定下來,被稱為選擇點(diǎn) 第十一講 高效的靜態(tài)分析 25 /55 高級(jí)軟件工程 ?路徑結(jié)尾分析 – 當(dāng)一條路徑中的所有語句被模擬執(zhí)行后,可以進(jìn)行一些附加分析 – 發(fā)現(xiàn)一些缺陷。例如:內(nèi)存沒有釋放等等 ?多路徑分析 – 一條長的路徑可能因?yàn)檎{(diào)用而包含多條子路徑 – 需要分別分析 – 為控制總體數(shù)目,可以設(shè)置上限 – 路徑選擇是一個(gè)問題 第十一講 高效的靜態(tài)分析 26 /55 高級(jí)軟件工程 ?模型 – 模型模擬了函數(shù)的行為 – 模擬器遇到一個(gè)函數(shù)調(diào)用時(shí),它通過函數(shù)的模型來模擬被調(diào)用的函數(shù) – 函數(shù)的模型主要是一組輸出集合,這些輸出代表了函數(shù)計(jì)算時(shí)對內(nèi)存狀態(tài)的可能改變 – 每個(gè)輸出由 Guards, Constraints, Results構(gòu)成 ? 約束( Constraint)是前置條件: fopen 的參數(shù)必須有效 ? 結(jié)果( Result)是后置條件: fopen 執(zhí)行后返回值有效 ? 防衛(wèi)( Guards)是測試:某個(gè)特定的輸出可能依賴某個(gè)輸入 int knot(int j) { if (j= =0) return 1。 return 0。 } 例子:返回值只有在 “ j==0” 時(shí)為“ 1” 只有在 “ j!=0” 時(shí)為“ 0” 第十一講 高效的靜態(tài)分析 27 /55 高級(jí)軟件工程 (deref (param p) (alternate return_0 (guard peq p NULL) (constraint memory_initialized p) (result peq return NULL) ) (alternate return_X (guard pne p NULL) (constraint memory_initialized p) (constraint memory_valid_pointer p) (constraint memory_initialized *p) (result peq return *p) ) ) 1 int deref(int *p) 2 { 3 if (p= =NULL) 4 return NULL。 5 return *p。 6 } 一個(gè)模型的例子: 第十一講 高效的靜態(tài)分析 28 /55 高級(jí)軟件工程 Warning Mozilla Apache GDI Using uninitialized memory % 45% 69% Dereferencing uninitialized pointer % 0 0 Dereferencing NULL pointer % 50% 15% Dereferencing invalid pointer 0 5% 0 Dereferencing pointer to freed memory % 0 0 Leaking memory % 0 0 Leaking a resource (such as a file) % 0 8% Returning pointer to local stack variable % 0 0 Returning pointer to freed memory % 0 0 Resource in invalid state 0 0 8% Illegal value passed to function % 0 0 Divide by zero % 0 0 Total number of warnings 1159 20 13 效果 (1998): Mozilla , Apache 5 第十一講 高效的靜態(tài)分析 29 /55 高級(jí)軟件工
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1