AI 시대, 테스트 코드는 누가 쓸까?
테스트 코드. 개발자라면 사랑과 증오 사이에서 끊임없이 갈등하는 주제죠. AI 시대가 열리면서 이 질문이 새로워졌습니다. 앞으로 테스트 코드는 누가 쓰게 될까요?
테스트 코드의 딜레마
솔직히 고백하면, 테스트 코드를 좋아하는 개발자는 많지 않습니다.
- 시간이 오래 걸린다
- 기능 구현보다 재미가 없다
- 코드가 바뀌면 테스트도 고쳐야 한다
- "돌아가면 된 거 아니야?"라는 유혹
하지만 테스트 코드가 없으면? 나중에 반드시 후회합니다. 리팩토링할 때 무섭고, 버그 수정할 때 불안하고, 새 기능 추가할 때 조마조마하죠.
AI가 테스트 코드를 쓴다면
지금도 AI는 꽤 괜찮은 테스트 코드를 만들어냅니다.
// Claude/GPT에게 "이 함수의 테스트 코드를 짜줘"라고 하면
// 엣지 케이스까지 고려한 테스트를 몇 초 만에 뽑아줍니다
특히 단위 테스트는 AI가 정말 잘합니다. 입력-출력이 명확하고, 패턴이 정해져 있으니까요.
그런데...
AI가 만든 테스트 코드를 그대로 쓰면 어떤 문제가 생길까요?
1. 무엇을 테스트할지 모르는 문제
AI는 함수의 동작을 테스트할 수 있지만, "비즈니스적으로 중요한 것"이 무엇인지는 인간이 정해야 합니다. 결제 로직에서 소수점 반올림이 중요한지, 로깅이 중요한지, AI는 모릅니다.
2. 거짓 양성의 함정
AI가 만든 테스트가 통과한다고 해서, 실제로 의미 있는 검증을 하는 건 아닙니다. 테스트 자체가 잘못되어 있을 수도 있죠. "항상 통과하는 테스트"는 테스트가 아닙니다.
3. 맥락 부족
프로젝트 전체를 이해하지 못하면, 통합 테스트나 E2E 테스트를 제대로 짤 수 없습니다. 이 모듈이 저 모듈에 어떤 영향을 주는지, AI는 아직 완벽히 파악하지 못합니다.
현실적인 접근
그래서 지금은 이런 분업이 현실적입니다.
- AI가 한다: 단위 테스트, 반복적인 테스트 케이스 생성, 엣지 케이스 발견
- 인간이 한다: 무엇을 테스트할지 결정, 비즈니스 로직 검증, 테스트 품질 리뷰
AI가 초안을 쓰고, 인간이 다듬는 방식이죠. 코드 리뷰와 비슷합니다.
앞으로는?
시간이 지나면 AI가 더 많은 부분을 담당할 겁니다.
- 코드를 읽고 "이건 테스트가 필요해"라고 스스로 판단
- 프로젝트 전체 맥락을 이해하고 통합 테스트 설계
- 테스트 커버리지를 보고 빠진 부분을 제안
하지만 여전히 인간의 역할은 남습니다. "이 기능이 실패하면 어떤 일이 벌어지는가?"를 정의하는 건 비즈니스 담당자나 개발자의 몫이니까요.
결론
테스트 코드는 이제 인간과 AI의 협업 영역입니다.
AI가 다 써주는 날이 올까요? 아마도. 하지만 그 전에는, AI가 80%를 쓰고 인간이 핵심 20%를 책임지는 모습이 될 것 같습니다.
여러분은 테스트 코드를 어떻게 작성하시나요? AI의 도움을 받으시나요, 아니면 여전히 직접 쓰시나요?
Upvoted! Thank you for supporting witness @jswit.