Skip to content
hello tis
Go back

[26.09.16] 복잡한 상황을 테스트 하는 방법 — 회차 마지막 날과 회차 시작일

상황

지난 글: 복잡한 상황을 테스트 하는 방법에서는 출석 일수와 수령·만료 시점을 변수로 나눠 테스트했습니다. 이번에는 연장 후 달력에 다른 회차의 출석 이력이 표시된 QA를 받아, 기존 경계값 표에 조건을 추가했습니다.

유지돼야 할 6일차의 보라색 자동 출석 표시가 파란색 출석 표시로 바뀌었습니다.

출석·연장 전출석·연장 후 · 오류 화면
출석·연장 전: 6일차에 보라색 자동 출석 표시가 있고, 광고 제거 만료일은 9월 15일이다출석·연장 후 오류: 만료일은 9월 22일로 늘었지만, 6일차가 파란색 출석 표시로 바뀌었다

문제

9월 8일에 수령하고, 9일부터 출석한 사례입니다. 14일은 자동 출석권으로 채웠습니다. 15일 출석 전에는 회차 마지막 날이 14일이고, 출석 후에는 15일입니다. 출석과 함께 연장돼도 그날은 9 ~ 15일의 출석 이력을 보여 줘야 합니다.

그런데 연장 직후 현황판에는 2 ~ 8일의 출석 이력이 표시됐습니다. 14일의 출석권 사용 표시가 출석으로 바뀐 것처럼 보였지만, 실제로는 다른 회차를 조회한 문제였습니다.

9월 15일 출석 후 회차 마지막 날은 15일이다. 9 ~ 15일의 출석 이력을 유지해야 하지만, 수정 전에는 2 ~ 8일을 표시한 사례

원인

한 회차의 출석으로 리워드를 수령하거나 연장했다면, 다음 회차는 새 회차 시작일부터의 출석을 다시 세어야 합니다. 2 ~ 8일 출석으로 8일에 수령했으므로, 9일부터 진행하는 회차에 2 ~ 8일의 출석 이력을 포함하면 안 됩니다.

현재 회차를 찾을 때 가장 최근 연장 이력만 확인했습니다. 그 앞 수령 이력이 정한 회차 시작일을 찾지 못해, 이미 리워드 수령에 반영된 2 ~ 8일의 출석까지 현재 회차에 포함했습니다. 이 때문에 날짜가 이어진 이전 회차와 이번 회차를 하나로 계산했습니다.

// 이미 리워드에 반영된 이전 회차의 출석까지 포함한다.
val 출석일수 = 출석이력.최대7일로집계()ASIS

해결

회차를 구성할 출석 이력의 조회 범위를 수정했습니다

수령·연장 이력을 함께 확인해, 조회일에 이미 시작한 가장 최근 회차를 찾도록 바꿨습니다. 그 회차 시작일 이전의 출석 이력은 제외합니다.

// 이미 리워드에 반영된 이전 회차의 출석은 다시 세지 않는다.
val 출석일수 = 출석이력
    .filter { it.출석일 >= 회차시작일 }
    .최대7일로집계()TOBE

15일에는 9 ~ 15일의 완주 이력을 유지합니다. 새 회차 시작일인 16일부터는 16일 이후의 출석만 세므로, 첫 출석 전에는 빈 달력이 나옵니다.

단일 변수: 조회 날짜와 새 회차 시작일

다른 조건을 고정하고, 조회 기준일을 새 회차 시작일 전날과 당일로 나눴습니다.

고정 조건: 9 ~ 15일 완주와 연장을 마쳤고, 새 회차 시작일인 16일에는 아직 출석하지 않았습니다.

입력: 조회 기준일행위결과: 출석 이력
새 회차 시작일 전날 · 15일연장 후 현황판 조회첫날 9일·마지막 날 15일의 완주 이력 유지
새 회차 시작일 당일 · 16일출석 전 현황판 조회새 회차의 빈 달력 · 출석 일수 0일
새 회차 시작일 전날 · 15일16일 자정 배치에서 15일까지 조회첫날 9일·마지막 날 15일의 완주 이력 유지

같은 16일에 실행해도 현황판은 오늘, 자정 배치는 어제를 기준으로 출석 이력을 확인합니다.

변수 조합: 회차 마지막 날의 변화와 새 회차 시작

이전 글의 출석 6일 / 7일에 회차 마지막 날을 함께 확인하고, 새 회차 시작일의 첫 출석 전까지 비교했습니다.

9월 15일 출석 전후로 회차 마지막 날은 14일에서 15일로 바뀐다. 새 회차 시작일인 16일에는 출석 일수 0일과 빈 달력을 표시한다

고정 조건: 이전 회차와 출석 날짜가 이어지고, 이번 회차의 6일차는 자동 출석권으로 채웠습니다. 입력의 출석 일수는 행위 직전 값입니다.

입력: 출석 일수·연장 상태행위결과: 회차와 달력
6일 · 연장 전15일 출석 전 조회첫날 9일·마지막 날 14일 · 14일은 출석권 사용, 15일은 빈칸
6일 · 연장 전15일 출석·연장 후 조회7일 · 첫날 9일 유지, 마지막 날 15일 · 14일의 출석권 사용 표시 유지
7일 · 연장 완료16일 자정 배치 후, 첫 출석 전 조회새 회차 0일 · 빈 달력 · 추가 연장 없음
한 번 연장한 뒤 다음 회차 6일7일차 출석으로 재연장 후 조회7일 · 이번 회차 첫날과 6일차 출석권 사용 표시 유지 · 마지막 날은 출석한 날
7일 · 재연장 완료다음 날 자정 배치 후, 첫 출석 전 조회새 회차 0일 · 빈 달력 · 추가 연장 없음

조회 로직·현황판 응답과 실제 출석·자정 배치 경로에 위 테스트를 추가했습니다.

결과

도메인 규칙의 경계값은 정리해 테스트했고, 수령과 연장은 의도대로 동작했습니다. 하지만 화면에 노출되는 값을 확인할 변수로 잡지 못해, 그 값들의 경계값 테스트는 빠져 있었습니다.

이번에는 회차 마지막 날의 출석·연장 전후와 새 회차 시작일을 나눠, 달력의 출석 이력과 출석권 사용 표시를 확인하는 테스트를 추가했습니다. 도메인 규칙뿐 아니라 화면에 노출되는 변수들도 경계값 테스트가 필요하다는 것을 배웠습니다.


Share this post:

Next Post
사내 버셀 구축 - 2단계 사내 적용 (진행중)