GN⁺: 구글 소프트웨어 엔지니어링의 AI: 진전과 향후 전망
(research.google)- 2019년에는 대부분의 소프트웨어 엔지니어가 머신러닝이 자신들의 업무에 어떤 도움이 될지 상상하기 어려웠음
- 그러나 2024년에는 AI가 코드 작성을 돕는 방식에 대해 널리 열광하고 있음
- 많은 엔지니어들이 회사 내부 도구나 상용 제품에서 ML 기반 자동완성을 사용해봤음
- 이 글에서는 구글의 내부 소프트웨어 개발 도구의 지속적인 변화 속에서 최신 AI 기반 개선 사항을 소개함
- 향후 5년 동안 예상되는 추가 변화에 대해서도 논의함
- 전문적인 소프트웨어 개발에 가치를 전달하는 AI 제품을 구축하는 방법론도 제시함
- 이 팀은 IDE, 코드 리뷰, 코드 검색 등 구글 엔지니어들이 대부분의 시간을 보내는 소프트웨어 개발 환경을 담당함
- 이러한 개선이 개발자 생산성과 만족도에 직접적인 영향을 미칠 수 있음을 보여줌
도전과제
- AI 기술이 빠르게 진화하고 있어 어떤 아이디어를 먼저 탐색할지 예측하기 어려운 것이 이 영역에서의 지속적인 도전 과제임
- 기술적으로 실현 가능한 데모와 성공적인 제품화 사이에는 종종 상당한 격차가 존재함
- 아이디어를 제품에 배포하는 접근 방식에는 세 가지 지침이 있음:
- 기술적 실현 가능성과 영향력에 따라 우선순위를 정함: 기술적 실현 가능성이 이미 입증되었고 엔지니어의 워크플로우에 높은 (측정 가능한) 영향을 미칠 것으로 예상되는 아이디어에 대해 작업함
- 신속하게 학습하여 UX와 모델 품질을 개선함: 개발자의 생산성과 행복을 지키면서 신속하게 반복하고 얻은 교훈을 추출하는 데 중점을 둠. 사용자 경험은 모델 품질만큼 중요함
- 효과 측정: 목표는 생산성과 만족도 지표를 높이는 것이므로 이러한 지표를 광범위하게 모니터링해야 함
LLM을 소프트웨어 개발에 적용하기
- 트랜스포머 아키텍처의 출현과 함께 LLM을 소프트웨어 개발에 적용하는 방법을 모색하기 시작함
- LLM 기반 인라인 코드 완성은 소프트웨어 개발에 적용되는 AI의 가장 인기 있는 응용 프로그램임
- 코드 자체를 훈련 데이터로 사용하는 것은 LLM 기술의 자연스러운 응용임
- UX는 개발자에게 자연스럽게 느껴짐. 단어 수준 자동완성은 오랜 기간 IDE의 핵심 기능이었기 때문임
- AI로 작성된 새 문자의 비율과 같은 영향력에 대한 대략적인 측정이 가능함
- 이러한 이유로 LLM의 이 응용 프로그램이 가장 먼저 배포되는 것이 이치에 맞음
- 이전 블로그에서는 코드 완성으로 사용자 경험을 개선하는 방법과 영향을 측정하는 방법을 설명함
- 그 이후로 다른 기업 환경과 유사한 지속적인 빠른 성장을 보였음
- 소프트웨어 엔지니어의 수용률은 37%이며, 코드 문자의 50%를 완성하는 데 도움을 줌
- 주요 개선 사항은 모델과 UX 모두에서 나왔음
- 이 주기는 합성 공식이 아닌 실제 행동에서 배우는 데 필수적임
- 다양한 도구에서 얻은 기록 데이터와 사용자 선호도 및 요구 사항을 캡처한 사용 데이터를 활용하여 코딩 도구(예: IDE)의 AI 기반 기능을 개선함
- AI 지원을 통해 생성된 코드 비율이 지속적으로 증가함
- 이는 AI 기반 제안에서 수락된 문자 수를 수동으로 입력한 문자 수와 AI 기반 제안에서 수락된 문자 수의 합으로 나눈 값으로 정의됨
- 주목할 점은 복사-붙여넣기에서 가져온 문자는 분모에 포함되지 않는다는 것임
- 여러 도구에서 오랜 기간 동안 큐레이션해온 내부 소프트웨어 엔지니어링 활동에 대한 방대하고 고품질의 로그를 사용함
- 이 데이터를 통해 세분화된 코드 편집, 빌드 결과, 빌드 문제 해결을 위한 편집, 코드 복사-붙여넣기 작업, 붙여넣은 코드 수정, 코드 검토, 검토자 문제 해결을 위한 편집, 저장소에 변경 사항 제출 등을 표현할 수 있음
- 훈련 데이터는 입력과 출력 모두에서 작업별 주석이 달린 정렬된 코드 말뭉치임
- 다음으로 중요한 배포는 코드 리뷰 의견 해결(현재 8% 이상이 AI 기반 지원으로 처리됨)과 붙여넣은 코드를 주변 컨텍스트에 자동으로 적응시키는 것(현재 IDE에서 코드의 약 2%를 차지함)이었음
- 추가 배포에는 자연어로 IDE에 코드 편집을 지시하고 빌드 실패에 대한 수정 사항을 예측하는 것이 포함됨
- 유사한 패턴을 따르는 코드 가독성을 위한 팁 예측과 같은 다른 응용 프로그램도 가능함
- 함께 이러한 배포된 응용 프로그램은 Google에서 성공적이고 많이 사용되는 응용 프로그램이었으며, 실제 산업 환경에서 생산성에 측정 가능한 영향을 미쳤음
배운 것들
- 현재까지의 작업을 통해 몇 가지 사실을 배웠음:
- 사용자의 워크플로우에 자연스럽게 녹아드는 UX로 가장 높은 영향력을 달성함. 위의 모든 예에서 사용자에게 제안이 제시되어 한 번의 탭이나 클릭으로 워크플로우의 다음 단계로 이동함. 사용자가 기능을 트리거해야 한다는 것을 기억하도록 요구하는 실험은 확장하지 못했음
- AI 기반 제안을 통해 코드 작성자가 점점 더 리뷰어가 되고 있음을 관찰함. 리뷰 비용과 부가 가치 사이의 균형을 찾는 것이 중요함. 일반적으로 수용률 목표로 절충안을 해결함
- 오프라인 메트릭은 종종 사용자 가치의 대략적인 대리자에 불과하므로 온라인 A/B 실험을 통한 신속한 반복이 핵심임. AI 기반 기능을 내부 도구에 노출함으로써 쉽게 출시 및 반복하고, 사용 데이터를 측정하며, UX 리서치를 통해 사용자에게 직접 경험을 물어볼 수 있다는 점에서 큰 이점이 있음
- 우리 기능과의 상호 작용을 포함하여 소프트웨어 도구 전반에 걸친 Google 엔지니어의 활동에서 얻은 고품질 데이터는 모델 품질에 필수적임
- UX와 모델 개선을 활용하여 중간 단계의 병목 현상을 제거하면서, 기회(대부분 사용자 활동, 아래 깔때기 상단에 표시됨)에서 영향(적용된 AI 지원, 깔때기 하단)까지의 전환을 최적화하는 것이 중요함
What's Next
- 지금까지의 성공에 고무되어 최신 기반 모델(Gemini 시리즈)을 개발자 데이터(위에서 언급한 DIDACT의 일부)와 결합하여 Google의 소프트웨어 엔지니어링에 ML을 적용하는 기존 및 새로운 애플리케이션에 힘을 실어주는 데 주력하고 있음
- 업계 전반에 걸쳐 ML 기반 코드 완성은 소프트웨어 개발자에게 큰 도움을 제공했음
- 코드 생성을 개선할 기회는 여전히 있지만, 다음 단계의 혜택은 테스트, 코드 이해 및 코드 유지 관리와 같은 더 광범위한 소프트웨어 엔지니어링 활동에서 ML 지원으로부터 나올 것으로 기대됨
- 후자는 엔터프라이즈 환경에서 특히 관심이 높음
- 이러한 기회는 우리 자신의 진행 중인 작업에 정보를 제공함
- 업계에서 볼 수 있는 두 가지 트렌드를 강조함:
- 인간-컴퓨터 상호 작용은 일반적인 양식으로 자연어 쪽으로 이동했으며, 소프트웨어 엔지니어링 작업에 대한 인터페이스로 언어를 사용하고 IDE에 통합된 소프트웨어 개발자의 정보 요구에 대한 게이트웨이로 사용하는 방향으로 전환되고 있음
- 문제 진단부터 수정 사항 적용까지 대규모 작업의 ML 기반 자동화는 초기 실현 가능성에 대한 증거를 보여주기 시작했음
- 이러한 가능성은 에이전트와 도구 사용의 혁신에 의해 주도되며, 이는 더 큰 작업을 수행하기 위해 하나 이상의 LLM을 구성 요소로 사용하는 시스템을 구축할 수 있게 해줌
- 이러한 차세대 기능을 향한 위의 성공을 확장하기 위해, 이 주제에 대해 연구하는 실무자와 연구자 커뮤니티는 실용적인 엔지니어링 작업을 향해 분야를 이동하는 데 도움이 되는 공통 벤치마크의 혜택을 받을 수 있음
- 지금까지 벤치마크는 주로 코드 생성(예: HumanEval) 중심이었음
- 그러나 엔터프라이즈 환경에서는 코드 마이그레이션 및 프로덕션 디버깅과 같은 더 광범위한 작업에 대한 벤치마크가 특히 가치 있을 수 있음
- 버그 해결(예: SWEBench)을 위한 벤치마크와 그러한 벤치마크를 대상으로 하는 프로토타입(예: Cognition AI)이 발표되었음
- 더 광범위한 소프트웨어 엔지니어링 작업을 포괄하기 위해 더 많은 벤치마크를 제안하기 위해 커뮤니티가 함께 모이기를 권장함
GN⁺의 의견
- AI의 빠른 진화: AI 기술이 빠르게 발전하고 있어, 최신 기술을 지속적으로 학습하고 적용하는 것이 중요함.
- UX와 모델 품질: 사용자 경험과 모델 품질이 AI 도구의 성공에 중요한 요소임.
- 데이터의 중요성: 고품질 데이터가 AI 모델의 성능을 크게 좌우함.
- 미래의 가능성: AI가 소프트웨어 엔지니어링의 다양한 측면에서 더 큰 역할을 할 가능성이 있음.
- 산업 트렌드: 자연어 인터페이스와 대규모 작업 자동화가 소프트웨어 개발의 미래를 이끌 것임.
Hacker News 의견
-
AI가 제대로 사용될 때, 두 가지 역할을 함: 1) 논란 없는 수정으로 개발자의 시간을 절약하고 인지 부하를 줄임. 2) 제안을 통해 사용자를 더 똑똑하고 지식 있게 만듦. 예를 들어, 코드 완성 기능이 잘 작동할 때가 있음.
-
AI 도구가 사용자가 기능을 트리거해야 할 때 "확장에 실패"한다는 흥미로운 주장 있음. IDE 내에서 AI가 유용하게 디자인 수준과 개념적 아이디어를 제안하는 방법에 대해 고민 중.
-
AI 기반 제안으로 인해 코드 작성자가 점점 리뷰어가 되는 현상 관찰됨. 리뷰 비용과 추가 가치 사이의 균형을 찾는 것이 중요함.
-
GPT-4를 사용하여 React UI와 Python UI를 몇 분 만에 생성하고 코드를 리뷰하여 작동 방식을 이해하는 것이 유용하다고 느꼈음.
-
인간의 제한된 RAM 때문에 아이디어를 외부 매체에 넣어야 함. AI의 제안이 초기 단계를 더 빠르게 진행하는 데 도움을 줌.
-
LLMs(대규모 언어 모델)가 프로그래밍에 유용하다는 것은 부인할 수 없음. 더 매끄럽게 만들기 위한 올바른 UX가 핵심 도전 과제임. 자동 완성 기능을 사용해 보았으나, 대부분의 제안이 좋지 않아 비활성화함.
-
ChatGPT 데스크탑 앱을 사용하여 코드 질문을 하는 것이 더 유용하다고 느꼈음. 그러나 매번 세부 사항을 설명해야 하는 것이 번거로움.
-
AI 지원 코드 작성 비율이 50%까지 증가하는 추세가 흥미로움.
-
AI가 요청한 작업을 수행하는 방법을 알려주지만, 그것이 나쁜 아이디어라는 것을 알려주지 않음. ML 생성 코드의 품질은 훈련 데이터에 달려 있음.
-
AI가 Google의 소프트웨어 엔지니어를 완전히 대체하는 데 얼마나 걸릴지 궁금함.
-
AI의 궁극적인 목표는 시스템을 운영하고, 앱을 디버그하며, 데이터 스토어를 관리하고, 사용자 피드백과 요구 사항 설명에 따라 앱 코드를 작성하는 것임.
-
AI 도구를 실험하는 것은 좋지만, 다른 사람들이 맹목적으로 복사하는 것은 부정적인 영향을 미칠 수 있음. LLM을 사용한 코드 작성의 주요 판매 포인트를 찾기 어려움.