91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

高級(jí)靜態(tài)分析符合基于合約的編程

星星科技指導(dǎo)員 ? 來(lái)源:嵌入式計(jì)算設(shè)計(jì) ? 作者:S. Tucker Taft ? 2022-07-04 15:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

高級(jí)靜態(tài)分析工具正在成為許多專(zhuān)業(yè)程序員工具包的標(biāo)準(zhǔn)部分。同時(shí),越來(lái)越重視基于契約的編程,其中明確的前置條件、后置條件和其他契約被添加到源代碼中,以幫助增強(qiáng)軟件安全性和安全性,因?yàn)?a href="http://www.makelele.cn/v/tag/2447/" target="_blank">嵌入式系統(tǒng)變得越來(lái)越復(fù)雜和相互依賴(lài)。當(dāng)這兩種趨勢(shì)相遇時(shí),就會(huì)出現(xiàn)一些有趣的機(jī)會(huì)。特別是,某些高級(jí)靜態(tài)分析工具開(kāi)始直接識(shí)別合約,有些甚至通過(guò)從現(xiàn)有代碼中推斷出合約來(lái)幫助程序員創(chuàng)建合約。對(duì)高級(jí)靜態(tài)分析的回顧有助于為討論基于契約的編程奠定基礎(chǔ)。

回顧高級(jí)靜態(tài)分析

較新的靜態(tài)分析工具不再簡(jiǎn)單地執(zhí)行編碼指南,而是深入研究程序結(jié)構(gòu)的語(yǔ)義,有效地模擬運(yùn)行時(shí)可能發(fā)生的情況,以檢測(cè)邏輯不一致或安全漏洞。這些工具通常基于編譯器技術(shù),使用高級(jí)數(shù)據(jù)流分析來(lái)確定程序可能出錯(cuò)的地方,方法是跟蹤變量在運(yùn)行時(shí)可能具有的值,然后檢查這些值是否都被程序正確處理以及是否可能被污染數(shù)據(jù)在被信任之前經(jīng)過(guò)適當(dāng)?shù)膶彶?。在代碼實(shí)際上安全可靠但工具的價(jià)值跟蹤或污點(diǎn)跟蹤不夠精確的地方,此類(lèi)工具仍然存在產(chǎn)生誤報(bào)(實(shí)際上是誤報(bào))的挑戰(zhàn)。盡管如此,

圖 1 說(shuō)明了靜態(tài)分析器如何使用數(shù)據(jù)流分析來(lái)跟蹤變量(例如Count )的可能值,并確定這些值中的任何一個(gè)是否可能在以后的某個(gè)時(shí)間點(diǎn)導(dǎo)致問(wèn)題。正在顯示表格的值,然后是平均值。這里的經(jīng)典“錯(cuò)誤”是忽略表為空的可能性,從而導(dǎo)致可能的被零除錯(cuò)誤。

圖 1:高級(jí)流量分析示例

pYYBAGLCk6WAGpr-AAEIc1seP6I082.png

在這個(gè)例子中,為了避免被零除,程序員已經(jīng)包含了一個(gè)表有至少一個(gè)元素的斷言(即“ Table‘Length 》= 1) ”。但是,需要進(jìn)行一些數(shù)據(jù)流分析來(lái)驗(yàn)證Float(Count)在除法“ Sum / Float(Count) ”中是否非零。這需要靜態(tài)分析器將Float(Count)的值鏈接到Count的值,將Count的最終值鏈接到由Table’Range確定的循環(huán)迭代次數(shù),并將該數(shù)字鏈接到Table‘Length(X’Range 表示“X‘First 。. X’Last”,而 X‘Length 表示“(如果 X’First 》 X‘Last then 0 else X’Last – X‘First + 1)”)。對(duì)程序員來(lái)說(shuō)容易的事情可以為靜態(tài)分析器做更多的工作。

那么靜態(tài)分析器對(duì)“ pragma Assert(Table’Length 》= 1) ”做了什么?這就是分析器不同的地方,這取決于他們是采用自下而上還是自上而下的策略來(lái)發(fā)現(xiàn)跨越過(guò)程邊界的錯(cuò)誤,以及他們?nèi)绾螌⑦@一點(diǎn)與基于合同的編程概念相結(jié)合。

基于合同的編程適合的地方

基于契約的編程(除其他外)是使用前置條件和后置條件來(lái)表達(dá)對(duì)組成程序的功能和過(guò)程(即子程序)的輸入和輸出(分別)的期望。

在圖 1 的示例中,程序員的意圖顯然是“ Table‘Length 》= 1 ”作為該過(guò)程的先決條件。不幸的是,這個(gè)Assert隱藏在過(guò)程的代碼中,而不是很容易被調(diào)用者看到。在 Eiffel[1] 或 Ada 2012[2] 等語(yǔ)言中,前置條件和后置條件是語(yǔ)法的一部分,或者在 C#Java 等語(yǔ)言中使用 Spec#[3] 或 Java 建模語(yǔ)言 (JML)[4] 等擴(kuò)展,程序員對(duì)Display_Table過(guò)程的表輸入的意圖可以使用顯式前置條件來(lái)表達(dá)。例如,在 Ada 2012 中,此過(guò)程的規(guī)范可以寫(xiě)成:

過(guò)程 Display_Table(Table: Float_Array) 與 Pre =》 Table’Length 》= 1;

這為Display_Table過(guò)程指定了方面Pre(“前提條件”的縮寫(xiě)),因此它對(duì)調(diào)用者可見(jiàn)并有效地成為Display_Table上的合同,這表明只要Table的長(zhǎng)度至少為 1,Display_Table就可以執(zhí)行它的正確工作。

靜態(tài)分析:檢查和推斷合約

現(xiàn)在回到圖 1 中的 pragma Assert。如果沒(méi)有明確的合同要求調(diào)用者確保Table‘Length 》= 1,靜態(tài)分析器可能會(huì)正確地抱怨,因?yàn)闆](méi)有什么可以阻止調(diào)用者傳入零長(zhǎng)度表。但是,許多靜態(tài)分析器使用不同的策略。他們不是立即抱怨Assert,而是依靠更多的全局檢查來(lái)確定是否存在真正的問(wèn)題,并且僅在有一個(gè)通過(guò)零長(zhǎng)度表的調(diào)用時(shí)才抱怨。如前所述,這些全局的、過(guò)程間的檢查可以主要是自下而上的,也可以主要是自上而下的,如圖 2 所示。

圖 2:自上而下與自下而上的過(guò)程間靜態(tài)分析

pYYBAGLCk62ALByrAAK3oQspQWI417.png

在自上而下的策略中,分析器從程序的入口點(diǎn)向下走,在每次調(diào)用時(shí)用實(shí)際參數(shù)代替形式,直到識(shí)別出每個(gè)子程序的每次調(diào)用,累積一組可能的實(shí)際值傳入對(duì)于每個(gè)正式的。然后使用該值集來(lái)確定是否可能通過(guò)某些特定的調(diào)用鏈違反Assert 。

在自下而上的策略中,分析從程序的葉子(不進(jìn)行調(diào)用的子程序)開(kāi)始,分析每個(gè)子程序以確定它對(duì)其輸入施加的要求。在此示例中,Assert(Table’Length 》= 1)被有效地轉(zhuǎn)換為過(guò)程的隱式前提條件。靜態(tài)分析器本質(zhì)上是在為每個(gè)子程序推斷未聲明的合約,然后將其傳播到每個(gè)調(diào)用點(diǎn),其中前提條件成為調(diào)用點(diǎn)實(shí)際參數(shù)的隱式斷言。這個(gè)過(guò)程一直持續(xù)到更高級(jí)別的子程序,直到最終整個(gè)程序都被分析完。

隨著程序變得越來(lái)越大,自下而上的方法可以比自上而下的方法更好地?cái)U(kuò)展,但它取決于推斷潛在的復(fù)雜合同,包括條件先決條件,其中一個(gè)輸入的先決條件可能取決于另一個(gè)輸入的值。例如,對(duì)于以“ if X 》 0 then Assert(Y 》 0) ”開(kāi)頭的過(guò)程,推斷的前提條件應(yīng)該是“ X 》 0 ==》 Y 》 0 ”。兩種通過(guò)自下而上分析推斷合約的高級(jí)靜態(tài)分析工具是 AdaCore 的 CodePeer 工具,它分析 Ada 源代碼,以及 Microsoft Research 的 Clousot 工具,它分析 .NET 程序。

隨著明確的前置條件和后置條件開(kāi)始出現(xiàn)在程序中,使用像 Ada 2012 這樣的語(yǔ)言,這些合同和高級(jí)靜態(tài)分析工具的功能之間出現(xiàn)了新的協(xié)同作用。顯式契約可以簡(jiǎn)化程序間分析,因?yàn)槌绦騿T已經(jīng)完成了艱苦的工作。該工具可以簡(jiǎn)單地檢查顯式前提條件,而不必在調(diào)用中傳播。在子程序中,該工具可以使用前置條件作為可能輸入值的精確描述,而無(wú)需猜測(cè)程序員的意圖。

顯式契約還可以幫助其他希望使用子程序的程序員,因?yàn)樗鼈兂洚?dāng)機(jī)器可檢查的注釋和直接嵌入代碼中的低級(jí)需求。但它們只有在程序員編寫(xiě)它們時(shí)才有幫助。由于一些高級(jí)靜態(tài)分析工具可以從源代碼中推斷出合約,它們可以提供自動(dòng)將它們插入源代碼。Clousot之類(lèi)的工具允許程序員“祝?!蓖茢嗟暮霞s,使其成為源代碼的永久部分。

未來(lái):一邊編程一邊證明

靜態(tài)分析和基于合同的編程之間的協(xié)同作用可能允許更快地采用這兩種技術(shù)。隨著這兩者的集成,一種新的編程方法可能會(huì)出現(xiàn),程序員的助手會(huì)在創(chuàng)建源代碼時(shí)幫助推斷和檢查合同。隨著程序的編寫(xiě),安全性得到了證明,就像文本編輯器中的拼寫(xiě)檢查器可以確保不會(huì)出現(xiàn)拼寫(xiě)錯(cuò)誤的單詞一樣。隨著這些技術(shù)的成熟,我們可以希望不安全、不安全的程序?qū)⒉辉偈浅B(tài),而是從一開(kāi)始就內(nèi)置安全性和安全性,并附帶代碼的機(jī)器可檢查、人類(lèi)可讀的合約。書(shū)面。CodePeer和 Clousot等工具展示了一些可能性。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5199

    文章

    20454

    瀏覽量

    334250
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2953

    瀏覽量

    70340
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51648
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鎖存器中的時(shí)間借用概念與靜態(tài)時(shí)序分析

    對(duì)于基于鎖存器的設(shè)計(jì),靜態(tài)時(shí)序分析會(huì)應(yīng)用一個(gè)稱(chēng)為時(shí)間借用的概念。本篇博文解釋了時(shí)間借用的概念,若您的設(shè)計(jì)中包含鎖存器且時(shí)序報(bào)告中存在時(shí)間借用,即可適用此概念。
    的頭像 發(fā)表于 12-31 15:25 ?5506次閱讀
    鎖存器中的時(shí)間借用概念與<b class='flag-5'>靜態(tài)</b>時(shí)序<b class='flag-5'>分析</b>

    經(jīng)營(yíng)數(shù)據(jù)分析可以通過(guò)哪些方式

    在數(shù)聚股份看來(lái),提起經(jīng)營(yíng)數(shù)據(jù)分析,大家往往會(huì)聯(lián)想到一些密密麻麻的數(shù)字表格,或是高級(jí)的數(shù)據(jù)建模手法,再或是華麗的數(shù)據(jù)報(bào)表。其實(shí),“ 分析 ”本身是每個(gè)人都具備的能力,對(duì)于業(yè)務(wù)決策者而言,則需要掌握一套
    的頭像 發(fā)表于 12-05 16:31 ?640次閱讀

    為什么單片機(jī)還在用C語(yǔ)言編程

    說(shuō)起單片機(jī)我們就會(huì)想到C語(yǔ)言,單片機(jī)為什么還在用C語(yǔ)言編程?現(xiàn)在有很多很好用的高級(jí)語(yǔ)言,如VC、PYTHON、PHP等等,為什么這些語(yǔ)言不能用來(lái)編寫(xiě)單片機(jī)程序呢?我個(gè)人覺(jué)得不是這些語(yǔ)言不可以編寫(xiě)
    發(fā)表于 11-28 07:37

    一文了解Mojo編程語(yǔ)言

    CPU、GPU 和其他加速器的支持,簡(jiǎn)化了并行編程模型。 漸進(jìn)式類(lèi)型系統(tǒng) 結(jié)合靜態(tài)類(lèi)型檢查和類(lèi)型推導(dǎo),既保證編譯時(shí)安全性,又保留動(dòng)態(tài)類(lèi)型的靈活性。 應(yīng)用場(chǎng)景 AI 與機(jī)器學(xué)習(xí) 用于訓(xùn)練大型模型和實(shí)時(shí)推理
    發(fā)表于 11-07 05:59

    什么是CVE?如何通過(guò)SAST/靜態(tài)分析工具Perforce QAC 和 Klocwork應(yīng)對(duì)CVE?

    本文將為您詳解什么是CVE、CVE標(biāo)識(shí)符的作用,厘清CVE與CWE、CVSS的區(qū)別,介紹CVE清單內(nèi)容,并說(shuō)明如何借助合適的靜態(tài)分析工具(如Perforce QAC/Klocwork),在軟件開(kāi)發(fā)早期發(fā)現(xiàn)并修復(fù)漏洞。
    的頭像 發(fā)表于 10-31 14:24 ?534次閱讀
    什么是CVE?如何通過(guò)SAST/<b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>工具Perforce QAC 和 Klocwork應(yīng)對(duì)CVE?

    Omdia高級(jí)首席分析師暢談運(yùn)營(yíng)商面臨的網(wǎng)絡(luò)挑戰(zhàn)

    Omdia高級(jí)首席分析師Sameer Ashfaq Malik指出,運(yùn)營(yíng)商面臨三大核心網(wǎng)絡(luò)挑戰(zhàn):傳統(tǒng)服務(wù)收入低迷、新興服務(wù)(如人工智能)規(guī)?;M(jìn)程緩慢,以及運(yùn)營(yíng)成本(OPEX)持續(xù)攀升。“AI
    的頭像 發(fā)表于 10-13 09:19 ?1123次閱讀

    知識(shí)分享 | 使用MXAM進(jìn)行AUTOSAR模型的靜態(tài)分析:Embedded Coder與TargetLink模型

    知識(shí)分享在知識(shí)分享欄目中,我們會(huì)定期與讀者分享來(lái)自MES模賽思的基于模型的軟件開(kāi)發(fā)相關(guān)Know-How干貨,關(guān)注公眾號(hào),隨時(shí)掌握基于模型的軟件設(shè)計(jì)的技術(shù)知識(shí)。使用MXAM進(jìn)行AUTOSAR模型的靜態(tài)
    的頭像 發(fā)表于 08-27 10:04 ?735次閱讀
    知識(shí)分享 | 使用MXAM進(jìn)行AUTOSAR模型的<b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>:Embedded Coder與TargetLink模型

    汽車(chē)軟件團(tuán)隊(duì)必看:基于靜態(tài)代碼分析工具Perforce QAC的ISO 26262合規(guī)實(shí)踐

    ISO 26262合規(guī)指南,從ASIL分級(jí)到工具落地,手把手教你用靜態(tài)代碼分析(Perforce QAC)實(shí)現(xiàn)高效合規(guī)。
    的頭像 發(fā)表于 08-07 17:33 ?1156次閱讀
    汽車(chē)軟件團(tuán)隊(duì)必看:基于<b class='flag-5'>靜態(tài)</b>代碼<b class='flag-5'>分析</b>工具Perforce QAC的ISO 26262合規(guī)實(shí)踐

    協(xié)議分析儀支持哪些高級(jí)觸發(fā)選項(xiàng)?

    協(xié)議分析儀支持多種高級(jí)觸發(fā)選項(xiàng),這些選項(xiàng)通過(guò)靈活組合協(xié)議字段、邏輯運(yùn)算和時(shí)序控制,可實(shí)現(xiàn)復(fù)雜場(chǎng)景下的精準(zhǔn)數(shù)據(jù)捕獲,以下是具體分類(lèi)與說(shuō)明:一、基于協(xié)議字段的高級(jí)觸發(fā) 精確匹配觸發(fā) 功能:對(duì)特定協(xié)議
    發(fā)表于 07-23 14:21

    動(dòng)態(tài)BGP與靜態(tài)BGP的區(qū)別?

    的 IP,只要遠(yuǎn)端發(fā)起 BGP 握手,且來(lái)自 AS 65002,即自動(dòng)建立對(duì)等關(guān)系。四、實(shí)戰(zhàn)應(yīng)用場(chǎng)景分析場(chǎng)景一:傳統(tǒng)運(yùn)營(yíng)商邊界路由器 使用靜態(tài) BGP BGP 對(duì)等關(guān)系固定,變化極少 需要手動(dòng)管理
    發(fā)表于 06-24 06:57

    詳解ADC電路的靜態(tài)仿真和動(dòng)態(tài)仿真

    ADC電路主要存在靜態(tài)仿真和動(dòng)態(tài)仿真兩類(lèi)仿真,針對(duì)兩種不同的仿真,我們存在不同的輸入信號(hào)和不同的數(shù)據(jù)采樣,因此靜態(tài)仿真和動(dòng)態(tài)仿真是完全不同的兩個(gè)概念,所以設(shè)置的參數(shù)不同。
    的頭像 發(fā)表于 06-05 10:19 ?1998次閱讀
    詳解ADC電路的<b class='flag-5'>靜態(tài)</b>仿真和動(dòng)態(tài)仿真

    普源示波器高級(jí)觸發(fā)功能案例分析

    觸發(fā)功能(序列觸發(fā)、邏輯觸發(fā)、欠幅觸發(fā)等)突破傳統(tǒng)局限,為復(fù)雜信號(hào)分析提供強(qiáng)大工具。本文結(jié)合具體案例,解析這些高級(jí)功能在通信、電源管理、汽車(chē)電子等場(chǎng)景中的實(shí)際應(yīng)用。 ? 二、案例一:通信信號(hào)分析——序列觸發(fā)精準(zhǔn)定位協(xié)議異常 應(yīng)用
    的頭像 發(fā)表于 05-29 09:36 ?635次閱讀

    如果 PD 合約不匹配,BCR 是否仍會(huì)打開(kāi) SINK_FET_EN POWER_DRILL2GO路徑?

    BCR 具有 SINK_FET_EN 和 SAFE_PWR_EN 引腳來(lái)控制POWER_DRILL2GO消耗路徑。 如果 PD 合約不匹配,BCR 是否仍會(huì)打開(kāi) SINK_FET_EN POWER_DRILL2GO路徑?或者只打開(kāi) SAFE_PWR_EN POWER_DRILL2GO路徑?
    發(fā)表于 05-23 08:01

    揭秘ABAQUS強(qiáng)大到超乎想象的分析功能有哪些?

    和研究人員解決復(fù)雜工程問(wèn)題的得力助手。本文將深入探討ABAQUS那些強(qiáng)大到超乎想象的分析功能,揭示它如何在不同領(lǐng)域發(fā)揮關(guān)鍵作用。 一、靜態(tài)與動(dòng)態(tài)分析的雙劍合璧 ABAQUS的核心功能之一是其強(qiáng)大的
    的頭像 發(fā)表于 05-21 16:15 ?694次閱讀
    揭秘ABAQUS強(qiáng)大到超乎想象的<b class='flag-5'>分析</b>功能有哪些?

    LM8365系列 低電平有效復(fù)位IC,具有低靜態(tài)電流和可編程輸出延遲數(shù)據(jù)手冊(cè)

    具有 0.65 μA (典型值)的極低靜態(tài)電流。LM8365 具有高精度基準(zhǔn)電壓源和具有精確閾值的比較器 和內(nèi)置磁滯,以防止不穩(wěn)定的 RESET作,時(shí)間延遲輸出可以是 由系統(tǒng)設(shè)計(jì)人員編程,并指定低至 1 V 的 Reset作,具有極低電壓 待機(jī)電流。 *附件:具有可
    的頭像 發(fā)表于 04-11 16:36 ?870次閱讀
    LM8365系列 低電平有效復(fù)位IC,具有低<b class='flag-5'>靜態(tài)</b>電流和可<b class='flag-5'>編程</b>輸出延遲數(shù)據(jù)手冊(cè)