BDD : 시작하기


9

나는 BDD로 시작하고 이것이 나의 이야기입니다.

Feature: Months and days to days
    In order to see months and days as days
    As a date conversion fan
    I need a webpage where users can enter
    days and months and convert them to days.

의심이 있습니다 ...

코딩하기 전에 시나리오를 작성해야합니까, 아니면 먼저 시나리오를 작성한 다음 코드를 작성하고 시나리오를 다시 작성한 다음 코드를 작성해야합니다.

이전에 시나리오를 작성해야한다면 단계를 승인해도 생산 코드가 아직 완료되지 않습니까?

코드에서 리팩토링을 언제해야합니까? 기능이 완료된 후 또는 각 시나리오 구현 후?


"내 단계를 승인해도 생산 코드가 아직 완료되지 않습니까?" 이것은 무엇을 의미 하는가? 설명 해주십시오.
S.Lott

답변:


12

이야기에서, 나는 당신이 스스로 코딩하고 있다고 추론합니다.

일반적으로 BDD의 목적은 특히 비즈니스와 개발자 간의 대화를 가능하게하여 팀이 공통의 이해에 도달 할 수 있도록하는 것입니다. 또한 시나리오를 놓친 시점을 확인할 수 있기 때문에 테스터도 포함시키고 싶습니다.

이 작업을 직접 수행하는 경우 고무 오리를 잡고 오리에게 적용되는 동작을 설명하십시오. 작동 방식에 대한 예를 제공하십시오. 그것들이 당신의 시나리오가 될 것입니다.

우선, 이러한 시나리오를 자동화 하지 않는 것이 좋습니다 . 원한다면 적어 둘 수 있습니다. 오리와 공유 한 비즈니스 성과는 적절한 수준으로 표현해야한다는 점을 기억하십시오. 이제 앱의 작동 방식에 대한 아이디어가 있어야하며 시나리오를 수동으로 실행할 수 있습니다. 아직 작동하지 않는 모든 것을 버그처럼 취급하고 싶습니다 . 나는 때로 자동화로 시작하지만 시스템의 작동, 내가 도구에 익숙 해요 방법을 잘 알고 있고, 경우에만 UI 잘 이해된다. 그럼에도 불구하고 코드를 작성할 때 종종 약간의 재 작업이 필요합니다.

낮은 수준에서 오리에게 각 수업이 어떻게 진행될 것인지 알려주십시오. 몇 가지 예를 제공하십시오. 고무 오리는 기술 언어를 완벽하게 이해할 수 있습니다. 이제 단위 테스트, 일명 단위 테스트가 있습니다. 적색-녹색 리 팩터 사이클이 여기서 발생합니다. (클래스의 책임에 대해 생각하고 비즈니스 중심 언어로 표현하고 있기 때문에 더 이상 리팩토링 할 필요가 없으며 어쨌든 꽤 아름다운 방식으로 빠지는 경향이 있습니다. 지금이 작업을 한 적이 있습니다. 그래도 괜찮습니다.)

리팩토링하지 마십시오. 우리는 여전히 우리가 모르는 것을 항상 알기 때문에 코드에 대한 피드백을 얻고 싶습니다 . 완벽은 당신의 적입니다. 충분히 잘 만들고 읽을 수있게 한 다음 계속 진행하십시오. 추가 변경을 위해 완벽한 것을 만들어야하는 경우 추가 변경시 수행하십시오.

비즈니스 이해 관계자로부터 시나리오에 대한 피드백을받을 기회가 있지만, 귀하와 함께 있지 않은 경우, 시나리오를 작성하자마자 자동화하기 전에 시나리오를 보낼 수 있습니다. 단어를 동작과 연관시킬 수 있도록 UI 모형도 보내려고 할 수 있습니다. 이것으로 코딩보다 앞서 나가지 마십시오. 이미 수행 한 작업이 잘못되었다는 가정하에 작업하고, 방법을 찾으려면 피드백을 받아야합니다.

마지막 힌트로 일반적으로 사용자 관점에서 스토리를 표현하지 마십시오 (시나리오, 예, 스토리는 아님). 그들은 사용자 이야기가 아닙니다. 아마 다음과 같은 것을 읽을 것입니다 :

In order to attract people to my website
As @thom
I want users to easily convert months and days to days.

어쨌든 당신이 찾고있는 더 높은 수준의 목표가 있습니다. 또한 필요한 기능을 도출하는 데 도움이됩니다. 그것에 행운을 빕니다.


1
'고무 오리'부분은 훌륭합니다. 나는 내가 생각할 유일한 사람이라고 생각했다!
NoChance

3

코딩하기 전에 시나리오를 작성해야합니까, 아니면 먼저 시나리오를 작성한 다음 코드를 작성하고 시나리오를 다시 작성한 다음 코드를 작성해야합니다.

둘 다 작동합니다. 하나를 선택.

그다지 중요하지 않습니다.

시나리오가 많을수록 더 많은 디자인을 할 수 있습니다.

시나리오가 많을수록 무언가를 수행하는 데 시간이 더 걸립니다.

코드에서 리팩토링을 언제해야합니까? 기능이 완료된 후 또는 각 시나리오 구현 후?

아니요 . 다음 시나리오 를 설계하기가 어려워지면 리팩터링하십시오 .


새로운 질문을했습니다 : "전에 시나리오를 작성해야한다면 ..." 좀 봐주시겠습니까? 대단히 감사합니다.
thom

1
@ S.Lott 정답이지만 한 번의 퀴즈 : 적녹 리 팩터 사이클의 유용성에 따라 각 녹색 테스트 직후에 BDD 프로세스 중에 지속적으로 리팩토링을 제안합니다.
Rein Henrichs

@Rein Henrichs : 대안은 한 스토리에 대한 모든 테스트를 완료하기위한 리팩토링이 필연적이고 피할 수없는 코딩 부분으로 발생한다는 점에 주목하는 것입니다. 훌륭한 디자인조차도 모든 기초를 덮을 수는 없습니다. 그 리팩토링은 언급 할 가치가 없었습니다. 그러나 당신은 그것을 잘 지적했습니다. 그러나 스토리 세트의 리팩토링은 스토리 세트에 따라 기능 세트가 발전하므로보다 심각하고 시간 소모적 인 작업입니다.
S.Lott

3

설명 동사 사용

Feature: CONVERT Months and days to days

스토리에서 디자인 결정을 내리지 마십시오 [ "웹 페이지가 필요합니다"는 디자인 결정입니다]

As a date conversion fan
I want to convert days and months into days

스토리에서 비즈니스 가치 목표 사용

So that [some business reason]

코딩을 시작하기 전에 가능한 많은 기능과 스토리를 작성하십시오. 스토리는 서로에게 정보를 주고 기능에 영향을 미치며 디자인을 알려줍니다.

각 이야기 후에 리팩터링하십시오. 빨강 녹색 리 팩터.


+1, 정답입니다. 그러나 "BDD 방식"이 외부의 수용 테스트주기가 아닌 내부의 단위 테스트주기의 일부로 리팩터링하지 않습니까?
pdr

@ pdr : 그것이 각 이야기 후에 리팩토링하는 것을 의미합니다. BDD / TDD 테스트는 단위에서 수용까지 확장되며, 단 하나의 사이클 만 있습니다 (내 생각에는) ;-)
Steven A. Lowe

왜 "웹 페이지가 필요합니다"가 디자인 결정입니까? 감사!
thom

@ 톰 : 사용자 스토리는 구현 방법이 아니라 사용자가 원하는 것을 표현해야합니다. 다시 말해 기능, 스토리 및 시나리오는 요구 사항 및 기능 사양입니다. 전체 그림이 될 때까지 디자인을 결정하지 마십시오. 이 (아마도 인공적인) 예에서 사용자의 전반적인 비즈니스 요구 는 웹 페이지가 가장 편리한 솔루션이 아닐 수 있음을 나타낼 수 있습니다. 데스크탑 위젯 또는 모바일 앱은 사용 방법 /시기에 따라 더 나을 수 있습니다. 구현 세부 사항은 이야기를 복잡하게 만들고 특정 디자인에 너무 빨리 잠길 수 있습니다.
Steven A. Lowe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.