BDD를 사용하여 견고한 Ruby on Rails 어플리케이션을 구축하는 방법

10년 전, 나는 나의 첫 번째 Rails 응용 프로그램을 개발했다.나는 이미 모든 방법을 시도했다. 만약 내가 확신할 수 있는 것이 있다면, 그것은 바로 내가 테스트를 쓰지 않을 수 없다는 것이다.우선 테스트를 작성하는 것이 프로그래밍 기술을 최대한 향상시키는 데 도움을 주는 이유다.
이것은 매우 간단하다.우리는 프로젝트의 첫날, 1000일째 되는 날에 느끼고 첫날처럼 효과가 있기를 바란다.우리는 좀 빨리 원한다.이를 위해서는 깨끗한 코드가 필요하다.
우리는 첫 단계에서 모든 것을 다 할 수 없기 때문에 재구성이 필요하다.그러나 우리는 모르는 상황에서 무언가를 파괴하고 생산에 오류를 보내는 지속적인 두려움 속에서 재구성할 수 없다.우리는 우리가 코드를 풀 때, 즉시 문제를 검사하고 복구할 수 있다는 자신감을 가져야 한다.
자신감은 어디에서 오는가?자동화 테스트 세트는 우리에게 자신감을 주었다.우리가 테스트를 통과하기만 하면 중대한 문제가 발생하지 않도록 새 코드를 변경하거나 삭제하거나 추가할 수 있을 것이라고 믿는다.
따라서 테스트가 기초라면 먼저 작성해 보자.이렇게 한동안 하면 코드와 테스트가 얼마나 깨끗하고 효과적인지 알게 될 것이다.

행위 관점 이해


테스트 구동 개발(TDD)을 응용할 때 개발자는 단원 테스트를 사용하여 대상이나 방법이 무엇인지 테스트하는 함정에 빠지기 쉬우며 그것이 무엇을 하는 것이 아니라 단원 테스트를 사용하는 것이 더욱 유용하다.
예를 들어 테스트를 작성합니다. 이 테스트 단언 주석 집합은 시간에 따라 정렬하는 것이 아니라 하나의 수조입니다.대부분의 경우, 만약 우리가 이 집합의 실현을 사용자 정의 매거진 클래스로 되돌려준다면, 이것은 중요하지 않을 것이다.더 일반적으로:
대상의 기능이 변하지 않는 한 대상의 실현을 변경하면 테스트 세트를 파괴해서는 안 된다.
비헤이비어 제어 개발(BDD)은 비헤이비어에 중점을 둡니다. — 뭐 공부 해요? — 각 발전 단계에서.
처음에는'행위'라는 단어가 이상하게 보였을 수도 있다.또 다른 방법은 묘사를 고려하는 것이다.우리는 다른 사람에게 모든 저급 방법, 대상, 단추, 화면을 설명할 수 있다 — 우리가 묘사할 것은 바로 이런 행위다.이런 방법을 채택하면 우리가 코드를 작성하는 방식을 바꿀 것이다.

"주기/언제/그 후" 통신 모드


소프트웨어 개발 중의 대다수 문제는 모두 통신 문제다.예를 들어 제품 매니저는 의안 기능의 모든 용례를 설명하지 못했다.개발자는 기능의 범위를 오해했다.제품 팀은 기능이 완성되었는지 검증하는 협의가 없습니다.
BDD는 소프트웨어를 사용할 장면을 설명하는 데 사용되는 언어를 단순화합니다.

Given some context or state of the world,

When something happens,

Then we expect some outcome.


주어진, When, Then은 간단한 단어로 우리는 복잡한 특징, 코드 대상 또는 하나의 방법을 똑같이 잘 묘사할 수 있다.이것은 팀의 모든 서로 다른 역할의 구성원들이 이해할 수 있는 모델이다.
이러한 표현식도 많은 테스트 프레임워크에 내장되어 있다. 예를 들어 Cucumber.문제와 우리가 실현해야 할 해결 방안에 대한 명확한 설명은 우리가 더 좋은 코드를 작성하는 데 도움이 된다.

Rails용 BDD 도구 개요


Ruby on Rails는 통합 테스트 프레임워크가 포함된 최초의 웹 프레임워크입니다.이것은 이 배가 한층 더 발전하는 발판이다.
이 동시에 루비의 표현력과 Rails를 이용하여 웹 응용 프로그램을 개발하는 생산력이 향상되면서 초기에 경험이 풍부하고 지명도가 높은 엔지니어들을 지역사회로 끌어들였다.
기본 옵션을 사용하여 새 Rails 응용 프로그램을 생성하면 Ruby와 함께 제공되는 테스트 라이브러리test/unit를 사용하여 테스트 장면을 설정합니다.그러나 BDD를 쉽게 사용할 수 있는 도구가 있습니다.나는 RSpec를 주 테스트 라이브러리로 사용하고 Cucumber를 사용하여 고급 검수 테스트를 작성하는 것을 건의한다.

RSpec 회사


RSpec는 유행하는 Ruby BDD 테스트 라이브러리입니다.RSpec로 작성된 테스트 — 호출된 규범 — 는 컨텍스트에서 코드의 예상 동작을 지정하는 실행 가능한 예입니다.다음 코드를 더 쉽게 읽을 수 있습니다.
describe ShoppingCart do
  context "when first created" do
    it "is empty" do
      shopping_cart = ShoppingCart.new
      expect(shopping_cart).to be_empty
    end
  end
end
좋은 규범을 작성하면 읽기 쉽고 이해하기 쉽다.위의 코드 부분을 큰 소리로 읽어 보세요.우리는 빈 상하문에서 새 카트를 만들 때 expect(shopping_cart).to be_empty 카트를 묘사하고 있다.
이 사양명세를 실행하면 사양명세와 유사한 출력이 발생합니다.
ShoppingCart
  when first created
    is empty
우리는 RSpec를 사용하여 전체 시스템을 지정할 수 있지만, 또한 도구를 사용하여 우리가 더욱 자연스럽게 작성하고 통신하는 것을 도울 수 있다.

오이


내가 이 지침 제1장에서 설명한 바와 같이, 우리는 모든 새로운 기능의 분석 단계를 시험해 보기를 바란다.이를 위해서는 실제 이 기능을 실현하는 코드의 개발을 추진하기 위한 테스트를 받아야 한다.
만약 당신이 충분한 복잡한 조직에서 일하는 개발자라면, 다른 사람(예를 들어 고객이나 제품 매니저)이 당신에게 검수 테스트를 작성해 주기를 원할 수도 있습니다 (면책 성명: 저는 이런 환경에서 일한 적이 없습니다).대부분의 경우, 개발자는 그것들을 작성한다.이것은 우리가 무엇을 구축해야 하는지 더 잘 이해하도록 도와주기 때문에 좋은 실천이다.Cumber는 다음과 같은 언어와 형식을 제공합니다.
Cucumber 읽기 응용 프로그램 기능의 텍스트 설명을 장면별로 구성합니다.장면의 모든 단계는 구체적인 코드를 사용하여 이루어진 것으로 사용자의 측면에서 응용 프로그램과의 상호작용을 자동화시켰다.예:
Feature: Reading articles
Scenario: Commenting on an article
  Given I am logged in
  And I am reading an article with "2" comments
  When I reply to the last comment
  Then the article should have "3" comments
  And I should be subscribed to follow-up comments
만약 이것이 웹 응용 프로그램이라면, 위의 장면은 자동으로 응용 프로그램의 테스트 실례를 시작하고, 웹 브라우저를 통해 그것을 열고, 모든 사용자처럼 절차를 실행한 다음, 어떤 기대를 충족시켰는지 검사할 수 있다.

Rails의 BDD 순환


실천에서 BDD는 외부로부터의 방법을 의미한다.우리는 검수 테스트를 시작한 후에 보기에서 코드를 작성한 후에 점차적으로 모델에 깊이 들어갔다.이런 방법은 우리가 초기에 기능을 효과적으로 실현하는 데 필요한 어떠한 새로운 대상이나 변수를 발견하고 이를 바탕으로 정확한 설계 결정을 내리는 데 도움을 줄 수 있다.
Rails의 BDD 순환에는 다음 단계가 포함됩니다.
  • 새로운 Cumber 장면에서 시작합니다.쓰기 전에 반드시 문제를 분석하고 이해해야 한다.이 때, 사용자 인터페이스가 어떻게 사용자가 작업을 완성할 수 있는지 알아야 합니다.장면 절차의 실현을 걱정하지 마라.
  • 장면을 실행하고 실패를 관찰합니다.이것은 어떤 절차가 실패하고 있거나 실현되기를 기다리고 있는지 알려 줍니다.우선, 대부분의 단계가 중단됩니다 (정의되지 않음).
  • 첫 번째 실패 또는 규범에 대한 정의를 작성합니다. 장면을 실행하고 실패를 관찰합니다.
  • 빨간색-녹색 재구성 순환과 RSpec를 사용하여 Rails 뷰를 테스트합니다.보기가 작업을 수행하는 데 필요한 실례 변수, 컨트롤러, 컨트롤러 작업을 발견할 수 있습니다.이것도 유일하게 실천에서 선택할 수 있는 단계로 증명되었다.또 다른 방법은 다음 단계를 계속하기 전에 보기와 컨트롤러를 간단하게 준비하는 것이다.
  • 빨간색-녹색 재구성 순환과 RSpec 테스트 컨트롤러를 사용합니다.인스턴스 변수가 할당되어 있고 작업이 올바르게 응답하는지 확인합니다.컨트롤러는 일반적으로 시뮬레이션 방법으로 구동한다.컨트롤러가 있으면 모델이나 도메인 대상이 무엇을 해야 하는지 알 수 있습니다.
  • RSpec와 같은 빨간색-녹색 재구성 주기 테스트 구동역 대상을 사용합니다.컨트롤러와 보기에 필요한 방법을 제공했는지 확인하십시오.만약 당신이 아직 모델이 존재하지 않는 새로운 기능을 개발하고 있다면, 지금은 모델을 생성하고 해당하는 데이터베이스 이전을 해야 합니다.이 점에서, 너는 네가 그들이 무엇을 해야 하는지 확실히 알게 될 것이다.
  • 필요한 모든 대상과 방법을 실현하고 해당하는 규범을 통과하면 시작하는 Cumber 장면을 실행하여 이 절차를 만족시키십시오.

  • Ruby on Rails 웹 개발 중인 BDD 순환
    일단 첫 번째 장면의 절차가 통과되면 다음 장면으로 들어가 같은 절차를 따른다.일단 너의 모든 장면이 이루어지면 — 장면과 모든 밑바닥 규범이 통과하고 있습니다. — 좀 더 재구성할 수 있는 것이 있는지 생각해 보자.
    일단 당신이 이미 장면을 완성했다고 확신한다면, 다음 장면을 계속하든지, 아니면 다른 사람에게 당신의 작품을 전시하든지.팀과 협력하면 요청이나 같은 코드 심사 요청을 만듭니다.당기기 요청을 열면 자동으로 터치해야 합니다continuous integration build.다른 관련 장면이 없을 때 프로젝트 매니저나 고객에게 당신의 업무를 보여주고 기능 지점을 임시 저장 서버에 배치함으로써 당신이 정확한 내용을 구축했는지 검증하도록 요구합니다.
    이 글은 Semaphore가 출판한 무료 전자책 Rails Testing Handbook 을 각색한 것이다.만약 이 단계를 완성하고 행위 구동 코드를 작성하는 실천 예시를 보고 싶다면, 이 책을 다운로드하고, 그것에 대한 당신의 견해를 알려주십시오.감사합니다.
    최초로 freeCodeCamp.org에 출판되었다.

    좋은 웹페이지 즐겨찾기