반응형

7. 경계조건

테스트 작성 시 경계 조건을 생각하는데 도움이 될 방법 CORRECT

 

7.1 Conformance 준수

특정 양식을 준수해야할 경우, N * M 가지의 경우의 수 고려

  • 이메일
  • 전화번호
  • 문서 등
헤더 데이터 트레일러
O O O
O O X
O X O
X O O
O X X
X O X
X X O
X X X
  • 처음 입력될 때 검증하면 매번 검증할 필요 없음
    • controller단이나 mapping될 때

 

7.2 ORDERING 순서

  • sorting
  • asc, desc 로 나열 시 맨 처음 값이 제일 큰지/작은지/최신순인지 등 확인 필요

 

7.3 RANGE 범위

경계 범위, 바깥 값 검증

  • int 인데 음수로 들어올 경우?
  • MAX + 1 이 들어올 경우?

primitive obsession(기본형의 과도한 사용)을 피하고 object로 만들어야 한다.

그리고 그 내부에서 검증로직과 경계값에 대한 조건을 가지고 있는게 좋다.

  • 예시: Bearing.java /  Rectangle.java : object안에서 범위에 대한 제약을 다룬다(넘는 경우 예외 포함).
  • RectangleTest.java : 공통 검증 로직을 @After 에서

cf. primitive obsession이란

  • 관련된 데이터를 묶지 못하고 흩어놓아 사용하는 것
  • 이 경우 각각의 데이터에 대한 정보를 외부에 공개하게 됨
  • 함수를 만들때도 각각의 데이터를 파라미터로 넘겨주어야 하기에 파라미터의 갯수가 늘어남
  • 이 때 관련된 데이터를 하나의 구조체(객체)로 묶어 사용해야한다.

https://medium.com/the-sixt-india-blog/primitive-obsession-code-smell-that-hurt-people-the-most-5cbdd70496e9

 

Primitive Obsession — code smell that hurt people the most

Most of the time, developers are aware of common code imperfections and most of the time know how to deal with them like long method…

medium.com

 

7.3.1 커스텀 매처 생성하는 법

hamcrest assertThat

public static <T> void assertThat(T actual, Matcher<? super T> matcher)

 TypeSafeMatcher를 상속받아서 매처 인스턴스를 반환하는 정적 팩토리 매서드(static @Factory method)를 제공하는 방식으로 커스텀 매쳐를 만들 수 있음(ConstrainsSidesTo.java, RectangleTest.java)

 

7.3.2 불변 함수를 내장하여 범위 테스트

sparseArray라는 자료구조를 직접 구현

  • 내부 배열에 저장된 값을 검증하는 테스트 코드를 작성할 때
  • 불필요하게 내부 구현 사항을 노출하기보다
  • 검증 함수를 만들어서 활용하는게 낫다(테스트 코드에서도 쓰고, 필요시 로직에서도 쓰고; checkInvariants())
    • 이 때 코드의 어느 부분에 문제가 있는지 더 쉽게 파악 가능

 

cf. sparseArray

0이 데이터보다 훨씬 많이 있는 array. 0을 실제 저장하지 않고 데이터가 있는 값만을 특별한 형식으로 저장하여 메모리를 효율적으로 사용하려는 방법을 취함.

A sparse array is an array of data in which many elements have a value of zero. This is in contrast to a dense array, where most of the elements have non-zero values or are “full” of numbers. A sparse array may be treated differently than a dense array in digital data handling.

https://developer88.tistory.com/entry/SparseArray-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94

https://www.geeksforgeeks.org/what-is-meant-by-sparse-array/

 

What is meant by Sparse Array? - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

경계 대상이 인덱스일 경우 아래 사항 고려

  • 시작과 마지막 인덱스가 같으면 안됨
  • 시작이 마지막보다 크면 안됨
  • 인덱스는 음수가 아니어야 함
  • 인덱스가 허용된 값보다 크면 안됨
  • 갯수가 기대값과 같아야 함

 

7.4 Reference 참조

  • 외부 의존성이 있는지
    • 특정 상태에 있는 객체를 의존하는지
  • pre-condition(사전조건) / post-condition(사후조건; 코드가 참을 유지해야하는 조건; assertion; 메서드 반환 )이 있는지 확인
    • 가정이 맞을 때
    • 가정에 맞지 않을 때
      • side effect 확인

 

7.5 Existence 존재

  • null, 0, empty
  • 기대하는 파일이 없을 때
  • 네트워크 다운

 

7.6 Cardinality 기수 / 갯ㅅ

  • 0, 1, N(다수; 경계조건)
    • N은 비즈니스 요구사항에 따라 바뀔 수
  • 0 -> 1 -> N 에 관한 테스트코드

 

7.7 Time 시간

  • 상대적 시간(시간 순서)
    • 테스트 호출 순서 무관
    • 언제든지 반복가능한 테스트
  • 절대적 시간(측정된 시간)
    • 너무 오래걸리지 않는 테스트
    • timeout / 무한대기 고려
  • 동시성/동기화

 

728x90
반응형

+ Recent posts