アサーション【assertion】アサート
概要

開発者はプログラム中の任意の位置にアサーションを挿入し、その箇所で成立しているべき条件式を記述する。処理系は実行時にその箇所に到達すると条件を評価し、条件が真であれば何もせずそのまま処理を続行する。偽となった場合はアサーション違反とみなされる。
違反時には、エラーメッセージの表示や例外の送出、プログラムの強制終了などが行われる。多くの場合、満たされなかった条件式や関連する変数の値、ソースコード上の位置といった情報も併せて出力され、開発者は不具合の原因を特定しやすくなる。
アサーションは、関数に渡される引数が想定範囲内であることや、処理の実行後に結果が一定の条件を満たしていることなど、プログラム内部の論理的な整合性を確認する目的で使われる。これらの条件は「事前条件」「事後条件」「不変条件」のように整理して記述する考え方もあり、プログラムの正しさを明示し保守やデバッグを容易にする手法として利用される。
一方、利用者の入力ミスや通信障害といった、運用中に発生し得る例外的な状況への対処を目的とするものではなく、入力値検証やエラー処理の代替として用いるべきではないとされる。想定外の入力に対する処理は、通常の条件分岐や例外処理によって実装される。
多くのプログラミング言語や開発環境には、アサーションの検査を実行時に自動的に行う「アサーションチェッカ」(assertion checker)機能が標準で備わっている。C言語のassertマクロ、Javaのassert文、Pythonのassert文などがその例である。これらを利用すると、条件判定やエラー報告の仕組みを個別に実装しなくても検査をコードに組み込むことができる。
アサーションの検査は実行性能に影響を与える場合があるため、多くの処理系では有効と無効を切り替える機能が提供されている。開発やテストの段階では有効化して不具合の検出に利用し、リリース後の本番環境では実行速度の低下を防ぐために無効化することが一般的である。アサーション関連の記述をソースコードから削除することなく、コンパイル時の設定や実行時のオプションによって検査の実施有無を変更できるよう設計されている言語や処理系が多い。
関連用語
他の辞典等による「アサーション」の解説 (外部サイト)
資格試験などの「アサーション」の出題履歴
本ページを参照・引用している文書・論文など (外部サイト)
- 独立行政法人情報処理推進機構(IPA) 技術本部 ソフトウェア高信頼化センター「先進的な設計・検証技術の適用事例報告書」掲載論文「システム記述言語(AADL)による複合システム設計
」(PDFファイル)にて参照 (2015年11月)