アサーションの意義や有用性はどういったものになるのでしょうか。
アサーション(assertion)とテスト(test)とでは目的が異なります。また互いに相補的なものですから、両方を記述していくのが好ましいです。
- アサーション=アルゴリズムや内部処理ステップの正当性を保証すもの。主に不変条件を確認する。
- テスト=メソッドの外部仕様/外からみた振る舞いを保証するもの。主に事後条件を確認する。
さらに、アサーションを用いるとコードは当然のことながら長くなってしまいます。
アルゴリズムや内部処理の区切りに、不変条件を確認するassert文を配置する程度であれば、コードの肥大化を気にする必要はないと思います。アサーションにより得られる正当性の保証は、ソースコードが多少間延びするデメリットを大きく上回るはずです。
Javaのアサーション(assert文)については、下記サイトが参考になります:
そもそもメソッドの引数チェックってするものなのでしょうか。
するものです。
重要なメソッドだったら、引数チェックの必要があり、assertを使うと無効にされる恐れがあるから、ちゃんとしたチェックにしろ、という意味でしょうか。
外部公開する(≒publicな)メソッドでは、常に引数チェックを行うべきです。assert文は無効化される可能性もあるため、外部メソッドの引数チェックとしては不適切です。
もし、そうだとすれば、なぜpublicでないメソッドの方はassetionで良いということになるのでしょうか。
引数チェックのようなメソッドの事前条件チェックは、クラス内部(自分)とその外部(他人)の責任分界点を明確化したうえで行う、防衛的プログラミングの一種です。publicでないメソッドは、呼び出し元も自分の責任ですから、assertionでも十分という判断になります(もちろん、publicメソッド同様に引数チェックしてもよいです)。
退会済みユーザー
2016/08/17 05:11