仕様をBDDスタイルで記述する場合、「should」を使用する必要がありますか?[閉まっている]


12

私はこれが多少主観的であることを理解していますが、どちらかの良いケースを見つけることができません:

「何かをする必要がある」
「何かする」

推奨スタイルの支持者は、それがあなたが達成しようとしていることを実際に質問することを強制するが、批判者はそれを単に冗長であると感じていると述べている。

これについてコンセンサスがありますか、それとも純粋にスタイルの問題ですか?

回答:


3

リーガルイングリッシュへようこそ。

"should" == "shall" ==契約上の義務を使用します。それは合法主義です。「質問」にはつながりません。この文は正式な契約上の義務としてマークされます。

"would" == "will" ==良いアイデアを使用します。文をオプション機能としてマークします。

質問は、円滑化、組織化、支援、信頼の構築の一部です。単語選択の結果ではありません。

修飾子なしで裸の動詞を使用すると、正式な要件として強調表示するのが少し難しくなります。そして、超複雑な動詞の場合、それを活用する方法を理解するために少し危険を感じることができます。

簡単-「通知する」または「作成する」などの動詞。

  • システムは電子メールで通知します。(「通知する」という動詞は、「システム」の「通知」に活用されます。

  • システムは電子メールで通知するものとします。(「通知する」は「通知する」になります。活用はありません。非常に簡単です。)

難しい-「ログインする」などの動詞フレーズ、「抽出、クレンジング、変換、重複排除、ロード」などのドメイン固有の動詞フレーズ、または動詞化された「見込み客」のような名詞。いくつかの動詞が埋め込まれている長いフレーズは活用するのが困難です。各動詞を活用しますか?または、長い語句を1つの単語であるかのように活用してみてください。名詞はすべて英語で動詞化できるため、それらの作り上げられた動詞を活用する方法を知るのは困難です。

  • ユーザーがエンターをクリックすると、システムは抽出、クレンジング、変換、重複排除、ロードを行います。(英語は名詞句を簡単に動詞にします。)それとも、抽出、クレンジング、変換、重複排除、ロードですか?

  • ユーザーがエンターをクリックすると、システムは抽出、クレンジング、変換、重複排除、およびロードを行う必要があります。(恐ろしいフレーズはそのまま残されており、動詞の活用に関する謎はありません。)

["何?" 「名詞は英語で動詞化できますか?」と言います。はい。名詞。私はその上で石垣に行きます。私はそれについてしばしば妨害しました。仕様でさえ、それを妨害するはずです。]


5
「should」を使用しても「questioning」につながるとは言いません。私の経験では、特にテスト/ TDDが初めての人にはそうです。また、コンテキストとイベントから結果を区別する効果もあります。「そして、注文は倉庫に到着します」は、ボタンを押すことで注文が到着するのか、それが自動的に行われるべきかを教えてくれませんが、「そして、注文は倉庫に到着する」私がチェックすべきものです。BDDは、法的ではなく会話型の英語(または選択した自然言語)についてです。
リュニヴォール

3
別の言語を使用していることに感謝します。BDDはロンドンで始まったが、「should」という言葉で始まった;)OPはこれについてコンセンサスがあるかどうかを尋ねた。2004年以来続いている-> dannorth.net/introducing-bdd
Lunivore

1
私が役に立たないと思うのは、法的で疑問のない方法で「should」を使用するという考え方です。BDDが始めた意図的な発見の考え方の反対。私は「スペック」で始まった人々を助け、それから彼らがそれを疑うことができないように感じるために私の人生を費やしています。
リュニヴォール

1
答えを編集して、「質問につながるので「すべき」という人」など、現在の「質問につながらない」という言葉の代わりに編集する場合、私はハッピー。BDDの質問の側面は私にとって最も重要なものの1つであり、あなたがこれを表現した方法は、追加のコンテキストを提供するのではなく、この側面を排除します。回答を編集するかどうかに関係なく、この会話をありがとう。敬意を表した対話に本当に感謝しています。
リュニヴォール

10
RFCを記述するためのIETF規格では、「MUST」と「SHALL」が「REQUIRED」、「SHOULD」が「RECOMMENDED」、「MAY」が「OPTIONAL」であると明記されています。
oosterwal

4

純粋にスタイルの好みの問題。要するに、あなた/あなたのクライアントは現在または未来の時制のシステムについて考えることを好みますか?

"should"や "will"のような修飾子は未来時制を意味しますが、これは柔らかく、現在形で考えると十分に読みやすくなります。修飾子がないことは、間違いなく現在時制を示しています(つまり、この瞬間)。

修飾子の使用は、どちらの場合も十分に読みやすいため、修飾子を使用することを好みますが、修飾子の欠如は、開発中にすべてが将来緊張しているときに少し奇妙に読み取ります。

いずれにせよ、修飾子を使用することにした場合は、「should」ではなく「must」を使用することを強くお勧めします。「Sould」はオプションであると解釈できますが(S.Lottの反対に反して)、「must」は曖昧さを完全に除去する必要があります-明らかに「オプションではない」ことを意味する必要があります。


まだコメントできないので(カルマの制約)、これはS.LottへのShould / Shall vs. 説明については、この記事を参照してください


1

私の意見では、あなたは常に「should」を使用すべきです。

推論-BDDでは、テストを作成しているとき、ソフトウェアはまだやりたいことをしていないので、「何かをする」と言うのは誤りです。それは「何かをする必要があります」、そして、それ何かをし続ける限り、テストはパスします。


「まだ存在しない」は、「すべき」ではなく現在形を使用するより多くの理由のようです。BDDは受け入れテスト用であり、システムがまだ何かを実行していない場合、すぐに失敗するはずです。「すべき」であるかどうかに関係なく、BDDには格差があるようです。
ブレンデン14年

1

私は、修飾詞なしで現在形の第三者を使うことに賛成です。

私の主な主張は次のとおりです。テストは物語です。

ストーリーはシーンで構成されています。各シーンの説明:

  • 件名
  • 環境
  • アクション

例:

DESCRIBEgetReceipt関数

CONTEXT:領収書が存在します

IT:領収書を返します

良い話のように、良いテストは読みやすいです。

ストーリーはプログラムが何をするのかを教えてくれます。例えば

  • トランザクションを開始します
  • リクエストをする
  • 応答を正規化します
  • トランザクションを終了します
  • 領収書を返します

一方、修飾子を使用すると( "should"か "must"かは関係ありません)、テストはアサーションのリストになります。例:

  • トランザクション開始する必要があります
  • リクエストする必要があります
  • 応答正規化する必要があります
  • トランザクション終了する必要があります
  • 領収書返す必要があります

継続的な話はありません。あなたの心はアサーションのリストを評価しています。

これは主観的ですが、自然言語(物語)を読むことは、主張のリストを読むことよりも簡単です。


1

「GettingTheWordsRight」というタイトルのbehaviour-driven.orgから:

要するに、物事を説明するために使用する言葉は、私たち(および他の人)がそれらのものについて考える方法に影響を与えます。これは、セマンティクスについてささいなだけの単純な問題ではありません。特定の単語には、知的レベルと感情レベルの両方でフレーズの意味を解釈する方法に影響するニュアンスが伴います。私たちの言語は説明的な単語やフレーズが豊富であるため、コードで記述したい要素の意図を明確に伝える単語を使用するのが妥当と思われます。

BDDの場合、私は個人的にテストを命名するときに単語使用する必要があります。なぜなら、その使用はテストが特定の結果を提供することを意図しているが、対処する必要がある他の予期しない結果生じる可能性があることを意味するためテスト結果が有効と見なされる場合。おそらくexpectまたはmustという言葉を使用できます同様に、これらの単語は、テストの名前が「テストに問題はない、実装が台無しになっていると仮定する」という意味に誤解される可能性のある、より必須の視点を意味しますが、* shouldはテストが正しいが、テスト結果が足りない場合はエラーを再度チェックする必要があるかもしれません。これはあなたの思考に影響を与えるため、コードを作成する際に心を開いておくことが奨励されるためです。コードをデバッグしようとする際に動けなくなるのを避けたい場合や、仮定のためにエラーの間違った場所を探している場合に重要です。

しかし、テスト名の接頭辞として強制されている場合、単語の「宗教的な」アプリケーションは失敗するはずです。それは、テスト名を提供するために関係するプログラマーが特定の精神的および言語的体操を通過することを余儀なくされたためです意味があり、そのような場合、言葉を正しくしようとする意図が期待を満たせず、結果としてテスト自体を解読することが難しくなることを意味しました。この種の状況が生じたとき、私は通常「するべき」という言葉使いますテストメソッド名内の任意の場所で、名前がメソッドを簡単かつ明確に伝えるようにします。ただし、特定のコンテキスト内で他の単語が同等に適切である場合、特定の単語の使用を強制することはありません。しかし、コツは、コードで何かが表すことについて議論の余地を残さない単語を選択することであり、単なる含意に頼らずにコードが行うべきことについて考えさせます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.