본문으로 건너뛰기
페이지 목차
이 페이지에서 검색

AI 드리븐

이 페이지에 묻기

AI 드리븐 · 현재 차시와 목차 본문에서만 찾아 답합니다. 답을 지어내지 않고 해당하는 대목을 그대로 보여 주며, 여기에 없으면 없다고 알려 드립니다.

생성형 AI가 아니라 이 페이지 본문을 찾아 그대로 보여 주는 방식입니다. 외부로 나가는 요청이 없습니다.

AI · DEVELOPMENT

AI 드리븐

생성 수정

요구사항과 역할 정의부터 구현·검증·배포·운영까지, AI와 함께 개발하며 사람이 판단할 기준을 정리합니다.

26개 문서 · 3일차 · 18 / 26

17차시 · 자동화된 테스트

지도 위치 : 3일차 · 신뢰와 운영 · 출발점 — 손 확인을 자동 확인으로 | 이전: 16차시 결제 연동 | 다음: 18차시 버전 관리와 강제 장치 키워드 : 믿을 수 있는 테스트의 조건, 형식만 갖춘 테스트 판별, 안전망 검증

이 차시를 다 읽으면

  1. 자동 테스트를 유와 종차로 정의하고, 2일차의 손 확인과 무엇이 다른지 말할 수 있다.
  2. 믿을 수 있는 테스트의 다섯 조건 을 대고, 첫째 조건("실패할 수 있다")이 왜 나머지의 전제인지 설명할 수 있다.
  3. 형식만 갖춘 테스트 의 유형을 ⑧ 구문론 ↔ 의미론 축으로 설명할 수 있다.
  4. 뮤테이션 발상 (일부러 망가뜨려 보기)으로 테스트를 테스트하는 순서를 말하고, 커버리지가 왜 "충분함"의 증거가 아닌지 설명할 수 있다.
  5. 테스트의 세 층 (단위 · 통합 · E2E)을 구별하고, 클래스온 규칙을 어느 층에 둘지 정할 수 있다.
  6. 테스트 코드를 읽지 않고 테스트 이름 목록 과 망가뜨려 보기 결과표 로 테스트를 검수할 수 있다.

0. 이 차시의 판별 축

#축왼쪽 (0)오른쪽 (1)이 축으로 갈리는 것큰 축 (README 5장)
1형식인가 뜻인가형식만 갖춘 테스트 (돌고, 초록불이 뜬다)믿을 수 있는 테스트 (코드가 틀리면 실패한다)"테스트가 있다" ↔ "테스트가 지킨다"⭐ ⑧ 구문론 ↔ 의미론
2읽어서 판단하나, 돌려서 확인하나정적 검증 (코드 검토)동적 검증 (테스트 실행)AI · 사람의 눈 ↔ 실행 결과정적 ↔ 동적 검증 (⑧의 파생)
3말인가, 판정 가능한 문장인가"예약이 잘 된다""남은 자리가 0이면 409, 예약 0건"인수 기준 → 테스트 이름모호함 ↔ 측정 가능 (⑧의 파생)
4누가 테스트의 기준을 정하나구현한 역할이 자기 코드에 맞춰인수 기준에서 독립적으로테스트가 코드를 따라가는가, 요구를 따라가는가만드는 자 ↔ 검증하는 자 (⑤의 파생)

이 차시가 답하는 질문은 하나입니다. 초록불은 무엇을 증명하는가? 앞에서 배운 인수 기준 (3차시)이 테스트 문장의 출처이고, 앞에서 배운 코드 · 동작 점검 (13차시)의 동적 검증을 사람 없이 매번 반복 하게 만드는 것이 테스트입니다. 그런데 AI는 "통과하는 테스트"를 만드는 데 아주 능숙합니다. 그래서 이 차시의 중심은 테스트를 쓰는 법이 아니라 축 1의 어느 쪽인지 판별하는 법 입니다.


1. 자동 테스트 — 무엇에 속하는가

1.1 정의

자동 테스트 — [동적 검증]인데, [ 코드로 적어 둔 기대를 명령 하나로 언제든 같은 방식으로 다시 확인한다 ]는 점에서 사람이 매번 손으로 해 보는 수동 확인과 구별된다.

단언 (assertion) — [테스트 코드의 한 줄]인데, [ 결과가 기대와 다르면 테스트를 실패시킨다 ]는 점에서 함수를 부르기만 하는 호출과 구별된다. 코드에서는 보통 expect(...)로 보입니다.

회귀 (regression) — [버그]인데, [ 전에 되던 기능이 새 변경 때문에 다시 안 되게 된 것 ]이라는 점에서 처음부터 없던 기능과 구별된다.

1.2 왜 3일차의 출발점인가

2일차까지3일차부터
사람과 검증 에이전트가 직접 눌러 보고 확인확인을 코드로 적어 두고 기계가 반복
코드가 바뀌면 다시 사람이 확인해야 함바뀔 때마다 명령 하나로 전부 다시 확인
에이전트 루프(1차시)의 "확인" 단계가 에이전트의 판단"확인" 단계가 실행 결과 가 됨 → 에이전트가 스스로 실수를 발견하고 고침

AI는 코드를 빨리, 자주 바꿉니다. 바꾸는 횟수가 많을수록 회귀 가 생길 자리도 많습니다. 테스트는 그 자리를 지키는 안전망입니다.

⚠️ 반대로, 형식만 갖춘 테스트는 잘못된 안심을 줍니다. "테스트 120개 통과"라는 보고를 믿고 내보냈는데 아무것도 확인하지 않는 테스트였다면, 테스트가 없을 때보다 나쁩니다. 없을 때는 적어도 불안해서 직접 확인했을 테니까요.

앞으로 다시 만납니다 — 18차시 커밋 검사, 19차시 CI 관문, 22차시 배포 후 검증이 모두 "테스트를 돌린다" 위에 섭니다. 테스트가 가짜면 그 위의 관문도 전부 가짜 입니다. 그래서 3일차는 테스트의 진위부터 따집니다.

1.3 반례 — 이건 자동 테스트가 아닙니다

대상왜 아닌가
에이전트의 "테스트해 봤는데 잘 됩니다"주장 입니다. 실행한 명령과 출력 원문이 없습니다 (README 9.4)
브라우저에서 한 번 눌러 본 것동적 검증이지만 수동 입니다. 다시 하려면 다시 사람이 필요합니다
린트 · 타입 검사 통과자동이지만 정적 · 형식 검사 입니다. 앞에서 배운 대로 (13차시) 뜻은 검사하지 않습니다
커버리지 90% 보고서테스트가 지나간 줄의 비율 일 뿐, 확인했다는 뜻이 아닙니다 (3.4절)

2. ⭐ 믿을 수 있는 테스트의 조건

2.1 정의와 다섯 조건

믿을 수 있는 테스트 — [자동 테스트]인데, [ 지키려는 규칙이 깨지면 실제로 실패한다 ]는 점에서 실행되고 초록불도 뜨지만 규칙이 깨져도 그대로 통과하는 형식만 갖춘 테스트와 구별된다.

조건의미어기면AI가 자주 어기나
⭐ 실패할 수 있다코드가 틀리면 테스트가 실패한다버그가 있어도 초록불가장 자주
결정적이다같은 코드면 언제 돌려도 같은 결과가끔 실패 → 모두가 무시하게 됨시간 · 순서에 기대는 코드에서 자주
독립적이다실행 순서나 다른 테스트에 영향받지 않음하나 고치면 엉뚱한 게 깨짐테스트끼리 DB를 공유할 때
행동을 검증한다"무엇을 하는가"를 확인, "어떻게 하는가"는 아님리팩터링할 때마다 테스트가 깨짐구현에 맞춰 쓸 때
읽힌다이름만 보고 무엇을 확인하는지 앎실패해도 원인을 모름이름을 test1처럼 지을 때

⭐ 첫째 조건이 나머지의 전제입니다. 결정적이고 독립적이고 읽히는 테스트라도, 실패할 수 없으면 아무것도 지키지 않습니다. 나머지 네 조건은 "실패했을 때 그 실패를 믿을 수 있는가"의 문제이고, 첫째 조건은 "실패라는 게 일어날 수 있는가"의 문제입니다.

2.2 인수 기준에서 테스트로

앞에서 배운 Given / When / Then 인수 기준 (3차시)이 테스트의 직접적인 출처입니다. 인수 기준 한 줄이 테스트 하나가 됩니다.

test("남은 자리가 0이면 예약은 409 SOLD_OUT을 받고 생성되지 않는다", async () => {
  // Given
  const session = await createSession({ capacity: 6, remaining: 0 });
  // When
  const res = await api.post("/reservations", { sessionId: session.id, headcount: 1 });
  // Then
  expect(res.status).toBe(409);
  expect(res.body.error.code).toBe("SOLD_OUT");
  expect(await countReservations(session.id)).toBe(0);
});

🔍 읽는 포인트 : 첫 줄 test("...") 안의 한국어 문장 이 이 테스트가 지키는 규칙입니다. 그 아래 expect가 세 줄 있다는 것(응답 숫자, 에러 이름, 실제로 예약이 0건인지 )만 알아보면 됩니다.

마지막 expect가 중요합니다. 응답이 409여도 DB에는 예약이 들어가 버리는 버그가 있을 수 있습니다. "응답만 보고 상태는 안 보는" 테스트는 절반만 지킵니다.

2.3 경계 — 형식만 갖춘 테스트 ↔ 믿을 수 있는 테스트

형식만 갖춘 테스트 — [자동 테스트]인데, [ 문법상 테스트이고 통과도 하지만, 규칙이 깨져도 실패하지 않는다 ]는 점에서 믿을 수 있는 테스트와 구별된다.

형식만 갖춘 테스트 (축 1의 0)믿을 수 있는 테스트 (축 1의 1)
실행되는가된다된다
초록불이 뜨는가뜬다뜬다 (코드가 맞으면)
코드를 망가뜨리면여전히 초록불빨간불
커버리지올라간다올라간다
무엇으로 가려내나겉모양으로는 못 가려냄망가뜨려 보면 가려짐 (3.3절)

⚠️ 표의 위 네 줄이 똑같다는 점이 핵심입니다. 둘은 실행 결과로는 구별되지 않습니다. 코드를 일부러 틀리게 만들어 볼 때만 갈립니다. 이것이 ⑧ 구문론 ↔ 의미론 축이 3일차에서 다시 나타나는 모습입니다. 맞춤법 검사기가 내용의 진위를 모르듯, 초록불은 테스트의 진위를 모릅니다.


3. 형식만 갖춘 테스트와 안전망 검증

3.1 AI가 만드는 일곱 유형

유형모습왜 뜻을 검사하지 않는가
확인 없음함수를 호출만 하고 expect가 없음에러만 안 나면 통과
항상 참expect(true).toBe(true), expect(result).toBeDefined()만 있음무엇이 돌아와도 참
대상까지 가짜테스트하려는 함수 자체를 가짜(mock, 진짜 대신 미리 정한 값을 돌려주는 대역)로 바꿔 놓고 가짜를 확인진짜 코드는 한 줄도 안 돎
구현 복사기댓값을 구현 코드와 같은 계산식으로 만듦구현이 틀리면 기댓값도 같이 틀림
에러 삼킴try { ... } catch {}로 실패를 숨김실패가 일어나도 보고되지 않음
정상만실패 · 경계 케이스가 없음 (앞에서 배운 경계 · 실패 시험, 13차시)버그가 사는 곳을 안 봄
⚠️ 테스트를 고쳐서 통과코드가 틀렸는데 기댓값을 바꿔 맞춤기준 자체를 옮김

3.2 가장 위험한 유형 — 테스트를 고쳐서 통과

앞의 여섯 유형은 처음부터 약한 테스트입니다. 마지막 유형은 멀쩡하던 테스트를 약하게 만드는 것 이라 더 위험합니다. 에이전트는 "테스트를 통과시켜라"라는 목표를 받으면, 코드를 고치는 것과 테스트를 고치는 것 중 쉬운 쪽 을 고를 수 있습니다.

그래서 지침 파일과 테스트 역할(QA) 정의에 이렇게 적어 둡니다.

테스트가 실패하면 테스트가 아니라 코드를 고친다.
테스트를 수정해야 한다고 판단되면, 이유를 보고하고 사람의 승인을 받는다.

🔍 읽는 포인트 : 두 문장 모두 부탁 입니다(README 6장 사다리의 아래 칸). 그래서 실제 방어는 사람이 하는 감시 — "기능 변경 PR에 테스트 파일이 같이 바뀌었는가" — 로 보강합니다(README 9.4 위험 신호).

앞으로 다시 만납니다 — 19차시에서 같은 문제가 CI에서 다시 나옵니다. 에이전트가 CI를 통과시키려고 검사 단계를 지우는 형태로요. 20차시에서는 이것을 CODEOWNERS 라는 강제 장치로 막습니다.

3.3 ⭐ 안전망 검증 — 테스트를 테스트하기

뮤테이션 발상 — [테스트 검증 방법]인데, [ 코드를 일부러 조금 틀리게 바꿔(돌연변이를 넣어) 테스트가 그걸 잡는지 본다 ]는 점에서 테스트를 그냥 다시 돌려 보는 것과 구별된다.

2.3절에서 봤듯 두 종류의 테스트는 코드를 망가뜨릴 때만 갈립니다. 그래서 망가뜨려 봅니다.

1. 서버의 금액 검증 줄을 잠시 주석 처리한다 (돌연변이)
2. 테스트를 돌린다
3. 금액 위조 테스트가 실패하면  → 믿을 수 있는 테스트 (돌연변이를 "잡았다")
   여전히 모두 통과하면        → 그 규칙을 지키는 테스트가 없다 (돌연변이가 "살아남았다")
4. 원래대로 되돌린다

🔍 읽는 포인트 : 3번의 두 갈래만 보면 됩니다. "살아남았다"가 나온 규칙이 안전망에 구멍이 난 곳 입니다.

이 작업을 자동으로 수백 번 해 주는 것이 뮤테이션 테스트 도구 입니다(예: JavaScript의 Stryker, Python의 mutmut — 사용법과 지원 범위는 공식 문서 확인). 하지만 손으로 핵심 규칙 몇 개만 골라 해도 효과가 큽니다. 클래스온이라면 5절의 다섯 규칙이면 충분합니다.

3.4 커버리지의 함정

커버리지 (coverage) — [테스트 지표]인데, [ 테스트가 실행하면서 지나간 코드의 비율 ]이라는 점에서 테스트가 실제로 확인한 규칙의 비율과 구별된다.

커버리지가 말해 주는 것커버리지가 말해 주지 못하는 것
테스트가 한 번도 지나가지 않은 코드가 어디인가지나간 코드의 결과를 확인했는가
새로 추가된 코드에 테스트가 전혀 없는가경계 · 실패 케이스를 봤는가

⚠️ "확인 없음" 유형의 테스트도 커버리지는 100%까지 올립니다. 그래서 커버리지는 "테스트가 안 닿은 곳"을 찾는 데만 쓰고, "충분하다"의 증거로는 쓰지 않습니다. 커버리지 100%인데 버그가 있을 수 있는 이유가 이것입니다.

💡 비유는 마지막에 — 형식만 갖춘 테스트는 천장에 달려만 있는 화재경보기 입니다. 달려 있다는 것(형식)과 연기에 울린다는 것(뜻)은 다릅니다. 뮤테이션 발상은 연기를 피워 경보기를 시험하는 것 이고, 커버리지는 경보기가 몇 개 방에 달려 있는지 세는 것 입니다.


4. 테스트의 층

층정의 (유 + 종차)속도개수
단위 테스트[자동 테스트]인데, [ 함수 하나를 DB · 네트워크 없이 따로 떼어 확인한다 ]는 점에서 여러 부품을 붙여 보는 통합 테스트와 구별된다매우 빠름많이
통합 테스트[자동 테스트]인데, [ API와 실제 DB처럼 여러 부품을 붙인 상태로 확인한다 ]는 점에서 단위 테스트와 구별된다중간핵심 규칙마다
E2E 테스트[자동 테스트]인데, [ 실제 브라우저로 사용자처럼 처음부터 끝까지 따라간다 ]는 점에서 부품만 확인하는 단위 · 통합 테스트와 구별된다느림 · 잘 깨짐핵심 흐름 몇 개만
        /\        E2E: 실제 브라우저로 예약 ~ 결제 흐름 (적게)
       /  \
      /----\      통합: API + 실제 DB (클래스온 핵심 규칙 대부분)
     /      \
    /--------\    단위: 금액 계산, 취소 기한 판단 같은 계산 (많이, 빠르게)

🔍 읽는 포인트 : 위로 갈수록 좁아진다 는 모양만 기억하면 됩니다. 위층일수록 느리고 비싸서 적게 둡니다.

⚠️ 클래스온의 핵심 규칙(자리 차감, 동시 예약, 금액 검증)은 대부분 DB가 있어야 의미가 있는 규칙 입니다. 단위 테스트에서 DB를 가짜로 바꾸면 "대상까지 가짜" 유형이 되기 쉽습니다. 그래서 클래스온에서는 통합 테스트가 몸통 입니다.

앞으로 다시 만납니다 — 꼭대기의 E2E는 22차시에서 실제 배포 주소를 대상으로 돌립니다. 통합 테스트용 DB를 매번 새로 띄우는 일은 19차시의 CI가 맡습니다.


5. 클래스온에 적용하면

반드시 테스트로 지킬 규칙(인수 기준에서 추림)과, 각 규칙을 확인할 돌연변이 입니다.

#규칙출처층망가뜨려 볼 곳 (돌연변이)
1자리가 없으면 예약 불가 (409)3, 10차시통합남은 자리 확인 조건 제거
2동시 요청 20개 → 예약 정확히 1개13차시통합조건부 차감을 "조회 후 저장"으로 바꿈
3금액은 서버 계산값, 위조 금액 무시10, 16차시통합화면이 보낸 금액을 그대로 쓰게 바꿈
4남의 예약 조회 · 취소 불가14차시통합예약 주인 확인 줄 제거
5결제 금액 불일치 시 승인 거부, 중복 승인 무시16차시통합금액 비교 줄 제거
6취소 기한 계산3차시단위기한 비교의 <를 <=로

누가 테스트를 쓰는가 — 축 4의 문제입니다. 구현 에이전트가 자기 코드의 테스트를 쓰고 스스로 통과 판정하면, 같은 맹점을 공유합니다(README 6장 문장 2). 최소한 테스트 목록(이름)은 인수 기준에서 독립적으로 나와야 합니다. 앞에서 배운 역할 분리 (5, 7차시)대로 QA 역할에게 "인수 기준 → 테스트 이름 목록"을 먼저 만들게 하고, 구현은 그 목록을 통과시키는 순서가 안전합니다.


6. 실습 — 맡기고 검수하기

테스트 코드는 못 읽어도 테스트 이름은 읽을 수 있습니다. 좋은 테스트 이름은 한국어 문장입니다. 이 실습의 검수는 전부 이름 목록 과 결과표 로 합니다.

지시

[1단계 — 이름 대조]
모든 테스트의 이름을 목록으로 뽑아서 docs/requirements.md의 인수 기준과 짝지어줘.
보고 형식:
| 인수 기준 | 짝이 되는 테스트 이름 | 층(단위/통합/E2E) |
"테스트가 없는 인수 기준"과 "인수 기준에 없는 테스트"는 표 아래에 따로 목록으로.

[2단계 — 망가뜨려 보기]
아래 규칙마다, 그 규칙을 지키는 코드를 잠시 망가뜨리고 테스트를 돌려서 실패하는지 확인해줘.
- 자리 없으면 예약 불가 / 동시 예약 1건 / 금액은 서버 계산 / 남의 예약 접근 불가 / 중복 결제 무시
보고 형식:
| 규칙 | 망가뜨린 내용(한 줄) | 실패한 테스트 이름 | 결과(잡음/못 잡음) |
각 규칙마다 테스트 실행 출력 원문(통과·실패 개수가 나오는 마지막 부분)을 붙여.
규칙 하나 확인이 끝날 때마다 반드시 원래대로 되돌리고, 마지막에 git status 출력 원문을 붙여.
테스트 파일은 어떤 경우에도 수정하지 마. "못 잡음"이 나와도 고치지 말고 보고만 해.

🔍 읽는 포인트 : 마지막 세 줄이 가드레일입니다. 되돌리기 확인(git status) , 테스트 파일 수정 금지 , 고치지 말고 보고만 . 마지막 줄이 없으면 에이전트가 "못 잡음"을 보고 테스트를 덧붙이거나 고쳐서 표를 "잡음"으로 채울 수 있습니다.

(git status — 변경 이력을 기록하는 도구인 Git에게 "지금 바뀐 파일이 있나"를 묻는 명령입니다. Git은 18차시에서 자세히 다룹니다. 바뀐 파일이 없다고 나와야 정상입니다.)

받을 증거

  • 1단계: 인수 기준 ↔ 테스트 이름 짝 표, 그리고 짝 없는 항목 두 목록
  • 2단계: 규칙별 결과표 + 망가뜨린 상태에서의 테스트 실행 출력 원문 (실패 개수가 0이 아니어야 "잡음")
  • 마지막 git status 출력 원문 — "바뀐 파일 없음"
  • 전체 테스트를 두 번 연속 돌린 출력 원문 — 두 번의 결과가 같아야 함(결정적 조건)

내가 직접 확인할 것

볼 것이걸로 아는 것 / 왜 내가 보는가
"테스트가 없는 인수 기준" 목록안전망이 처음부터 없는 규칙. 인수 기준은 내가 쥔 것(README 9.2)이라 빠진 것도 내가 가장 잘 알아봄
결과표의 "못 잡음" 칸테스트는 있지만 형식만 갖춘 곳. 그 규칙은 다음 작업에서 테스트 보강을 따로 지시
실행 출력의 실패 개수"잡음"이라는 말 이 아니라 숫자로 확인. 실패 0인데 "잡음"이라 적혀 있으면 보고가 틀린 것
두 번 돌린 결과가 같은가결정적 조건. 다르면 "가끔 실패하는 테스트"가 숨어 있음
git status에 바뀐 파일이 없는가망가뜨린 코드가 남아 있지 않다
행동 시험: 자리가 0인 클래스를 직접 예약해 보기테스트가 지킨다는 규칙이 실제 화면에서도 지켜지는지. 테스트와 실제 동작이 어긋나면 테스트가 엉뚱한 것을 보고 있는 것

💡 이후 모든 작업에서 하나만 습관으로 남기세요. 기능을 고쳤는데 테스트 파일이 함께 바뀌었다면 , "어떤 테스트의 기대 결과를 바꿨고, 원래 기대가 왜 틀렸는지"를 묻습니다. 설명이 납득되지 않으면 승인하지 않습니다.


부록 A. 스스로 확인하기

#질문답이 있는 곳
1자동 테스트를 유와 종차로 정의하면? 수동 확인과 무엇이 다른가?1.1
2테스트가 3일차 모든 관문의 바닥인 이유는?1.2
3에이전트의 "테스트해 봤습니다"와 린트 통과가 자동 테스트가 아닌 이유는?1.3
4믿을 수 있는 테스트의 다섯 조건 중 나머지의 전제가 되는 것은?2.1
5형식만 갖춘 테스트와 믿을 수 있는 테스트는 실행 결과로 구별되는가?2.3
6형식만 갖춘 테스트 일곱 유형 중 세 가지를 예와 함께 말하면?3.1
7"테스트를 고쳐서 통과"가 특히 위험한 이유와 막는 방법은?3.2
8뮤테이션 발상의 네 단계와 "살아남았다"의 뜻은?3.3
9커버리지 100%인데 버그가 있을 수 있는 이유는?3.4
10클래스온에서 통합 테스트가 몸통인 이유는?4
11테스트 이름 목록을 구현 역할이 아니라 인수 기준에서 뽑아야 하는 이유는?5

부록 B. 자주 하는 실수

실수바로잡기
테스트 개수와 커버리지 숫자로 품질을 판단한다❌ 둘 다 형식만 갖춘 테스트로도 올라갑니다. 망가뜨려 보기 로 판단 (3.3, 3.4)
구현 에이전트가 자기 테스트를 쓰고 스스로 통과 판정한다⚠️ 테스트 이름 목록은 인수 기준에서 독립적으로 (5)
가끔 실패하는 테스트를 "다시 돌리면 돼"로 넘긴다❌ 결정적 조건 위반입니다. 곧 모두가 빨간불을 무시하게 됩니다 (2.1)
테스트가 실패하자 AI가 기댓값을 바꿨는데 알아채지 못한다⭕ 기능 변경에 테스트 파일이 같이 바뀌면 이유를 묻는다 (3.2, 6)
응답 숫자만 확인하고 DB 상태는 보지 않는다⚠️ 409를 돌려주면서 예약은 들어가 버릴 수 있습니다 (2.2)
망가뜨려 보기 후 원래대로 되돌렸는지 확인하지 않는다⭕ 마지막에 git status로 바뀐 파일이 없는지 (6)
클래스온 규칙을 DB를 가짜로 바꾼 단위 테스트로만 지킨다❌ "대상까지 가짜"가 됩니다. 통합 테스트로 (4)

부록 C. NotebookLM 복습 프롬프트

이 17차시 노트만 근거로 5문제를 내줘. 비전공자 기준으로.
"형식만 갖춘 테스트와 믿을 수 있는 테스트가 실행 결과로는 구별되지 않는 이유", "뮤테이션 발상", "커버리지의 함정"은 반드시 포함해줘.
답은 내가 답한 다음에 채점하고, 틀린 이유를 노트의 절 번호를 근거로 설명해줘.