2024-04-29-TIL
2024-04-29-TIL
Today I Learned
테스트 케이스 설계를 다룬 자료의 2.4절 항목을 따라가며 든 생각을 적어 둔다.
입력을 나누고 줄이기
인풋의 모든 경우를 커버하고, 또 줄이고, 고배경함수로 줄이고 … 하지만 훈련이 필요할 듯
명세 기반 테스트는 입력을 하나씩 다 넣어 보는 것이 아니라, 같은 방식으로 동작할 입력끼리 묶어 나누는 데서 시작한다. 묶음마다 대표값 하나와, 묶음이 바뀌는 경계의 값을 테스트로 고르면 테스트 수를 줄이면서도 놓치는 경우를 줄일 수 있다. 원리는 단순하지만 명세에서 이 묶음을 빠짐없이 찾아내는 일은 연습이 필요하다.
copilot이나 도구를 통해서 메서드의 테스트 케이스를 모두 제시해줄 수 없을까? 그 다음에 소거법으로 중복 테스트를 컴파일 레벨에서 경고표시해주는 등
2.4.2 명세 테스트
명세테스트를 다 테스트 할 필요하는게 기본적으로는 맞지만, 일정상 안된다면 빼도 되지않을까?
나눈 묶음을 모두 테스트하는 것이 원칙이지만, 실제로는 묶음끼리의 조합이 빠르게 늘어난다. 일정이 빠듯할 때 무엇을 뺄지는 위험도로 정하는 편이 맞겠다. 돈이나 권한처럼 틀렸을 때 비용이 큰 경로는 남기고, 다른 테스트가 이미 지나가는 조합부터 줄인다.
2.4.9 널
컨트롤러에서 null을 받지 않는다면 검증할 필요가 없다. 사전조건을 줄이는 쪽의 코딩이 유리하기도 할듯
사전조건(precondition)은 메서드가 올바르게 동작하기 위해 호출하는 쪽이 지켜야 하는 조건이다. 바깥 경계(컨트롤러의 요청 검증)에서 null을 막아 두면 안쪽 메서드마다 null 테스트를 반복할 필요가 줄어든다. 다만 그 메서드가 다른 경로로도 호출된다면 그 경로도 같은 보장을 하는지 확인해야 한다.
role을 어디서 검증하느냐도 aop or 도메인로직 이라면 aop 테스트도 필요할까? 고민해볼것
Spring Security의 메서드 보안(@PreAuthorize 등)은 Spring AOP 위에서 동작한다. 메서드를 부르면 프록시가 먼저 권한 검사 인터셉터를 거치고, 통과해야 실제 메서드를 실행한다. 그래서 권한 검증을 이쪽에 맡기면 도메인 로직의 단위 테스트에는 권한 검사가 나타나지 않고, 애노테이션이 제대로 붙어 프록시가 동작하는지는 스프링 컨텍스트를 띄운 테스트로 따로 확인해야 한다. 도메인 로직에서 직접 검증하면 단위 테스트로 확인할 수 있는 대신 도메인 코드가 권한 개념을 알게 된다.
2.4.12 장바구니 총액 계산
함수형 프로그래밍에서는 item 리스트를 input으로 같이 받아서 totalPrice를 계산해낼수도 있을듯? 객체지향에서는 사실 자연스러운 부분. 그런점에서 객체지향이 테스트하기 어려운듯
totalPrice calculator가 있다면 shopping cart 구현을 너무 상세히 알아야함. 그러면 AnemicDomainModel 아닌가? vs 하지만 테스트를 위해서 분리해볼수도 있다.
- https://en.wikipedia.org/wiki/Anemic_domain_model
- https://martinfowler.com/bliki/AnemicDomainModel.html
빈약한 도메인 모델(Anemic Domain Model)은 Martin Fowler가 이름 붙인 안티패턴이다. 도메인 객체가 getter와 setter만 가진 데이터 묶음이 되고, 계산과 규칙은 모두 바깥 서비스에 있는 구조를 말한다. Fowler는 이것이 데이터와 처리를 함께 묶는다는 객체지향의 기본 생각에 어긋나고, 결국 절차적 설계와 다르지 않다고 본다. 검증, 계산, 비즈니스 규칙 같은 도메인 로직은 도메인 객체에 있어야 하고, 서비스 계층은 얇게 유지하며 일을 조율만 해야 한다는 것이다.
이 기준으로 보면 고민이 조금 정리된다. 총액 계산은 장바구니의 규칙이므로 ShoppingCart가 갖는 것이 자연스럽다. 테스트하기 어렵다면 계산을 바깥으로 빼기보다, 장바구니를 원하는 상태로 쉽게 만들 수 있게 하는 쪽을 먼저 고민해 볼 만하다. 계산 규칙이 할인 정책처럼 독립적으로 바뀌는 덩어리라면 그때는 별도 객체로 분리해도 장바구니가 빈약해지지는 않는다.
AI 키워드: Sora
OpenAI가 2월 15일 텍스트를 입력하면 영상을 만들어 주는 모델 Sora를 공개했다. 공개 당시 최대 1분 길이의 영상을 생성할 수 있다고 소개됐다. 이미지 생성에 이어 이제 텍스트에서 영상까지 만드는 단계가 됐다는 말이구나.
댓글
아직 댓글이 없습니다