回答:
リーガルイングリッシュへようこそ。
"should" == "shall" ==契約上の義務を使用します。それは合法主義です。「質問」にはつながりません。この文は正式な契約上の義務としてマークされます。
"would" == "will" ==良いアイデアを使用します。文をオプション機能としてマークします。
質問は、円滑化、組織化、支援、信頼の構築の一部です。単語選択の結果ではありません。
修飾子なしで裸の動詞を使用すると、正式な要件として強調表示するのが少し難しくなります。そして、超複雑な動詞の場合、それを活用する方法を理解するために少し危険を感じることができます。
簡単-「通知する」または「作成する」などの動詞。
システムは電子メールで通知します。(「通知する」という動詞は、「システム」の「通知」に活用されます。
システムは電子メールで通知するものとします。(「通知する」は「通知する」になります。活用はありません。非常に簡単です。)
難しい-「ログインする」などの動詞フレーズ、「抽出、クレンジング、変換、重複排除、ロード」などのドメイン固有の動詞フレーズ、または動詞化された「見込み客」のような名詞。いくつかの動詞が埋め込まれている長いフレーズは活用するのが困難です。各動詞を活用しますか?または、長い語句を1つの単語であるかのように活用してみてください。名詞はすべて英語で動詞化できるため、それらの作り上げられた動詞を活用する方法を知るのは困難です。
ユーザーがエンターをクリックすると、システムは抽出、クレンジング、変換、重複排除、ロードを行います。(英語は名詞句を簡単に動詞にします。)それとも、抽出、クレンジング、変換、重複排除、ロードですか?
ユーザーがエンターをクリックすると、システムは抽出、クレンジング、変換、重複排除、およびロードを行う必要があります。(恐ろしいフレーズはそのまま残されており、動詞の活用に関する謎はありません。)
["何?" 「名詞は英語で動詞化できますか?」と言います。はい。名詞。私はその上で石垣に行きます。私はそれについてしばしば妨害しました。仕様でさえ、それを妨害するはずです。]
純粋にスタイルの好みの問題。要するに、あなた/あなたのクライアントは現在または未来の時制のシステムについて考えることを好みますか?
"should"や "will"のような修飾子は未来時制を意味しますが、これは柔らかく、現在形で考えると十分に読みやすくなります。修飾子がないことは、間違いなく現在時制を示しています(つまり、この瞬間)。
修飾子の使用は、どちらの場合も十分に読みやすいため、修飾子を使用することを好みますが、修飾子の欠如は、開発中にすべてが将来緊張しているときに少し奇妙に読み取ります。
いずれにせよ、修飾子を使用することにした場合は、「should」ではなく「must」を使用することを強くお勧めします。「Sould」はオプションであると解釈できますが(S.Lottの反対に反して)、「must」は曖昧さを完全に除去する必要があります-明らかに「オプションではない」ことを意味する必要があります。
まだコメントできないので(カルマの制約)、これはS.LottへのShould / Shall vs. 説明については、この記事を参照してください。
私は、修飾詞なしで現在形の第三者を使うことに賛成です。
私の主な主張は次のとおりです。テストは物語です。
ストーリーはシーンで構成されています。各シーンの説明:
例:
DESCRIBE:
getReceipt
関数CONTEXT:領収書が存在します
IT:領収書を返します
良い話のように、良いテストは読みやすいです。
ストーリーはプログラムが何をするのかを教えてくれます。例えば
一方、修飾子を使用すると( "should"か "must"かは関係ありません)、テストはアサーションのリストになります。例:
継続的な話はありません。あなたの心はアサーションのリストを評価しています。
これは主観的ですが、自然言語(物語)を読むことは、主張のリストを読むことよりも簡単です。
「GettingTheWordsRight」というタイトルのbehaviour-driven.orgから:
要するに、物事を説明するために使用する言葉は、私たち(および他の人)がそれらのものについて考える方法に影響を与えます。これは、セマンティクスについてささいなだけの単純な問題ではありません。特定の単語には、知的レベルと感情レベルの両方でフレーズの意味を解釈する方法に影響するニュアンスが伴います。私たちの言語は説明的な単語やフレーズが豊富であるため、コードで記述したい要素の意図を明確に伝える単語を使用するのが妥当と思われます。
BDDの場合、私は個人的にテストを命名するときに単語を使用する必要があります。なぜなら、その使用はテストが特定の結果を提供することを意図しているが、対処する必要がある他の予期しない結果が生じる可能性があることを意味するためテスト結果が有効と見なされる場合。おそらくexpectまたはmustという言葉を使用できます同様に、これらの単語は、テストの名前が「テストに問題はない、実装が台無しになっていると仮定する」という意味に誤解される可能性のある、より必須の視点を意味しますが、* shouldはテストが正しいが、テスト結果が足りない場合はエラーを再度チェックする必要があるかもしれません。これはあなたの思考に影響を与えるため、コードを作成する際に心を開いておくことが奨励されるためです。コードをデバッグしようとする際に動けなくなるのを避けたい場合や、仮定のためにエラーの間違った場所を探している場合に重要です。
しかし、テスト名の接頭辞として強制されている場合、単語の「宗教的な」アプリケーションは失敗するはずです。それは、テスト名を提供するために関係するプログラマーが特定の精神的および言語的体操を通過することを余儀なくされたためです意味があり、そのような場合、言葉を正しくしようとする意図が期待を満たせず、結果としてテスト自体を解読することが難しくなることを意味しました。この種の状況が生じたとき、私は通常「するべき」という言葉を使いますテストメソッド名内の任意の場所で、名前がメソッドを簡単かつ明確に伝えるようにします。ただし、特定のコンテキスト内で他の単語が同等に適切である場合、特定の単語の使用を強制することはありません。しかし、コツは、コードで何かが表すことについて議論の余地を残さない単語を選択することであり、単なる含意に頼らずにコードが行うべきことについて考えさせます。