A new era for software testing

Salvatore Sanfilippo

소프트웨어 테스팅의 새로운 시대

자동 프로그래밍은 특정한 사용 사례에서, 그리고 제대로 다룰 줄 아는 사람의 손에서는 소프트웨어 작성 속도를 극적으로 높여줍니다. 제 경험상 그 결과물은 가장 뛰어나게 손으로 작성된 소프트웨어가 보여주는 구조적 품질이나 복잡성의 경제성에는 미치지 못합니다. 하지만 모든 소프트웨어가 뛰어난 수준인 것은 아니며, 제 느낌으로는 잘 관리된다는 전제 하에 자동 프로그래밍이 대부분의 경우 그럭저럭 잘 만들어진 수작업 코드의 품질은 뛰어넘습니다.

물론 AI로 새로운 소프트웨어를 작성할 때는 품질과 시간 사이의 트레이드오프가 존재합니다. 제가 진행한 일부 프로젝트에서는 이 트레이드오프가 극단적이어서, 몇 달이 걸릴 일을 몇 주 만에 끝내기도 했습니다. 하지만 LLM이 품질에 대한 타협 없이 프로세스 자동화를 위한 한층 더 강력한 방법을 새롭게 열어주는 영역도 있습니다. 그중 하나가 바로 소프트웨어 QA와 테스팅입니다.

전통적으로 소프트웨어는 로컬 범위의 테스트와 통합 테스트로 구성된 테스트 스위트를 이용해 테스트해 왔습니다( Redis를 예로 들면, SET foo 10을 실행했을 때 GET foo => 10으로 제대로 조회되는지를 테스트하는 것과, 그 상황에서 리플리케이션이 정상적으로 동작하는지를 테스트하는 것은 전혀 다른 차원의 문제입니다). 그리고 보통 수동으로 수행되는 QA 과정을 거치는데, 이는 실행 가능한 테스트 스위트가 놓치는 허점을 잡아낼 수 있습니다. 코드의 모든 라인을 커버한다고 해서 가능한 모든 상태를 커버하는 것은 아니라는 것은 잘 알려진 사실입니다. 게다가 통합 테스트는 구조적으로 어렵습니다. 타이밍 이슈나 환경 구성 문제가 많고, 시각적으로 직접 확인해야만 하고 자동으로 검증할 수 없는 품질 지표들도 있어, 시간이나 물리적 제약 때문에 제대로 활용하지 못하는 테스트 기회가 많이 남게 됩니다.

LLM은 기존의 테스팅 방법론 위에 새로운 QA 방식을 더할 수 있게 해줍니다. 아이디어는 AI 에이전트에게 QA 엔지니어 역할을 맡겨 새 릴리스에 대해 여러 수동 테스트를 수행하도록 요청하는 마크다운 파일을 만드는 것입니다. 예를 들어 DwarfStar(오픈 가중치 LLM을 위한 추론 엔진)의 경우 저는 다음과 같은 방식을 사용합니다. 마크다운 파일에서 에이전트에게 이미 릴리스된 버전 위에 새로 추가된 커밋이 무엇인지 확인하도록 합니다. 그리고 모델에게 수행해야 할 작업 목록을 알려줍니다. 예를 들면 다음과 같습니다.

  • MacBook A와 MacBook B에 걸쳐 분산 추론이 정상적으로 동작하는지 확인하고, 출력이 일관되는지, 두 머신에 있는 모든 GGUF 파일에서 추론이 정상 동작하는지 등을 점검한다. ...
  • 이번 릴리스에 속도 회귀가 없는지 확인한다.

등등 여러 항목이 이어집니다. 특히 속도 회귀를 확인하는 부분에서는 이전에 기대되던 속도가 얼마였는지 에이전트에게 일일이 알려줄 필요가 없다는 점이 주목할 만합니다. 새로운 릴리스와 최적화가 이어지면서 계속 바뀌는 움직이는 목표이기 때문입니다. 마찬가지로 분산 추론에 대한 통합 테스트도 많은 지시를 필요로 하지 않습니다. 파일 초반부에 SSH 엔드포인트와 사용할 키, 경로 등을 적어두면 그만입니다.

에이전트에게는 이 긴 QA 항목들을 *특히* 추가된 커밋을 염두에 두고 점검하도록 요청합니다. 변경 사항을 먼저 살펴보고 어떤 부분에 영향을 줄 수 있을지 파악하는 것부터 시작해, QA 과정이 특정한 회귀를 찾아내는 데 특화되도록 하는 것입니다.

Redis Arrays의 경우에는 비슷한 방법론을 사용해 에이전트에게 배열 기반의 대규모 Redis 애플리케이션을 구축하고, 리플리케이션과 영속성이 구성된 프로덕션 환경을 설정한 뒤, 수많은 사용자가 며칠간 애플리케이션을 사용하는 상황을 시뮬레이션하면서 이상 징후가 없는지 확인하도록 했습니다.

이러한 접근을 활용한 테스팅은 소프트웨어 품질의 보다 심리적인 측면으로 확장될 수도 있습니다. 에이전트에게 사용자의 관점에서 놀랍게 느껴지거나, 문서화가 부족하거나, 전반적으로 조잡해 보이는 모든 새로운 기능을 찾아내도록 요청하는 식입니다. 이전에는 모두 수동으로 수행해야 했고, 그래서 대부분 건너뛰기 일쑤였던 일들입니다.

자동화된 QA의 도입이 소프트웨어의 새로운 릴리스에 대한 품질 기준을 한층 높이고, 어쩌면 자동 프로그래밍으로 빠른 속도로 생산된 코드의 다소 낮은 품질을 부분적으로 보완해 줄 수 있을 것 같다는 느낌이 듭니다.

원문은 Salvatore Sanfilippo님이 에 게재했습니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.