프로그래머가 아닌 사람이 실제로 BDD에 쓸 수 있습니까?


24

상징적 인“Given-When-Then”시나리오 구문을 사용한 행동 주도 개발 구문은 최근 소프트웨어 기능 평가를위한 경계 객체 로 사용하기에 상당히 절실했습니다 .

Gherkin 또는 원하는 기능 정의 스크립트는 비즈니스에서 읽을 수있는 DSL 이며 이미 그와 같은 가치를 제공 한다는 데 동의합니다 .

그러나 나는 프로그래머가 아닌 사람들이 ( Martin Fowler 처럼 ) 쓸 수 있다는 것에 동의 하지 않습니다 .

프로그래머가 아닌 프로그래머가 작성하고 개발자가 계측 한 시나리오에 대한 설명이 있습니까?

실제로 쓰기 불가능에 대한 합의가있는 경우 시나리오 를 시작 하고 계측하는 대신 실제 테스트에서 비즈니스가 읽을 수있는 시나리오를 생성 하는 도구에 문제가 있습니까?

업데이트 : "시나리오 생성기"도구와 관련하여 비즈니스 언어를 마술처럼 추측하지는 않습니다.) 그러나 현재 정규 표현식 매처를 사용하여 하향식 접근법 (추상 차원)에서 테스트를 생성하는 것처럼 사용할 수 있습니다. 상향식 접근 방식으로 시나리오를 작성하는 문자열 빌더.

"아이디어 만 제공"예 :

Given I am on page ${test.currentPage.name}
And I click on element ${test.currentAction.element}
…

컴퓨터가 이미 컴퓨터의 코드를 작성할 수 있더라도 인간이 다른 사람이 읽을 수있는 공통 언어를 정확한 방식으로 제공하기까지는 오랜 시간이 걸릴 것입니다.

아이러니하게도 JBehave 1 (첫 번째 BDD 도구)은 비즈니스가 읽을 수있는 시나리오를 생성하여 시작되었습니다. 우리는 오이까지 영어를 파싱하지 않았습니다. JBehave 1은 사람들에게 먼저 이야기해야한다는 사실을 실제로 상기시키는 데 도움이되었다고 생각합니다.
Lunivore

답변:


20

나는 그것을 보았다. 끝나지 않았다.

나는이 정확한 이유로 오이가 성가신 (<-lol : D) 추상화라고 생각합니다. 비 기술적 인 사람들이 스스로 작성하기에는 너무 어렵다. 기술자들에게는 너무 장황하다.

비 기술적 인 사람들은 프로그래머처럼 생각하는 법을 배우지 못했습니다. 추상적 지식을 이해하고, 분해하고, 새로 구축하고, 모호함에서 성공적으로 도망 갈 수있는 것이 우리의 특권입니다. 그것이 우리가 지불하는 것입니다.

실제로 쓰기 불가능에 대한 합의가있는 경우 시나리오를 시작하여 계측하는 대신 실제 테스트에서 비즈니스가 읽을 수있는 시나리오를 생성하는 도구에 문제가 있습니까?

도구 자체는이를 생성 할 수 없습니다. 컴퓨터는 비즈니스 영역에 대해 아무것도 모릅니다. 결국 프로그래머는 어쨌든 생성해야 할 것을 이끌어 내야 할 책임이 있으며 심지어는 이러한 시나리오가 최종 사용자에게는 너무 장황하고 암묵적 일 수 있습니다.


20
Non technical people just haven't learned to think like programmers. 진실. 이 같은 개념은 지난 20 년 동안 여러 번 과장되어 재창조되었으며 거의 ​​항상 결과가 좋지 않습니다. 욕심 많은 피 빠는 거머리 소프트웨어 개발자에게 비용을 지불하지 않고 소프트웨어를 얻는 개념과 같은 비즈니스이지만 소프트웨어 개발의 가장 어려운 부분은 대부분 비즈니스 규칙보다 비즈니스 규칙을 더 깊고 복잡하게 이해한다는 것을 잊어 버립니다.
maple_shaft

2
“비전문가는 프로그래머처럼 생각하는 법을 배우지 못했습니다.” 그래도 문제를 분해하고 특정 원자 논리 용어로 표현할 수있는 능력은 아마도 프로그래머 / 분석가가 될 수 있습니다. 영어처럼 보이는 사람이 누구나 Gherkin을 사용할 수 있다는 생각은 믿을 수 없을 정도로 순진한 것 같습니다. 확인해 주셔서 감사합니다 Computer knows nothing about business domain.. :) 물론입니다. 나는 내 생각을 명확하게하지 않았다. 미안하다. 질문에 정보를 추가하겠습니다.
MattiSG

8
@maple_shaft : 지난 20 년? 지난 60 년을 시도하십시오. COBOL과 관련된 초기의 과대 광고는 비즈니스 사람들이 작성할 수있어 프로그래머가 필요하지 않다는 것입니다. 그것이 실패했을 때, 사람들은 같은 일을하기로되어 있던 4 세대 언어라고 부르는 많은 것들을 생각해 냈습니다.
David Thornley 2016 년

11

고객이 사양 문서를 작성한다는 점에서 어려움의 일부는 고객이 종종 고객이 원하는 것을 실제로 고객이 원하는 것을 설명하는 언어로 번역하는 방법을 모른다는 것입니다. 고객은 시스템에 특정 동작이 존재한다고 말하지만 일반적으로 고객이 자신과 일치하지 않는 방식으로 소프트웨어를보고 사용하고 경험할 때까지 일반적으로 그다지 걱정하지 않습니다. 필요합니다.

고객이 비즈니스 프로세스를 설명 할 때 종종 관련 정보를 많이 남기지 않습니다. 종종이 정보는 고객의 특정 영역 내에서 일반적으로 이해되는 프로세스에 관한 것입니다. 따라서 프로세스는 당연히 받아 들여지고 종종 프로그래머에게 전달되지 않습니다. 다른 경우, 고객은 실제로 시스템 내에서 모든 경계 조건을 처리하는 방법을 알지 못하며 프로그래머에게 지침을 제공하려고합니다. 때로는 고객이 한 가지 방식으로 일하기를 원한다고 생각하지만 나중에 일이 다르게 작동해야한다는 것이 분명 해지면 마음이 바뀌는 단순한 사용 사례 일 수도 있습니다.

"프로그래머를위한 고객 관계 101"은 충분합니다. 문제는 고객이 비즈니스 판독 가능 DSL을 사용하여 사양을 정의하는 방법을 정의하는 데 여전히 가치가 있는지 여부입니다. 저는 지침을 통해 대답은 잠정적 인 '예'라고 생각합니다. 다음으로 떠 올릴 질문은 프로그래머가 더 쉽게 정의 할 수있는 방법으로 프로그래머가 DSL을 만들 수있는 이유는 무엇입니까? 고객에게 시스템 작동 방식을 정의 할 수있는 간단하면서도 풍부한 언어를 제공합니까?

고객에게 시스템 작동 방식을 설명하기위한 언어를 제공하면 다음과 같은 문구가 표시됩니다.

"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".

문이 유형의 고객이 설명되어 그것이에서 고객이 기본적으로 가정 할 수있는 시스템 또는 보는 또 다른 방법을하고자하는 전체적인 모양 제공하는 매우 명확한 방법으로 요구 사항을 설명하는 끝나는 어떤 시스템입니다. 고객이 좀 더 자세히 생각하게하려면 다음과 유사한 여러 문장을 사용하여 기능이 준수해야하는 규칙을 설명하도록 요청할 수 있습니다.

"Given 'some system state', When 'some action occurs', Then expect 'some result'

다시 명확 안내, 약이 시간 방법시스템이 작동해야합니다. 문제는 소프트웨어 개발자가 모든 공란을 채울 필요가없고 고객이 주변에서만 인식 할 수있는 추가 세부 정보를 애타게하지 않아도된다는 것입니다. 고객이 프로그래머에게 친숙한 형식으로 기능과 동작을 설명하기 위해 프로그래머가 '훈련'할 수는 있지만 의미있는 테스트 사례를 생성하거나 구현을 제공 할 수있는 기술이나 지식은 없습니다. 암호. 이것이 OP가 언급 한 Martin Fowler 기사의 요점이라고 생각했습니다. 따라서 소프트웨어 자체는 고객이 쓸 수 없지만 소프트웨어에 대한 설명은 고객이 작성할 수 있으며 IMHO는 반드시 작성해야합니다. 가치있는 것에 대해, 나는 고객이해서는 안된다고 말하는 Fowler의 기사를 읽지 않았습니다.

프로그래머가 비즈니스와 비즈니스 프로세스에 대한 이해 측면에서 우리보다 훨씬 똑똑하다는 사실을 프로그래머가 잊어 버릴 수 있다고 생각합니다. 소프트웨어 시스템을 구축하는 방법을 알려주는 프로그래머가없는 경우 고객은 일반적으로 특정 비즈니스 관리 문제를 해결하기 위해 다른 효율성에 의존합니다. 이것은 단순한 데이터베이스 (Think Access) 나 스프레드 시트, 심지어 손으로 쓴 원장, 프로세스를 관리하기위한 규칙과 절차가 잘 정의되어 있음을 의미합니다. 무엇 많은 고객에게 부족한 것은 결정하기위한 수단 아닙니다 어떻게 작업에 시스템 요구하지만, 그것은해야하지 않고 어떻게 구축 하고, 더 중요한 것은 효율적으로 사람들에게 시스템의 행동 규칙을 설명하는 방법 사람들않습니다 실제로 시스템을 구축 할 수있는 능력을 가지고있다.

실제로 쓰기 불가능에 대한 합의가있는 경우 시나리오를 시작하여 계측하는 대신 실제 테스트에서 비즈니스가 읽을 수있는 시나리오를 생성하는 도구에 문제가 있습니까?

이것이 문제를 잘못된 방향으로보고 있다고 생각합니다. 그 문서가 어떤 식 으로든 사양을 나타 내기 위해 테스트에서 문서를 생성하는 도구에 큰 문제가 있음을 알 수 있습니다. 시나리오를 테스트하려면 시나리오를 이해해야하므로 시나리오를 이미 정의해야 테스트를 정의 할 수 있습니다. BDD 구문으로 시나리오를 설명하는 경우 시나리오를 이미 지정 했으므로 사실 후에 만 ​​시나리오를 계측 할 수 있습니다. 반면에 고객이 프로그래밍 친화적 인 DSL로 시스템을 설명 할 수있는 도구가 있다면,이 도구를 사용하여 테스트 스위트로 사용될 코드 템플릿을 생성 할 수 있다면 그러한 도구에는 큰 가치가 있다고 말할 것입니다. 고객이 프로그래머를 등식에서 제외시키는 것을 보지 못하고 고객의 희망을 취하고 BDD 방식으로 테스트 인코딩 요구 사항을 생성하는 데 필요한 노력을 줄이고 고객의 희망을보다 쉽게 ​​이해할 수 있도록 도와줍니다. 그러나 고객이 고객의 요구를 고객의 요구와 분리 할 수 ​​있도록 숙련 된 소프트웨어 개발자를 대신 할 수는 없습니다.


"시나리오를 테스트하기 위해, 당신은 그것을 이해하는 데에 대한 테스트를 정의 모두 당신을 위해 이미 존재하기 때문에 시나리오 요구를해야합니다." 나는 동의합니다. 내가 질문하는 것은 언어 제약을 적용하는 것이 가치가 있는지 여부입니다. 테스트 만 작성해야한다고 주장하지는 않습니다. 그러나 비즈니스 설명이 항상 평범한 자유 형식 설명 이라는 사실을 받아들이지 않아야하는지 궁금합니다 . 따라서 우리는 순수한 비즈니스 디스크를 가지고 읽을 수있는 시나리오를 생성하여 인간이 일치하는지 여부를 결정할 수있게했습니다. 척하는 대신 실제 디스크 를 사용 하여 테스트합니다.
MattiSG

@MattiSG ...whether enforcing language constraints is worth anything. 좋은 질문입니다. 자유 형식의 설명은 작가에게보다 표현적이고 자연 스러우나 유용한 사양을 도출하기 위해 해부를 필요로하는 해설을 초래합니다. 요구 사항 및 사양을 작성하기위한 공식적인 '규칙'(일명 DSL)을 정의하면 고객과 프로그래머가 이해할 수있는 공통 언어를 사용하여 오해를 제한 할 수 있습니다. 설명을 올바르게 받으면 테스트 용 템플릿으로 그대로 사용할 수 있습니다. 따라서 복잡한 도구를 사용하여 "생성"할 필요가 없습니다.
S.Robins 2016

DSL과 BDD를 사용하는 @MattiSG FWIW는 제가 사용하는 시스템입니다. 요구 사항은 Entity-Feature-Benefit 문으로 정의되며 AAA (즉, Given-When-Then) 문을 사용하여 초기 요구 사항 문을 확장하는 사양과 본질적으로 시나리오 문이 뒤 따릅니다. 자유 텍스트를 해독하려고 할 때의 어려움은 DSL이 없으면 의미있는 수집 시나리오를 생성 할 수있는 알고리즘을 쉽게 정의 할 수있는 방법이 없다는 것입니다. 필자의 요점은 테스트를 시작점으로 사용하여 시나리오를 생성하는 것이 거꾸로 된 것입니다.
S.Robins

5

개발자들이 시나리오를 작성하는 것을 보았습니다. 테스터는 시나리오를 작성하고 심지어 제품 소유자는 시나리오를 작성합니다. 또한 시나리오를 설명하기 위해 대화를 명시 적으로했습니다. -비즈니스 사용이라는 단어를 적었습니다.

내가 얻은 가장 좋은 결과는 사무실에있는 동안 제품 소유자와 대화하고 위키에서 캡처 한 다음 수정하여 추가 할 수 있도록하는 것입니다. 그는 우리 대화에서 놓친 커플을 발견했습니다. 흔들렸다.

내가 본 최악의 시나리오는 개발자가 비즈니스와 대화하지 않고 스스로 작성한 시나리오입니다. "검색 할 때"또는 "오늘 + 3 날짜의 양식을 제출할 때"와 같은 용어를 사용하기 때문에 알 수 있습니다. 일반적으로 그다지 흥미롭지 않은 시나리오, 너무 많은 시나리오, 세부 수준이 너무 낮아서 유지 관리가 불가능합니다. 사업체도 이것들을 읽지 않습니다.

대화 IMO에 집중하는 것이 훨씬 좋습니다. 자동화에 관계없이 몇 팀이 몇 달 동안 품질을 크게 개선하여 지금이 작업을 수행하는 것을 보았습니다. 한 팀은 몇 주 후에 매우 어려운 환경에서 자동화 작업을 수행 할 수있었습니다. 그러나 실제로 팀이 대화를하고 시나리오를 사용하여 다른 시나리오를 작성하는 한 누가 시나리오를 작성하는지는 중요하지 않습니다.


+1 커뮤니케이션은 정말 핵심이며, 시나리오는 실제로 비즈니스 사람들과 같은 조건에 있어야하므로 OPs 질문에 따라 DSL을 만들면 실제로 더 밀접하게 일치해야합니다. 프로그래머가 고객이 말해야 할 내용이 아니라 고객이 할 말에
S.Robins 2016 년

0

내 경험은 BA (Business Analyst)가 GWT ( Given-When-Then ) 를 작성하는 것이 가장 좋습니다 (SpecFlow를 사용한 경험). BA는 고객 요구 사항을 GWT로 변환 할 수 있으며 비즈니스는이를 읽을 수 있습니다. 고객은 시스템을 이해하지만 기술이 우리가 사용할 수있는 방식으로 요구 사항을 작성한다고 생각하지 않습니다.

이상적으로 BA는 GWT를 작성하고 일부를 수정하고 BA 및 비즈니스가 적용 범위를 확신 할 때까지 반복 검토 / 수정을합니다. 실제로 BA는 내가 정리하고 일할 거친 초안을 줄 것입니다. 비즈니스는 왜 아무도 생각하지 않은 일부 영역을 다루지 않았는지 궁금해하며 으 sh합니다.


GWT가 의미하는 바를 명시 적으로 설명해 주 시겠습니까? :)
MattiSG

@MattiSG : Given-When-Then (OP 참조)을위한 것 같습니다.
sleske 2016

@MattiSG-포스트 굿 캐치가 업데이트되었습니다.
SoylentGray
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.