티스토리

싯벨트
검색하기

블로그 홈

싯벨트

seatbelt.tistory.com/m

안전과 도전의 공존

구독자
3
방명록 방문하기

주요 글 목록

  • 더 나은 테스트 전략 수립(테스트 수준/ 테스트 레시피/ 배포 파이프라인) 1. 일반적인 테스트 유형과 수준테스트의 수준이 높아질수록 신뢰도는 올라가지만 더 복잡해지고, 불안정해지며, 느려집니다. 테스트에는 어떠한 유형이 있고, 이들을 어떤 요소들을 기준으로, 얼마만큼 구현해야 하는지를 살펴보도록 하겠습니다.1.1. 테스트 평가 기준어떤 테스트 유형을 사용할지 결정을 내리기 위해서는 먼저 명확한 기준이 필요합니다. 테스트를 평가할 때는 일반적으로 다음 5가지 기준을 사용합니다.기준평가 점수 범위비고점수 평가복잡성(complexity)1-5작성, 디버깅, 읽기 과정이 얼마나 복잡한가낮을수록 좋다불안정성(flakiness)1-5제어할 수 없는 요소(다른 팀의 코드, 네트워크, 데이터베이스, 설정 권한)로 테스트가 실패할 가능성이 얼마나 높은가낮을수록 좋다신뢰도(confidence).. 공감수 1 댓글수 0 2025. 3. 28.
  • 좋은 테스트의 조건 - 가독성 가독성을 높인다는 것은 코드를 읽는 사람이 해당 테스트가 무엇을, 어디에서 하는지 쉽게 파악할 수 있다는 것을 말합니다. 가독성을 높이려면 아래 4가지 요소를 잘 다뤄야 하는데, 하나씩 살펴보도록 하겠습니다.단위 테스트 이름변수 이름검증과 실행 단계의 분리초기화 및 설정 해제단위 테스트 이름 짓기테스트를 명확하게 설명하기 위해서는 대상, 상황, 결과에 대한 정보를 표현해야 합니다. 이를 USE전략이라고 부르며, 테스트하려는 대상(Unit), 입력 값이나 상황에 대한 설명(Scenario), 기댓값이나 결과에 대한 설명(Expectation) 3가지 정보를 포함시켜줍니다.이때, 테스트하려는 대상으로는 작업 단위의 진입점 또는 현재 테스트 중인 기능 이름을 기재해줍니다.매직 넘버와 변수 이름매직 넘버란 어떤.. 공감수 1 댓글수 0 2025. 3. 28.
  • 좋은 테스트의 조건 - 유지보수성 유지보수성이 좋지 않은 테스트는 프로젝트 일정을 지연시킵니다. 유지 보수성이 테스트를 얼마나 자주 변경해야 하는지 가늠하는 척도라면 그 횟수를 최소화하는 것이 중요합니다. 유지 보수성 측정을 시작한다면, 일정 기간 동안 발생하는 거짓 실패 횟수와 그 원인을 분석하는 것부터 시도해볼 수 있습니다.테스트 실패로 코드 변경실제 실패(true failure)는 테스트가 프로덕션 코드에서 버그를 발견하여 실패하는 경우이고, 거짓 실패(false failure)는 다른 이유로 테스트가 실패하는 경우입니다. 거짓 실패를 만드는 케이스들을 살펴보겠습니다.프로덕션 코드에 새로운 기능 추가기댓값 등이 변경된 요구사항과 맞는지 살펴보고 유효하지 않은 테스트는 삭제해야 합니다.프로덕선 코드의 API 변경함수나 객체를 사용하는.. 공감수 0 댓글수 0 2025. 3. 27.
  • 좋은 테스트의 조건 - 신뢰성 좋은 테스트란좋은 테스트는 신뢰성, 유지 보수성, 가독성을 만족해야 합니다. 이번 글을 시작으로 각 조건에 대해 정리를 해보도록 하겠습니다.신뢰성 - 버그가 없고 올바른 대상을 테스트하는 것유지 보수성 - 변경에 대응이 잘 되는 것가독성 - 잘 읽을 수 있고, 잘못된 경우 문제를 파악할 수 있는 것테스트가 실패하는 이유테스트가 실패했다면 그 이유로 타당한 경우는, 실제로 프로덕션 코드에서 버그가 발생했을 때 뿐이어야 합니다. 다른 이유의 실패는 테스트를 신뢰할 수 없게 만드는 원인이 됩니다. 다른 이유들에는 어떤 것들이 있는지 살펴보겠습니다.거짓 실패실제 버그는 없지만 테스트 자체에 버그가 있는 경우입니다.종료점의 예상 결과를 잘못 설정테스트 대상 시스템(SUT, 대상 코드 & 모듈)을 잘못 사용 - e.. 공감수 0 댓글수 0 2025. 3. 26.
  • 비동기 코드 단위 테스트 비동기 코드를 직접 테스트 하면 시간도 오래 걸리고 일관된 결과를 제공하지 못하는 불안정한 코드가 됩니다. 이를 해결하기 위한 방법 2가지, 진입점 분리 패턴과 어댑터 분리 패턴을 살펴보겠습니다.1. 비동기 로직 통합 테스트URL을 통해 웹 사이트가 정상적으로 작동하는지 확인하는 모듈을 테스트하는 방법을 알아보겠습니다. 성공 여부는 “illustrative” 라는 단어의 포함 여부로 판단합니다. 이때 비동기 코드는 콜백과 async/await 2가지 메커니즘으로 구현할 수 있으며, 각 메커니즘으로 구현된 코드와 테스트 코드를 이어서 살펴보겠습니다.1.1 node-fetch를 사용한 비동기 코드콜백 패턴을 사용하는 함수는 매개변수로 콜백함수를 사용하고, 성공이나 실패 여부에 따라 매개변수로 받은 콜백함수에.. 공감수 0 댓글수 0 2025. 3. 16.
  • 격리 프레임워크 격리 프레임워크격리 프레임워크란 객체나 함수 형태의 목이나 스텁을 동적으로 생성, 구성, 검증할 수 있게 해주는 라이브러리를 의미합니다. 손쉽게 가짜 모듈을 생성하여, 가짜 객체를 생성하거나 값이나 오류를 만들 수 있지만 남용하면 테스트를 읽기도 어렵고, 신뢰할 수도 없게 되니 사용에 주의가 필요합니다.모의 객체는 작업 단위의 3가지 종료점(반환 값, 상태 변화, 서드 파티 의존성 호출) 중에서 서드 파티 의존성 호출에만 사용해야 하기에 사용이 많지 않을 뿐더러, 함수 호출 여부 대신 특정 조건에서 에외를 발생시키는지를 확인하는 식으로 모의 객체 없이 기능 검증이 가능한 방향으로 테스트를 구성하는 게 좋습니다.목을 사용할 경우 하나의 목은 하나의 종료점, 즉 별개의 요구사항을 의미하기 때문에 하나의 테스.. 공감수 1 댓글수 0 2025. 3. 7.
  • 모의 객체를 사용한 상호 작용 테스트 상호작용 테스트와 목상호 작용 테스트는 작업 단위가 외부 의존성과 어떻게 상호작용 하는지를 확인하는 방법입니다. 서드 파트 모듈 및 객체와 관련이 있으며, 어떤 매개변수로 호출이 되었는지, 어떤 호출이 실행되었는지를 검증합니다.상호 작용 테스트를 위해서는 외부로 나가는 의존성과 연결 고리를 끊어야 하며, 이때 목(mock)을 사용하여 의존성을 대체합니다. 목은 하나의 요구사항을 의미하기 때문에 하나의 테스트에서는 하나의 목만 사용하여, 한 가지의 요구사항만 검증합니다. 스텁과 마찬가지로 목을 작업 단위에 주입하는 방식은 아래와 같으며, 하나씩 차근차근 살펴보도록 하겠습니다.표준 방식 - 매개변수를 추가하여 주입함수형 방식 - 부분 적용 또는 팩토리 함수를 사용하여 주입모듈 방식 - 모듈 의존성을 추상화하.. 공감수 1 댓글수 0 2025. 3. 4.
  • 의존성 분리와 스텁 이번에는 일관된 테스트를 진행하기 위해 의존성을 해소하는 방법 중 “스텁”을 사용하는 방법을 살펴보려고 합니다. 그전에 먼저 의존성의 유형을 먼저 알아보고, 이후 작업 단위에 스텁을 주입하는 방법을 살펴보겠습니다.의존성 유형작업 단위에서 사용할 수 있는 의존성은 내부로 들어오는지, 외부로 나가는지에 따라 스텁(stub)과 목(mock)으로 나뉩니다. 그리고 이런 가짜 의존성을 포괄하여 테스트 더블 이라고 합니다.스텁: 내부로 들어오는 의존성스텁은 종료점을 나타내지 않는 의존성으로, 테스트에 필요한 특수한 데이터나 동작을 작업 단위에 제공하는 역할을 합니다. 예를 들면, 특정 라이브러리를 활용한 데이터나 데이터베이스의 쿼리 결과, 네트워크 응답 결과 등이 있으며 이전 작업의 결과들이라고 볼 수 있습니다. .. 공감수 1 댓글수 0 2025. 3. 2.
  • JEST 활용 단위 테스트 작성 제스트(JEST)테스트 프레임워크인 제스트는 2가지 방법으로 테스트 파일을 찾습니다.__test__ 폴더 안의 모든 파일을 불러온다.모든 폴더를 대상으로 *.spec.js 또는 .test.js로 끝나는 파일 재귀적으로 찾는다. (.ts 포함)제스트에서는 test() 함수나 it() 함수를 통해 개별 테스트를 구현합니다. 이때, 폴더 구조의 역할과 유사한 describe() 함수를 사용하면 테스트를 그룹으로 묶을 수 있으며, 주로 it() 함수와 함께 사용됩니다. describe() 구문은 주로 동일한 시나리오에서 동일한 진입점에 대해 여러 결과를 검증할 때 사용합니다.중첩된 코드를 표현하기 위해 beforeEach() 함수를 사용할 수 있지만, 너무 과도한 결합으로 유연성이 떨어지거나 테스트가 어떤 일을.. 공감수 1 댓글수 0 2025. 2. 25.
  • 단위 테스트 기초 단위 테스트단위 테스트의 정의를 먼저 살펴보고, 이를 이해하기 위한 개념들을 살펴보겠습니다.단위 테스트는 진입점을 통해 작업 단위를 호출한 후 그 종료점을 확인하는 자동화된 코드다.테스트 프레임워크를 통해 쉽게 작성할 수 있다.빠르게 실행할 수 있다.신뢰성이 높고 가독성도 좋아서 유지 보수하기 용이하다.코드가 변경되지 않는 한 동일한 결과를 보장한다.작업 단위단위 테스트(unit test)에서 "단위"란 시스템 내 작업 단위(unit of work) 또는 사용 사례(use case)를 의미합니다. 이때, 작업 단위의 시작인 진입점(entry point)은 로직을 실행하는 시작점을 의미하고, 종료점(exit point)은 작업 단위의 결과를 나타내며 테스트로 검사할 수 있는 지점을 의미합니다.단위 테스트는.. 공감수 1 댓글수 0 2025. 2. 23.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.