jtwjs Dev Wiki
  • DEV_ROAD
    • 💪🏻 생존하기
    • Week 1
      • 개발 환경 세팅
      • 타입스크립트
      • 리엑트
      • Testing Library
      • Parcel & ESLint
    • Week 2
      • JSX
      • Virtual DOM
    • Week 3
      • React Component
      • React State
    • Week 4
      • Express
      • Fetch API & CORS
      • React Hook
      • useRef & Custom Hook
    • Week 5
      • TDD
      • React Testing Library
      • MSW
      • Playwrite
      • Snapshot
    • Week 6
      • Separtion of Concerns
      • Principle
      • DI, (Dependency Injection)
      • Reflect-metadata
      • TSyringe
      • External Store
      • Follow Redux
      • usestore-ts
      • useSyncExternalStore
    • Week 7
      • Routing
      • Routes
      • Router
      • Navigation
    • Week 8
      • Design System
      • Style Basics
      • CSS-in-JS
      • Styled-Components
      • Global Style & Theme
    • Week 9
      • 개발하기 전 준비
      • 상품 목록 페이지
      • 상품 상세 페이지
      • 장바구니 페이지
    • Week 10
      • 로그인
      • 로그아웃
      • 회원가입
      • 주문 목록 & 주문 상세
    • Week 11
      • 배송 정보 입력
      • 포트원 결제 요청
      • 배송 및 결제 정보 전달
    • Week 12
      • 관리자 웹사이트개발시작
  • DEV_NOTE
    • TypeScript
      • 기본적 문법
        • Enum
        • 다형성
          • Untitled
        • 구조적 타이핑
        • 제너릭 타입
        • 컨디셔널 타입
        • 함수 메서드 타이핑
        • infer로 타입스크립트의 추론 직접 활용
        • 재귀 타입
        • 템플릿 리터럴 타입
        • 추가적인 타입 검사 satisfies 연산자
        • 타입스크립트 건망증
        • 원시 자료형에도 브랜딩 기법 사용 가능
        • 타입 좁히기
        • 유용한 타입 만들기
        • 데코레이터 함수
        • 앰비언트 선언도 선언 병합이 된다.
        • 앰비언트 선언도 선언병합이 된다.
    • Testing
      • Unit Testing
      • 단위 테스트의 두 분파
      • 좋은 단위 테스트를 구성하는 4대 요소
      • 테스트 대역과 식별할 수 있는 동작
      • 단위 테스트 스타일
      • 가치 있는 단위 테스트를 위한 리팩토링
      • 통합 테스트
      • Cross Browsing Testing
      • 기능 테스트 종류
      • React Testing Pattern
      • 프론트엔드 테스트 입문
        • 테스트 범위
        • 단위 테스트 검증
        • Mock
        • UI 컴포넌트 테스트
        • 테스트 커버리지
        • 웹 통합 테스트
        • MSW
        • 스토리북
        • 시각적 회귀 테스트
        • E2E 테스트
        • Github Actions 설정
        • 깃허브 액션에서 E2E
      • 시프트 레프트
        • 테스트 기본중의 기본
        • 단위 테스트
        • 코드 복잡도
        • 리팩터링
        • 코드 리뷰
        • 통합 테스트 패턴
        • 시스템 테스트의 자동화
        • 탐색적 테스트
      • Test Tip
      • vitest
      • playwright
      • Test Data Generator
      • MSW
    • Algorithm
      • coding test
      • Data Structure
    • Next.js
      • Data Fetching
      • Hydration
      • Next 13
      • Optimization
      • Next 15
    • Tailwind
      • Tailwind CSS
      • Theme
      • Directives
      • Tool
      • Design System
    • Storybook
      • Storybook
      • CSF3
      • CDD
      • Headless Component
    • Funtional Programming
      • 함수형 프로그래밍
      • 참조 투명성
      • 부수효과
      • 함수 합성
      • 제너릭 타입 활용하기
      • 암묵적 입출력
      • 액션과 계산, 데이터
      • 계층형 설계
      • 호출 그래프
      • 함수형 설계
      • 불변성
      • 일급 함수
      • 함수형 도구
    • Git
      • Github Actions
      • Conflict
      • Branch 전략
    • Contents Format
      • Audio
    • 3D Graphic
      • 3D keyword
      • Three.js
      • Geometry
      • Material
      • Light
      • Camera
      • Decal
      • Rotation
      • Text
      • Shadow
      • Fog
      • Post Processing
      • Animation
      • Math
        • Vector Space
        • 벡터의 연산
        • 회전 계산
      • 3D 컨텐츠가 만들어지는 과정
      • R3F
      • Env
      • Scene
      • Transform
      • R3F
      • Interaction & Raycast
      • Rendering Algorithnm
      • Blender
      • Blender
    • Accessibility
      • 접근성이란
    • Interactive Web
      • Parallax
      • Canvas
      • requestAnimationFrame
      • Effect
      • HSL
      • React.js + Canvas
      • Matter.js
    • AWS
      • DevOps
      • Amplify
      • S3
      • 클라우드 컴퓨팅
        • 온프레미스와 클라우드
        • 클라우드 도입효과
        • 클라우드 컴퓨팅의 범위
        • 컴퓨팅 옵션
          • EC2 - Virtual Machin
          • ECS, EKS - Container
          • Lambda - Serverless
        • 네트워크 가상화
        • 스토리지
        • 데이터베이스
        • 데이터 수집
        • 머신 러닝 영역
        • IoT 영역
        • 블록체인 영역
      • 클라우드 아키텍처 설계
    • Network
      • Web Server & WAS
    • System Design
      • System Design
      • Component
      • 의존성을 배제한 개발
      • Error Handling
      • Architecture
        • 모노로틱 아키텍처
        • Clean Architecture
        • Layered Architecture
        • 이벤트 기반 아키텍처
      • 상황을 파악하는 메타인지
      • 중복 문제 해결하기
      • Monorepo Arhitecture
        • 모노레포 운영과 트러블슈팅
        • Module Federation
      • 코드 병목지점
      • API 대응
      • 공통 코드
      • Infra 구축
      • 모듈 기반의 개발 방식
      • Design System
        • 최소 수준의 아키텍처 설정
        • 더 효율적인 디자인시스템 만들기
        • 디자인 시스템과 UI 라이브러리 목적
        • 디자인 토큰
      • 효율적인 업무
        • 업무 프로세스 병목 파악
      • Clean Code
      • Design Pattern
        • CQRS Pattern
        • Strangler Fig Pattern
        • 데코레이터 패턴
        • 커맨드 패턴
        • 전략 패턴
        • 옵저버 패턴
      • A/B 테스팅
      • 대규모 리엑트 웹앱 개발
        • 복잡성 관리
        • 모듈성
        • 성능
        • 디자인 시스템
        • 데이터 패칭
        • 상태 관리
        • 국제화
        • 코드 조직화하기
        • 개인화 A/B 테스팅
        • 확장 가능한 웹 아키텍처
        • 테스팅
        • 툴링
        • 기술적 마이그레이션
        • 타입스크립트
        • 라우팅
        • 사용자 중심 API 디자인
        • 리액트 미래
    • Performance
      • React DevTools
      • Component 최적화
      • Page Load
      • API
    • MFA
      • MSA
      • MFA 도입하기
      • Monorepo
        • Monorepo Tool
        • Yarn Berry Workspace
        • Turborepo
      • MFA Composition
      • SPA 통합
      • Design System
      • Package Manager
        • Yarn
        • pnpm
      • Transpiler & Bundler
        • Babel
        • Rollup
        • esbuild
        • swc
        • Webpack
        • Vite
      • 분해와 통합을 위한 여러 기술 비교
    • State Management
      • Zustand
    • React v18
      • Automatic batching
      • Suspense
      • Transition
    • SEO
      • Search Engine Optimization
      • Open Graph Element
      • Metadata
    • FE Develop
      • Scrubbing
      • Clipboard
    • Refactoring
      • 리팩토링 깊게 들여다보기
      • 긴 코드 조각내기
      • 타입 코드 처리하기
      • 유사한 코드 융합하기
      • 데이터 보호
      • 코드 추가 및 제거
    • OAuth 2.0
    • Analytics
      • Mixpanel
    • ETC
      • VSCode
    • React Hook In Action
      • useContext & Provider
      • 커스텀 훅
      • 코드 분할하기 with Suspense, lazy
      • Suspense와 이미지 적재하기
      • useTransition, uesDeferredValue
      • SuspenseList
Powered by GitBook
On this page
  • 시프트-레프트
  • 애자일 품질
  • 다중 학습
  • 애자일 테스트란
  • 개발자의 구체적인 작업 지침
  • 테스터의 구체적인 작업 지침
  • 시프트-레프트 테스트
  • 시프트-레프트 모델
  • 조기 품질을 보증하는 요건
  • 시프트-레프트 테스트 특징
  • 남은 버그의 리스크
  • 요약
  1. DEV_NOTE
  2. Testing

시프트 레프트

시프트-레프트

애자일(agile)에서의 품질 보증

  • '조기 품질'이라는 용어를 더 좀 더 강한 표현으로 바꾼 것

  • 제품이나 프로세스의 품질을 높이기 위해 초기 단계에서 설계에 중점을 둔 전략

  • 문제는 요구사항, 설계, 코딩 및 모든 단계에서 발생하는 버그를 가장 마지막 단계인 테스트를 통해 해결하려고 하는 자세에서 비롯된다.

    • 개발이 느리게 진행됨

    • 개발자가 자신이 작성한 코드에 관심이 없어짐

  • 버그는 사람이 작성한 요구사항과 이를 구현하는 복잡한 코드 과정에서 발생함

애자일 품질

  • 시프트-레프트와 스크럼은 큰 프레임에서 비슷

  • 시프트-레프트를 활용하면 개발 중에 발생하는 버그는 개발 중에 발견할 수 있게된다.

스크럼이란?

  • 코딩이 끝나면 테스트 담당자가 각각 테스트하는 것이 아닌, 코딩하면서 동시에 테스트를 수행하는 것

다중 학습

  • 스크럼에선 다중 학습이 필요하다.

  • 팀이 하나가 되어 작업하는 만큼, 팀원이 어떤 작업을 하는지 이해해야 한다.

    • 옆 팀원이 바쁘다면 도와줘야 한다!!

  • 스크럼의 기본을 이해한 상태에서 상황에 맞게 품질을 보증하는 팀이 '애자일의 품질 보증'을 실현할 수 있다.

애자일 테스트란

  • 애자일에서는 개발자와 테스트 담당자가 짝을 이뤄 동일한 이터레이션안에서 품질을 보증해야만 한다.

    • 이터레이션: 짧고 반복적인 주기

  • 워터폴 모델에선 개발자가 테스트 담당자에게 품질에 관한 책임을 전가할 수 있지만, 애자일에서는 불가능

    • 품질 및 비용의 최소 절반 이상은 개발팀에 전가됨

개발자의 구체적인 작업 지침

  • 어떻게 지표를 달성할지에 관한 구체적인 활동을 정의

  • 기본적으로는 데이터에 기반한 품질 활동이 항상 중요할 것

  • 개발자 테스트에서는 일정 수준 이상의 코드 커버리지 비율을 달성해야함

  • 코드 품질을 어떻게 충족할 것인지 등의 목표로서 정의된 지표를 달성하는데 필요한 활동을 정의

테스터의 구체적인 작업 지침

  • 마지막 단계에서 소프트웨어를 조작하다보면 분명히 버그가 발견됨

  • 애자일에서도 품질 데이터 달성을 목표로하는 시스템 테스트는 필요

  • 그 밖에도 사용자 시나리오로부터 테스트 케이스 추출해 이터레이션 중에 수행

애자일에서는 시스템 테스트 활동이 정의되지 않았지만 시프트-레프트 활동은 필수이며, 시스템 테스트에서 해야 할 활동은 조직이 스스로 정의해야 한다.

  • 워터폴 모델과 같이, 라이프 사이클 전체에서의 버그 수를 세어서 "버그 수가 줄었으니 릴리즈 합시다!"와 같은 대화는 이후 입 밖으로 낼 수 없는 세계이다.

  • 따라서 시스템 테스트를 어떻게 수행할 것인가 보다는 어떻게 정량적으로 측정할 것인가가 더 중요

  • 진정한 의미에서의 신뢰도 성장 곡선을 그려야 한다.

시프트-레프트 테스트

모든 버그를 가장 마지막 이터레이션에서 시스템 테스트로 잡아내려고 하는 시도는 혼돈 상태를 야기한다.

  • 각 부품의 신뢰성을 사전에 확인하고, 설계서대로 만들어졌는지를 확인한 뒤에 조립하고 검토해야함

  • SW 업계에서 후반 공정에서 소프트웨어 설계는 커녕, 단위 테스트 코드도 작성하지 못하는 인원들이 대규모로 들어와 테스트 대상을 마구잡이로 조작하고, 버그를 만들어내는 것이 일상적인 모습일 때가 많은데, 정말 위험한것

시프트-라이트란

  • 제품 개발 과정에서 가장 분주한 시점을 후반부에 두는 것

  • 일정에 맞춰 제품을 릴리즈한다는 의미에서 큰 리스크를 포함한다.

시프트-레프트 모델

조기 품질을 높이기 위한 모델

시프트-레프트는 시스템 테스트를 확실히 수행하는 것이 아니다.

조기 품질을 보증하는 요건

각 품질의 측면을 고려해서 빠르게 실행!

  • 요구사항 사양 및 사용자 스토리의 명확화'

  • 클래스나 함수 구조를 간단하게 유지

  • 단위 및 통합 테스트 실행

  • 코드 리뷰

시프트-레프트 테스트 특징

  • 일본 IPA(정보처리추진기구)에서 발표한 수치로, 조기 단계에서 품질을 보증하는 것이 출시 후의 품질을 더 높인다고 명확히 기재되어있음

  • 만약 조기 단계에서 많은 버그를 발견할 수 있다면, 대부분의 프로젝트에서 큰 폭의 일정 지연이 발생하거나 출시 후에 치명적인 버그가 나타나는 일은 없을것

  • 많은 버그를 검출하는 작업은 단지 올바르게 코딩하는 것만으로 불가능하고, 요구사항 사양과 설계 단계에서의 버그 검출(올바른 설계에 대한 숙고)을 해야함

  • 즉, 후반 단계에서 아무리 버그를 찾아낸들, 출시 후의 오류를 줄이는데는 한계가 있다.

남은 버그의 리스크

  • 조기 단계에 버그를 없애지 않으면 많은 버그가 후반에 발견되고, 마지막까지 발견되지 못한 버그는 출시 후 고객에게 발견될 리스크가 있다.

"조기 코드 인스펙션, 리뷰, 반복 개발, 주기적 구축 등에 중점을 두면 결함 추출 곡선은 개발 초기 단계(즉, 왼쪽)로 이동한다." - 로런스 퍼트넘

조기 코드 인스펙션이란

  • 소프트웨어 개발 초기 단계에서 코드의 품질을 검토하고 오류를 찾아내는 활동

  • 코드 리뷰, 테스트 자동화 등

  • 프로젝트 후반에 버그를 없애는 비용은 전반에 드는 비용의 수 배에 달함 -> 효율이 낮고 비용 발생

  • 프로젝트 후반에 버그를 없애려고 하면, 아직 해결되지 않은 버그가 제품 출시 후에 남겨질 리스크 있음

    • 순전히 운에 따르는 문제가됨

    • 과거에 잘 동작했다고 해서 이후에도 문제가 없으리라고 단언할 수 없음

  • 버그 수정에 드는 공수와 개발 단계가 서로 연관되어있음

    • 개발 단계가 한 단계 진행될 때마다 수정 공수는 배가 된다.

    • 단위 테스트에서 발견된 버그가 통합 테스트에서 발견되면 비용이 배가 된다는 것

요약

  • 시프트-레프트 테스트를 하지 않는다는 것은 출시한 뒤 버그가 발생한다고 보면 된다.

  • 시프트-레프트 테스트를 시행하지 않으면(또는 이터레이션 안에서 확실한 테스트를 하지 않으면), 후반 단계에서 아무리 테스트하더라도 큰 리스크를 가진 채 출시하게 된다,.

  • 후반 단계에 많은 버그를 고치게되면, 출시일을 우선하게 되는 만큼 일정 확률로 고치지 못한 버그가 남게됨

  • 같은 버그를 조기 단계에서 고치는 경우와 후반 단계에 고치는 경우를 비교하면, 비용은 몇배로 불어남

  • 최종 단계의 치명적인 버그 또는 출시 후의 버그에 따른 프로젝트 혼란 비용이 가장 높은 이유는 프로젝트 참여하는 전원이 관계되기 때문

  • 조기에 테스트를 시행하지 않으면 치명적인 시장 버그가 발생하고 불필요한 개발 비용이 투입됨

  • 출시 후 리스크(버그에 의한 매출 저하, 시장 버그 비용)

Previous깃허브 액션에서 E2ENext테스트 기본중의 기본

Last updated 3 months ago