Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
scivola opened this issue Oct 31, 2020 · 6 comments
Open

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

scivola opened this issue Oct 31, 2020 · 6 comments

Comments

@scivola
Copy link

scivola commented Oct 31, 2020

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

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

とあります。原文は

Assert the results are what you expect.

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

@taiki-e
Copy link

taiki-e commented Nov 22, 2020

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

@scivola
Copy link
Author

scivola commented Nov 23, 2020

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

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

@swnakamura
Copy link

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

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

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

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

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

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

@scivola
Copy link
Author

scivola commented Dec 2, 2020

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

assert_eq!(foo(3), 0);

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

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

@swnakamura
Copy link

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

@louy2
Copy link

louy2 commented Aug 4, 2022

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

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

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

バラバラです(汗)。

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

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants