상황
지난 글: 복잡한 상황을 테스트 하는 방법에서는 출석 일수와 수령·만료 시점을 변수로 나눠 테스트했습니다. 이번에는 연장 후 달력에 다른 회차의 출석 이력이 표시된 QA를 받아, 기존 경계값 표에 조건을 추가했습니다.
유지돼야 할 6일차의 보라색 자동 출석 표시가 파란색 출석 표시로 바뀌었습니다.
| 출석·연장 전 | 출석·연장 후 · 오류 화면 |
|---|---|
![]() | ![]() |
문제
9월 8일에 수령하고, 9일부터 출석한 사례입니다. 14일은 자동 출석권으로 채웠습니다. 15일 출석 전에는 회차 마지막 날이 14일이고, 출석 후에는 15일입니다. 출석과 함께 연장돼도 그날은 9 ~ 15일의 출석 이력을 보여 줘야 합니다.
그런데 연장 직후 현황판에는 2 ~ 8일의 출석 이력이 표시됐습니다. 14일의 출석권 사용 표시가 출석으로 바뀐 것처럼 보였지만, 실제로는 다른 회차를 조회한 문제였습니다.

원인
한 회차의 출석으로 리워드를 수령하거나 연장했다면, 다음 회차는 새 회차 시작일부터의 출석을 다시 세어야 합니다. 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일에 회차 마지막 날을 함께 확인하고, 새 회차 시작일의 첫 출석 전까지 비교했습니다.

고정 조건: 이전 회차와 출석 날짜가 이어지고, 이번 회차의 6일차는 자동 출석권으로 채웠습니다. 입력의 출석 일수는 행위 직전 값입니다.
| 입력: 출석 일수·연장 상태 | 행위 | 결과: 회차와 달력 |
|---|---|---|
| 6일 · 연장 전 | 15일 출석 전 조회 | 첫날 9일·마지막 날 14일 · 14일은 출석권 사용, 15일은 빈칸 |
| 6일 · 연장 전 | 15일 출석·연장 후 조회 | 7일 · 첫날 9일 유지, 마지막 날 15일 · 14일의 출석권 사용 표시 유지 |
| 7일 · 연장 완료 | 16일 자정 배치 후, 첫 출석 전 조회 | 새 회차 0일 · 빈 달력 · 추가 연장 없음 |
| 한 번 연장한 뒤 다음 회차 6일 | 7일차 출석으로 재연장 후 조회 | 7일 · 이번 회차 첫날과 6일차 출석권 사용 표시 유지 · 마지막 날은 출석한 날 |
| 7일 · 재연장 완료 | 다음 날 자정 배치 후, 첫 출석 전 조회 | 새 회차 0일 · 빈 달력 · 추가 연장 없음 |
조회 로직·현황판 응답과 실제 출석·자정 배치 경로에 위 테스트를 추가했습니다.
결과
도메인 규칙의 경계값은 정리해 테스트했고, 수령과 연장은 의도대로 동작했습니다. 하지만 화면에 노출되는 값을 확인할 변수로 잡지 못해, 그 값들의 경계값 테스트는 빠져 있었습니다.
이번에는 회차 마지막 날의 출석·연장 전후와 새 회차 시작일을 나눠, 달력의 출석 이력과 출석권 사용 표시를 확인하는 테스트를 추가했습니다. 도메인 규칙뿐 아니라 화면에 노출되는 변수들도 경계값 테스트가 필요하다는 것을 배웠습니다.

