形式手法を実務で使いたいけど、何から始めればいい? 第29回は、kuniwak がその第一歩としてすすめる「Property-Based Testing」と「契約による設計」の話です。FizzBuzzを例に、事前条件と事後条件とは何かを噛み砕いていきます。
番組では、従来のExample-Based Testingを、いくつかの「点」を試すテストにたとえます。Property-Based Testingでは、機械が入力を大量に生成してテストを回します。そこで立ちはだかるのが「assertに何を書けばいいのか」という壁です。へんてこ が FizzBuzzの性質を考えながら穴を見つけていく掛け合いを通して、ジェネレーターの作り方や性質の見つけ方が見えてきます。後半では、事前条件を満たさない入力の扱い、防御的プログラミング、バリデータやソート関数の事前条件、停止性と部分正当性まで話が広がります。ホーア論理への入り口としてもどうぞ。
▼チャプター
オープニング
実務での第一歩:Property-Based Testing
FizzBuzzを例にした性質の定義
事前条件と事後条件(契約による設計)
次回予告:定理証明支援系
エンディング
▼この回で話していること
・形式手法を実務で始めるには?最初の一歩
・Property-Based Testingとは?Example-Based Testingとの違い
・Property-Based Testingの性質の見つけ方とジェネレーター
・FizzBuzzで考えるProperty-Based Testingの書き方
・契約による設計とは?事前条件と事後条件の違い
・事前条件違反と防御的プログラミング
・停止性と部分正当性(ホーア論理)の関係
・Web APIや比較関数の事前条件はどう考える?
▼こんな人におすすめ
・形式手法に興味はあるけど、何から始めればいいかわからないエンジニア
・ユニットテストの網羅性に限界を感じている人
・Property-Based Testingや契約による設計を実務で試してみたい人
▼関連リンク
- くわラジ 公式サイト: https://kuwa-raji.henteko07.com/
- くわラジ Spotify: https://open.spotify.com/show/6uUjalUT94ugSgtLI5WF6a
- くわラジ Apple Podcasts: https://podcasts.apple.com/jp/podcast/id1894147982
- Hypothesis(Python): https://hypothesis.readthedocs.io/
- fast-check(JavaScript/TypeScript): https://github.com/dubzzz/fast-check
- Eiffel Software「Design by Contract」: https://www.eiffel.com/values/design-by-contract/
- Building bug-free O-O software: An introduction to Design by Contract: https://archive.eiffel.com/doc/manuals/technology/contract/
- Hoare logic(Wikipedia): https://en.wikipedia.org/wiki/Hoare_logic
くわラジ(もっと詳しく教えてくださいラジオ)は、スーパーエンジニアの kuniwak に一般エンジニアの へんてこ が「もっと詳しく教えてください」と質問しながら技術を深掘りする、ゆるくてディープな技術雑談番組です。感想は X でハッシュタグ #くわラジ をつけてつぶやいてください。
#くわラジ #形式手法 #PropertyBasedTesting #契約による設計 #事前条件 #ホーア論理 #テスト
- くわラジ 公式サイト: https://kuwa-raji.henteko07.com/
- くわラジ Spotify: https://open.spotify.com/show/6uUjalUT94ugSgtLI5WF6a
- くわラジ Apple Podcasts: https://podcasts.apple.com/jp/podcast/id1894147982
- Hypothesis(Python): https://hypothesis.readthedocs.io/
- fast-check(JavaScript/TypeScript): https://github.com/dubzzz/fast-check
- Eiffel Software「Design by Contract」: https://www.eiffel.com/values/design-by-contract/
- Building bug-free O-O software: An introduction to Design by Contract: https://archive.eiffel.com/doc/manuals/technology/contract/
- Hoare logic(Wikipedia): https://en.wikipedia.org/wiki/Hoare_logic
─────────────
YouTube: https://youtu.be/vCBmcs2dEGM
Web: https://kuwa-raji.henteko07.com/
X: https://x.com/kuwa_raji
感想
まだ感想はありません。最初の1件を書きましょう!
サマリー
形式手法を実務で学ぶ第一歩として、Property-Based Testingを取り上げ、従来のExample-Based Testingとの違いを説明する。機械が大量の入力を生成する一方、入力に依存しない性質を考えてassertを書く必要があり、FizzBuzzを例にジェネレーターと性質の絞り込み方を検討する。3の倍数、5の倍数、両方の倍数という条件を組み合わせることで、FizzBuzzの仕様をより正確に表現でき、誤実装の「FizzFizz」は反例として発見できる。後半では、ジェネレーターが有効な値だけを生成すること、事前条件と事後条件、契約による設計の考え方を説明する。事前条件を満たさない入力は未定義として扱えるため、停止性や部分正当性を範囲内で記述でき、防御的プログラミングではエラーとして早期に弾くこともできる。三角形のバリデータやWeb APIの404応答を例に、バリデータや公開インターフェースでは入力を事前条件で排除せず、期待されるエラーも事後条件として扱う必要があると述べる。比較関数を渡すソート関数では、比較の一貫性や循環しない順序が事前条件となり、悪意ある入力を受けうるWeb APIとは異なる設計が必要になる。最後に、許される出力を広く定義する非決定性や、UID・疑似乱数生成器のプロパティテスト、テストフレームワークのジェネレーター支援に触れ、次回は定理証明支援系へ進む流れを示す。
コメント
このエピソードのトピック
すべてのトピック →それぞれのトピックから、ほかの番組の会話も探せます。
似ているエピソード
タイトル・AI要約・文字起こしの話題をもとにおすすめしています。
-
2026/09/27 今週のAI動画まとめ:FizzBuzzで学ぶプログラミングの罠
ちえラジ Chat ポッドキャスト版
共通する話題: FizzBuzz
本エピソードでは、みどりえん学園の中学1〜3年生合同授業を例に、ScratchやChatGPTを活用したFizzBuzz学習の紹介が行われていま...
-
プログラミングの授業1日目を終えて
ちえラジ Chat ポッドキャスト版
共通する話題: FizzBuzz
緑園学園でのプログラミング授業1日目を終え、ScratchとFizzBuzzを用いた基礎指導を行ったことを報告しています。生徒たちの緊張...
-
#19 printfデバッグしたら"負け"——デバッグは設計で決まる
くわラジ
共通する話題: Property-Based Testing
本エピソードでは、printfデバッグやステップ実行といった一般的なデバッグ手法が「負け」である理由と、デバッグしやすい設計の...
-
#58 WACATE2026 冬直前!「プロパティベースドテスト」の中で最も創造的なプロセスに挑む
B-Testing.fm
共通する話題: Property-Based Testing
次回のWACATEで担当する「プロパティベースドテスト」セッションについて紹介する。具体的なテストケースごとの期待結果を考える...
-
#27 形式手法ってなに?——"数学で仕様を書く"ただの道具の話
くわラジ
共通する話題: 形式手法 · 仕様
形式手法は、数学を基盤に仕様や要求を記述し、自然言語による解釈の揺れを抑えるための広い考え方として説明されます。数学基礎...
-
#56 テストを書きやすいコードはシンプルな設計になりやすい
B-Testing.fm
テストを書きやすいコードはシンプルな設計になりやすい、という考えを階乗計算の例で説明します。1から10の整数を受け取り、範...
-
#26 E2Eテストに全振りするな——AI時代こそ"テスト戦略"は人間の仕事
くわラジ
共通する話題: FizzBuzz · 形式手法 · 仕様
エンドツーエンドテスト(E2E)はUIからデータベースまでを一気通貫で確認でき、単体テストで見つかる問題も検出できる一方、保...
-
Season -No.78 朝活「Testable Frontend- The Good, The Bad And The Flasy」
雨宿りとWEBの小噺.fm
はい.第78回は Testable Frontend: The Good, The Bad And The Flaky https://www.smashingmagazine.com/2022/07/testable-fron...
-
#15 LLMに漠然と探させるな——「意味の構造」にフォーカスさせる検査ツール
くわラジ
同じ番組の関連エピソード
本エピソードでは、LLM(大規模言語モデル)を活用してソフトウェア設計の検査精度を劇的に向上させるツールの開発について深掘...
-
Season -No.75 朝活「A Testing Philosophy」をダラダラ読む回
雨宿りとWEBの小噺.fm
Apple・ガジェット · Firefox