制定語(yǔ)義基線的制作方法
【專(zhuān)利說(shuō)明】制定語(yǔ)父基線
[000。 背景
[0002] 由程序開(kāi)發(fā)者開(kāi)發(fā)的計(jì)算機(jī)程序常常相對(duì)較大和復(fù)雜。例如,操作系統(tǒng)的源代碼 可包括幾十萬(wàn)到幾百萬(wàn)條代碼,其中代碼的不同部分由不同的開(kāi)發(fā)者在不同的時(shí)間帖上寫(xiě) 出。由于開(kāi)發(fā)者通常無(wú)法通過(guò)源代碼推測(cè)所有可能的執(zhí)行,在程序的運(yùn)行時(shí)可發(fā)生無(wú)法預(yù) 料的錯(cuò)誤。例如,某些變量值、事件、執(zhí)行路徑、其一些組合等可使得程序在被執(zhí)行時(shí)按不期 望/不合需的方式操作(例如,該程序包括潛在的隱錯(cuò))。為了檢測(cè)隱錯(cuò),已開(kāi)發(fā)出了靜態(tài) 分析和驗(yàn)證工具。
[0003] 靜態(tài)分析和驗(yàn)證工具分析計(jì)算機(jī)可執(zhí)行代碼W標(biāo)識(shí)程序執(zhí)行期間可發(fā)生的潛在 隱錯(cuò),諸如空指針異常、除W零錯(cuò)誤、數(shù)組越界錯(cuò)誤等等。在某些情況下,被提供警告的開(kāi)發(fā) 者可希望忽略運(yùn)樣的警報(bào),因?yàn)檫\(yùn)些隱錯(cuò)可能是偽造的或者不值得修復(fù)(例如,修復(fù)隱錯(cuò) 可導(dǎo)致程序中更嚴(yán)重的問(wèn)題)。隨后,進(jìn)一步,開(kāi)發(fā)者可希望使運(yùn)些"舊"警告被抑制,因?yàn)?開(kāi)發(fā)者已經(jīng)審閱了運(yùn)些警告,并且重新提供相同的警告是多余的。換言之,抑制警告可允許 開(kāi)發(fā)者僅被通知由向程序添加新特征引起的問(wèn)題。
[0004] 使用常規(guī)的靜態(tài)分析和驗(yàn)證工具,開(kāi)發(fā)者的選項(xiàng)為1)向代碼添加假設(shè)語(yǔ)句W抑 制每一個(gè)不期望的警告;或者2)經(jīng)由屬性或警報(bào)過(guò)濾文件來(lái)抑制警告。運(yùn)些方法具有許多 缺點(diǎn)。例如,第一選項(xiàng)允許開(kāi)發(fā)者作出顯式的假設(shè),但運(yùn)僅在運(yùn)樣的假設(shè)被開(kāi)發(fā)者感興趣的 情況下才是有利的。此外,插入假設(shè)要求與由該工具發(fā)出的開(kāi)發(fā)者期望抑制的警告的數(shù)目 成比例的人工努力。此外,在作出對(duì)程序的改變時(shí),開(kāi)發(fā)者必須人工地重構(gòu)任何假設(shè)。關(guān)于 W上提到的第二選項(xiàng),各警告可通過(guò)警告消息、警告類(lèi)型或警告位置之間的句法匹配的方 式來(lái)抑制。由此,例如,開(kāi)發(fā)者可指示在程序的新版本被分析時(shí),要抑制在程序的行i處的 任何警告。
[0005] 更具體地,開(kāi)發(fā)者可在對(duì)警告進(jìn)行人工檢查之后添加抑制屬性(或警報(bào)過(guò)濾文件 中的條目);然而,運(yùn)樣的基于句法的抑制可能十分脆弱,因?yàn)閷?duì)程序的小改變可導(dǎo)致句法 匹配失敗。失敗的抑制可隨后導(dǎo)致重新報(bào)告已經(jīng)被開(kāi)發(fā)者歸類(lèi)為虛假的警報(bào),由此導(dǎo)致混 淆和惱怒。此外,使用句法匹配可無(wú)意地抑制事實(shí)上確實(shí)為新的警告(例如,由對(duì)程序的修 訂引起的警告)。例如,基于行的抑制策略可期望地抑制與程序的行i處的斷言失敗有關(guān)的 所有警告。因此,在原始程序中可抑制基于行i處的斷言a。的警報(bào)。然而,如果開(kāi)發(fā)者在程 序的行i處插入了一新的且可能失敗的斷言ai,由此使a。向后移位到行i+1,則關(guān)于a1的 失敗的警告將被(錯(cuò)誤地)抑制,而關(guān)于a。的失敗的警告將被(錯(cuò)誤地)報(bào)告。
[0006] 概述
[0007]W下是在本文更詳細(xì)描述的主題的簡(jiǎn)要概述。本概述不旨在成為關(guān)于權(quán)利要求的 范圍的限制。
[0008] 本文中描述了設(shè)及制定語(yǔ)義基線的各種技術(shù),制定語(yǔ)義基線指的是根據(jù)對(duì)計(jì)算機(jī) 可執(zhí)行程序中的警告的起因的語(yǔ)義理解來(lái)抑制運(yùn)樣的警告。更具體地,可接收計(jì)算機(jī)程序 (基線程序)的第一版本,并可在其上執(zhí)行靜態(tài)分析。對(duì)基線程序的靜態(tài)分析即對(duì)運(yùn)樣的計(jì) 算機(jī)程序的語(yǔ)義分析導(dǎo)致標(biāo)識(shí)出在執(zhí)行該程序時(shí)可發(fā)生的可能隱錯(cuò)。當(dāng)標(biāo)識(shí)出隱錯(cuò)時(shí),可 向開(kāi)發(fā)者提出警告,其中示例性警告可包括向開(kāi)發(fā)者指示:在執(zhí)行基線程序時(shí)可發(fā)生空指 針異常、在執(zhí)行基線程序時(shí)可發(fā)生除W零錯(cuò)誤、在執(zhí)行基線程序時(shí)可發(fā)生數(shù)組越界錯(cuò)誤等 等。每一標(biāo)識(shí)出的警告對(duì)應(yīng)于基線程序中的相應(yīng)位置。
[0009] 此外,對(duì)于每一標(biāo)識(shí)出的警告,可推斷出相應(yīng)的語(yǔ)義條件。推斷出的語(yǔ)義條件為W 下兩種類(lèi)型之一 :1)充分條件;或2)必要條件。充分條件保證當(dāng)滿(mǎn)足運(yùn)樣的條件時(shí),基線 程序?qū)⒌竭_(dá)非錯(cuò)誤狀態(tài)。必要條件保證當(dāng)不滿(mǎn)足運(yùn)樣的條件時(shí),基線程序?qū)⒌竭_(dá)錯(cuò)誤狀態(tài)。 語(yǔ)義條件可W是例如變量具有大于闊值的值、變量具有小于闊值的值、循環(huán)的迭代數(shù)限于 為某一值等等。
[0010] 隨后,開(kāi)發(fā)者可指示基于對(duì)基線程序的靜態(tài)分析將抑制針對(duì)基線程序的至少一個(gè) 警告輸出發(fā)生,使得被認(rèn)為是虛假的或不值得開(kāi)發(fā)者修復(fù)的警報(bào)不會(huì)隨著開(kāi)發(fā)者對(duì)基線程 序作出了改變而被重新報(bào)告給開(kāi)發(fā)者。由此,開(kāi)發(fā)者可指示她僅希望被提供由對(duì)基線程序 的修改引起的潛在錯(cuò)誤。此后,可接收計(jì)算機(jī)程序的第二版本(新程序),其與基線程序不 相同。目P,該新程序W某種方式為基線程序的更新。
[0011] 針對(duì)基線程序推斷出的相應(yīng)條件的假設(shè)可隨后被插入到新程序中的相應(yīng)合適位 置處。當(dāng)靜態(tài)分析和驗(yàn)證工具分析該新程序時(shí),該分析工具可讀取并理解運(yùn)些語(yǔ)義條件的 假設(shè);運(yùn)樣的條件可用于抑制基線程序中的舊警告(即期望被指示為由開(kāi)發(fā)者抑制的警 告)。然而,仍將由開(kāi)發(fā)者對(duì)基線程序作出的修改所引起的警告提供給開(kāi)發(fā)者,W由此向開(kāi) 發(fā)者提供修復(fù)新隱錯(cuò)的機(jī)會(huì)。
[0012] W上概述呈現(xiàn)了簡(jiǎn)化概述,W提供對(duì)本文討論的系統(tǒng)和/或方法的一些方面的基 本理解。本概述并不是對(duì)此處所討論的系統(tǒng)和/或方法的全面綜述。并不旨在標(biāo)識(shí)關(guān)鍵/ 重要元素,也不描繪運(yùn)樣的系統(tǒng)和/或方法的范圍。其唯一目的是W簡(jiǎn)化形式呈現(xiàn)一些概 念,作為稍后呈現(xiàn)的更詳細(xì)說(shuō)明的序言。
[0013] 附圖簡(jiǎn)述
[0014]圖1是促成將正確性的條件的假設(shè)插入計(jì)算機(jī)可執(zhí)行程序的示例性系統(tǒng)的功能 框圖。
[0015] 圖2示出了正確性條件提取的示圖。
[0016] 圖3示出條件推斷器組件的功能框圖,該條件推斷器組件被配置成在由靜態(tài)分析 和驗(yàn)證工具進(jìn)行分析時(shí)推斷使得基線程序中的警告被抑制的正確性條件。
[0017] 圖4是示例性插入器組件的功能框圖,該插入器組件被配置成將推斷出的正確性 條件的假設(shè)插入計(jì)算機(jī)可執(zhí)行程序中。
[0018] 圖5是示出用于將正確性條件的假設(shè)插入計(jì)算機(jī)可執(zhí)行程序的示例性方法的流 程圖。
[0019] 圖6是示出供靜態(tài)分析和驗(yàn)證工具抑制先前分析的警告輸出的示例性方法的流 程圖。
[0020] 圖7是示例性計(jì)算系統(tǒng)。
[0021] 詳細(xì)描述
[0022] 現(xiàn)在參照附圖來(lái)描述設(shè)及計(jì)算機(jī)可執(zhí)行程序中的警告抑制的各種技術(shù),其中在全 部附圖中相同的附圖標(biāo)記用于指代相同的元素。在W下描述中,為解釋起見(jiàn),闡明了眾多具 體細(xì)節(jié)W提供對(duì)一個(gè)或多個(gè)方面的全面理解。然而,顯然運(yùn)(些)方面可W在沒(méi)有運(yùn)些具 體細(xì)節(jié)的情況下實(shí)施。在其他實(shí)例中,w框圖形式示出公知的結(jié)構(gòu)和設(shè)備w便于描述一個(gè) 或多個(gè)方面。另外,要理解,被描述為由某些系統(tǒng)組件執(zhí)行的功能可由多個(gè)組件執(zhí)行。
[0023] 類(lèi)似地,例如,一組件可被配置成執(zhí)行被描述為由多個(gè)組件實(shí)現(xiàn)的功能。
[0024] 此外,術(shù)語(yǔ)"或"意指包括性"或"而非互斥性"或"。目P,除非另有指定或從上下文 顯而易見(jiàn),否則短語(yǔ)"X采用A或B"意指任何自然的包括性排列。旨P,短語(yǔ)"X采用A或B" 藉由W下實(shí)例中的任何實(shí)例得到滿(mǎn)足:X采用A;X采用B;或X采用A和B兩者。另外,本 申請(qǐng)中和所附權(quán)利要求書(shū)中所使用的冠詞"一"和"一個(gè)"一般應(yīng)被解釋為是指"一個(gè)或多 個(gè)",除非另有指定或從上下文可W清楚指的是單數(shù)形式。
[00巧]此外,如本文所使用的,術(shù)語(yǔ)"組件"和"系統(tǒng)"旨在包含用使得在被處理器執(zhí)行時(shí) 執(zhí)行特定功能的計(jì)算機(jī)可執(zhí)行指令配置的計(jì)算機(jī)可讀數(shù)據(jù)存儲(chǔ)。計(jì)算機(jī)可執(zhí)行指令可包括 例程、功能等等。還要理解組件或系統(tǒng)可W位于單個(gè)設(shè)備上或跨若干設(shè)備分布。另外,如此 處所用的,術(shù)語(yǔ)"示例性"旨在表示用作某些事物的圖示或示例,而不意圖指示優(yōu)選。
[0026] 本文中描述了制定語(yǔ)義基線的概念。"制定基線"指的是制定針對(duì)由靜態(tài)分析和驗(yàn) 證工具報(bào)告的警報(bào)/警告的基線。具體地,在給定程序的兩個(gè)版本P和P'的情況下,基線 問(wèn)題設(shè)及僅向用戶(hù)報(bào)告P'中引入的新警告。在高層面上,制定語(yǔ)義基線設(shè)及提取抑制P中 的警告的正確性條件W及將運(yùn)樣的條件注入到P'中。因此,制定語(yǔ)義基線掩蓋了P'中與P 中的警告具有相同語(yǔ)義起因的警告。如將在本文中描述的,用于跨程序版本條件提取和注 入的基于抽象解讀的框架來(lái)制定語(yǔ)義基線。
[0027] 現(xiàn)參考圖1,示出了促成從基線程序推斷正確性條件并將運(yùn)樣的正確性條件的假 設(shè)注入基線程序的后續(xù)版本的示例性系統(tǒng)100。系統(tǒng)100包括數(shù)據(jù)存儲(chǔ)設(shè)備102,該數(shù)據(jù)存 儲(chǔ)設(shè)備102保持計(jì)算機(jī)可執(zhí)行程序104的第一版本(基線程序)。數(shù)據(jù)存儲(chǔ)設(shè)備102可W 是任何合適的存儲(chǔ)設(shè)備,諸如但不限于硬盤(pán)驅(qū)動(dòng)器、存儲(chǔ)器、閃存驅(qū)動(dòng)器、盤(pán)等等。系統(tǒng)100 還包括分析器工具106,該分析器工具106被配置成對(duì)計(jì)算機(jī)可執(zhí)行程序執(zhí)行靜態(tài)分析和 驗(yàn)證。例如,分析器工具106可被包括在集成開(kāi)發(fā)環(huán)境中。分析器工具106在分析基線程 序時(shí)可執(zhí)行對(duì)基線程序的深度語(yǔ)義分析W標(biāo)識(shí)其中的可能隱錯(cuò)。最后,分析器工具106包 括靜態(tài)分析器組件108,該靜態(tài)分析器組件108對(duì)基線程序執(zhí)行第一靜態(tài)分析。靜態(tài)分析器 組件108可基于對(duì)基線程序的第一靜態(tài)分析而標(biāo)識(shí)出多個(gè)警告110,并使得運(yùn)樣的警告被 保持在數(shù)據(jù)存儲(chǔ)設(shè)備102中。警告110中的每一警告可對(duì)應(yīng)于基線程序中的相應(yīng)位置(代 碼行)。示例性警告可包括例如空指針異常、除W零錯(cuò)誤、數(shù)組越界警告、違反由基線程序的 開(kāi)發(fā)者提出的斷言合約等等。
[0028] 分析器工具106還可包括條件推斷器組件112,該條件推斷器組件112為警告110 中的每一警告推斷對(duì)應(yīng)的正確性條件。
[0029] 類(lèi)似地,當(dāng)基線程序中假設(shè)了對(duì)應(yīng)于某警告的正確性條件時(shí),該正確性條件可在 靜態(tài)分析器組件108對(duì)基線程序執(zhí)行靜態(tài)分析時(shí)使得該警告被抑制。
[0030] 數(shù)據(jù)存儲(chǔ)設(shè)備102還可包括數(shù)據(jù)庫(kù)114,并且由條件推斷器組件112推斷出的正 確性條件116可被保持在數(shù)據(jù)庫(kù)114中。一般來(lái)說(shuō),正確性條件116是基線程序的周?chē)h(huán) 境(例如,調(diào)用程序、其他方法、本機(jī)調(diào)用、物理環(huán)境等)應(yīng)當(dāng)滿(mǎn)足的條件,否則在執(zhí)行基線 程序中可發(fā)生錯(cuò)誤。
[0031] 基線程序的開(kāi)發(fā)者可指示期望抑制警告110中的至少一個(gè)警告發(fā)生,使得在開(kāi)發(fā) 者修訂基線程序時(shí)僅向開(kāi)發(fā)者提供由對(duì)基線程序的修訂引起的新警告。
[0032] 分析器工具106還包括接收器組件118,該接收器組件118從數(shù)據(jù)庫(kù)114接收(由 條件推斷器組件112推斷出的)正確性條件。分析器工具106還包括插入器組件120,該插 入器組件120將該條件的假設(shè)插入程序122的第二版本(被稱(chēng)為新程序)。目P,插入器組件 120將假設(shè)的條件插入該新程序,使得靜態(tài)分析器組件108在對(duì)該新程序執(zhí)行靜態(tài)分析時(shí) 將該假設(shè)的條件124考慮在內(nèi)。因此,抑制了從基線程序向新程序傳播的"舊"錯(cuò)誤,同時(shí) 向開(kāi)發(fā)者126提供由新程序中包括的修訂引起的"新"警告。在示例性實(shí)施例中,插入器組 件120可在新程序中的方法調(diào)用處插入某條件的假設(shè)。在另一示例中,插入器組件120可 在新程序中的功能入口點(diǎn)處插入某條件的假設(shè)。分析器工具106可使得在計(jì)算設(shè)備的顯示 屏128上向開(kāi)發(fā)者126呈現(xiàn)運(yùn)樣的新警告。隨后,開(kāi)發(fā)者126可選擇是否修復(fù)運(yùn)些新存在 的警告。
[0033]由此,靜態(tài)分析器組件108可對(duì)新程序執(zhí)行第二靜態(tài)分析,其中該新程序包括與 在采取對(duì)基線程序的第一靜態(tài)分析時(shí)標(biāo)識(shí)出的相應(yīng)警告110相對(duì)應(yīng)的經(jīng)假設(shè)的條件124。 因此,如果靜態(tài)分析器組件108向開(kāi)發(fā)者126輸出一警告,并將運(yùn)樣的警告顯示在顯示屏 128上,則運(yùn)樣