• 게시 날짜
    2024 년 11 월 26 일
  • 공유

잘 설계되고 정확한 코드를 만드는 것은 모든 개발자의 목표입니다. 이를 달성하는 데 두드러지는 방법론 중 하나는 테스트 주도 개발(TDD)입니다. TDD는 코드를 설계하거나 작성하지 않지만, 반복적인 개발 주기에서 설계 결정에 대한 빠른 피드백을 받을 수 있는 소프트웨어 개발 방법론입니다. 

코딩 전이나 후에 단위 테스트를 작성하든, 전혀 테스트를 작성하지 않든 개발자의 선택에 달려 있습니다. 분명히, 테스트를 전혀 작성하지 않으면 프로덕션에서 중대한 상황이 발생하고, 개발자가 운이 좋으면 수동 테스트 단계에서 오류를 발견할 것입니다. 

코드를 완성한 후에 테스트를 작성하는 것이 테스트를 하지 않는 것보다 낫습니다. 저희를 포함한 대부분의 개발자는 코드를 먼저 적용한 다음 테스트를 작성합니다. 그럼에도 불구하고 작성된 코드는 더 나은 것이 아닙니다. 테스트 케이스를 잊어버리면 일부 기능적 오류가 발생합니다. 모든 코드에 대해 실패한 테스트 케이스를 작성한 다음 TDD 주기를 따라 해당 테스트를 통과시키는 코드를 추가하는 것이 훨씬 좋습니다.

현재 우리는 Generative AI를 사용하여 작업을 보다 자동화할 수 있는 방법에 대해 논의하고 있습니다. 이 작업에서 우리는 영감을 받은 새로운 실험을 소개합니다. Allen Helton의 블로그우리는 프로젝트에 대한 몇 가지 테스트 사례를 작성한 후 ChatGPT에 테스트 관련 코드를 생성하도록 요청했습니다. 

테스트 우선 개발을 위한 생성 AI 

수동 테스트에서 인적 오류가 발생할 가능성을 감안할 때, 다음과 같은 의문이 제기됩니다. Generative AI를 사용하여 TDD를 자동화하지 않는 이유는 무엇입니까?Generative AI는 단위 테스트와 해당 코드의 생성을 자동화하여 TDD에서 혁신적인 역할을 할 수 있습니다. 제안된 워크플로는 다음과 같습니다.

  1. 개발자가 작성한 테스트: 개발자는 코드에 대한 원하는 결과를 지정하여 초기 단위 테스트를 작성하면서 시작합니다.
  2. AI가 생성한 코드: 생성 AI는 이러한 단위 테스트를 읽고 통과하는 데 필요한 코드를 생성합니다. 코드가 성공적으로 실행되면 디스크에 저장됩니다. 그렇지 않으면 AI는 오류 보고서를 생성하고 올바른 코드를 다시 생성하려고 시도하여 테스트가 통과할 때까지 루프를 만듭니다. 이런 방식으로 AI를 통합함으로써 개발자는 코드가 철저히 테스트되고 검증되었는지 확인하여 오류 위험을 최소화할 수 있습니다.
에크란 레스미 2024-11-04 13.29.43.png

TDD에서 생성 AI를 사용하는 이점

코드 생성 및 테스트 프로세스를 자동화하면 개발 주기를 상당히 단축할 수 있습니다. 또한 테스트 사례와 코드 작성에서 인적 오류의 가능성을 줄입니다. 이를 수행하는 동안 모든 테스트가 포괄적이고 일관되게 적용되고 수동 작업 부하를 늘리지 않고도 개발 프로세스를 쉽게 확장할 수 있습니다.

잠재적인 과제 및 솔루션

TDD에 생성 AI를 통합하면 수많은 이점이 있지만, 어려움이 없는 것은 아닙니다. TDD를 위한 AI 시스템의 초기 설정은 복잡하고 시간이 많이 걸릴 수 있습니다. 개발자는 AI 도구를 효과적으로 사용하고 신뢰하기 위해 교육이 필요할 수 있습니다. 하지만 개발자가 처리할 준비가 되어 있어도 AI는 교육 데이터에 잘 표현되지 않은 고유하거나 극단적인 사례에 어려움을 겪을 수 있으므로 요청된 시나리오가 혼란스러울 수 있습니다. 생성 AI는 괜찮은 코드로 응답하지만 훌륭하고 최상의 선택은 아닙니다. 아직 코드가 피드백 메커니즘을 적용하지 않기 때문입니다. 훌륭한 코드를 생성하려면 개발자의 코드 검토 접근 방식과 같은 피드백 메커니즘을 AI에 적용해야 합니다. 적어도 지금은 AI를 인간의 감독과 결합하여 복잡한 시나리오를 처리할 수 있습니다.. :)

TDD에서 피드백 적용 생성 AI

에크란 레스미 2024-11-04 13.31.52.png

피드백 메커니즘

프로세스를 더욱 정교하게 다듬기 위해 피드백 메커니즘을 도입할 수 있습니다. 개발자는 단위 테스트를 작성하고 개발자 에이전트는 코드를 생성합니다. 코드 검토자 에이전트로 새로운 검토 계층이 추가되어 코드를 검토하고 개발자 에이전트에게 피드백을 제공합니다.

반복적인 개선

개발자 에이전트는 검토자 에이전트의 피드백을 기반으로 코드를 수정하고 검토를 위해 다시 제출합니다. 이 반복적인 프로세스는 코드가 검토를 성공적으로 통과할 때까지 계속됩니다.

최종 테스트

코드가 검토자 에이전트에 의해 승인되면 단위 테스트가 실행됩니다. 통과하면 코드가 저장됩니다. 실패하면 오류 보고서가 생성되고 프로세스는 코드 생성으로 돌아갑니다.

기본적으로 작업 흐름은 다음과 같습니다.

  1. 개발자는 단위 테스트를 작성합니다.
  2. AI는 이러한 테스트를 읽고 필요한 코드를 생성합니다.
  3. 테스트가 성공적으로 실행되면 코드가 저장됩니다. 그렇지 않으면 오류 보고서가 생성되고 AI는 루프에서 코드를 수정하려고 시도합니다.
  4. 이러한 초기 자동화는 오류가 발생하기 쉬운 코드를 생성할 수 있으며, 여기서 피드백 메커니즘이 작용합니다.
  5. 개발자는 단위 테스트를 작성하고, 개발자 에이전트는 필요한 코드와 메서드를 생성합니다.
  6. 코드 검토 에이전트는 코드를 검토하고 개발자 에이전트에게 피드백을 보냅니다.
  7. 개발자 에이전트는 피드백을 토대로 코드를 개선하고 검토를 위해 다시 제출합니다.
  8. 이러한 순환은 코드 검토자가 코드를 승인할 때까지 계속됩니다.
  9. 승인되면 단위 테스트가 실행됩니다. 성공하면 코드가 저장되고, 그렇지 않으면 오류 보고서가 생성되고 루프가 계속됩니다.

피드백 메커니즘을 통합함으로써 생성된 코드의 품질이 상당히 향상되어, 필요한 표준을 충족하고 모든 테스트를 안정적으로 통과할 수 있습니다.

맺음말

생성적 AI를 테스트 주도 개발(TDD)에 통합하면 소프트웨어 개발에 혁명을 일으킬 수 있는 잠재력이 있습니다. 단위 테스트와 해당 코드 생성을 자동화함으로써 개발자는 더 높은 코드 품질을 보장하고 오류를 줄이며 워크플로를 간소화할 수 있습니다. 극복해야 할 과제가 있지만 이점은 초기 장애물보다 훨씬 크기 때문에 코딩의 미래에 유망한 접근 방식입니다. 다음을 확인할 수 있습니다. 코더 AI 생성 AI를 활용한 프로그래밍 지원에 관심이 있다면 프로젝트에 참여하세요. 

향후 방향

우리는 이 접근 방식을 바탕으로 세 가지 항목을 구축할 계획입니다.

  • 언어 지원 확장: 현재는 Java에 초점을 맞추고 있지만, 이 방법론은 Python, JavaScript 등 다른 언어로도 확장될 수 있습니다.

  • 자동 테스트 생성: 개발자가 제공한 고수준 요구 사항을 기반으로 테스트를 작성하도록 생성 AI를 유도할 수 있습니다. 대신 테스트를 수동으로 작성해야 합니다. 

  • Agentic AI 팀 확장: 간단한 코드 검토자 너머로, 에지 케이스를 테스트하기 위한 QA 에이전트, 코드 성능을 최적화하기 위한 성능 에이전트 등 더욱 특화된 에이전트를 도입할 수 있습니다.

모든 소프트웨어 개발자가 더욱 견고하고 정확한 테스트 사례를 작성하는 데 시간을 투자하고 생성적 AI의 힘을 활용하여 고품질 코드를 생성하는 것이 좋습니다.