본문 바로가기

Study/JavaScript

Testing, TDD

what is testing? 

testing이란, 어플리케이션의 함수, 기능, ui 등이 예상한 대로 동작하거나/렌더링 되는지 미리 확인하는 것을 말한다.

 

예를 들어 어플리케이션에서 사용되는 utility 함수를 작성했다고 하자. 함수를 작성한 개발자는 input x가 전달 되었을 때 output y가 반환될 것으로 예상한다(expectations, requirements). 이 때 이 함수에 대한 test code를 작성하고, 실행하면 그 결과를 통해 x가 전달되었을 때 y가 반환되는지 등을 확인할 수 있다. 

 

+) 테스트 코드를 작성하기 이전에는, 제품 개발이 완료 되면 QA(quaility assurance) 팀이 사용자의 입장에서 소프트웨어를 테스트하는 것이 보편적이었다. 개발이 모두 완료된 시점에서 테스팅이 이루어지기 때문에, 시간/비용이 많이 든다는 단점이 있었다.

+) 개발 과정에서 테스트 코드를 작성하고 실행하면, 코드 상의 문제(버그)를 개발 중에 빠르게 발견할 수 있다. 

 

+) main 브랜치에 코드를 merge하려면, 그 코드에 대한 테스트 코드가 포함되어 있어야 한다. => 코드를 설명하는 좋은 문서가 될 뿐만 아니라 코드의 신뢰성을 높일 수 있다. 

 

  1. manual testing 
    • 작성할 코드를 브라우저에서(=== 사용자가 보게될 화면 상에서) 테스트한다.  
    • 가능한 모든 경우에 대해 테스트하는 것이 어렵기 때문에, 예상치 못한 에러가 발생하기 쉽다(error prone). 
  2. automated testing
    • manual testing을 대체하는 것 ❌
    • 진행할 테스트 코드를 단위 별로 작성 => 코드에 변경 사항이 생길 때 마다, 모든 테스트 코드를 함께 실행하여 앱 전체에 대한 테스트를 진행한다. 
  3. manual + autoamated test를 함께 진행함으로써, 에러를 빠르게 잡아낼 수 있고, 더 좋은 품질의 코드를 작성할 수 있게 된다. 

kinds of automated testing 

 

  1. ✨ unit test
    1. 어플리케이션을 구성하는 가장 작은 단위의 블럭을 테스트, 가장 보편적이고 중요한 테스트이다. 
    2. ex) 함수, 모듈, 클래스, components... 
  2.  integration test
    1. 개별 단위의 테스트를 통합해서, 이들이 서로 상호작용할 때에도 정상적으로 동작하는지 테스트한다. 
    2. ex) multiple components... 
  3. end to end test(e2e)
    1. ui 테스트, 사용자 테스트라고도 한다. 
    2. 어플리케이션에서 사용자가 경험할 수 있는 시나리오를 테스트한다.
    3. unit, integration 테스트만큼 보편적인 테스트는 아니다. => unit/integration test가 더 쉽고 + manual test로 대체 가능하기 때문
    4. ex) 사용자가 로그인 후 특정 페이지로 이동하는 시나리오 테스트... 
  4. +) contract test, a/b test, stress test...

Test-Driven Development | TDD

테스트 주도 개발(TDD)이란, 소스 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 개발 방식을 말한다. 

 

 

test cases for each functionality are created and tested first and if the test fails then the new code is written in order to pass the test and making code simple and bug-free.

 

  1. 각 기능에 대한 테스트 케이스를 만들고, 소스 코드를 테스트 한다. 이 때 소스 코드보다 테스트 코드를 먼저 작성했으므로, 당연히 테스트는 실패한다. 
  2. 테스트를 통과하기만 하면 되는 간단한 코드를 작성한다. 
  3. 리팩토링 작업을 한다. 
  4. 테스트를 작성하려면, 어떤 기능을 개발할 것인지를 분석, 이해하고 있어야 한다.
  5. UI를 개발하면서 TDD 방식을 채택하는 경우는 거의 없다. 

'Study > JavaScript' 카테고리의 다른 글

Jest  (0) 2022.09.06
shallow vs. deep copy  (0) 2022.08.08
Modern Syntax | Params, Spread, De-structuring  (0) 2022.05.26
Hoisting  (0) 2022.05.25
Var  (0) 2022.05.25