tdd vs bdd analyze differences with examples
이 자습서에서는 예제를 통해 TDD와 BDD의 차이점을 설명합니다.
TDD 또는 Test Driven Development와 BDD 또는 Behavior Driven Development는 두 가지 소프트웨어 개발 기술입니다.
이 두 가지의 차이점에 대해 자세히 알아보기 전에 먼저 개별적으로 의미하는 것이 무엇이며 어떻게 사용되는지 이해하겠습니다.
시작하자!!
학습 내용 :
TDD 란?
TDD는 Test Driven Development의 약자입니다. 이 소프트웨어 개발 기술에서는 먼저 테스트 케이스를 만든 다음 해당 테스트 케이스의 기본 코드를 작성합니다. TDD는 개발 기술이지만 자동화 테스트 개발에도 사용할 수 있습니다.
TDD를 구현하는 팀은 개발에 더 많은 시간이 걸리지 만 결함이 거의없는 경향이 있습니다. TDD를 사용하면 코드 품질이 향상되고 재사용 가능하고 유연한 코드가 생성됩니다.
TDD는 또한 높은 테스트 범위 약 90-100 %. TDD를 따르는 개발자에게 가장 어려운 일은 코드를 작성하기 전에 테스트 케이스를 작성하는 것입니다.
json 파일을 어떻게 열지
추천 읽기 => 우수한 테스트 케이스 작성을위한 최고의 가이드
TDD의 과정
TDD 방법론은 매우 간단한 6 단계 프로세스를 따릅니다.
1) 테스트 케이스 작성 : 요구 사항에 따라 자동화 된 테스트 사례를 작성합니다.
2) 모든 테스트 케이스를 실행하십시오. 현재 개발 된 코드에서 이러한 자동화 된 테스트 케이스를 실행하십시오.
3) 해당 테스트 케이스에 대한 코드를 개발하십시오. 테스트 케이스가 실패하면 테스트 케이스가 예상대로 작동하도록 코드를 작성하십시오.
4) 테스트 케이스를 다시 실행하십시오. 테스트 케이스를 다시 실행하고 지금까지 개발 된 모든 테스트 케이스가 구현되었는지 확인하십시오.
5) 코드 리팩터링 : 이것은 선택적 단계입니다. 그러나 코드를 더 읽기 쉽고 재사용 할 수 있도록 리팩토링하는 것이 중요합니다.
SQL 주입을 수동으로 테스트하는 방법
6) 새 테스트 케이스에 대해 1 ~ 5 단계를 반복합니다. 모든 테스트 케이스가 구현 될 때까지 다른 테스트 케이스에 대해주기를 반복하십시오.
TDD에서 테스트 케이스 구현의 예
사용자 이름 및 비밀번호 필드와 제출 버튼이있는 애플리케이션의 로그인 기능을 개발해야한다는 요구 사항이 있다고 가정 해 보겠습니다.
1 단계: 테스트 케이스를 작성하십시오.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
2 단계: 이 테스트 케이스를 실행하면 로그인 페이지가 정의되지 않았고 이름이 enterUserName, enterPassword 및 submit 인 메소드가 없다는 오류가 표시됩니다.
Step3 : 해당 테스트 케이스에 대한 코드를 개발하십시오. 사용자 이름과 비밀번호를 입력하고 올바른 경우 홈 페이지 개체를 가져 오는 기본 코드를 작성해 보겠습니다.
public class LoginPage{ String username; String password; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Step4 : 테스트 케이스를 다시 실행하면 홈페이지의 인스턴스를 얻을 수 있습니다.
Step5 : submit 메서드의 if 조건이 참이 아닐 때 올바른 오류 메시지를 제공하도록 코드를 리팩터링 해 보겠습니다.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Step6 : 이제 사용자 이름과 비밀번호가 비어있는 새 테스트 케이스를 작성해 보겠습니다.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
이제이 테스트 케이스를 실행하려고하면 실패합니다. 이 테스트 케이스에 대해 1 ~ 5 단계를 반복 한 다음 빈 사용자 이름 및 비밀번호 문자열을 처리하는 기능을 추가합니다.
BDD 란?
BDD는 Behavior Driven Development의 약자입니다. BDD는 테스트 케이스를 작성하는 대신 동작 작성으로 시작하는 TDD의 확장입니다. 나중에 애플리케이션이 동작을 수행하는 데 필요한 코드를 개발합니다.
BDD 접근 방식에 정의 된 시나리오를 통해 개발자, 테스터 및 비즈니스 사용자가 쉽게 협업 할 수 있습니다.
BDD는 다음과 관련하여 모범 사례로 간주됩니다. 자동화 된 테스트 코드 구현에 대한 생각이 아니라 애플리케이션의 동작에 초점을 맞추기 때문입니다.
응용 프로그램의 동작은 BDD의 중심이며 개발자와 테스터가 고객의 입장에 서게됩니다.
BDD의 과정
BDD 방법론과 관련된 프로세스도 6 단계로 구성되며 TDD와 매우 유사합니다.
1) 애플리케이션의 동작을 작성하십시오. 애플리케이션의 동작은 제품 소유자 나 비즈니스 분석가 또는 QA가 간단한 영어와 같은 언어로 작성합니다.
2) 자동화 된 스크립트 작성 : 이 간단한 영어 유사 언어는 프로그래밍 테스트로 변환됩니다.
C ++ 날짜 및 시간
3) 기능 코드 구현 : 그런 다음 동작의 기본이되는 기능 코드가 구현됩니다.
4) 동작이 성공했는지 확인하십시오. 동작을 실행하고 성공했는지 확인하십시오. 성공하면 다음 동작으로 이동하고 그렇지 않으면 기능 코드의 오류를 수정하여 애플리케이션 동작을 달성합니다.
5) 코드 리팩터링 또는 구성 : 코드를 더 가독성과 재사용이 가능하도록 리팩터링하거나 구성하세요.
6) 새로운 동작에 대해 1-5 단계를 반복합니다. 애플리케이션에서 더 많은 동작을 구현하려면 단계를 반복하십시오.
또한 읽기 => 테스터가 TDD, BDD 및 ATDD 기술에 참여하는 방법
BDD에서 동작 구현의 예
사용자 이름 및 비밀번호 필드와 제출 버튼이있는 애플리케이션의 로그인 기능을 개발해야한다는 요구 사항이 있다고 가정 해 보겠습니다.
1 단계: 사용자 이름과 암호를 입력하기위한 응용 프로그램의 동작을 작성합니다.
Scenario: Login check Given I am on the login page When I enter 'username' username And I enter 'Password' password And I click on the 'Login' button Then I am able to login successfully.
2 단계: 이 동작에 대한 자동화 된 테스트 스크립트를 아래와 같이 작성하십시오.
@RunWith(Cucumber.class) public class MyStepDefinitions { @Steps LoginPage loginPage; @Steps HomePage hp; @Given('^I am on the login page $') public void i_am_on_the_login_page(){ loginPage.gotoLoginPage(); } @When('^I enter '((^')*)' username$') public void i_enter_something_username(String username) { loginPage.enterUserName(username); } @When('^I enter '((^')*)' password$') public void i_enter_something_password(String password) { loginPage.enterPassword(password); } @When('^I click on the '((^')*)' button$') public void i_click_on_the_submit_button(String strArg1) { hp = loginPage.submit(); } @Then('^I am able to login successfully.$') public void i_am_able_to_login_successfully() { Assert.assertNotNull(hp); } }
Step3 : 기능 코드를 구현합니다 (이것은 TDD 예제 3 단계의 기능 코드와 유사합니다).
public class LoginPage{ String username = ''; String password = ''; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Step4 : 이 동작을 실행하고 성공하는지 확인하십시오. 성공하면 5 단계로 이동하고 그렇지 않으면 기능 구현을 디버그 한 다음 다시 실행합니다.
Step5 : 구현 리팩토링은 선택적 단계이며이 경우 제출 메서드의 코드를 리팩터링하여 TDD 예제의 5 단계에 표시된대로 오류 메시지를 인쇄 할 수 있습니다.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Step6 : 다른 동작을 작성하고이 새로운 동작에 대해 1 ~ 5 단계를 따릅니다.
아래와 같이 사용자 이름을 입력하지 않아 오류가 발생하는지 확인하는 새로운 동작을 작성할 수 있습니다.
Scenario: Login check Given I am on the login page And I click on the 'Login' button Then I get an error to enter username.
TDD 대 BDD – 주요 차이점
TDD | BDD |
---|---|
API 및 타사 도구를 포함하는 프로젝트에 대한 더 나은 접근 방식 일 수 있습니다. | 사용자 작업에 의해 주도되는 프로젝트에 대한 더 나은 접근 방식 일 수 있습니다. 예 : 전자 상거래 웹 사이트, 애플리케이션 시스템 등 |
테스트 주도 개발을 의미합니다. | 행동 중심 개발을 의미합니다. |
프로세스는 테스트 케이스를 작성하는 것으로 시작됩니다. | 프로세스는 예상되는 동작에 따라 시나리오를 작성하는 것으로 시작됩니다. |
TDD는 기능이 구현되는 방법에 중점을 둡니다. | BDD는 최종 사용자를위한 애플리케이션의 동작에 중점을 둡니다. |
테스트 케이스는 프로그래밍 언어로 작성됩니다. | 시나리오는 간단한 영어 형식으로 작성되므로 TDD와 비교할 때 더 읽기 쉽습니다. |
애플리케이션 기능이 TDD의 테스트 케이스에 많은 영향을 미치는 방식 변경. | BDD 시나리오는 기능 변경의 영향을 많이받지 않습니다. |
개발자 간의 협업 만 필요합니다. | 모든 이해 관계자들 간의 협력이 필요합니다. |
TDD를 지원하는 일부 도구는 JUnit, TestNG, NUnit 등입니다. | BDD를 지원하는 도구로는 SpecFlow, Cucumber, MSpec 등이 있습니다. |
TDD의 테스트는 프로그래밍 지식이있는 사람 만 이해할 수 있습니다. | BDD의 테스트는 프로그래밍 지식이없는 테스트를 포함한 모든 사람이 이해할 수 있습니다. |
TDD는 테스트에 버그가있을 가능성을 줄입니다. | 테스트의 버그는 TDD와 비교할 때 추적하기 어렵습니다. |
결론
TDD와 BDD 중에서 선택하는 것은 매우 까다로울 수 있습니다. 어떤 사람들은 BDD가 버그를 찾는 데 더 좋다고 주장 할 수 있지만 다른 사람들은 TDD가 더 높은 코드 범위를 제공한다고 말할 수 있습니다.
두 방법 모두 다른 방법보다 낫지 않습니다. 사용할 방법론을 결정하는 것은 사람과 프로젝트 팀에 따라 다릅니다.
이 기사가 TDD 대 BDD에 대한 당신의 의구심을 해소하기를 바랍니다 !!
추천 도서
- 180 개 이상의 웹 애플리케이션 테스트 예제 테스트 케이스 (샘플 체크리스트)
- 수동 테스트 케이스를 자동화 스크립트로 변환하는 방법은 무엇입니까? – 예제가 포함 된 단계별 가이드
- 테스트 케이스 인터뷰 질문 : 시나리오를 기반으로 테스트 케이스 작성
- 테스터가 TDD, BDD 및 ATDD 기술에 참여하는 방법
- 소프트웨어 테스트의 테스트 범위 (테스트 범위를 최대화하기위한 팁)
- 8 가지 BDD (Best Behavior Driven Development) 도구 및 테스트 프레임 워크
- Specflow 자습서 : BDD 도구에 대한 궁극적 인 가이드
- 테스트 케이스 작성 방법 : 예제가 포함 된 궁극적 인 가이드