精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

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

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

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

1,cargo-fuzz

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

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

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

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

通過以下命令安裝cargo-fuzz:

cargo install cargo-fuzz

下面是一個如何使用cargo-fuzz對Rust函數進行模糊測試的例子:

#![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并導致崩潰的輸入。

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

2,Kani

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

模型檢查允許Kani檢測代碼中的問題,這些問題可能是由意外的邏輯引起的。還可以使用Kani來識別單元測試、集成測試甚至手工測試很難或不可能發現的問題。

通過以下命令安裝Kani:

cargo install --locked kani-verifier
cargo kani setup

讓我們看一下下面的代碼:

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

上面的代碼是有效的Rust代碼,對嗎?花點時間再看一遍——你能發現這段代碼有什么可能出錯的地方嗎?

讓我們用Kani來找出答案:

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);
}

運行結果:

圖片圖片

Kani在乘法過程中發現了溢出的可能性。

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

在這種情況下,使用Kani來識別這個潛在的問題允許您要么立即更改數據類型,要么保持原樣,如果錯誤是預期的行為,則適當地處理錯誤。

3,Proptest

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

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

讓我們來看看如何使用Proptest crate:

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);
    }
}

在上面的代碼中,我們正在測試一個簡單的函數,它將兩個數字相加。這樣一個簡單的函數可能會出什么問題呢?

讓我們看一下test_add_two_numbers函數簽名:

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

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

Proptest測試函數將為first_number和second_number參數生成大量隨機輸入。如果任何測試失敗,Proptest將把失敗的輸入打印到控制臺。

圖片圖片

報告顯示有溢出的可能,它還顯示了最小的可重復輸入。有了這些信息,我們就可以繼續修復bug了。

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

4,Rust KLEE

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

因此,大多數KLEE實現也是用C和C++語言實現的。然而,KLEE的基本概念可以在任何編程語言中實現。

Rust Klee是Klee的開源Rust實現,被設計用來檢查特定的屬性。

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

Rust Klee還沒有準備好用于生產,但它仍然值得一提,它是一個很酷的工具,可以幫助在Rust生態系統中形成正式的驗證環境。

5,Haybale

Haybale也是一個符號執行引擎,具有與Rust Klee相似的功能,Haybale完全是用Rust編寫的,并且在底層基于Rust LLVM IR。

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

讓我們看一個檢查函數foo是否返回0的例子。首先,我們寫出要分析的函數,你可以用任何編程語言寫這個,然后把它轉換成字節碼:

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

字節碼將保存在項目的某個地方,你可以在Rust代碼的項目變量中引用它:

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

現在,我們可以使用haybale中的find_zero_of_func方法來發現當函數接收到零輸入時存在的錯誤。

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),
  }
}

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

總結

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

責任編輯:武曉燕 來源: coding到燈火闌珊
相關推薦

2023-11-23 10:21:37

2024-12-04 10:08:05

2023-04-27 08:15:09

2024-02-26 00:00:00

前端工具Space.js

2016-09-19 14:42:12

大數據SQLPig

2024-01-31 09:24:58

2023-04-26 16:42:01

2021-05-06 15:15:13

Python工具代碼

2022-04-15 09:01:18

前端工具UTF8編碼

2019-05-10 11:13:19

分析工具Java

2023-12-15 10:42:05

2020-04-08 16:41:18

大數據Hadoop工具

2022-01-19 09:03:01

工具

2024-05-06 08:27:00

2019-11-22 09:30:59

設計Java程序員

2017-06-06 11:59:26

Docker工具容器

2019-10-28 09:53:42

Java開發結構

2025-03-25 10:49:13

2024-03-01 13:48:00

Git配置系統

2022-09-06 08:07:24

SQL語句查詢
點贊
收藏

51CTO技術棧公眾號

日韩中文字幕不卡视频| 欧美日韩国产影院| 亚洲最大av在线| 久久午夜无码鲁丝片| 亚洲欧洲免费| 欧美高清视频在线高清观看mv色露露十八 | 亚洲综合av一区| wwwav网站| 日韩国产一区二| 麻豆国产精品va在线观看不卡| 挪威xxxx性hd极品| 激情久久一区二区| 图片区小说区国产精品视频| 翔田千里亚洲一二三区| 狠狠综合久久av一区二区| 日韩av电影免费观看高清完整版| 久久在线免费观看视频| 国产色视频一区二区三区qq号| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 亚洲人成伊人成综合网小说| 久久综合精品一区| 国产三级精品在线观看| 久久最新视频| 久久久人成影片一区二区三区| 熟女高潮一区二区三区| 伊人久久大香线蕉av超碰| 欧美性淫爽ww久久久久无| 婷婷五月综合缴情在线视频| 日本在线天堂| 久久日一线二线三线suv| 俄罗斯精品一区二区三区| 在线免费观看av片| 久久久777| 性欧美暴力猛交69hd| 日本福利片在线观看| 欧美日韩精品在线一区| 日韩精品免费在线视频观看| 老女人性生活视频| 色综合视频一区二区三区日韩| 欧美性生交xxxxx久久久| 欧美午夜性视频| 人人超在线公开视频| 最新成人av在线| 亚洲一区bb| 在线观看二区| 国产欧美精品一区二区色综合朱莉| 国产一区二区三区奇米久涩| 亚洲男人第一天堂| 国产特级aaaaaa大片| 欧美亚洲国产日韩| 精品国产电影一区二区| 亚洲国产综合av| 视频二区欧美| 精品久久人人做人人爰| 免费黄色av网址| 欧美日韩午夜电影网| 日韩亚洲欧美中文三级| 亚洲第一色av| 精品亚洲a∨一区二区三区18| 在线电影院国产精品| xxxx在线免费观看| 欧美另类中文字幕| 欧美成人a视频| 丰满岳乱妇一区二区| 另类在线视频| 亚洲美女性生活视频| 李宗瑞91在线正在播放| 精品视频免费在线观看| 色婷婷av一区二区三区久久| 五月婷婷综合激情网| 欧美一区高清| 韩国三级日本三级少妇99| 久久久免费高清视频| 日韩高清不卡一区二区| 国产欧美一区二区白浆黑人| 国产精品毛片一区视频播| 国产高清不卡一区| 久草精品电影| av在线电影观看| 亚洲色大成网站www久久九九| 日韩中文字幕在线不卡| 国产福利电影在线播放| 欧美亚洲国产一区在线观看网站| 日本黄大片一区二区三区| 国产精品白丝久久av网站| 亚洲成人a**站| 五月激情四射婷婷| 欧美日韩p片| 日本精品视频在线观看| 国产口爆吞精一区二区| 99视频超级精品| 亚洲国产欧美日韩| gogo久久| 欧美性猛交视频| 在线播放黄色av| 久久精品国产亚洲blacked| 亚洲一区二区国产| 国产一级片视频| 日本特黄久久久高潮 | 亚洲香蕉久久| 亚洲国产一区自拍| 国产中文字幕久久| 一区二区国产精品| 91精品久久久久久久久久入口| wwwxxxx国产| 中文字幕欧美激情一区| 亚洲理论电影在线观看| 国产精品原创视频| 日韩黄色av网站| 国产精品视频一区二区三| 国产精品久久久久久久久久妞妞| 91午夜在线播放| 成人免费黄色网页| 红桃av永久久久| 亚洲高清在线不卡| 精品久久不卡| 69av在线视频| 黄色av一区二区三区| 国产精品家庭影院| 激情视频综合网| 精品无人区一区二区| 欧美日本精品在线| 一本色道久久综合无码人妻| 久久婷婷国产综合国色天香| 免费在线黄网站| 高清一区二区| 日韩天堂在线视频| 青娱乐在线免费视频| 久久亚洲一级片| 亚洲一区二区三区av无码| 麻豆一二三区精品蜜桃| 视频直播国产精品| 在线免费一区二区| 久久尤物电影视频在线观看| 国产婷婷一区二区三区| 一本一道久久a久久| 久久中文字幕视频| 在线观看中文字幕码| 亚洲国产成人在线| 韩国中文字幕av| 国产九一精品| 国产精欧美一区二区三区| 你懂的在线视频| av中文资源在线| 久久久国产一区二区三区四区小说 | 亚洲第一搞黄网站| 99riav国产精品视频| 欧美视频二区| 国产精品久久久对白| 国产在线xxx| 精品国产一区二区三区忘忧草 | avtt香蕉久久| 在线一区视频| 免费观看国产成人| 经典三级一区二区| 在线观看欧美成人| 天天干天天插天天射| 国产蜜臀97一区二区三区 | 日本熟伦人妇xxxx| 99久免费精品视频在线观看 | 久久久久人妻一区精品色欧美| 国产精品影音先锋| www.男人天堂网| 欧美91在线| 人人爽久久涩噜噜噜网站| 国产小视频在线| 欧美午夜精品久久久久久孕妇 | 色菇凉天天综合网| jizz日本在线播放| 国产精品一品二品| 国产欧美日韩网站| 国产日产一区| 91福利视频导航| 久草在线中文最新视频| 亚洲丝袜在线视频| 国产精品毛片一区二区在线看舒淇| 亚洲欧美视频在线观看| 三级视频网站在线观看| 久久亚洲二区| 永久免费看av| 亚洲老女人视频免费| 国产美女精品免费电影| 中中文字幕av在线| 日韩电影视频免费| 一卡二卡三卡在线| 亚洲一区在线观看视频| 欧洲一级黄色片| 久久精品国产亚洲a| 精品成在人线av无码免费看| 一区二区导航| 92看片淫黄大片看国产片| 日本а中文在线天堂| 日韩中文字幕在线视频| 色婷婷综合视频| 欧美日韩日本视频| 日韩欧美高清在线观看| 国产精品福利av| 日韩av手机在线播放| 久久99久久精品| 国产 日韩 欧美在线| 91久久夜色精品国产按摩| 高清在线不卡av| 欧美极品色图| 亚洲精品一区二区三区在线| 国产成人精品免高潮费视频| 视频在线这里都是精品| 色偷偷av一区二区三区| 亚洲色图狠狠干| 欧美一区二区免费视频| 成人a v视频| 婷婷激情综合网| 国产麻豆视频在线观看| 久久精品亚洲乱码伦伦中文| 亚洲天堂av网站| 国产麻豆午夜三级精品| 午夜精品在线免费观看| 亚洲精品字幕| av影院在线播放| 91成人精品视频| 日本一区视频在线| 少妇一区二区三区| http;//www.99re视频| 台湾天天综合人成在线| 国产成人精品电影久久久| 麻豆蜜桃在线观看| 欧美俄罗斯乱妇| 91麻豆国产福利在线观看宅福利| 尤物精品国产第一福利三区| 天天色棕合合合合合合合| 日韩免费视频线观看| 99久久国产免费| 91 com成人网| 一级片在线观看视频| 欧美亚洲免费在线一区| 波多野结衣不卡| 日本精品视频一区二区| 四虎成人在线观看| 欧美日韩激情视频8区| 中文字幕一区二区三区手机版| 亚洲自拍偷拍网站| 欧美成人国产精品高潮| 亚洲色图在线播放| 中国一级片在线观看| 亚洲视频在线观看三级| 日本爱爱小视频| 亚洲视频一二三区| 国产三级国产精品国产国在线观看 | 色婷婷综合久色| 亚洲 日本 欧美 中文幕| 色噜噜狠狠成人中文综合| 国产一级免费视频| 91福利在线观看| 国产又粗又猛又爽又| 欧美视频中文一区二区三区在线观看| 国产无遮挡又黄又爽又色视频| 色综合久久中文字幕| 成人黄色免费网| 欧美午夜影院一区| av在线亚洲天堂| 欧美精品一区二区三区高清aⅴ| 人妻少妇一区二区三区| 日韩av综合中文字幕| 久草视频在线看| 少妇激情综合网| 男女免费观看在线爽爽爽视频| 国内精品一区二区三区| 高清不卡亚洲| 91久久国产精品| 91嫩草精品| 欧美日本韩国国产| 欧美成人激情| 欧美精品在欧美一区二区| 国产精品久久久久久久久久妞妞 | 国产一区二区三区| 懂色中文一区二区三区在线视频| 久久丝袜视频| 日韩美女一区| 欧美日一区二区在线观看| 男人操女人免费软件| 免费的国产精品| 欧美一级大片免费看| 26uuu久久天堂性欧美| 亚洲欧美另类日本| 亚洲午夜激情av| 久久久久久久久黄色| 91精品国产欧美日韩| 视频二区在线| 一区二区日韩精品| 怡红院在线播放| 国产精品久久久久久久久| 亚洲视频久久久| 国产自产2019最新不卡| 中文字幕av观看| 亚洲欧美自拍偷拍色图| av中文在线播放| 欧美一区二区视频网站| 欧美美女搞黄| 欧美激情久久久久| 福利一区和二区| 精品一区久久久| 伊人情人综合网| 簧片在线免费看| 91尤物视频在线观看| 中文字幕在线有码| 欧美四级电影在线观看| 五月婷在线视频| 久久91亚洲人成电影网站 | 亚洲精品1区2区| 午夜大片在线观看| 国产精品网站在线播放| 久久久久久久极品| 欧美mv和日韩mv的网站| 日本精品一区二区三区在线播放| 日本最新高清不卡中文字幕| 亚洲第一二区| 中文有码久久| 蜜乳av一区二区| 国产一区二区三区四区五区六区| 亚洲成av人片| 亚洲av无码乱码在线观看性色| 伊人久久男人天堂| 欧美magnet| 久久综合九色欧美狠狠| 亚洲日本成人| 蜜臀aⅴ国产精品久久久国产老师| 亚洲欧洲成人自拍| 又色又爽又黄无遮挡的免费视频| 亚洲欧美一区二区三区四区| 91www在线| 国产欧美日韩一区| 亚洲国内自拍| 久草视频福利在线| 亚洲午夜日本在线观看| 精品国产无码一区二区| 久久久成人精品| 亚洲二区av| 欧美亚洲视频一区| 久久99国产精品尤物| 制服丨自拍丨欧美丨动漫丨| 欧美影院午夜播放| 超碰免费在线观看| 国产精品久久视频| 人人狠狠综合久久亚洲婷婷| 亚洲色图 在线视频| 国产精品午夜免费| 夜夜狠狠擅视频| 麻豆成人在线看| 91在线一区| 日韩欧美一区二| 久久久一区二区| 国产免费www| 日韩性xxxx爱| 老司机亚洲精品一区二区| 国产免费裸体视频| av一区二区三区| 中文字幕69页| 日韩在线欧美在线| 久久伊人影院| 久久这里只有精品23| 99久久99久久精品免费观看 | 免费在线亚洲欧美| 色一情一交一乱一区二区三区| 欧美最猛性xxxxx直播| 欧美一级二级三级区| 97人人做人人人难人人做| 一区二区亚洲| 精品人妻一区二区三区视频| 色哟哟亚洲精品| 免费av在线| 国产在线欧美日韩| 日韩综合一区二区| 视频国产一区二区| 精品国产一区二区三区忘忧草 | 人妻少妇无码精品视频区| 精品视频全国免费看| 污污片在线免费视频| 欧美亚洲精品日韩| 精品午夜久久福利影院| 欧美亚洲天堂网| 中文字幕日韩精品在线| 欧美大片91| 无码人妻精品一区二区三区66| 日韩毛片视频在线看| 天天操天天干天天舔| 国产精品久久久久aaaa九色| 欧美日韩免费| 非洲一级黄色片| 亚洲大胆人体av| 欧洲美女精品免费观看视频| www.日本在线播放| 国产精品久99| 欧美日本韩国一区二区| 亚洲永久免费观看| 老司机精品久久| 久久综合色综合| 色av吧综合网| 免费成人av| 亚洲少妇中文字幕| 欧美美女激情18p| 亚洲少妇视频|