자동화된 프로세스는 머신 러닝(ML) 모델을 사용하여 코딩 표준에 대한 불일치 사항을 식별하고 보안 문제와 취약성을 감지합니다.
AI 코드 검토 툴은 종종 제안이나 자동화된 수정 사항을 제공하여 개발자가 시간을 절약하고 코드 품질을 향상하는 데 도움이 됩니다. 이는 개발 환경 및 버전 제어 시스템에 통합하여 지속적 통합 및 지속적 배포(CI/CD) 관행을 촉진할 수 있습니다. 이러한 툴의 예로는 GitHub Copilot, DeepCode, SonarQube 및 What Diff.가 있습니다.
끊임없이 변화하는 소프트웨어 개발 환경에는 고품질 코드베이스가 필요합니다. 따라서 프로젝트를 가속화하고 코드 변경을 효과적으로 관리하기 위해 오픈 소스 리포지토리로 전환하는 팀이 점점 더 많아지고 있습니다.
AI는 개발자가 코드 품질을 유지하고 궁극적으로 소프트웨어 개발의 번성하는 에코시스템을 지원하는 방식을 변화시키면서 코드 검토에 있어 혁신적인 역할을 하고 있습니다. AI 코드 검토는 생성형 AI를 사용하여 기존 코드 검토 프로세스를 개선할 수 있는 혁신적인 접근 방식입니다.
방대한 양의 오픈 소스 코드에서 학습할 수 있는 기능을 갖춘 AI 시스템은 패턴을 인식하고, 잠재적인 버그에 플래그를 지정하고, 개선 사항을 제안하여 협업과 지속적인 개선의 문화를 조성할 수 있습니다.
AI 코드 검토에는 네 가지 핵심 구성 요소가 있으며 모두 중요한 역할을 합니다.1
정적 코드 분석
동적 코드 분석
규칙 기반 시스템
자연어 처리(NLP) 및 대규모 언어 모델(LLM)
프로그램을 실행하기 전에 소스 코드를 분석하는 방법입니다. 실행하기 전에 문제나 오류를 식별하는 것이 목적이자 주요 이점입니다. 정적 코드 분석은 버그를 조기에 발견하고 보안 문제를 식별하며 유지 관리 가능성을 향상시킬 수 있으므로 코드 검토 프로세스의 중요한 구성 요소입니다.
정적 코드 분석 툴은 프로그래밍 언어 수준에서 소스 코드를 분석할 수 있으므로 더 복잡한 코드베이스에 특히 유용합니다. 적절한 툴을 사용하면 정적 코드 분석을 통해 수천 줄의 코드를 몇 초 만에 스캔할 수 있어 기업의 귀중한 시간과 리소스를 절약할 수 있습니다. 정적 코드 분석이 수행되면 AI 알고리즘은 이 정보를 바탕으로 개선 사항이나 새로운 작업 과정을 추천할 수 있습니다.
정적 코드 분석과 달리 동적 코드 분석은 잠재적인 문제나 보안 취약점이 있는지 코드를 테스트하거나 애플리케이션을 실행하도록 설계되었습니다. 이 방법의 장점은 소프트웨어가 실행되는 동안 문제를 테스트하고 코드가 정적일 때는 포착되지 않을 수 있는 문제를 찾을 수 있다는 것입니다.
동적 코드 분석은 동적 애플리케이션 보안 테스트(DSAT)라고도 합니다. 이러한 DSAT 툴에는 애플리케이션이 실행 중일 때 살펴볼 수 있는 알려진 취약점 사전이 있습니다. 이러한 툴은 입력에 대한 응답을 분석하고 모든 문제를 기록합니다. 동적 코드 분석 툴은 애플리케이션이 고객에게 제공되기 훨씬 전에 성능 병목 현상과 보안 취약점을 찾아내어 개발자가 안심할 수 있도록 지원합니다.
이 컴퓨터 시스템은 코드 분석을 위해 사전 정의된 규칙과 모범 사례를 사용합니다. 이 방법의 장점은 입력 데이터에 논리를 적용하여 결론에 도달하고 코드 검토 프로세스 전반에서 핵심적인 역할을 한다는 점입니다. 이 규칙은 코드가 업계 표준을 충족하고 회사 지침을 준수하는지 확인하는 데 도움이 됩니다.
이 규칙 기반 시스템은 코드 분석을 위한 일관된 기준을 설정하고 개발 팀에 신뢰할 수 있는 코드 분석 소스를 제공할 수 있습니다. 린터와 같은 툴은 코드에 구문 오류나 특정 코딩 스타일에서 벗어난 부분이 있는지 검사하고 애플리케이션을 수정하여 우수한 코드 품질을 보장할 수 있습니다.
대규모 코드 데이터 세트를 학습한 NLP 모델은 AI 코드 검토의 핵심이 됩니다. 이러한 모델은 문제나 비효율성을 나타낼 수 있는 코드의 패턴을 인식하는 방법을 학습하기 때문에 AI 코드 검토에 매우 중요합니다. 시간이 지남에 따라 사용하면 NLP가 오류를 잡아내고 더 자세한 추천을 하는 데 더 능숙해지기 시작할 것입니다.
이와 별도로, GPT-4와 같은 LLM이 코드 검토 툴에 통합되기 시작했습니다. LLM은 기존 머신 러닝 기술보다 더 복잡한 수준에서 코드의 구조와 논리를 이해할 수 있습니다. LLM 방법은 보다 미묘한 이상 징후와 오류를 식별할 수 있어 보다 철저한 코드 검토를 지원합니다.
watsonx Code Assistant: watsonx Code Assistant 솔루션은 신뢰와 보안의 원칙을 유지하면서 개발을 가속화하기 위해 생성형 AI를 사용합니다. 개발자는 watsonx Code Assistant를 사용하여 코드 생성, 코드 매칭 및 코드 현대화를 통해 오류를 줄이고, 학습 곡선을 최소화하며, 고품질 코드를 구축할 수 있습니다.
Codacy: Codacy는 JavaScript 및 Python과 같은 언어를 지원하는 자동화된 코드 검토를 제공하여 개발자가 프로젝트 전체에서 코드 품질을 유지하는 데 도움이 됩니다. 온보딩 프로세스는 소프트웨어 워크플로에 원활하게 통합되도록 설계되어 팀이 문제를 조기에 파악할 수 있습니다.
DeepCode: DeepCode는 AI를 사용하여 실시간으로 코드를 분석하여 오픈 소스 프로젝트에 실행 가능 인사이트를 제공합니다. 이 툴은 일반적인 함정을 식별하고 소프트웨어 엔지니어링의 모범 사례를 홍보하여 신규 개발자의 온보딩 경험을 향상시킵니다.
Bito AI: Bito AI는 직관적인 인터페이스와 AI 기반 코드 검토를 통해 소프트웨어 엔지니어링 팀의 온보딩을 간소화하는 데 중점을 둡니다. 즉각적인 피드백과 실행 가능한 권장 사항을 제공하고 새로운 팀원이 회사의 코딩 표준 및 모범 사례에 빠르게 적응할 수 있도록 도와줍니다.
PullRequest: PullRequest는 AI 기반 인사이트와 인간의 전문 지식을 모두 제공하여 소프트웨어 엔지니어링 팀이 원활하게 온보딩할 수 있도록 돕습니다. 이 플랫폼은 협업과 지식 공유를 장려하여 신입 개발자가 경험 검토자로부터 배울 수 있도록 장려합니다.
Coderabbit: Coderabbit은 AI 툴을 사용하여 분석과 명확한 피드백을 제공하는 AI 코드 검토 플랫폼입니다. 인간이 수행하는 것과 같은 검토를 제공하며 모든 프로그래밍 언어에서 작동하므로 사용자 정의가 가능합니다.
AI 기반 코드 검토는 조직과 개발 팀에 다음과 같은 다양한 이점을 제공할 수 있습니다.
AI 코드 검토의 주요 이점 중 하나는 효율성입니다. 기존의 코드 검토 프로세스는 시간이 오래 걸리고 리소스도 많이 소요될 수 있습니다. AI와 같은 자동화된 코드 검토를 사용하면 프로세스를 몇 분 안에 완료할 수 있습니다. 앞서 설명한 AI 코드 검토의 각 방법은 처음부터 끝까지 애플리케이션 개발 프로세스의 중요한 부분입니다.
이러한 이점의 예로는 IBM watsonx Code Assistant for Z를 들 수 있습니다. 이 생성형 AI 지원 제품은 메인프레임 애플리케이션 수명 주기를 가속화하고 현대화를 간소화하여 보다 효율적이고 비용 효율적으로 만들 수 있도록 구축되었습니다. 개발자는 선택한 요소를 자동으로 리팩터링하고, 코드를 최적화하며, COBOL에서 Java로의 변환을 통해 현대화할 수 있습니다.2
인간 코드 검토 팀의 구성원은 피로나 편향과 같은 외부 영향을 받을 수 있으며, 이로 인해 일관되지 않은 검토가 발생할 수 있습니다. AI는 코드의 양이나 복잡성에 관계없이 정확하고 일관되게 코드를 분석할 수 있어 AI 코드 검토에 중요한 이점을 제공합니다. 코드 검토는 시간이 많이 소요되는 프로세스이지만, 생성형 AI 툴과 같은 고급 기술을 적절히 활용하면 이점을 얻을 수 있습니다.
일관성의 한 예로는 115개의 프로그래밍 언어와 1조 6,300억 개의 토큰으로 구성된 대규모 코드 기반으로 학습된 IBM의 Granite 모델이 있습니다. AI 코드 검토 방법은 간단하며 다양한 데이터 세트를 사용하여 훈련됩니다. 또한 훈련에 사용되는 Granite 모델은 설계된 거버넌스, 위험 및 규정 준수(GRC) 검토 프로세스를 거칩니다.
AI 기반 코드 검토 도구는 기술을 기반으로 하기 때문에 코드 냄새와 같이 수동 검토로는 간과하기 쉬운 심층적인 오류를 실시간으로 감지하는 데 매우 효과적입니다. 때로는 특정 코드 검토 방법을 사용하지 않는 한 미묘하거나 특정 조건에서만 발생하기 때문에 놓치는 경우가 있습니다.
한 가지 예로 IBM Research는 IT 전문가가 IT 문제에 대한 해결책을 찾는 속도를 높이기 위해 IBM AIOps Insight 플랫폼을 개선했습니다. AIOps Insight는 LLM과 생성형 AI의 강력한 기능을 통해 고객의 IT 환경에서 데이터를 수집하고 데이터에서 상관관계를 찾아 잠재적인 문제를 식별할 수 있습니다.
AI 코드 검토의 장점은 장기적으로 코딩 기술을 향상시키려는 개발자에게 귀중한 학습 기회가 될 수 있다는 것입니다. AI의 가장 큰 장점은 개발자에게 많은 피드백과 권장 사항을 제공하여 궁극적으로 개발 워크플로를 바꾸고 개발자가 양질의 코드를 생성하는 방법을 학습하는 데 도움이 된다는 것입니다.
이전 예제를 기반으로, IBM AIOps Insight는 인간의 인사이트와 AI 기반 코딩을 결합할 수 있습니다. 개발자는 지능형 문제 해결 모듈의 도움으로 시스템 속도 저하 또는 기술적 문제의 원인을 추적하는 데 필요한 조치를 취할 수 있습니다. 따라서 개발자가 문제 해결을 수행하기 위해 자체 스크립트를 작성할 필요가 없습니다.
개발자는 코드 검토 프로세스를 간소화하기 위해 AI 툴에 과도하게 의존하게 될 수 있으며, 이로 인해 개인의 전문 지식과 비판적 사고의 활용이 줄어들 수 있습니다. 이러한 의존도는 개발자가 사람의 감독이 필요한 더 심층적인 문제를 간과하여 확인되지 않은 기술 부채를 초래할 수 있습니다.
이러한 문제를 극복하는 방법은 코드 검토 프로세스에 윤리적 기준을 마련하고 모든 개발자가 이러한 규칙을 준수하도록 하는 것입니다. 조직은 오용을 방지하기 위해 경계를 설정하고 윤리와 속도 사이의 균형을 유지하도록 노력해야 합니다. 가장 중요한 것은 여전히 사람이 코드 검토에서 가장 중요한 요소이며, AI는 프로세스를 보완할 뿐이라는 점입니다.
AI 툴은 API와 전체 아키텍처의 복잡성을 포함하여 프로젝트의 특정 컨텍스트에 어려움을 겪는 경우가 많습니다. 컨텍스트에 대한 이해가 부족하면 코드 품질을 제대로 검증하지 못하고 프로젝트 목표에 부합하는 최적화 기회를 놓칠 수 있습니다.
데이터의 양이 많을 때는 조직이 타기팅하려는 모든 그룹을 대표할 수 있는 다양한 학습 데이터 세트를 사용하는 것이 중요합니다. 이러한 한계를 극복하는 또 다른 방법은 자동화된 모니터링을 통해 AI 시스템의 편향성을 정기적으로 점검하고, 생성형 AI가 따라야 할 엄격한 가이드라인을 설정하는 것입니다.
AI 코드 검토 시스템은 오탐을 생성하여 코드를 문제가 있거나 오탐으로 잘못 플래그 지정하여 실제 결함을 놓칠 수 있습니다. 이러한 부정확성은 코드 검토 프로세스를 복잡하게 만들어 불필요한 수정이나 해결되지 않은 문제에 시간을 낭비하여 기술 부채를 증가시키는 원인이 될 수 있습니다.
이 문제에 대한 가능한 해결책은 ML 알고리즘을 사용하여 대량의 데이터를 모니터링하고 시간을 들여 각 메트릭의 작동 방식을 학습하는 것입니다. 참조할 기준선이 있으면 잘못된 결과를 줄일 수 있고 궁극적으로 개발자가 오탐에 대한 심각도 수준을 조정하는 데 도움이 됩니다. 이와는 별도로 이러한 AI 코드 검토 문제를 극복하는 방법은 동일한 데이터 세트에서 모델을 재훈련하되 이전 결과와 더 잘 일치하도록 아웃풋 값을 변경하는 것입니다.
AI 코드 검토를 시작하면 팀이 높은 코드 품질과 효율성을 유지할 수 있으므로 소프트웨어 개발 프로세스를 크게 개선할 수 있습니다. AI 기반 툴을 비즈니스 코드 검토 워크플로에 효과적으로 통합하기 위한 몇 가지 일반적인 단계가 있습니다.3
올바른 AI 코드 검토 툴 선택: 먼저 조직의 요구 사항에 맞는 AI 코드 검토 툴을 선택하세요. 널리 사용되는 많은 옵션은 여러 프로그래밍 언어 지원 및 기존 워크플로와의 통합을 포함하여 다양한 기능을 제공합니다. 조직은 코드 복잡성, 중복률 및 코딩 표준 준수와 같은 코드 품질을 평가하기 위한 메트릭을 제공하는 툴을 찾아야 합니다. 이러한 메트릭은 조직이 개발 프로세스에 대한 벤치마크를 설정하는 데 도움이 됩니다.
온보딩 및 구성 설정: 툴을 선택한 후 다음 단계는 팀을 온보딩하는 것입니다. 이를 위해서는 모든 사람이 툴의 특징과 능력을 숙지할 수 있도록 명확한 문서화와 교육 세션이 필요합니다. 조직에서는 코딩 표준 및 특정 프로젝트 요구 사항에 맞게 툴을 구성해야 하며, 여기에는 특정 메트릭에 대한 사용자 정의 규칙이나 임계값을 설정하는 것이 포함될 수 있습니다.
검토 프로세스에 AI 통합: 다음 단계는 AI 툴을 조직의 기존 코드 검토 프로세스에 통합하는 것입니다. AI는 분석을 기반으로 검토 의견을 생성하여 잠재적인 문제를 강조하고 개선 사항을 제안합니다. 이 프로세스는 검토 프로세스를 간소화할 뿐만 아니라 개발자가 시간이 지남에 따라 피드백을 통해 학습할 수 있도록 해줍니다.
메트릭을 활용하여 개선 추진: 조직에서는 AI 코드 검토에서 정보를 얻고 해당 메트릭을 사용하여 팀의 성능을 추적해야 합니다. 개발팀은 시간 경과에 따른 코드 품질 트렌드를 모니터링하여 개선이 필요한 부분을 파악할 수 있습니다. 또한 팀은 팀 회의 중에 이러한 인사이트를 활용하여 반복되는 문제를 해결하고 코딩 관행을 개선하는 방법에 대한 아이디어를 낼 수 있습니다.
AI와 사람의 인사이트 간의 균형 맞추기: AI 기반 코드 검토 툴은 코드 검토 프로세스를 크게 개선할 수 있지만, 자동화된 피드백과 사람의 인사이트가 균형을 이루는 것이 중요합니다. 조직은 팀원들이 AI가 생성한 피드백을 검토하고 자신의 관점을 제공하도록 장려해야 합니다. 이러한 협업적 접근 방식은 후기 프로세스를 강화하고 팀원들의 학습 문화와 지속적인 개선을 촉진할 수 있습니다.
1. AI 코드 검토: 작동 원리 및 알아야 할 5가지 도구, Swim, 2024년 10월(ibm.com 외부 링크)
2. 소프트웨어가 세상을 집어삼켰습니다. 이제 어떻게 해야 할까요?, IBM 블로그, 2024년 1월 17일
3. AI 기반 검토 및 평가를 통한 코드 품질 향상, Medium, 2024년 3월 29일(ibm.com 외부 링크)