'QP'에 해당되는 글 1

  1. 2010/09/09 1년에 코드 4200만 라인…NHN , SW 품질관리 비결은? (4)
사용자 삽입 이미지

NHN(네이버∙한게임) 개발자는 하루에 1인 평균 172라인의 코드를 작성한다고 합니다. 이는 일반적 관점에서 볼 때 많은 양은 아닙니다만, 단순 자바스크립트가 아닌 DB엔진 등 어려운 개발업무도 포함돼 있다는 점을 감안해야 할 것입니다.

한 사람이 하루 172라인을 개발하면 1년에는 약 4만2000라인을 개발하는 것입니다. NHN에서 코딩을 하는 인원이 1000명 정도 되니까 NHN이 연간 개발하는 코드라인은 약 4200만 라인입니다. 이는 A4용지로 80~90km에 달할 정도의 방대한 분량입니다.

개발 분량이 많기 때문에 버그(오류)도 많이 양상 됩니다. 버그는 약 500라인당 하나씩 나온다고 합니다. 연간으로 계산하면 약 8만개의 버그가 NHN의 소스코드에서 나옵니다. 버그가 많다 보니 버그를 발견하고, 수정하는 노력도 엄청나게 많이 들어 갑니다.

이처럼 SW 품질 문제는 NHN의 오래된 숙제였습니다. 위에서 언급한 버그뿐 아니라 시장환경변화에 따는 잦은 요구사항 변경, 통합시간의 장기화 등 여러 문제가 NHN SW 품질을 낮췄습니다.

그러나 NHN은 10년 이상 네이버,한게임 등을 운영하면서 이런 문제에 대한 해결책을 찾아가고 있습니다. 그 결과 NHN은 나름대로의 SW 품질 확보를 위한 프로세스를 갖추고 있습니다.

NHN의 문제는 아마 NHN만의 문제는 아닐 것입니다. 대부분의 SW기업들이 겪고 있는 문제일 것입니다. NHN의 프로세스를 살펴보는 것은 다른 SW기업에도 큰 도움이 될 것입니다.

김정민 NHN 포털개발센터장에 따르면, NHN의 SW품질혁신 활동은 QP(quality practice), 단계적 빌드, 반점개(반복∙점진개발) 등으로 상징됩니다.

QP는 낮은 코드 완성도를 초기부터 높이기 위한 활동입니다. 단계적 빌드는 느린 통합, 느린 피드백 문제에 대한 대책이며, 반점개는 잦은 요구사항 변경, 환경변화, 느린 피드백, 프로젝트 가시성 저하 문제를 해결하기 위해 도입됐습니다.

먼저 QP는 아래 6개의 프랙티스로 구분됩니다.
사용자 삽입 이미지

1. 코딩 컨벤션(Coding Convention) – 코드의 가독성 및 유지보수성 향상을 위해 코딩 수준을 준수해 동일한 스타일 코드로 작성해야 함
2. 코드 리뷰 – 주요코드에 대해서는 코드리뷰를수행. 중요한기능, 중요도가 높거나 복잡한 로직/알고리즘, 테스트가 어려운 예외 처리부분, 신규 개발자가 작성한 코드, 기존에 장 애 및 결함 발생이 빈번한 코드 등
3. 코드 커버리지 – 작성한 코드의 완성도를 높이기 위해 개발자 테스트를 수행하고, 테스트가 충분한 지 커버리지 확인. 테스트는 측정가능하며, 반복적으로 수행 가능해야 함
4. 정적 분석 – 정적 분석도구를 활용하여 테스트에서 검출하기 어려운 잠재오류를 사전에 제거해야 함
5. 코드 복잡도 – 작성한 코드의 복잡도를 확인. 복잡한 코드는 리팩토링이 필요한지, 테스트가 충분히 수행됐는지 커버리지 확인해야 함
6. 중복제거 분석 – 레거시 코드의 가독성을 높이고 유지보수가 용이하도록 Copy & Paste로 인한 중복코드를 식별해 리팩토리 수행

단계적 빌드는 개발범위 구현완료시까지 반복적으로 수행되는 일련의 빌드 통합과정을 말합니다. ▲개발자 빌드 ▲커밋빌드 ▲통합빌드 ▲릴리즈 빌드의 4단계를 거칩니다.
사용자 삽입 이미지

개발자 빌드는 개인이 개발한 코드에 대한 빌드로, 변경된 코드 커밋(commit) 전에 로컬PC에서 타인의 코드와 충돌하지 않는 지 검증하는 것입니다

커밋 빌드는 팀 단위의 빌드로, 여러 개발자의 단위테스트를 모아 테스트 수행합니다. DB, 플랫폼, 네트워크 등 미들웨어 의존성이 없는 테스트입니다.

통합 빌드는 실환경과 유사한 환경에서 개발 통합테스트 수행하는 것입니다. 시간이 오래 걸리는 리그레션테스트, UI 자동화 테스트 등을 진행합니다.

릴리즈 빌드는 이전 빌드와의 차이점을 확인해 의도한 변경이 맞는지 확인하는 과정입니다. 기능테스트, 부하테스트 등 QA 테스트를 수행해 통과 기준을 달성했는지 확인합니다.

반복.점진 개발은 요구사항의 잦은 변경에 대처하기 위한 프로세스입니다. 일종의 애자일 개발 방법론을 NHN화 시킨 것입니다.
사용자 삽입 이미지

이에 따르면, 요구사항을 할당해 개발한 다음, 일단 출시가능한 프로그램을 릴리즈/시연합니다. 여기에 대한 피드백을 반영해 다시 개발에 들어갑니다. 이런 과정이 반복되는 동안에는 요구사항 변경관리 프로세스를 밟습니다.

이 과정에서 중요한 것은 (요구사항) 피처에 대한 관리입니다. 원래 피처가 있으면, 위 과정을 반복하면서 새로운 피처가 발생하게 됩니다. 이에 대한 업데이트를 체계적으로 관리하는 것이 중요하다고 합니다. 또 요구사항을 재반영하면서 프로젝트 일정도 재추정해야 합니다.

NHN은 QP, 단계적 빌드, 반점개를 통해 전반적인 개발 효율성을 향상시켰다고 합니다.

소스코드 가독성이 향상됐고, 코드리뷰시 코드개선에 대한 의견 공유가 가능해졌다. 일부 개발자들의 잘못된 코딩습관을 고쳤고, 레거시코드수정시, 리그레션테스트로장애를 예방했다. 버그를 사전에 예방했고, 테스트 코드작성이 용이해졌다.

코드커버리지의 경우 2009년 초반만해도 25%에 불과했던 것이 현재는 52%이며, 코드 콘벤션은 20%에서 75%로 증가했습니다. 장애건수도 2009년 초반에 비해 4분의 1로 줄었고, 장애시간 역시 2000시간에서 200시간 이하로 대폭 줄었다고 합니다.

하지만 이런 결과가 쉽게 얻어진 것은 아닙니다.내 부적으로 강한 저항이 있었습니다. 수치화해서 강제하면, 본질을 경시하거나 어뷰징이 있을 것이라는 우려나 품질이 좋아질 것이라는 보장이 없다, 일정상 어렵다는 등의 거부감이 있었다고 합니다.

그러나 결국 이는 진행됐습니다. 다른 기업들이 NHN의 이런 사례를 배우기 위해서는 이런 저항에 맞서는 법을 배워야 합니다.

김정민 NHN 포털개발센터장은 ▲전사차원의 후원 ▲조직장의 리더십 ▲공감대형성(Consensus) ▲커뮤니케이션(Flat communication) 채널운영 ▲전담지원조직(Coach) 운영 ▲동기부여 ▲작은 성공의 공유 및 포상을 통해변화확산/전파 ▲자발적으로 조직 내변화 주도하고 전파할 수 있는 ‘겨자씨’ 양성 등을 성공배경으로 들었습니다.
2010/09/09 12:26 2010/09/09 12:26