ブログ枠で参加しました。なので、書きます。
RustでProperty-Based Testing
(自分の職場のデスクで聞いていたので、めっちゃ話しかけられて半分くらいしか聞けませんでした…)
Rust で Property-Based Testing する際にはどういったクレートが使えるか?という話でした。
Property-Based Testing というのは、ざっくりいうとシステムの仕様からテストケースを半自動で作成する手法のことです。
テストと実装は多くの場合密結合になってしまうため、たとえば実装側であるデータにフィールドを追加すると、テスト側も修正し、そのテスト内容やエッジケースの検出も隅々まで修正する必要があります。Property-Based Testing を用いると、フレームワークがテストケースを(マクロやリフレクションなどでデータ構造を読み取って)自動生成するため、テストと実装を疎結合にすることができるというのが、この手法のよいところです。
Property-Based Testing についてのプレゼンテーションで、クロネコヤマトの荷物の配送条件に関するテストを実装していく中で、Property-Based Testing を使ってテストをするという内容でした。Rust では下記の2つが候補として上がるようです。
- BurntSushi/quickcheck: なんか名前も実装もトレイトの命名もめっちゃ Haskell の QuickCheck に似てるなと思ったら、inspired by QuickCheck だった。Haskell の QuickCheck と同じような構成になっている。型クラスに Property-Based Testing 用の実装を追加して組み上げるスタイル。
- AltSysrq/proptest: もうひとつの選択肢。Python のフレームワークが由来らしい。
コード例はまた後日考えて書いて載せてみます。
Crate Trendsを作ってみた
Crate Trends というサイトの作者の方が LT をしてくださいました。サイトの紹介がメインでした。Rust には数多くのクレートが存在し、たとえば Web サーバーというキーワードに対して複数のクレートが検索結果として出てくるという状況になっています。このサイトを利用すると、クレート同士のダウンロード数やライセンスなどを比較しながら検討できます。
フロントエンドは Next.js で作成し、バックエンドは actix-web で構築したとのことでした。クレートの情報そのものは crates_io_api というクレートを利用したそうです。コントリビューション等をお待ちしておりますとのことなので、ぜひ気になった機能や追加したい機能がある方はカスタマイズしていきましょう!