BDD 스타일의 스펙을 작성할 때“should”를 사용해야합니까, 그렇지 않아야합니까? [닫은]


12

나는 이것이 다소 주관적이라는 것을 알고 있지만 어느 쪽이든 좋은 사례를 찾을 수는 없습니다.

"무언가를해야한다"
그것은 "무언가를한다"

욕구 스타일의 지지자들은 실제로 달성하려는 목표에 의문을 제기하는 반면, 낙담 자들은 단지 중복을 발견한다고 말합니다.

이것에 대한 합의가 있습니까, 아니면 순전히 스타일의 문제입니까?

답변:


3

법률 영어에 오신 것을 환영합니다.

"should"== "shall"== 계약 의무 사용. 법입니다. "질문"으로 이어지지 않습니다. 문장을 공식 계약 의무로 표시합니다.

"would"== "will"== 좋은 아이디어를 사용하는 것. 문장을 선택적 기능으로 표시합니다.

질문은 촉진, 조직, 도움, 신뢰 구축의 일부입니다. 단어 선택의 결과가 아닙니다.

수정 자없이 베어 동사를 사용하면 문장을 공식 요구 사항으로 강조하기가 약간 어려워집니다. 그리고 초 복잡한 동사의 경우, 그것을 활용하는 방법을 알아 내기 위해 약간의 욕설을 얻을 수 있습니다.

쉬움- "알다"또는 "만들다"와 같은 동사.

  • 시스템은 이메일을 통해 알립니다. ( "알림"동사는 "시스템"에 대해 "알림"으로 표현됩니다.

  • 시스템은 이메일을 통해 통지해야합니다. ( "알림"은 "통지해야 함"이됩니다-활용되지 않습니다. 매우 간단합니다.)

단단함- "로그인"과 같은 동사 문구 또는 "추출, 정리, 변환, 중복 제거 및로드"와 같은 도메인 특정 동사 문구 또는 "잠재적"과 같은 명사 몇 개의 동사가 묻혀있는 더 긴 구절은 겹치기 어렵다 : 각 동사를 켤까요? 아니면 긴 단어를 마치 한 단어 인 것처럼 켤까요? 명사를 영어로 동사를 만들 수 있기 때문에, 그 동사들을 어떻게 조합시키는 지 알기가 어렵습니다.

  • 사용자가 Enter를 클릭하면 시스템이 추출, 정리, 변환, 중복 제거 및로드됩니다. (영어는 명사구를 사소하게 사용합니다.) 아니면 추출, 정리, 변형, 중복 제거 및로드입니까?

  • 사용자가 Enter를 클릭하면 시스템이 추출, 정리, 변환, 중복 제거 및로드되어야합니다. (끔찍한 문구는 그대로 사용되며 동사 활용에 대한 신비는 없습니다.)

["뭐?" "명사를 영어로 번역 할 수 있습니까?"라고 말합니다. 예. 명사. 나는 그것에 대해 벽으로 갈거야. 나는 종종 그것에 대해 돌담을했습니다. 사양조차도 그에 대한 벽으로 막아야한다.]


5
"should"를 사용한다고해서 "질문"이되지는 않는다고합니다. 내 경험은 특히 테스트 / TDD를 처음 사용하는 사람들과 관련이 있다는 것입니다. 또한 상황과 사건과 결과를 차별화하는 효과가 있습니다. "주문이 창고에 도착했다"는 버튼을 눌러 주문이 도착했는지 또는 자동으로 발생하는지는 알려주지 않지만 "주문이 창고에 도착해야한다"는 메시지가 표시됩니다. 내가 확인해야 할 것입니다. BDD는 법률이 아닌 대화 형 영어 (또는 자연어 선택)에 관한 것입니다.
Lunivore

3
나는 당신이 다른 언어를 가지고 있다는 것에 감사합니다. BDD는 런던에서 시작되었지만 ... "should"라는 단어로 시작되었습니다.) OP는 이에 대한 합의가 있는지 물었고 2004 년부터 –> dannorth.net/introducing-bdd
Lunivore

1
내가 유용하지 않은 합법적이고 의문의 여지가없는 방식으로 "해야한다"는 아이디어입니다. BDD가 시작한 고의적 인 발견 마인드의 반대입니다. 나는 "스펙"으로 시작한 사람들이 질문을 할 수없는 것처럼 느끼도록 돕기 위해 평생을 보냅니다.
Lunivore

1
"어떤 질문은"질문으로 연결되지 않습니다 "라는 현재의 말이 아니라"질문을 불러 일으키기 때문에 '해야한다 "와 같은 내용을 포함하도록 답을 편집한다면 행복. BDD의 의문 측면은 나에게 가장 중요한 것 중 하나이며, 당신이 이것을 말한 방식은 추가적인 맥락을 제공하는 대신이 측면을 제거합니다. 답변 편집 여부와 상관없이이 대화에 감사드립니다. 정중 한 대화에 진심으로 감사드립니다.
Lunivore

11
IETF 표준 RFC를 기록하기위한 구체적 'MUST'및 '권장'REQUIRED ','SHOULD '이다는'SHALL '한다고하고,'월 'OPTIONAL'이다.
oosterwal

4

순전히 문체 선호의 문제. 그것은 당신이 현재 또는 미래 시제로 시스템에 대해 생각하는 것을 선호합니까?

"should"또는 "will"과 같은 한정자는 미래 시제를 암시하지만, 현재 시제로 생각할 때 부드럽고 충분히 읽을 수 있습니다. 한정자 부족은 현재 시제를 나타냅니다 (즉, 지금이 순간).

나는 두 가지 경우 모두 잘 읽을 수 있기 때문에 한정자를 사용하는 것을 선호하지만 모든 것이 미래 시제 일 때 개발 중에 한정자가 부족하면 조금 이상하게 읽습니다.

어쨌든 한정자를 사용하기로 결정한 경우 "should"대신 "must"를 사용하는 것이 좋습니다 . "Should"는 선택적인 것으로 해석 될 수 있지만 (S.Lott의 반대 주장에도 불구하고) "필수"는 모호성을 완전히 제거해야합니다. "선택적이 아닌"을 분명히 의미해야합니다.


그리고 아직 (카르마 제약)에 대해서는 언급 할 수 없기 때문에, 이것은 S.Lott에 대한 행동 / 의견 대 의지 / 의사에 대한 답변입니다. 설명은이 기사를 참조하십시오 .


"모든 것이 미래 시제 일 때 한정자 부족은 개발 중에 조금 이상하게 읽습니다."-TDD를 수행하고 테스트를 작성했지만 아직 코드를 작성하지 않은 경우 테스트가 실패합니다. "미래에 통과해야한다"라는 의미는 지금 통과 할 수 있음을 의미 할 것이다. 따라서 현재 시제는 적어도 TDD의 경우 더 명확합니다. 실패한 미래에 대한 약속이 아니며, 지금 기대하지 않는 행동이 지금까지 유지되지 않습니다.
미하일 바신

2

예선전없이 3 인칭 시제 를 사용하는 것을 선호 합니다.

나의 주요 주장은 : 테스트는 이야기입니다.

스토리는 장면으로 구성됩니다. 각 장면은 다음을 설명합니다.

  • 제목
  • 문맥
  • 동작

예:

DESCRIBE : getReceipt기능

컨텍스트 : 영수증이 있습니다

IT : 영수증을 반환

좋은 이야기처럼 좋은 테스트는 읽기 쉽습니다.

이야기는 프로그램이 무엇을하는지 알려줍니다.

  • 거래를 시작하다
  • 요청하다
  • 반응을 정상화
  • 거래를 끝내다
  • 영수증을 반환

반면, 한정자를 사용하면 ( "필수"또는 "필수"인 경우 상관 없음) 테스트가 다음과 같이 어설 션 목록으로 바뀝니다.

  • 거래를 시작 해야 한다
  • 요청 해야한다
  • 응답을 정상화 해야한다
  • 해야 트랜잭션을 종료
  • 영수증을 반환 해야 합니다

지속적인 이야기는 없습니다 : 당신의 마음은 주장의 목록을 평가하고 있습니다.

이것은 주관적이지만, 어설 션 목록을 읽는 것보다 자연어 (이야기)를 읽는 것이 더 간단합니다.


1

제 생각에는 항상 '해야합니다'를 사용해야합니다.

추론-BDD를 사용하면 테스트를 작성할 때 소프트웨어가 원하는 작업을 아직 수행 하지 않으므로 "무언가를한다"고 말하는 것은 거짓입니다. 그것은 "무언가를해야한다"는 것이며, 그 일을 계속 하는 한 테스트는 통과 할 것입니다.


1
"아직 존재하지 않음"은 "해야한다"대신 현재 시제를 사용해야하는 더 많은 이유 인 것 같습니다. BDD는 승인 테스트를위한 것이며 시스템이 아직 무언가를하지 않으면 즉시 실패해야합니다. "필수"를 사용하거나 사용하지 않는 한 BDDers간에 차이가있는 것 같습니다.
Brenden

1

에서 behaviour-driven.org 제목 "GettingTheWordsRight" :

간단히 말해서, 사물을 묘사하기 위해 사용하는 단어는 우리 (및 다른 사람들)가 그 사물에 대해 생각하는 방식에 영향을줍니다. 이것은 의미론에 대해 사소한 것에 대한 단순한 질문이 아닙니다. 특정 단어에는 지적 및 감정적 수준에서 문구의 의미를 해석하는 방법에 영향을 미치는 뉘앙스가 있습니다. 우리의 언어는 설명적인 단어와 문구가 풍부하기 때문에 코드에서 설명하고자하는 요소의 의도를 명확하게 전달하는 단어를 사용하는 것이 합리적입니다.

BDD의 경우 테스트를 명명 때 거의 항상 단어를 사용하는 사람은 개인적 으로 사용됩니다. 사용법은 테스트가 특정 결과를 제공하기위한 의도이지만 다른 예기치 않은 결과 발생할 수 있음을 의미하기 때문에 처리해야합니다. 테스트 결과가 유효한 것으로 간주되는 경우. 당신은 아마 기대 하거나 해야 할 단어를 사용할 수 있습니다유사하게,이 단어들은 테스트의 이름이 "테스트에 아무 문제가없고 구현이 엉망이라고 가정한다"라는 의미로 오해 할 수있는보다 명령적인 관점을 암시한다. 반면 * *는 테스트가 테스트 결과가 더 이상 나타나지 않는 경우 오류가 없는지 다시 확인해야 할 수도 있습니다. 이것이 마음에 들었습니다. 코딩 할 때 열린 마음을 유지하도록 격려하는 생각에 영향을 미치기 때문입니다. 코드를 디버깅하려고 시도하고 가정으로 인해 잘못된 위치에서 오류를 찾는 것을 막을 때 방해받지 않으려는 경우 중요합니다.

그러나 나는 단어 의 접두사로 시행되었을 때 단어의 거의 '종교적인'적용 실패 해야한다는 것을 보았습니다. 의미가 있었고, 그러한 경우 에는 단어를 올바르게 작성 하려는 의도가 기대에 미치지 못하고 결과적으로 테스트 자체를 해독하기가 어려워졌습니다. 상황이 이런 종류가 작물 때, 나는 보통 단어를 사용하는 것이 해야테스트 방법 이름 내의 어느 곳에서나 이름이 방법을 간단하고 명확하게 전달하도록합니다. 그러나 특정 문맥 내에서 다른 단어가 똑같이 적절하다면 특정 단어 사용을 강제하지는 않을 것입니다. 그러나 요령은 코드에서 무엇을 나타내는 지에 대한 논쟁의 여지가없는 단어를 선택하고, 단순한 의미에 의존하지 않고 코드가해야 할 일에 대해 생각하도록 자극하는 단어를 선택하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.