Slide 1

Slide 1 text

契約による設計の「契約」とは 何を指しているか 2023/04/18 株式会社Voicy 灘脇裕一 (@natacoon) Voicy Tech Bar

Slide 2

Slide 2 text

自己紹介 灘脇 裕一 Backend Engineer 機能開発チームリーダー スクラムマスター 2012.04 - HRTech 2020.07 - Voicy 本日はよろしくお願いします! @natacoon 好きなモノ: 服とねことスプラトゥーン 株式会社Voicy

Slide 3

Slide 3 text

本日のアジェンダ 事前条件と事後条件の関係 1 2 契約による設計とは?

Slide 4

Slide 4 text

契約による設計とは?

Slide 5

Slide 5 text

契約による設計とは?

Slide 6

Slide 6 text

契約による設計とは? Wikiより 「契約による設計」(DbC)における 中心的な概念は、クライアントとサプ ライヤの契約 (contract) である。

Slide 7

Slide 7 text

契約による設計とは? キーワード - 事前条件(preconditions) - 事後条件(postconditions) - 不変条件(class invariant)

Slide 8

Slide 8 text

契約による設計とは? 今日の焦点 - 事前条件(preconditions) - 事後条件(postconditions) - 不変条件(class invariant)

Slide 9

Slide 9 text

契約による設計とは? 事前条件 関数の引数が適切であることを保証し、バグや予期しない動作を未然に防ぐため に、関数が呼び出される前に守らないといけない条件のこと。

Slide 10

Slide 10 text

契約による設計とは? 事前条件 大抵の場合、関数の最初で引数の値を検 証する。 コンストラクタ(またはそれに該当する もの)で検証することが多い。 条件に違反する場合はエラーを返す。

Slide 11

Slide 11 text

契約による設計とは? 事前条件 恩恵として - 入力の不備による正しくないインスタンスが出来上がってしまうことを未 然に防ぐことができる。 - ドメイン上で定義される正しい状態のインスタンスのみを作れることを保 証できる。

Slide 12

Slide 12 text

契約による設計とは? 事後条件 関数やクラスが呼び出された後に満たすべき状態を指定し、使われる側が、使う側 に対してこれだけは必ず守りますよということを示します。

Slide 13

Slide 13 text

契約による設計とは? 事後条件 関数やクラスを抜けるときに、返却値に 対して守られていなければならない状態 を確認する。 条件に違反する場合はエラーを返す。

Slide 14

Slide 14 text

事前条件と事後条件の関係

Slide 15

Slide 15 text

事前条件と事後条件の関係 雑に言うと 「呼び出し側が事前条件を満たしてくれるなら、事後条件を満たす状態を実現するこ とを約束するよ」 ということ

Slide 16

Slide 16 text

事前条件と事後条件の関係 なんらかのやりとりにおいて事前条件と事後条件を定義するということそのものに対 して「契約」という言葉を使っている 置き換えてイメージすると、顧客と提供者の関係において「こういうようにしてくれ るなら、こうするよ」ってことを約束(契約)する感じ。 Client Supplier 事前条件を守る 事後条件を守る

Slide 17

Slide 17 text

事前条件と事後条件の関係 なんらかのやりとりにおいて事前条件と事後条件を定義するということそのものに対 して「契約」という言葉を使っている 置き換えてイメージすると、顧客と提供者の関係において「こういうようにしてくれ るなら、こうするよ」ってことを約束(契約)する感じ。 Client Supplier 事前条件を守る 事後条件を守る 約束してる(契約してる)

Slide 18

Slide 18 text

まとめ - 使う側と使われる側での取り決めに対して「契約」という言葉を使っている - 契約を守れないなら、Fail Fastしよう - 事後条件が守られるのは事前条件が満たされているという前提に立っている - 事前条件が守られていなければ事後条件は守られず、表明(検証)する意 味がなくなってしまうため、その場合は関数やクラスの事前条件とセット で見直しましょう

Slide 19

Slide 19 text

お知らせ Meetyでカジュアル面談をやってます! 転職関係ない話もウェルカムなのでお話しましょう

Slide 20

Slide 20 text

お知らせ VoicyでエンジニアのVoicyのエンジニアメンバーが テックニュースや日々の活動をお届けしています! 私は水曜日に配信しています💡