[Effective Software Testing] chapter_2

2025. 8. 30. 16:21·김동훈

프로그램(기능)의 요구사항(기획서?)을 바탕으로 정의된 명세를 기반으로 테스트를 진행한다.
기능 구현 후, 요구사항에 맞게 잘 구현되었는지 확인하기 위해 먼저 시도해볼 수 있다.

1. 요구사항과 입출력에 대해 이해하기

프로그램(method)을 3단계로 분석한다.

  • 메서드가 무엇을 수행하는가? (비즈니스 로직)
  • 메서드가 무엇을 입력으로 받는가?
  • 메서드가 무엇을 출력하는가?

2. 여러 입력값에 대해 프로그램이 수행하는 바를 탐색하기

이 메서드가 어떤 기능을 구현했는가를 탐색하는 단게이다. (비즈니스 로직 분석 단계)
내가 작성한 코드라면 skip 해도 되지만, 남이 작성한 코드를 테스트할 때 거치는 단계이다.

  • 예상할 수 있는 입력값들을 통해 해당 메서드를 파악하면 된다.

처음 구매한 기기를 탐색해보는 과정으로 느껴진다

3. 테스트 가능한 입출력과 구획을 탐색하기

효율적인 입/출력 테스트를 위해 구획화 하는 단계이다.
간단한 예시로, 장바구니 기능을 구현하였다고 해보자. 최대 10개까지만 담을 수 있는 장바구니라면, 3개를 담아보는 입력과 4개를 담아보는 입력은 동등한 입력이므로 작성할 필요가 사라진다.

  • 내가 전달하는 입력은 어떤 부류인가?
  • 각 입력들의 조합에 대해 무엇이 가능한가?
  • 어떠한 출력들이 가능한가?

4. 경계 분석하기

소프트웨어의 버그는 경계에서 흔하게 발생한다.
최대 10개 까지의 장바구니 였다면, 10이라는 값이 경계라고 볼 수 있다.

  • 접점: on point 경계 위에 있는 점
  • 거점: off point 다른 구획에 있으면서, 접점과 가장 가까운 점
    접점은 10 이다. 거점은 11 이라고 보는데 1 ~ 10은 정상동작, 11부터는 비정상동작으로 보이므로 다른 구획(?)에 존재하면서 10과 가장 가까운 점이다.
  • 내점: in point 항상 참인 점
  • 외점 out point 항상 거짓인 점

5. 테스트 케이스 고안하기

각 입력을 조합하는 단계이다
위는 간단한 구현이므로 조합이 많지 않지만, 해당 메서드가 복잡하다면 예를 들어 가격은 30_000₩ 까지만, 각 품목은 5개까지만, 카테고리는 음식만 등의 요구사항 또는 파라미터가 생기게 되면 조합은 더욱 많아진다. 따라서 필요없는 조합은 제거한다.

  • 예외 케이스 구획화 (가격이 0원, 품목의 갯수가 0개, 존재하지 않는 카테고리 등)
  • 각 요구사항 구획화 ( 가격 유효성, 품목 유효성 등)
    • 카테고리가 음식이 아닌 경우
    • 가격이 30_000₩이 넘는 경우
    • 품목의 갯수가 5개 넘는 경우
  • 총 갯수가 10개 초과 일 때 여러 품목의 합이 10개 초과
  • 총 갯수 10개 이하

6. 테스트 케이스 자동화하기

자동화 라고 해서 거창해보이지만, JUnit 과 같은 테스트 프레임워크로 테스트를 작성함을 말한다.
각 테스트 케이스에 맞는 입력을 만들어 테스트를 작성하면 된다.

7. 창의성과 경험을 발휘해서 테스트 스위트를 강화하기

우리가 작성했던 테스트 케이스에 빠진 부분이 있는지 검사하는 단계이다
위 장바구니 예제에서 빠진 부분을 찾으면 되는데, 아직 보이지는 않는다. 굳이 만들어보자면, 해외 상품을 장바구니에 담는 경우가 있을 것 같다.
해외($)라면, 매일 환율에 영향을 받으므로 오늘 환율에서는 통과가 되었지만 환율 변동으로 인해 30_000₩ 이라는 요구사항을 만족하지 못하는 테스트 케이스가 있을 것 같다.

'김동훈' 카테고리의 다른 글

돌연변이 테스팅  (0) 2025.09.15
[Line corp] Kotlin-jdsl commit 쪼개기-1  (0) 2025.08.31
오픈소스에 내이름 박기  (0) 2025.07.16
Springboot NamingStartegy  (2) 2025.06.25
3기 활동ㅋㅋ  (2) 2025.06.11
'김동훈' 카테고리의 다른 글
  • 돌연변이 테스팅
  • [Line corp] Kotlin-jdsl commit 쪼개기-1
  • 오픈소스에 내이름 박기
  • Springboot NamingStartegy
이제부터100도씨
이제부터100도씨
zglzgl 님의 블로그 입니다.
  • 이제부터100도씨
    지글지글
    이제부터100도씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (22)
      • 김동훈 (6)
      • 김동주 (3)
      • 김보근 (6)
      • 임동윤 (1)
      • 임이삭 (4)
      • 오성찬 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 스터디 소개글
  • 링크

  • 공지사항

    • 지글지글 3기 공지사항
    • 지글지글 4기 공지사항
  • 인기 글

  • 태그

    in-dark
    error
    cursor
    rust
    Editor
    Loading
    IT
    js
    스터디 3기
    EC2
    로드밸런서
    AWS
    Web
    Gorilla
    chat
    3기
    Card
    coding
    Younique
    개발
    fix
    Python
    cardgorilla
    웹크롤링
    Tool
    zgl
    ELB
    selenium
    AI
    bug
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이제부터100도씨
[Effective Software Testing] chapter_2
상단으로

티스토리툴바