精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人黄色图片网站| 在线播放日本| 久久亚洲精选| 久久精品男人天堂| 久久精品aⅴ无码中文字字幕重口| mm视频在线视频| 国产亚洲综合色| 91中文在线观看| 男女啊啊啊视频| 99国产精品一区二区| 亚洲高清久久久久久| jizz18女人| 麻豆免费在线| 亚洲精品日韩一| 午夜精品短视频| 国产综合无码一区二区色蜜蜜| 99在线精品免费视频九九视| 久久精品成人欧美大片| 久久精品国产亚洲av麻豆| 精品三级国产| 欧美日韩免费观看一区三区| 国产原创popny丨九色| 国精产品一区| 国产精品久久久久久久第一福利| 久久国产一区二区| 性生活黄色大片| 久久99深爱久久99精品| 日本亚洲欧美三级| 日韩精品成人一区| 欧美激情精品久久久六区热门| 亚洲人成77777在线观看网| 精品人妻在线视频| 欧美成人一级| 欧美精品成人一区二区三区四区| 国产精品涩涩涩视频网站| av电影院在线看| 国产精久久久| 亚洲大片在线| 欧美成人精品在线视频| 国产3级在线观看| 欧美中文一区二区| 一区二区三区美女xx视频| 无遮挡aaaaa大片免费看| 激情亚洲另类图片区小说区| 欧美变态口味重另类| 亚洲天堂网站在线| 九九99久久精品在免费线bt| 5566中文字幕一区二区电影| 男人午夜视频在线观看| 只有精品亚洲| 91精品在线观看入口| 中文字幕一区久久| 精品国产亚洲一区二区在线观看| 5858s免费视频成人| 两性午夜免费视频| 亚洲天堂中文字幕在线观看| 精品剧情v国产在线观看在线| 亚洲av无一区二区三区久久| 清纯唯美激情亚洲| 欧美成人精精品一区二区频| 亚洲国产欧美日韩在线| 国产精品jk白丝蜜臀av小说 | 樱花视频在线免费观看| 美女精品网站| 国产精品美女在线| 国产又粗又猛又黄| 国产一区欧美二区| 成人午夜电影在线播放| 日日夜夜精品免费| 91蜜桃视频在线| 日韩国产在线一区| 99精品老司机免费视频| 亚洲精品视频一区| 成人免费性视频| 手机av在线| 在线观看av不卡| 亚洲综合20p| 国产精品xxx在线观看| 99视频在线精品| 精品伊人久久大线蕉色首页| 国产综合视频一区二区三区免费| 国产精品久久福利| 精品久久久无码人妻字幂| 2021中文字幕在线| 在线视频综合导航| www.色.com| 伊人春色精品| 久久亚洲欧美日韩精品专区 | 国模精品娜娜一二三区| 久久国产精品高清一区二区三区| 1024成人网色www| 三上悠亚久久精品| 国产毛片精品久久| 精品国产乱码久久久久久牛牛| 免费看污片网站| 久久久久蜜桃| 秋霞午夜一区二区| 国产av一区二区三区| 久久久久久久网| www.18av.com| 日韩av电影资源网| 亚洲高清一区二| 婷婷伊人五月天| 性伦欧美刺激片在线观看| 91免费高清视频| 三级黄视频在线观看| 一区二区视频在线| 性猛交ⅹ×××乱大交| 成年人网站在线观看视频| 国产精品扒开做爽爽爽的视频| 欧美日韩国产精品专区| 视频免费1区二区三区| 亚洲色图丝袜| 午夜美女久久久久爽久久| 在线免费观看高清视频| 久久久噜噜噜久久中文字幕色伊伊 | 国产欧美一区二区三区久久 | 久久九九全国免费精品观看| 精品久久久久久久久久久国产字幕| 国产91对白在线观看九色| 色综合久久av| 一区二区三区四区日本视频| 欧美va在线播放| 欧美一级片在线视频| 日本一区中文字幕| 女女同性女同一区二区三区91| 丰满诱人av在线播放| 亚洲人体在线| 欧美日韩国产首页| 熟女俱乐部一区二区视频在线| 最新亚洲一区| 国产精品国产一区二区| 5566中文字幕一区二区电影 | 美女免费视频一区| 欧美三级网色| 中文在线аv在线| 亚洲精品国产欧美| 国产午夜精品一区二区理论影院| 国产在线乱码一区二区三区| 亚洲三区在线| 国产一区二区三区四区五区3d| 一本色道久久综合亚洲精品小说 | 日韩色淫视频| 国产亚洲欧洲在线| 69xxxx国产| 久久久精品国产99久久精品芒果 | 亚洲天堂av高清| 天堂网视频在线| 久久久天堂av| 蜜臀久久99精品久久久酒店新书| 欧美男gay| 国产精品伦子伦免费视频| av中文字幕在线| 欧美日韩高清在线| 久久久久亚洲av无码专区体验| 国产久卡久卡久卡久卡视频精品| 黄色一级片国产| 粉嫩一区二区三区四区公司1| 久久久亚洲福利精品午夜| 人妻妺妺窝人体色www聚色窝| 精品国产亚洲一区二区三区| 欧美剧情片在线观看| 亚洲色图100p| 国产麻豆成人精品| 福利视频免费在线观看| 欧美丝袜足交| 国产精品扒开腿做| 免费av网站在线看| 日韩欧美一区二区免费| 久久国产精品系列| 国产亚洲一区二区三区在线观看| 三上悠亚av一区二区三区| 欧美freesex交免费视频| 激情伦成人综合小说| 在线成人视屏| 欧美裸体xxxx极品少妇| av女名字大全列表| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产女人aaa级久久久级| 天堂av2020| 99成人在线| 亚洲精品无人区| 97一区二区国产好的精华液| 日韩av123| 成人国产免费电影| 精品偷拍各种wc美女嘘嘘| 中文字幕在线观看视频一区| 亚洲一区二区三区在线| 精品无人区无码乱码毛片国产 | www.男人天堂| 免费久久99精品国产| 少妇大叫太大太粗太爽了a片小说| 亚洲精品播放| http;//www.99re视频| 欧美艳星kaydenkross| 色综合久久悠悠| 免费av在线电影| 精品奇米国产一区二区三区| 中文字幕+乱码+中文| 午夜欧美一区二区三区在线播放| 国产调教在线观看| www.色精品| 香蕉视频色在线观看| 老鸭窝毛片一区二区三区| 白白操在线视频| 日韩欧美视频在线播放| 精品欧美一区二区精品久久| 国产不卡精品| 国产精品久久久久久久久久尿| 2021中文字幕在线| 岳的好大精品一区二区三区| 欧美亚洲第一区| 午夜在线激情影院| 色爱精品视频一区| 第三区美女视频在线| 亚洲国产精品推荐| 精品久久人妻av中文字幕| 欧美视频在线一区| 免费无码国产精品| 欧美视频第一页| 久热这里只有精品在线| 国产精品国产自产拍高清av| x88av在线| 久久先锋影音av| 免费黄色三级网站| 岛国精品在线播放| 波多野结衣中文字幕在线播放| 蜜桃视频在线一区| www.天天射.com| 日韩二区在线观看| 妓院一钑片免看黄大片| 狂野欧美一区| 国产亚洲欧美在线视频| 国产精品一区亚洲| 亚洲熟妇无码一区二区三区导航| 女人天堂亚洲aⅴ在线观看| 国产精品夜夜夜爽张柏芝| 99精品视频在线观看播放| 日韩和欧美的一区二区| 日本一区二区在线看| 日韩精品无码一区二区三区| 精品美女视频| 色综合视频二区偷拍在线| 日产午夜精品一线二线三线| 亚洲精品成人三区| 四虎成人av| 日本一本草久p| 综合在线一区| 国产一区二区三区乱码| 亚洲黄色成人| 免费高清在线观看免费| 日韩精品一级中文字幕精品视频免费观看 | 国产免费无码一区二区视频| 一区二区在线观看视频| 日本一二三区视频| 欧美午夜美女看片| 中文字幕免费高清网站| 在线播放国产精品二区一二区四区| 国产精品老熟女视频一区二区| 7777精品伊人久久久大香线蕉 | 欧美变态挠脚心| 亚洲www在线| 国产精品久av福利在线观看| 麻豆视频成人| 日本一二区不卡| 男女裸体影院高潮| 99精品热6080yy久久| 能在线观看的av网站| 国产一区二区电影| 国产精品久久久久久亚洲色| 久久人人97超碰com| 日韩亚洲欧美中文字幕| 亚洲自拍偷拍欧美| 欧美日韩 一区二区三区| 欧美一区二区人人喊爽| 亚洲欧洲国产综合| 色诱女教师一区二区三区| 久久五月精品中文字幕| 国产不卡av在线| 日本精品一区二区三区在线观看视频| 狠狠色综合一区二区| 久久国产中文字幕| 免费av手机在线观看| 日本成人在线电影网| av不卡中文字幕| 欧美国产激情一区二区三区蜜月| 亚洲国产美女视频| 日韩欧美国产免费播放| 国产毛片久久久久| 亚洲欧美在线免费| 毛片在线导航| 成人看片人aa| 亚洲区小说区| 蜜臀av.com| 日韩av二区在线播放| 国产一级免费片| 亚洲视频图片小说| 国产真人无遮挡作爱免费视频| 日韩视频在线观看一区二区| jzzjzzjzz亚洲成熟少妇| 国内精品国产三级国产在线专| 另类一区二区| 日本高清不卡三区| 在线播放日韩| 夜夜夜夜夜夜操| 国产亚洲精品久| 日本网站在线播放| 欧美电视剧在线看免费| 香港伦理在线| 国产精品扒开腿做爽爽爽男男 | 99国产精品国产精品毛片| 乱老熟女一区二区三区| 色婷婷久久久久swag精品| 粉嫩av一区二区夜夜嗨| 欧美成人精品一区| 四虎国产精品成人免费影视| 日韩欧美视频第二区| 欧美一级网站| 一区二区三区少妇| 亚洲国产中文字幕| 国产黄色小视频在线观看| 欧美激情三级| 91在线精品视频| 日本一二区不卡| 日本a√在线观看| 国产欧美一区二区三区沐欲| 四虎成人在线观看| 亚洲精品aⅴ中文字幕乱码| 国内在线免费视频| 99视频在线播放| 欧美不卡一区| 欧美xxxx黑人| 一个色综合网站| 朝桐光av在线一区二区三区| 久久国产精彩视频| 国产精品777777在线播放| 中文字幕剧情在线观看一区| 精品中文av资源站在线观看| 免费看一级黄色| 欧美精品乱码久久久久久按摩| 欧美黄色激情| 亚洲综合日韩在线| 欧美日韩福利| 亚洲女则毛耸耸bbw| 亚洲成人福利片| 深夜福利视频在线观看| 国产精品第一区| 日韩欧美中文| www.午夜av| 亚洲一区二区三区不卡国产欧美 | 日韩电影精品| 在线视频91| 国产电影一区在线| 日本一二三区视频| 亚洲男人的天堂在线播放| 欧美人与性动交xxⅹxx| 亚洲成人自拍| 国产精一区二区三区| 精品少妇久久久| 日韩精品在线观| 78精品国产综合久久香蕉| 一区在线电影| 成人一区二区三区中文字幕| 天天干天天干天天| 少妇激情综合网| 我要色综合中文字幕| 欧美一区二区三区爽大粗免费| 国产欧美一区二区精品性色超碰 | 亚洲精品久久久久中文字幕欢迎你 | 最新国产露脸在线观看| 国产午夜精品在线| 日本人妖一区二区| 永久看片925tv| 亚洲精品电影在线观看| 97精品国产99久久久久久免费| 玖玖精品在线视频| 99re视频这里只有精品| 亚洲一区 中文字幕| 久久久伊人日本| 成人精品天堂一区二区三区| 亚洲AV无码久久精品国产一区| 精品久久在线播放| 一区二区高清不卡| 精品乱色一区二区中文字幕| 蜜臀a∨国产成人精品| 日韩精品一区二区三| 色综合伊人色综合网| 日韩大胆成人| 欧洲在线免费视频| 欧美性xxxx极品高清hd直播| 精产国品自在线www| 美国av一区二区三区| 国产一区视频在线看| 欧美日韩亚洲一二三| 91成人在线精品视频| 美脚丝袜脚交一区二区| 亚洲国产高清不卡| 天天操天天干天天舔| 91免费国产网站| 青青草成人在线观看|