GN⁺: 메타의 새로운 LLM 기반 시험 생성기
(read.engineerscodex.com)Meta의 새로운 LLM 기반 테스트 생성기는 개발의 미래를 엿볼 수 있는 기회
- Meta는 "Automated Unit Test Improvement using Large Language Models at Meta"라는 논문을 발표함.
- 이 논문은 AI를 사용하여 개발 속도를 높이고 소프트웨어의 버그를 줄이는 방법을 보여줌.
- LLM을 개발자의 워크플로우에 통합하면서, 현재 코드 커버리지를 개선하는 정확하고 완전한 소프트웨어 개선안을 제안함.
주요 포인트
- TestGen-LLM은 'Assured LLM-based Software Engineering' (Assured LLMSE) 접근 방식을 사용함.
- 여러 LLM, 프롬프트, 하이퍼파라미터를 사용하여 코드 개선안을 생성하고, 최선의 개선안을 선택하는 앙상블 접근법을 사용함.
- TestGen-LLM은 기존의 인간이 작성한 테스트를 개선하는 데 특별히 설계되었음.
통계
- Instagram의 Reels와 Stories 제품 평가에서 TestGen-LLM이 생성한 테스트 케이스의 75%가 정상적으로 빌드되었고, 57%가 신뢰성 있게 통과했으며, 25%가 커버리지를 증가시킴.
- TestGen-LLM은 적용된 모든 클래스의 10%를 개선할 수 있었고, 개발자들이 73%의 테스트 개선안을 수용하여 프로덕션에 적용함.
- Meta 엔지니어들이 Instagram의 테스트 커버리지를 늘리기 위해 테스트를 생성하는 "test-a-thon"에서 TestGen-LLM 테스트가 추가한 코드 라인의 중간값은 2.5였음.
실천 가능한 인사이트
- LLM을 사용하여 개발 생산성과 소프트웨어 신뢰성을 효율적으로 향상시킬 수 있는 좋은 예시임.
- LLM의 진정한 가치는 예상치 못한 엣지 케이스를 찾고 잡는 데 있음.
- LLM을 생산에 사용하기 위해서는 오케스트레이션, 파이프라인, 처리가 필요함.
TestGen-LLM 작동 방식
- TestGen-LLM은 Meta의 내부 LLM에 의해 생성된 후보 솔루션에 일련의 의미론적 필터를 적용하여 가장 가치 있는 테스트만 보존함.
- 필터 1: 빌드 가능성, 필터 2: 실행(테스트 통과 여부), 필터 3: 변덕스러움, 필터 4: 커버리지 개선.
- 이러한 처리 필터는 테스트 스위트의 개선을 보장함.
결론
- 이 논문은 많은 개발자들이 이미 LLM을 사용하여 소프트웨어 신뢰성 공간에서 LLM의 진보를 추적하는 좋은 방법임.
- LLM이 점점 더 복잡한 소프트웨어 시스템에서 버그를 찾고 테스트할 수 있게 될 것임.
GN⁺의 의견
- 이 기사는 인공지능이 소프트웨어 개발의 미래에 어떤 영향을 미칠 수 있는지에 대한 흥미로운 통찰을 제공함.
- TestGen-LLM과 같은 도구는 개발자의 작업을 자동화하고 효율성을 높이는 데 큰 도움이 될 수 있음.
- 이러한 기술의 발전은 소프트웨어 개발의 복잡성을 줄이고, 품질을 향상시키며, 개발자의 시간을 절약하는 방향으로 나아가고 있음.
Hacker News 의견
- LLM(대규모 언어 모델)을 사용하여 테스트 코드를 작성하는 것이 구현보다 우선하는 경향이 흥미롭다는 의견이 있음. 테스트는 시스템이 어떻게 동작해야 하는지를 설명하는 역할을 하기 때문에, 인간이 정의해야 할 부분이라는 시각이 있음. 그러나 LLM이 명시되지 않은 영역을 지적하는 데 유용할 수 있으며, 이러한 영역에 대한 단위 테스트를 제안하는 것이 LLM의 적절한 사용 방법일 수 있음.
- 메타의 TestGen-LLM이 생성한 테스트 케이스 중 대부분은 단 2.5줄의 코드만을 추가로 커버했지만, 한 테스트 케이스는 무려 1326줄을 커버했다는 블로그 포스트에 대한 비판이 있음. 이는 예외적인 경우로, 대부분의 테스트 케이스가 기대하는 코드 커버리지보다 훨씬 낮다는 점을 논문에서 명시하고 있음. 논문의 저자들은 이를 '잭팟'이라고 표현하며, 이러한 결과가 일반적이지 않음을 분명히 함.
- 좋은 테스트 작성이 어렵다는 의견이 있음. 코드 커버리지가 반드시 좋은 것만은 아니며, 너무 많은 테스트를 작성하면 프로그램을 경직시킬 수 있음. LLM을 사용하여 테스트를 재생성하는 것이 진전처럼 보일 수 있지만, 이는 결국 변경 감지기 프로그램을 만드는 것에 불과할 수 있음.
- TestGen-LLM에 대한 논문의 요약이 실제 내용과 일치하지 않는다는 지적이 있음. 논문의 요약은 테스트 케이스에 대한 성공률을 언급하지만, 실제 보고서는 테스트 클래스에 대한 성공률을 다루고 있으며, 이는 매우 다른 진술임. 결론에서도 이러한 차이를 잘못 표현하고 있음.
- LLM으로 생성된 코드를 유지보수해야 할 미래의 개발자들에 대한 동정이 있음. 이러한 코드는 관리하기 어려울 것이라는 우려가 있음.
- LLM으로 생성된 테스트 코드가 개발자에게 적대적인 환경을 만들 수 있다는 우려가 있음. 관리가 어려운 LLM 생성 테스트 코드를 매번 승인받아야 하는 상황이 발생할 수 있음. 테스트 작성이 가속화될 수는 있지만, 유지보수는 반드시 쉬워지는 것은 아님. 테스트는 코드 설계를 검토하는 데 도움이 되며, 테스트가 쉽지 않다면 좋은 설계가 아닐 수 있음. 테스트는 자동화된 안심을 제공하고 잠재적인 오류를 방지하는 역할을 하지만, 커버리지가 높아질수록 투자 대비 효용은 감소함. LLM은 경험이 풍부한 개발자가 무엇을 테스트해야 할지 이미 알고 있는 경우에만 시간을 절약할 수 있음.
- GPT-4를 사용하여 TypeScript 모듈에 대한 단위 테스트를 생성해본 경험이 있으며, 이는 성공적으로 작동하는 테스트를 만들어냈다는 경험담이 있음.
- AI가 어떤 테스트를 작성해야 하는지 어떻게 알 수 있는지에 대한 의문이 있음. AI가 소프트웨어 개발을 돕는 가장 좋은 방법은 프로그래머가 코드에 대해 질문할 때 AI가 답변을 제공하는 것이며, 때로는 코드 제안을 포함할 수도 있고 그렇지 않을 수도 있음. AI는 코드를 이해하고 개선하는 방법을 이해하는 데 도움을 줄 수 있어야 함.
- AI 코드에 대한 의견은 실제 도구를 사용하고 잘 알고 있는 코드베이스에서 출력을 검토해본 실용적인 경험이 없으면 가치 있는 의견을 가질 수 없다는 의견이 있음. AI 코드는 매우 정치적인 주제이며, 많은 사람들이 강한 의견을 가지고 있음. 그러나 실제로 시도해보고 싶은 욕구가 있음. 이러한 기술은 개발 비용이 매우 높기 때문에, AI 도구가 크게 개선되지 않는다면 그 비용을 정당화하기 어려울 수 있음. 그럼에도 불구하고 미래에 달성될 것에 대해 낙관적임.
- 논문의 오디오북 요약 링크가 제공됨.