book-ja
book-ja copied to clipboard
ch11-01 用語:assert は「断定する」ではないのでは
ch11-01 https://doc.rust-jp.rs/book-ja/ch11-01-writing-tests.html に
結果が想定通りであることを断定(以下、アサーションという)する。
とあります。原文は
Assert the results are what you expect.
です。 assert や assertion は日本語にしにくいですが,「断定」という言葉には「判断・判定」の含みがあり,訳語として合っていないと思います。 どういう訳語がよいか分かりませんが,「断定」よりは「主張」のほうが適当なのではないかと思います。
Wikipediaではプログラミングの文脈での「assertion」は「表明」と訳されているようです:https://ja.wikipedia.org/wiki/%E8%A1%A8%E6%98%8E
Wikipedia のその記事の主題はソフトウエアテストにおける assertion とはちょっと違うような気がしますがどうでしょうか。
assertion → アサーション,assert →アサートする,でもいいような気もします。
訳者です。もともと「アサートする」となっていたのですが、これは訳になっていない(日常的に使わない表現であり、普通の人には説明なしでは意味がわからない)ので、訳出しようとした結果「断定する」としました。「主張する」でも構わないかと。ちなみに、
「断定」という言葉には「判断・判定」の含みがあり,訳語として合っていない
とおっしゃっていますが、どうしてその含みがあると訳語としてあっていないのでしょうか?プログラムを書いた時点でassert文の内容が正しいはずだと「判断・判定」していると思うのですが……。
あと、@taiki-e さんの上げてたassertionの例についてですが、 @scivola さんは
Wikipedia のその記事の主題はソフトウエアテストにおける assertion とはちょっと違うような気がします
とおっしゃっていますが、同じものだと思う(なので訳は「表明」でもいいかも)のですがどうでしょう?どのように違うとお考えですか?
判断や判定というのは証拠とか基準(判断基準)とか論理といったものに基づきますが,ソフトウエアテストにおける assertion は「こうでなければならない」を記述したものなので,違うだろうと思ったんです。 たとえば,
assert_eq!(foo(3), 0);
と書いた人は,「foo
関数の定義がこうだから 3
を与えると 0
を返すはずだ」と判断したのではなく,「foo
関数は 3
を与えると 0
を返さなければならない。もしそうなってないなら foo
関数の定義が間違っているのだ」と主張しているわけです。
foo(3)
の値が 0
であることは,論理によって導かれることではなく,foo
が満たすべき性質(foo
の要求仕様)ですよね。
Wikipedia の「表明」のページに書かれているのは,プログラムの(関数などの)内部に,ありえない状況を検出するコードを仕込んでおくとバグが早期に発見されやすい,という話ではないでしょうか。 ソフトウエアテストにおける assertion は,プログラム(関数など)の外部から動作を確認するものなので,少し違うかなあ,と思ったんですが。 (えっと,もしかしたら私は「ソフトウエアテスト」という言葉を狭い意味で使っているかもしれません)
理解しました!たしかに、テストを書くという文脈においては「論理的判断」より「仕様の主張」の方が近そうですね。 Wikipediaの記事も、細かく捉えると今回の文脈とはたしかに一致していないかもです。
std
ソースの中に探って見た結果、assert_eq!
はテストコードと関数の内部両方で使われています。他の言語も大体そうだと思います。ですから、テストか内部かという文脈の分別をつけるのは難しいと思います。
assertの類義語を探してみた結果、insist / declare / allegeなどがあります。「言い張る」の印象です。
上記のWikipediaページの脚注から日本語の三つの参考に沿ってみた結果: ・cpprefjpは「表明」と訳しています ・boostjpは「アサート」と ・Microsoftは「アサーション」と(最新版ページ)
バラバラです(汗)。
Microsoftのもとの英語を読んだら、assertの出番がなくて、assertionしか使っていません。翻訳のために原文の書き方も調整してるかなと憶測します。
そしてC#のものも読んだら、アサートを使っているけど、名詞として使っています。もとの英語もそうです。
C#のものから、もっとも近い意味の言葉は「これはアサーションを使ってテストできます」だと思います。
母語話者ではありませんが、参考までよろしくお願いします。