AI 에이전트와 LLM이 소프트웨어 QA와 테스트를 어떻게 변화시키는지, 그리고 자동 QA가 릴리스 품질을 어떻게 끌어올릴 수 있는지에 대한 고찰.
antirez 15시간 전. 조회수 16442.
자동 프로그래밍은 특정한 사용 사례와 적절한 역량을 가진 사람의 손에서 소프트웨어 작성 속도를 극적으로 높여 준다. 내 경험상 그 결과물은 최고의 수작업 소프트웨어가 보여 주는 구조적 품질과 복잡성의 경제성에는 미치지 못한다. 그러나 모든 소프트웨어가 뛰어난 것은 아니며, 내 느낌으로는 자동 프로그래밍이 대체로, 그리고 잘 관리되기만 한다면, 무난하게 개발된 수작업 코드의 품질을 능가한다.
그럼에도 AI로 새로운 소프트웨어를 작성할 때는 품질과 시간 사이에 상충 관계가 있다. 내가 개발한 일부 프로젝트에서는 이 상충이 매우 극단적일 수 있는데, 몇 달이 걸릴 수 있는 프로젝트를 몇 주 만에 끝내는 식이다. 그러나 품질에 대한 타협 없이, 단지 더 강력한 새로운 방식으로 프로세스를 자동화할 수 있게 해 주는 영역들도 있다. 그런 영역 중 하나가 바로 소프트웨어 QA와 테스트다.
전통적으로 소프트웨어는 로컬 범위의 테스트와 통합 테스트로 구성된 테스트 스위트를 사용해 검증한다. Redis를 예로 들면, SET foo 10이 GET foo => 10으로 이어지는지 확인하는 것과, 이 경우에 복제가 제대로 동작하는지를 확인하는 것은 서로 다른 문제다. 그리고 보통 수동으로 실행되는 QA 패스가 뒤따르며, 이는 실행 가능한 테스트 스위트가 놓치는 구멍을 포착할 수 있다. 코드의 모든 줄을 커버한다고 해서 가능한 모든 상태를 커버하는 것은 아니라는 점은 잘 알려져 있다. 더구나 통합 테스트는 구조적으로 어렵다. 타이밍 이슈, 환경 구성, 그리고 시각적으로만 확인할 수 있고 자동으로 점검할 수 없는 특정한 품질 출력 때문에, 시간이나 물류상의 제약으로 실제로 활용되지 못하는 테스트 기회가 많이 남는다.
LLM은 기존 테스트 방법론 위에 QA를 수행하는 새로운 방식을 제공한다. 아이디어는 마크다운 파일 하나를 만들고, 그 안에서 AI 에이전트에게 QA 엔지니어로서 동작하며 새 릴리스에 대해 여러 수동 테스트를 수행하라고 요청하는 것이다. 예를 들어 DwarfStar(오픈 웨이트 LLM을 위한 추론 엔진)의 경우 나는 다음과 같은 접근을 사용한다. 마크다운 파일 안에서 에이전트는 이미 릴리스된 버전 위에 어떤 새로운 커밋이 추가되었는지 확인하라는 요청을 받는다. 그런 다음 모델에게 수행해야 할 항목 목록이 주어지는데, 예를 들면 다음과 같다:
이런 식이다. 특히 속도 회귀 부분에서는 이전에 기대되던 속도가 얼마였는지를 에이전트에게 알려줄 필요가 없다. 그것은 새 릴리스와 새로운 최적화에 따라 변하는 이동 목표이기 때문이다. 마찬가지로 분산 추론을 위한 통합 테스트도 많은 지시를 필요로 하지 않는다. 파일의 시작 부분에는 SSH 엔드포인트, 사용할 키, 경로 등이 적혀 있을 뿐이다.
에이전트는 긴 QA 활동 목록을 점검하되, 추가된 커밋을 고려하는 일을 특히 중요하게 여기도록 요청받는다. 즉 변경 사항을 먼저 살펴보고 무엇이 영향을 받을 수 있는지 식별한 다음, QA 패스가 특정 회귀를 찾는 방향으로 특화되도록 하는 것이다.
Redis Arrays의 경우에도 나는 비슷한 방법론을 사용했다. 에이전트에게 대규모 배열 기반 Redis 애플리케이션을 구축하게 하고, 복제와 영속성을 갖춘 프로덕션 환경을 설정하게 하며, 며칠 동안 많은 사용자가 애플리케이션을 사용하는 상황을 시뮬레이션하고, 이상한 점이 있는지 확인하게 했다.
이런 접근을 사용하는 테스트는 소프트웨어 품질의 보다 심리적인 측면으로도 확장될 수 있다. 예를 들어 사용자 관점에서 새 기능들 가운데 놀랍게 느껴질 수 있는 것, 문서화가 충분하지 않은 것, 또는 전반적으로 허술해 보이는 것을 모두 식별하도록 에이전트에게 요청할 수 있다. 이런 것들은 이전에는 모두 수동으로 수행해야 했고, 대부분의 경우 거의 생략되곤 했다.
나는 자동 QA의 도입이 새로운 소프트웨어 릴리스의 품질 기준을 끌어올릴 수 있으며, 어쩌면 자동 프로그래밍을 사용해 고속으로 생산된 코드의 낮은 품질을 부분적으로 보완할 수도 있다고 느낀다.