2019-11-28 TIL

오늘 할 목록

진행 중인 목록

  • integration test 부분 공부해서 채워놓기.
  • 자백러 정리.

    완료한 목록

  • 쇠막대 알고리즘 풀기(스택)
  • 자백러 Spring CRUD 완료.

Today I Learn

1. 알고리즘

  1. 문제 이름 : 쇠막대
  2. 문제 설명

    • 입력값 n : ()(((()())(())()))(())
    • 괄호가 연속으로 열고 닫을 경우에 레이저로 간주한다. ->’()’
    • 그 이외에 ( 는 쇠막대의 시작을 뜻하고, ) 는 쇠막대의 끝을 의미한다.
    • 쇠막대가 밑의 그림과 같이 여러개로 쌓여 있고, 레이저 가 있는 부분을 절단 했을때 막대 조각의 개수를 구한다 !
    • iron stick
  3. 풀이

    1. 첫번쩨 풀이

      1. 막대의 범위를 각각 구하고, 레이져의 범위를 각각 구한다.(첫번째 0 ~ 마지막 n)
      2. 다 구한 후에, 각각 막대의 범위 안에 몇개의 레이져가 존재하는지 확인한다.
      3. 각 막대안에 존재하는 레이져 + 1을 하면 막대기의 개수로, 모두 더해준다.
    2. 두번째 풀이

      1. () : 를 0으로 변경해준다.
      2. 하나씩 읽어온다.
      3. ( : 스택에 push
      4. 0 : 레이저로 자르는 행위 이므로, 현재 스택에 쌓인 요소의 수를 더한다.
      5. ) : 막대가 끝나는 것을 의미하므로 +1을 해준다.
      6. 이 문제는 풀이에 어떻게 문제를 풀지에 대한 의도가 들어나지 않으므로 좋은 풀이는 아닌것 같다.

2. TDD(Test Driven Development) : 테스트 주도 개발

  1. 유저 스토리란?

    • 소프트웨어 또는 서비스에 대한 서비스에 대한 설명을 사용자의 관점으로 글로 기술한 것이다.
    • 유저 스토리를 기반으로, TDD의 최상의 test 인 E2E를 만들 수 있다.
    • 방법

      • As
      • So
      • That I
    • 유의사항

      1. 일관된 언어 사용
      2. 일반 사용자가 알아 볼 수 있도록 명확히 작성.
      3. 기술 세부사항 제거.
      4. 역할 명확히 하기
    • 유저 스토리를 테스트로 작성하기 !

      • BDD(Behavior-Driven-development)를 이용한다 !

        • BDD란 개발자, QA,비 개발 직군의 사람들과 협업을 증진 시키기 위한 애자일 개발 프로세스이다.
        • 팀원들간 어플이 어떻게 이해하는지에 대한 이해를 공유하기 위해 대화와 예제를 사용한다.
      • gherkin( 위에서 말한 As, So, That I )언어를 이용하고, Codeceptjs란 e2e test framework를 이용하여 테스트를 작성한다.
  2. TDD의 테스트는 밑의 사진으로 보면 3가지의 테스트로 이루어 진다.

    • 가장 최상단의 E2E(end to end)Test는 사용자가 우리의 서비스를 이용할 때 기대하는 결과값이 나오는지에 대한 테스트이다.
    • 가운대에는 IntegrationTest로 이부분은 좀 더 공부해서 추가할 필요가 있다.
    • 마지막으로는 각각 UnitTest로 단위 테스트라고 하며, 가장 작은 단위의 테스트이다. 기능을 구성하는 코드의 각 부분에 대한 테스트가라고 생각할 수 있다.
  3. 유저 스토리에서 서비스 안에서 사용자들의 행동을 정의하고, 이로부터, e2e 테스트를 작성할 수 있고, e2e 테스트로 부터는 integration test를 작성할 수 있으며, integration으로 부터 가장 작은 단위인 unit test를 작성할 수 있다.
  4. 위와 같은 방법으로, 개발자들은 개발 진행 상황을 수치로 나타낼 수 있으며, 실제로 사용자의 행동을 기반으로 테스트를 만들기 때문에, 개발자는 사용자는 필요로 하지 않는 기능을 구현을 안할 수 있다.

Written by@Zero1
This blog is for that I organize what I study and my thinking, feeling and experience.

GitHub