【あさーしょん】

アサーション とは?

最終更新:
💡 ここでは、この条件が成り立つはず

プログラムやテストで、成り立つはずの条件を確認する表明。Pythonを例に失敗時の動作、無効化と入力検証との違いを解説します。

📌 このページのポイント
アサーション:期待と実際を確認Python:有効なassert成り立つはずの条件を評価真偽次の処理へこの条件は成立例外を送出AssertionError無効化されるため、必須の入力検証とは別
有効なPython assert文の評価の流れ。-Oではコードが生成されません。例外への対応や他の言語の動作はそれぞれ確認します。
ひよこ ひよこ
アサーションは、正しさの保証?
ペンギン先生 ペンギン先生
「ここではこの条件が成り立つはず」と表して確認するものだよ。確認する条件を満たしたことは分かるけれど、プログラム全体の正しさまで保証するものではないんだ。
ひよこ ひよこ
条件が違ったら、どうなる?
ペンギン先生 ペンギン先生
言語や使う機能によるよ。Pythonのassert文は、有効な状態で条件が偽ならAssertionErrorを送出する。例外が処理されるかや、テストの結果として報告するかも、周りの仕組みに関係する。
ひよこ ひよこ
if文でチェックするのと何が違う?
ペンギン先生 ペンギン先生
ifは条件に応じて処理を選ぶ構文だよ。アサーションは、期待する条件の確認という目的がある。外から来る不正な入力など、通常起こり得る失敗を必ず処理する仕組みとは区別しよう。
ひよこ ひよこ
テストでも使う?
ペンギン先生 ペンギン先生
PythonのunittestならassertEqualで値の一致、assertTrueで条件、assertRaisesで期待する例外を確認できる。言語のassert文と、テスト用の確認メソッドは同じものとは限らないよ。
ひよこ ひよこ
本番でも、必ず確認される?
ペンギン先生 ペンギン先生
Pythonのassert文は、-Oで最適化するとコードが生成されない。ほかの言語にも設定で扱いが変わるものがある。必ず必要な入力検証や処理を、無効化できるアサーションだけに任せないようにしよう。
もっと詳しく知りたい人へ

アサーションの条件に、更新処理を入れてよい?

確認を無効化すると、その式も評価されない場合があります。必要な更新や通信などを条件式の中に入れず、処理と確認を分けます。

アサーションが失敗したら、すべてバグ?

期待と実際が食い違った手がかりです。実装だけでなく、テストの期待、前提や環境の問題も調べます。失敗する確認を消すだけで済ませないようにします。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「アサーション」って出てきたら「成り立つはずの条件を、コードで確認する表明」と思えばだいたいOK!
📖 おまけ:英語の意味
「Assertion」 = 表明・主張
💬 コード中では、その時点で期待する条件を表し、確認するために使います。

参考資料

← 用語集にもどる