6장. 단위 테스트 스타일

6장. 단위 테스트 스타일

단위테스트 스타일

  • 출력 기반 테스트 -> 가장 품질이 좋음
  • 상태 기반 테스트 -> 두번째
  • 통신 기반 테스트 -> 가장 품질이 낮음

단위 테스트의 세 가지 스타일

  • 출력 기반 테스트(output-based testing)
  • 상태 기반 테스트(state-based testing)
  • 통신 기반 테스트(communication-based testing)

출력 기반 테스트 정의

대상 시스템에 입력을 넣고 생성되는 출력을 점검하는 방식

출력 기반 단위 테스트 스타일은 함수형 이라고도 한다

상태 기반 스타일 정의

작업이 완료된 후 시스템 상태를 확인하는 것이다
이 테스트 스타일에서 상태라는 용어는 SUT나 협력자 중 하나 또는 데이터베이스나 파일시스템등 외부의존성의 상태를 의미 할수 있다

통신 기반 스타일 정의

목을 사용해 테스트 대상 시스템과 협력자 간의 통신을 검증한다

단위 테스트 스타일 비교

4대 요소랑 비교해보면 재미있을것이다

  • 회귀방지
  • 리팩터링 내성
  • 빠른 피드백
  • 유지보수성

회귀 방지와 피드백 속도 지표로 스타일 비교하기

회귀 방지 지표

  • 테스트 중에 실행되는 코드의 양
  • 코드 복잡도
  • 도메인 유의성

어떤 스타일도 이 부분 에선 도움이 안된다

테스트 스타일과 테스트 피드백 속도 사이에는 상관관계가 거의 없다

리팩터링 내성 지표로 스타일 비교하기

리팩터링 내성은 리팩터링 중 발생하는 거짓 양성 수에 대한 척도다

거짓 양성은 식별할 수 있는 동작이 아니라 코드의 구현 세부 사항에 결합된 테스트의 결과다

  • 출력 기반 테스트가 가장 우수하다
  • 상태 기반 테스트는 일반적으로 거짓양성이 되기 쉽다
  • 통신 기반 테스트가 허위 정보에 가장 취약하다

유지 보수성 지표로 스타일 비교하기

  • 테스트를 이해라기 얼마나 어려운가(테스트 크기에 대한 함수)?
  • 테스트를 실행하기 얼마나 어려운가(프로세스 외부 의존성 개수에 대한 함수)?

출력 기반 테스트가 가장 유지보수에 용의하다

상태 기반 테스트는 일반적으로 출력 기반 테스트보다 유지 보수가 쉽지 않다

클래스가 값에 해당하고 값 객체로 변환할 수 있을 때만 효과적 그렇지 않으면 코드 오염으로 이어진다

통신 기반 테스트는 유지 보수성 지표에서 출력 기반 테스트와 상태 기반 테스트 보다 점수가 낮다

스타일 비교하기: 결론

출력 기반 테스트가 가장 품질이 좋다

함수형 아키텍처 이해

함수형 프로그래밍과 출력 기반 테스트의 연관성을 이해하는데 도움이 될 것이다

함수형 프로그래밍이란?

출력 기반 단위 테스트 스타일은 함수형이라고도 한다
기반 제품 코드를 함수형 프로그래밍을 이용해 순수 함수 방식으로 작성해야 하기 때문이다

함수형 프로그래밍은 수학적 함수를 사용한 프로그래밍이다

수학적 함수는 호출 횟수에 상관 없이 주어진 입력에 대해 동일한 출력을 생성한다

숨은 입출력의 유형

  • 부작용
  • 예외
  • 내외부 상태에 대한 참조

함수형 아키텍처란?

함수형 프로그래밍 목표는 부작용을 완전히 제거하는 것이 아니라 비즈니스 로직을 처리하는 코드와 부작용을 일으키는 코드를 분리하는 것

비즈니스 로직과 부작용을 분리하는 유형

  • 결정을 내리는 코드 : 부작용이 없는 코드
    • 함수형 코어(불변 코어)
  • 해당 결정에 따라 작동하는 코드 : 결정이 된 부분을 데이터베이스로 변경이나 메시지 버스로 전송된 메시지 같이 가시적인 부분으로 변환하는 부분
    • 가변 셀

함수형 코어와 가변 셀의 협력

  • 가변 셍은 모든 입력을 수집한다
  • 함수형 코어는 결정을 생성한다
  • 셀은 결정을 부작용으로 변환한다

함수형 아키텍처와 육각형 아키텍처 비교

함수형 아키텍처와 육각형 아키텍처는 비슷한 점이 많다

함수형 아키텍처는 육각형 아키텍처의 하위 집합이다. 극단적으로 함수형 아키텍처를 육각형 아키텍처로 볼 수도 있다

함수형 아키텍처와 출력 기반 테스트로 전환

  • 프로세스 외부 의존성에서 목으로 변경
  • 목에서 함수형 아키텍처로 변경

함수형 아키텍처의 단점 이해하기

항수형 아키텍처와 관련된 비용과 장단점

함수형 아키텍처 적용 가능성

함수형 코어의 클래스는 협력자로 작동하면 안되고 작업의 결과인 값으로 작동해야 한다

성능 단점

함수형 아키텍처와 전동적인 아키텍처 사이의 선택은 성능과 코드 유지 보수성간의 절충이다

코드베이스 크기 증가

함수형 아키텍처는 함수형 코어와 가변 셀 사이를 명확하게 분리해야 한다 그래서 초기에 코딩이 더 필요하다

참조