book-ja icon indicating copy to clipboard operation
book-ja copied to clipboard

ch11-01 用語:assert は「断定する」ではないのでは

Open scivola opened this issue 3 years ago • 6 comments

ch11-01 https://doc.rust-jp.rs/book-ja/ch11-01-writing-tests.html に

結果が想定通りであることを断定(以下、アサーションという)する。

とあります。原文は

Assert the results are what you expect.

です。 assert や assertion は日本語にしにくいですが,「断定」という言葉には「判断・判定」の含みがあり,訳語として合っていないと思います。 どういう訳語がよいか分かりませんが,「断定」よりは「主張」のほうが適当なのではないかと思います。

scivola avatar Oct 31 '20 13:10 scivola

Wikipediaではプログラミングの文脈での「assertion」は「表明」と訳されているようです:https://ja.wikipedia.org/wiki/%E8%A1%A8%E6%98%8E

taiki-e avatar Nov 22 '20 18:11 taiki-e

Wikipedia のその記事の主題はソフトウエアテストにおける assertion とはちょっと違うような気がしますがどうでしょうか。

assertion → アサーション,assert →アサートする,でもいいような気もします。

scivola avatar Nov 23 '20 08:11 scivola

訳者です。もともと「アサートする」となっていたのですが、これは訳になっていない(日常的に使わない表現であり、普通の人には説明なしでは意味がわからない)ので、訳出しようとした結果「断定する」としました。「主張する」でも構わないかと。ちなみに、

「断定」という言葉には「判断・判定」の含みがあり,訳語として合っていない

とおっしゃっていますが、どうしてその含みがあると訳語としてあっていないのでしょうか?プログラムを書いた時点でassert文の内容が正しいはずだと「判断・判定」していると思うのですが……。

あと、@taiki-e さんの上げてたassertionの例についてですが、 @scivola さんは

Wikipedia のその記事の主題はソフトウエアテストにおける assertion とはちょっと違うような気がします

とおっしゃっていますが、同じものだと思う(なので訳は「表明」でもいいかも)のですがどうでしょう?どのように違うとお考えですか?

swnakamura avatar Dec 02 '20 07:12 swnakamura

判断や判定というのは証拠とか基準(判断基準)とか論理といったものに基づきますが,ソフトウエアテストにおける assertion は「こうでなければならない」を記述したものなので,違うだろうと思ったんです。 たとえば,

assert_eq!(foo(3), 0);

と書いた人は,「foo 関数の定義がこうだから 3 を与えると 0 を返すはずだ」と判断したのではなく,「foo 関数は 3 を与えると 0 を返さなければならない。もしそうなってないなら foo 関数の定義が間違っているのだ」と主張しているわけです。 foo(3) の値が 0 であることは,論理によって導かれることではなく,foo が満たすべき性質(foo の要求仕様)ですよね。

Wikipedia の「表明」のページに書かれているのは,プログラムの(関数などの)内部に,ありえない状況を検出するコードを仕込んでおくとバグが早期に発見されやすい,という話ではないでしょうか。 ソフトウエアテストにおける assertion は,プログラム(関数など)の外部から動作を確認するものなので,少し違うかなあ,と思ったんですが。 (えっと,もしかしたら私は「ソフトウエアテスト」という言葉を狭い意味で使っているかもしれません)

scivola avatar Dec 02 '20 13:12 scivola

理解しました!たしかに、テストを書くという文脈においては「論理的判断」より「仕様の主張」の方が近そうですね。 Wikipediaの記事も、細かく捉えると今回の文脈とはたしかに一致していないかもです。

swnakamura avatar Dec 02 '20 22:12 swnakamura

stdソースの中に探って見た結果、assert_eq!はテストコードと関数の内部両方で使われています。他の言語も大体そうだと思います。ですから、テストか内部かという文脈の分別をつけるのは難しいと思います。

assertの類義語を探してみた結果、insist / declare / allegeなどがあります。「言い張る」の印象です。

上記のWikipediaページの脚注から日本語の三つの参考に沿ってみた結果: ・cpprefjpは「表明」と訳しています ・boostjpは「アサート」と ・Microsoftは「アサーション」と(最新版ページ

バラバラです(汗)。

Microsoftのもとの英語を読んだら、assertの出番がなくて、assertionしか使っていません。翻訳のために原文の書き方も調整してるかなと憶測します。

そしてC#のものも読んだら、アサートを使っているけど、名詞として使っています。もとの英語もそうです。

C#のものから、もっとも近い意味の言葉は「これはアサーションを使ってテストできます」だと思います。

母語話者ではありませんが、参考までよろしくお願いします。

louy2 avatar Aug 04 '22 09:08 louy2