契約による設計

契約による設計

契約による設計とは

契約による設計という考え方があります。メソッド呼び出しの前後に保証されているべき状態と、それは誰の責任で保証するのかを明確にすることで、ソフトウェア全体のシンプルさを最大化する考え方です。

qiita.com(引用元)

事前条件

  • ある処理・サブルーチン(関数やメソッド)が呼ばれる前に成立すべき条件
  • ある処理・サブルーチン(関数やメソッド)呼び出し時に渡される引数が満たすべき条件

事後条件

  • ある処理ある処理・サブルーチン(関数やメソッド)が呼び出された後に成立すべき条件

不変条件

  • オブジェクトの内部状態が常に満たすべき条件

成功

  • 上記の3つが全て成立した状態

失敗

  • 上記の3つのうち、どれか1つでも成立しない状態

バグが発生するということは

  • 失敗の状態は、つまりプログラムが正常に動作していないということなので、バグが発生している状態である

責任と権利

事前条件について

  • 処理・サブルーチン(関数やメソッド)の呼び出し側の責任
  • 処理・サブルーチン(関数やメソッド)の呼び出される側の権利

  • 事前条件を満たさない場合
    =>処理・サブルーチン(関数やメソッド)の呼び出し側にバグがある

事後条件について

  • 処理・サブルーチン(関数やメソッド)の呼び出される側の責任
  • 処理・サブルーチン(関数やメソッド)の呼び出し側の権利

  • 事後条件を満たさない場合
    =>処理・サブルーチン(関数やメソッド)の呼び出される側にバグがある

契約による設計の利点

  • バグの原因を特定しやすくなる

アサーション(表明)

アサーション(表明)とは

表明(ひょうめい、assertion)とは、プログラミング言語の構文の一種であり、そのプログラムの前提条件を示すのに使われる。アサーションとも呼ばれる。表明は、プログラムのその箇所で必ず真であるべき式の形式をとる。多くの言語ではそのような前提条件のチェックに表明を使用するが、設計上の判断を文書化するのに使う場合もある。表明が偽となった場合、プログラムにバグが潜在していることを示している。これを「表明違反; assertion failure」と呼ぶ。

表明 - Wikipedia(引用元)

  • つまり、前提条件を示して、その前提条件が擬だった場合は、バグがありますよと教えてくれる

契約による設計においてのアサーション(表明)

  • コード中に事前条件、事後条件、不変条件を記述して、各々の値が論理的に正しいかを確認することができる。
  • また、コード中のアサーション(表明)を仕様書の一部としてみなすこともある

参考にさせていただいたサイト

表明 - Wikipedia JavaTips 〜Javaプログラミング編:プログラムの品質を高めるためのアサーションとは? - @IT qiita.com 11章 契約による設計:信頼性の高いソフトウェアを構築する 1 · GitHub qiita.com エンジニア必須の概念 – 契約による設計と信頼境界線 | yohgaki's blog