日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Rust的五個自動驗證工具,你知道幾個?

來源: 責編: 時間:2024-03-27 17:36:15 233觀看
導讀自動驗證是一種有助于檢查程序是否滿足某些屬性的技術,例如內存安全性和避免在運行時錯誤。此外,自動驗證工具使你能夠驗證并發代碼的正確性,這很難手工測試。自動驗證對Rust特別重要,因為它可以幫助確保正確使用unsafe的

自動驗證是一種有助于檢查程序是否滿足某些屬性的技術,例如內存安全性和避免在運行時錯誤。此外,自動驗證工具使你能夠驗證并發代碼的正確性,這很難手工測試。Vb228資訊網——每日最新資訊28at.com

自動驗證對Rust特別重要,因為它可以幫助確保正確使用unsafe的代碼。在這篇文章中,我們將討論五個最常用的Rust驗證工具,以及它們如何幫助你構建更可靠的軟件。Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

1,cargo-fuzz

我們將討論的第一個工具是cargo-fuzz,它使用一種稱為模糊測試的技術來進行自動化軟件測試。通過向程序提供許多有效的、幾乎有效的或無效的輸入,模糊測試可以幫助開發人員找到不希望看到的行為或漏洞。Vb228資訊網——每日最新資訊28at.com

當我們編寫測試時,我們通常只考慮一些正常輸入,并根據我們對系統反應的想象來編寫測試。這種方法可能會導致遺漏錯誤,特別是那些由意外的或不正確的輸入引起的錯誤。Vb228資訊網——每日最新資訊28at.com

模糊測試可以通過為程序提供各種各樣的輸入(包括無效的和意外的輸入)來幫助你找到這些遺漏的錯誤。如果程序在響應這些輸入時崩潰或行為異常,則表示存在錯誤。Vb228資訊網——每日最新資訊28at.com

cargo-fuzz crate可以對Rust代碼進行模糊測試,它的工作原理是生成隨機輸入,并將它們輸入到要測試的函數中。如果函數出現故障或崩潰,cargo-fuzz將保存導致故障的輸入。Vb228資訊網——每日最新資訊28at.com

通過以下命令安裝cargo-fuzz:Vb228資訊網——每日最新資訊28at.com

cargo install cargo-fuzz

Vb228資訊網——每日最新資訊28at.com

下面是一個如何使用cargo-fuzz對Rust函數進行模糊測試的例子:Vb228資訊網——每日最新資訊28at.com

#![no_main]#[macro_use]extern crate libfuzzer_sys;fuzz_target!(|data: &[u8]| {    let json_string = std::str::from_utf8(data).unwrap();    let _ = serde_json::from_str::<serde_json::Value>(&json_string).unwrap();});

上面的代碼通過向JSON解析器提供隨機輸入來測試它。fuzz_target將持續被調用,直到遇到觸發panic并導致崩潰的輸入。Vb228資訊網——每日最新資訊28at.com

注意:通過模糊測試發現的一些錯誤可能在現實生活中不實用或不適用,這意味著模糊測試可能會產生誤報。此外,模糊測試可能是資源密集型的,特別是在對大型或復雜的代碼庫進行模糊測試時。Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

2,Kani

Kani是一個現代的自動代碼驗證工具,可以幫助你在幾秒鐘內驗證Rust代碼的正確性。它使用一種稱為模型檢查的技術,一種探索程序所有狀態的方法,包括通過正常執行無法到達的狀態。Vb228資訊網——每日最新資訊28at.com

模型檢查允許Kani檢測代碼中的問題,這些問題可能是由意外的邏輯引起的。還可以使用Kani來識別單元測試、集成測試甚至手工測試很難或不可能發現的問題。Vb228資訊網——每日最新資訊28at.com

通過以下命令安裝Kani:Vb228資訊網——每日最新資訊28at.com

cargo install --locked kani-verifiercargo kani setup

讓我們看一下下面的代碼:Vb228資訊網——每日最新資訊28at.com

fn product(a: i32, b: i32) -> i32 {    a * b}

Vb228資訊網——每日最新資訊28at.com

上面的代碼是有效的Rust代碼,對嗎?花點時間再看一遍——你能發現這段代碼有什么可能出錯的地方嗎?Vb228資訊網——每日最新資訊28at.com

讓我們用Kani來找出答案:Vb228資訊網——每日最新資訊28at.com

fn product(a: i32, b: i32) -> i32 {    a * b}#[kani::proof]fn main() {    let a = kani::any();    let b = kani::any();    let result = product(a, b);    println!("The product of {} and {} is {}", a, b, result);}

Vb228資訊網——每日最新資訊28at.com

運行結果:Vb228資訊網——每日最新資訊28at.com

圖片圖片Vb228資訊網——每日最新資訊28at.com

Kani在乘法過程中發現了溢出的可能性。Vb228資訊網——每日最新資訊28at.com

這是因為product函數不能確保我們不超過i32的最大值,即2,147,483,647,任何大于該數的值都會拋出錯誤。本質上,無論這個函數用于什么,它都不能處理大于20億的數字。Vb228資訊網——每日最新資訊28at.com

在這種情況下,使用Kani來識別這個潛在的問題允許您要么立即更改數據類型,要么保持原樣,如果錯誤是預期的行為,則適當地處理錯誤。Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

3,Proptest

Proptest使用大量有效和無效的輸入來測試函數的屬性,以發現bug。這與單元測試等經典測試方法不同,在單元測試中,指定一些輸入并根據期望的行為添加斷言。Vb228資訊網——每日最新資訊28at.com

屬性測試是模糊測試的一種形式,它更容易控制,更側重于驗證特定的屬性。這使得它成為測試復雜系統的一個很好的選擇,在這些系統中,傳統的模糊測試可能太慢或無效。Vb228資訊網——每日最新資訊28at.com

讓我們來看看如何使用Proptest crate:Vb228資訊網——每日最新資訊28at.com

use proptest::prelude::{any, proptest};fn add_two_numbers(first_number: i32, second_number: i32) -> i32 {    first_number + second_number}proptest! {    #[test]    fn test_add_two_numbers(first_number in any::<i32>(), second_number in any::<i32>()) {        let expected = first_number + second_number;        let actual = add_two_numbers(first_number, second_number);        assert_eq!(actual, expected);    }}

Vb228資訊網——每日最新資訊28at.com

在上面的代碼中,我們正在測試一個簡單的函數,它將兩個數字相加。這樣一個簡單的函數可能會出什么問題呢?Vb228資訊網——每日最新資訊28at.com

讓我們看一下test_add_two_numbers函數簽名:Vb228資訊網——每日最新資訊28at.com

fn test_add_two_numbers(first_number in any::<i32>(), second_number in any::<i32>())

Vb228資訊網——每日最新資訊28at.com

any::<i32>()是一個Protest中的類型,它生成隨機的i32值,包括有效的和無效的。這允許我們使用廣泛的輸入來測試add_two_numbers()函數,包括邊緣情況和異常情況。Vb228資訊網——每日最新資訊28at.com

Proptest測試函數將為first_number和second_number參數生成大量隨機輸入。如果任何測試失敗,Proptest將把失敗的輸入打印到控制臺。Vb228資訊網——每日最新資訊28at.com

圖片圖片Vb228資訊網——每日最新資訊28at.com

報告顯示有溢出的可能,它還顯示了最小的可重復輸入。有了這些信息,我們就可以繼續修復bug了。Vb228資訊網——每日最新資訊28at.com

雖然屬性測試可以很好地用于選定的輸入范圍,但它有時會遺漏一些邊緣情況,并給你一個假結果。換句話說,它可能會在實際上沒有錯誤的情況下產生錯誤,或者在指定的覆蓋范圍之外找不到錯誤。Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

4,Rust KLEE

KLEE是一個符號執行引擎,它智能地探索程序中的所有代碼路徑,以發現漏洞或錯誤。它建立在LLVM編譯器基礎設施之上,該基礎設施是用C和C++編寫的。Vb228資訊網——每日最新資訊28at.com

因此,大多數KLEE實現也是用C和C++語言實現的。然而,KLEE的基本概念可以在任何編程語言中實現。Vb228資訊網——每日最新資訊28at.com

Rust Klee是Klee的開源Rust實現,被設計用來檢查特定的屬性。Vb228資訊網——每日最新資訊28at.com

  • 安全檢查
  • 不變量
  • 參數化的檢查
  • 檢查Rust程序的功能正確性

Rust Klee還沒有準備好用于生產,但它仍然值得一提,它是一個很酷的工具,可以幫助在Rust生態系統中形成正式的驗證環境。Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

5,Haybale

Haybale也是一個符號執行引擎,具有與Rust Klee相似的功能,Haybale完全是用Rust編寫的,并且在底層基于Rust LLVM IR。Vb228資訊網——每日最新資訊28at.com

作為一個符號執行引擎,它專注于將整個程序變量轉換為數學表達式,并對執行路徑進行推理,以檢測錯誤或漏洞。Haybale最好的部分是它可以測試你的Rust代碼,而不需要添加額外的測試代碼。Vb228資訊網——每日最新資訊28at.com

讓我們看一個檢查函數foo是否返回0的例子。首先,我們寫出要分析的函數,你可以用任何編程語言寫這個,然后把它轉換成字節碼:Vb228資訊網——每日最新資訊28at.com

fn foo(x: f64) -> f64 {  x * x - 4.0}

Vb228資訊網——每日最新資訊28at.com

字節碼將保存在項目的某個地方,你可以在Rust代碼的項目變量中引用它:Vb228資訊網——每日最新資訊28at.com

let project = Project::from_bc_path("/path/to/file.bc").unwrap();

Vb228資訊網——每日最新資訊28at.com

現在,我們可以使用haybale中的find_zero_of_func方法來發現當函數接收到零輸入時存在的錯誤。Vb228資訊網——每日最新資訊28at.com

use haybale::{find_zero_of_func, Project};fn main() {  let project = Project::from_bc_path("/path/to/file.bc").unwrap();  match find_zero_of_func("foo", &project, haybale::Config::default(), None) {    Ok(None) => println!("foo() can never return 0"),    Ok(Some(inputs)) => println!("Inputs for which foo() returns 0: {:?}", inputs),    Err(e) => panic!("{}", e),  }}

Vb228資訊網——每日最新資訊28at.com

Haybale可以對整個代碼進行推理,發現bug,并返回一份報告,證明代碼是否存在bug。雖然Haybale可能不會捕獲所有錯誤,但它很可能會捕獲導致運行時崩潰的嚴重錯誤,并給你一個修復它們的機會。Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

Vb228資訊網——每日最新資訊28at.com

總結

自動驗證工具對于發現軟件開發中的bug非常重要,盡管它們可能尚未被開發人員廣泛采用。這些工具可以發現使用傳統測試方法無法發現的錯誤,并且可以提高代碼的可靠性。Vb228資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-79831-0.htmlRust的五個自動驗證工具,你知道幾個?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: .NET Core 服務實現監控可觀測性優秀實踐

下一篇: 15個值得推薦的開源免費圖像標注工具

標簽:
  • 熱門焦點
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁&ldquo;充值中心&rdquo;入口上線了本機生活界面。壹覽商業發現,該界面目前主要
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 余承東:AI大模型技術的發展將會帶來下一代智能終端操作系統的智慧體驗

    8月4日消息,2023年華為開發者大會(HDC.Together)今天正式開幕,華為發布HarmonyOS 4、全新升級的鴻蒙開發套件、HarmonyOS Next開發者預覽版本等一系列
  • iQOO 11S或7月上市:搭載“雞血版”驍龍8Gen2 史上最強5G Soc

    去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,iQOO 11不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競屏,同時在快充
  • 與兆芯合作 聯想推出全新旗艦版筆記本電腦開天N7系列

    聯想與兆芯合作推出全新聯想旗艦版筆記本電腦開天 N7系列。這個系列采用兆芯KX-6640MA處理器平臺,KX-6640MA 處理器是采用了陸家嘴架構,16nm 工藝,4 核 4 線
  • Meta盲目擴張致超萬人被裁,重金押注元宇宙而前景未明

    圖片來源:圖蟲創意日前,Meta創始人兼CEO 馬克&middot;扎克伯發布公開信,宣布Meta計劃裁員超11000人,占其員工總數13%。他公開承認了自己的預判失誤:&ldquo;不僅
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲女女做受ⅹxx高潮| 国外成人在线视频网站| 欧美日韩亚洲国产精品| 欧美性做爰毛片| 亚洲国产欧美不卡在线观看| 亚洲国产精品一区二区www| 亚洲精品一区二区三区福利| 国内精品免费午夜毛片| 依依成人综合视频| 99精品国产一区二区青青牛奶| 亚洲一区综合| 久久人人爽人人爽| 欧美日韩亚洲一区二| 国产综合色产在线精品| 99精品国产在热久久下载| 亚洲国产精品一区二区第四页av| 这里只有精品在线播放| 在线视频免费在线观看一区二区| 日韩一区二区福利| 欧美亚洲免费电影| 欧美激情第10页| 欧美成人中文字幕| 国产精品国产三级国产a| 国产精品久久国产三级国电话系列 | 国产精品香蕉在线观看| 在线精品国精品国产尤物884a| 宅男噜噜噜66国产日韩在线观看| 日韩视频在线观看免费| 欧美一二区视频| 欧美伦理a级免费电影| 国产精品v片在线观看不卡 | 国产午夜精品全部视频播放| 亚洲欧洲午夜| 日韩一二三区视频| 久久不射2019中文字幕| 欧美日韩福利视频| 欧美天天在线| 亚洲第一免费播放区| 亚洲欧美日韩精品久久亚洲区 | 亚洲欧美视频| 亚洲天堂av在线免费| 久久婷婷国产麻豆91天堂| 嫩模写真一区二区三区三州| 国产乱码精品一区二区三区不卡| 最新高清无码专区| 一本久道久久综合中文字幕| 欧美在线观看视频一区二区| 欧美三级午夜理伦三级中文幕 | 欧美日韩精品在线| 国产精品入口尤物| 日韩亚洲欧美精品| 美国十次成人| 国产在线成人| 欧美一区二区三区四区在线观看| 久久综合给合久久狠狠色| 国产精品久久久久秋霞鲁丝| 亚洲看片一区| 免费中文日韩| 国产精品入口麻豆原神| 日韩视频―中文字幕| 老司机午夜精品视频| 国产亚洲精品久久飘花| 亚洲一区日本| 久久久亚洲国产美女国产盗摄| 国产精品成人观看视频国产奇米| 亚洲三级性片| 欧美福利一区二区| 伊伊综合在线| 久久综合九色九九| 一色屋精品视频在线看| 久久精品中文字幕一区| 国产三级欧美三级| 性色av香蕉一区二区| 国产精品亚洲一区二区三区在线| 一区二区三区视频在线观看| 欧美日本不卡高清| 99爱精品视频| 欧美亚韩一区| 亚洲一区在线观看视频 | 欧美中文字幕| 国产日韩1区| 欧美有码在线视频| 国产一本一道久久香蕉| 久久久99免费视频| 影音先锋亚洲电影| 久热国产精品| 91久久久在线| 欧美日韩大片| 亚洲一级在线| 国产欧美一区二区精品忘忧草| 欧美亚洲尤物久久| 海角社区69精品视频| 麻豆精品网站| 亚洲美女毛片| 国产精品国产三级国产普通话蜜臀 | 国产亚洲一区二区三区在线播放| 欧美一区二区三区男人的天堂| 国产亚洲精品v| 久久视频在线看| 91久久一区二区| 欧美日韩视频| 欧美一级理论性理论a| 国产一区深夜福利| 免费在线观看精品| 日韩亚洲一区二区| 国产精品久久一区主播| 欧美专区18| 亚洲国产老妈| 国产精品第十页| 欧美一区高清| 亚洲二区在线| 欧美日韩蜜桃| 欧美一区二区在线观看| 精品成人在线| 欧美日韩国产成人在线| 午夜日韩视频| 亚洲电影毛片| 欧美视频在线观看免费| 欧美一区二区免费| 91久久国产综合久久91精品网站| 久久久精品动漫| 国产一区二区精品久久99| 久久夜色精品| 99这里有精品| 国产香蕉97碰碰久久人人| 毛片av中文字幕一区二区| 夜夜嗨网站十八久久| 国产欧美日韩综合一区在线观看| 久久亚洲欧美| 亚洲私人黄色宅男| 一区二区在线视频观看| 亚洲精品一区二区三区在线观看| 国产精品久久久久免费a∨大胸 | 亚洲一区二区高清| 狠狠爱综合网| 欧美日韩国产在线观看| 欧美综合国产| 一区二区三区视频免费在线观看| 国内精品久久久久久久果冻传媒| 欧美美女bb生活片| 久久福利影视| 99在线精品视频| 韩国女主播一区二区三区| 欧美日本一区| 久久欧美中文字幕| 亚洲亚洲精品在线观看| 亚洲国产精品专区久久| 国产日韩欧美在线播放不卡| 欧美激情综合色综合啪啪| 欧美专区日韩视频| 国产精品久99| 久久三级福利| 亚洲视频一区二区在线观看| 伊人婷婷久久| 国产午夜精品视频免费不卡69堂| 欧美日产一区二区三区在线观看| 久久久精品国产免费观看同学| 亚洲一区二区三区高清| 亚洲人成网站777色婷婷| 国产亚洲一区二区在线观看| 国产精品高潮呻吟| 欧美区一区二| 免费短视频成人日韩| 久久精品卡一| 亚洲欧美激情诱惑| 国产一区91| 欧美特黄一级| 欧美精品在线免费| 亚洲永久免费精品| 日韩亚洲视频| 亚洲激情国产精品| 黄网站色欧美视频| 国产精品一区二区欧美| 欧美日韩三区四区| 欧美精品亚洲一区二区在线播放| 久久日韩精品| 久久久久久国产精品mv| 欧美亚洲午夜视频在线观看| 亚洲一区二区在线免费观看视频| 99精品久久久| 亚洲精品一区二区三区蜜桃久| 一区二区三区在线观看欧美| 国产亚洲va综合人人澡精品| 国产精品一区久久久| 国产精品va| 欧美午夜无遮挡| 欧美日韩精品在线| 欧美另类视频在线| 欧美精品18videos性欧美| 牛人盗摄一区二区三区视频| 久热精品视频在线观看| 美女诱惑一区| 免费在线日韩av| 欧美成年人视频| 小黄鸭精品密入口导航| 亚洲一区免费网站| 亚洲午夜成aⅴ人片| 亚洲香蕉伊综合在人在线视看| 一区二区三区 在线观看视| 亚洲看片网站| 一区二区三区欧美在线| 亚洲视频高清| 亚洲欧美日韩精品一区二区 | 欧美成人免费播放|