• 소프트웨어 품질관리
  • NHN은 이렇게 한다!

  • 유석문, 이세현, 이상범, 김은하, 나종채, 윤준호, 정상혁, 김광근, 서상우 지음

  • TECH@NHN 시리즈 _ 001
  • ISBN: 9788992939607
  • 18,000원 | 2010년 08월 27일 발행 | 296쪽



소프트웨어 품질이란 무엇인가? 오류 없는 소프트웨어를 만들려면 비용이 많이 드는가? 끊임없이 변하는 기획서를 어떻게 하면 효율적으로 관리할 수 있는가? 생산성은 측정하지 못하면 개선하지 못하는가?

이런 질문에 대해 NHN에서는 어떤 고민을 하고, 품질을 향상시키려는 어떠한 활동을 했는지 그 경험을 이 책을 통해 함께 공유하고자 한다.

NHN의 품질 혁신 활동(Quality Practice, QP)은 소프트웨어 개발의 특징과 오해에서 비롯되는 각종 문제를 해결하고 품질을 향상시키는 것을 목표로 NHN에서 수행하는 활동의 일환이다. 하지만 이 책에서 설명하는 원칙이나 기법이 소프트웨어 개발의 ‘모든’ 문제를 해결할 수 있는 만능 치료약은 아니다.

여러분이 어디에서 근무하고 있고, 또 어떤 프로젝트를 진행하고 있든 이 책에 소개된 기술이나 방법론만 적용해서는 NHN에서 이룬 성과를 기대할 수 없다. 정의된 프로세스 하나를 모든 소프트웨어 개발에 동일하게 적용할 수는 없기 때문이다.

각 조직별 구성원의 역할과 책임, 개인과 조직의 역량 그리고 제품의 특징이 같을 수 없으므로 우리가 제안하는 프로세스가 정답일 수는 없다. NHN의 품질 혁신 활동도 애자일의 여러 방법론 가운데 NHN에 효과적인 것을 선별하여 개발하고 개선해 나간 것이다.

여기서 설명하는 소프트웨어 개발의 문제점을 참고하여 독자 여러분의 개발 프로세스를 되돌아 보고, NHN의 품질 혁신 활동을 참고한다면 각자의 조직에 걸맞은 품질 개선 방법을 찾는 데 쉽게 한 발을 내디딜 수 있을 것이다.

 

이 책의 목표는 무엇인가?

네이버 용어사전에서 ‘소프트웨어 품질’을 검색하면 다음 결과를 찾을 수 있다.

① 명세서와의 일치 정도처럼 주어진 요구를 만족시키기 위한 능력에 영향을 미치는 소프트웨어 제품의 모든 특성과 속성들. ② 소프트웨어가 요구되는 속성들의 조합을 갖고 있는지의 정도. ③ 해당 소프트웨어가 기대에 어느 정도 부응하는지의 정도. ④ 현재 사용 중인 소프트웨어가 고객의 기대에 어느 정도 부응하는지의 정도를 결정하는 소프트웨어의 제한 속성.”

위의 설명에서 유추할 수 있듯이 ‘품질’은 소프트웨어 개발 분야에서 가장 어렵고 모호한 주제다. 측정되지도 않고 투자 비용을 늘린다고 쉽게 개선되지도 않을뿐더러 관리하지 못하면 비즈니스를 위험에 처하게 하는 가장 현실적이고 직접적인 위협이다.

이 책은 소프트웨어 개발의 전 과정에서 효과적으로 품질을 측정하고 향상시키기 위한 기술을 담고 있으며 아래의 내용으로 구성되어 있다.

  • 소프트웨어 품질의 정의
  • 소프트웨어 품질 개선을 위한 조직적 활동
  • 소프트웨어 품질 개선을 위한 개인 활동
  • 지속적으로 개선하고 발전하는 조직 문화 만들기
  • 품질 향상에 도움이 되는 도구와 적용 방법

상기 항목들에 대해 NHN에서 직접 적용하고 겪었던 문제점, 개선 방향, 효과를 제공하고 있다. 이를 기반으로 독자들의 상황에 적합한 활동을 고안하고 적용하도록 돕는 것이 이 책의 목표다.

 

이 책은 누구를 위한 것인가?

소프트웨어 품질은 개발에 직접, 간접적으로 참여하는 모든 사람들이 관리해야 하는 부분이다. 이 책은 기획, 개발자, QA, 관리자를 위한 내용으로 구성되어 있으며 품질의 위험을 다루기 위한 NHN의 노력과 지향점에 대해 기술하고 있다. 또한 기획, 개발, QA 단계에서의 품질에 대한 정의와 이를 개선하기 위한 노력, 사용 도구, 그리고 지속적으로 개선하고 발전해 나가는 문화를 만드는 방법이 고스란히 담겨 있다.

 

필요한 사전 지식은?

기술의 자세한 내용 소개보다는 적용 목적과 결과에 대한 설명 위주로 구성했기 때문에 소프트웨어 개발분야 종사자라면 별도의 사전 지식 없이 편하게 읽을 수 있다. 학생들은 소프트웨어 공학에 대한 사전 지식이 있다면 전체적인 흐름을 이해하는 데 도움이 되겠지만 없다고 해도 문제될 것은 없다. 각자 수행하고 있는 프로젝트에 일부분 적용하면서 책을 읽다 보면 보다 효과적인 방안을 찾을 수도 있을 것이다.

 

추천사

"소프트웨어를 어떻게 만들어야 하나?" 그리고 "소프트웨어를 만드는 사람은 어떻게 다루어야 하나?"라는 화두 혹은 질문이 시스템통합(SI), 패키지 소프트웨어, 포털/검색 소프트웨어, 게임 소프트웨어를 망라한 대다수 소프트웨어 개발업체 개발자 및 관리자들이 매일 던지는 질문일 거라고 생각합니다. 저도 C 프로그래머에서 시작해서 C , Java, 웹 프로그래밍을 했었고 프로젝트관리자(PM)로서 대규모 소프트웨어를 만들어 고객에게 인도했던 경험이 있습니다. 현재는 많은 소프트웨어 개발자를 관리하는 관리자의 입장에서 위의 두 가지 질문을 항상 던지곤 합니다. 물론 쉬운 답은 없지요. 40여 년 전 프레데릭 브룩스(Frederick Brooks)가 갈파했던 소프트웨어만의 독특한 속성(Essential Problems) 4 가지 중 가변성(Changeability)과 비가시성(Invisibility)이 이러한 어려움의 가장 중요한 원인이라고 생각합니다.

현재 소프트웨어 업계가 아직도 정확한 답을 찾지 못하는 많은 부분이 있습니다. "요구사항을 어떻게 끌어내야 하나?", "요구사항은 어느 정도까지 구조화하면 되나?", "디자인은 어디까지 하면 되나?", "데이터베이스 설계는 언제, 어디까지 해야 하나?", "공수 추정은 어떻게 하나?", "최종 성능은 언제부터 어떻게 준비해야 하나?", "구현단계의 가시성은 어떻게 확보하나?", "어디까지 테스트 해야 하나?", "언제 고객에게 인도할 정도의 품질을 달성했다고 확신할 수 있나?" 등의 많은 질문에 대해 아직도 정확한 답을 주지 못하고 있지만, 그나마 그중에서 '구현단계에서의 가시성 확보'에 있어서는 지난 10년간 많은 진전이 있었습니다.

저는 위의 두 가지 질문에 대해, 구현단계에서의 가시성 확보 및 빠른 피드백을 얻을 수 있는 여러 가지 실행지침(Practice)이 어느 정도 해결책이 될 수 있다고 생각합니다. NHN에서는 이러한 실행지침을 체계화하고 내재화하기 위해 다양한 Change Initiative를 실행했는데, 지속적통합(Continuous Integration, CI), 퀄리티 프랙티스(Quality Practice, QP), 반복점진적 개발방법(Iterative & Incremental Development) 등이 그것입니다. 이들을 조직에 맞게 꾸준히 변화시키면서 운용해 보았습니다. 이러한 변화를 드라이브하면서 많은 시행착오도 겪었고, 이런 저런 장애물을 만나기도 했습니다. 이에 대한 다년간의 경험이 이렇게 책으로 묶여 나오게 되니 약간은 흥분되기도 하고 감격스럽기도 합니다.

우리가 건강을 유지하기 위해서는 유산소 운동도 하고, 중량운동도 해야 하고, 또 유연운동도 골고루 해야 균형 잡힌 건강을 유지할 수 있겠지요. NHN에서 실행한 실행지침이 한 가지가 아니고 다양한 이유가 그렇습니다. 한 가지만의 실행지침으로 좋은 소프트웨어를 만들 수 있다면 좋겠지만 그런 요술방망이(Silver Bullet)는 없습니다. 건강하다고 해서 운동을 하지 않아도 될만한 사람이 없듯, NHN에서도 계속해서 좋은 소프트웨어 개발 운동을 할 것입니다.

소프트웨어 개발자, 관리자 분들이 이 책을 읽은 후 자신의 환경 및 조직에 맞게 이런 저런 운동방법을 잘 조정해서 적용하시면 건강한 소프트웨어를 만드는 데 많은 도움이 될 것이라 확신하며 '과감하게' 이 책을 추천합니다.

-- 김정민, (주)NHN 포털개발센터장

눈에 보이지 않는 소프트웨어의 품질을 측정한다는 것이 과연 가능한 일일까? 품질을 측정한다면 어떻게, 어느 부분을 측정할까? 활용할 도구는 없을까?

이 책은 이런 고민을 해결하고자 했던 NHN의 경험을 다룬다. 개발자를 꿈꾸는 학생, 프로젝트 관리자와 기획자, 개발자와 테스터, QA 담당자 모두에게 이 책이 도움이 되었으면 하는 바람이다.

이 책에서는 다음과 같은 내용을 다룬다.

  • 소프트웨어 개발의 특징과 문제점, 문제점을 해결하기 위한 NHN의 품질 혁신 활동과 적용 과정
  • 요구사항 분석 단계에서 사용하는 효과적인 명세 작성 방법을 예제를 통해 설명하고 이를 자동화 도구를 통해 구현하는 과정
  • 개발 과정의 가시성을 확보하고 빠른 피드백 환경을 구축하기 위한 단계적 빌드 방법
  • 코드의 가독성을 높이고 유지 보수 비용을 낮추기 위한 코딩 컨벤션을 점검하는 도구 소개
  • 코드 리뷰를 수행하는 방법과 조직원 간의 지식 공유 방법
  • NHN에서 사용하는 코드 커버리지 유형과 요구 사항 변경과 코드 변경에 효과적으로 대응할 수 있는 도구 소개
  • 정적 분석 도구를 활용해서 오류를 검출하고 문제가 발생하기 전에 방지하는 방법
  • 코드의 복잡도를 측정하는 도구를 소개하고 복잡도를 낮추는 방법
  • 중복 코드를 분석하고 제거하는 방법과 도구
  • NHN에서 QP를 적용한 결과와 성과, 의의를 정리
  • NHN에서 개발한 명세 작성 도구이자 테스트 자동화 도구인 NTAF과 모바일, 웹 UI 테스트에 활용하는 NTAF 도구 소개
  • 통합 테스트 서버인 CI 서버를 설치하고 설정해서 개발에 활용하는 방법, 단위 테스트를 하면서 많이 발생하는 문제를 어떻게 해결했는지를 부록에서 소개

유석문

지도지역서비스개발랩 랩장.

광주과학기술원 기전공학과를 졸업하였으며 LG 전자 우면연구소, 인텔리코리아, 핸디소프트에서 소프트웨어 개발자로 근무하였다. 현재 NHN에서 지도 서비스 개발을 담당하고 있으며 오픈소스 NTAF 개발에 참여하였다. 소프트웨어 품질 향상에 대하여 공부하고 공유하는 것을 즐기고 있다.

이세현

생산성혁신팀에서 품질 기획.

덕성여자대학교 통계학과를 졸업하고, 쌍용정보통신, 팬택&큐리텔에서 소프트웨어 개발방법론, 소프트웨어 프로세스 개선 및 품질관리 업무를 담당했으며, 현재는 NHN 생산성혁신팀에 소속되어 소프트웨어 엔지니어링, 품질 기획 및 정량적 품질 관리와 관련된 업무를 담당하고 있다. 주요 관심 분야는 프로세스 개선과 애자일 개발 방법론을 적용하는 것이다.

이상범

생산성혁신팀에서 Klocwork 사용 지원 및 품질 기획.

쌍용정보통신에서 7년간 국방프로젝트의 품질/형상관리를 담당하면서 테스트와 감사(Audit)프로세스의 개선을 통해 프로젝트 후반의 위험 요소를 제거하는 업무를 담당했다. 최근에는 자동화 도구를 사용해서 구현 단계의 가시성을 확보함으로써 참여자로 하여금 신속한 의사결정을 이끌어 낼 수 있는 프로세스 개선과 개발 환경 구축에 관심을 기울이고 있다. 현재는 NHN에서 프로세스 개선 및 정적 분석 도구인 klocwork 운영을 담당하고 있다.

김은하

생산성혁신팀에서 신규 기술 연구 및 개발.

다양한 분야에서 소프트웨어 개발을 수행했고 현재는 NHN에서 품질 향상을 위한 테스트 자동화와 개발 고도화를 위한 업무를 담당하고 있다. 테스트 자동화 도구인 NTAF을 개발해서 여러 해외 컨퍼런스에서 발표했고, 현재는 오픈소스로 운영하고 있다(http://dev.naver.com/projects/ntaf).

나종채

생산성혁신팀에서 NTAF, 오픈소스 테스트 프레임워크 연구 및 개발, QP 지원.

2003년부터 현대, 기아자동차 IT 그룹사인 오토에버시스템즈에서 SI 업무를 수행했으며, 2008년 NHN에 입사해서 QA 업무를 한해 동안 담당했다. 2009년부터는 생산성혁신팀에서 품질 혁신 활동(Quality Practice) 지원 업무와 교육을 진행하고 있으며, 아울러 NHN의 테스트 자동화 프레임워크인 NTAF 개발에도 참여하고 있다. 개발과 테스트 사이에서 발생할 수 있는 개발자/QA/테스터 간의 고민을 함께 풀어 갈 수 있는 다양한 접근을 통해 누구나 손쉽게 질 좋은 소프트웨어를 생산해 낼 수 있는 방법을 연구하고 있다.

윤준호

생산성혁신팀에서 QP 관련 측정 기술 개발.

엔지니어라면 자신이 필요한 도구를 직접 만들 줄 알아야 한다고 믿는 QA 엔지니어다. 소프트웨어 검증을 위한 오픈소스 프로젝트를 몇 가지 운영하고 있으며, 모르는 외국인이 이 프로젝트에 대해 문의 메일을 보낼 때 가장 즐겁다.

정상혁

생산성혁신팀에서 단위 테스트 및 테스트 주도 개발 교육, 기술 지원.

삼성SDS의 SW 엔지니어링팀에서 공공기관의 SI 프로젝트를 수행했다. NHN에서는 콘텐츠 관리개발팀 등에서 주로 데이터 연계 처리 모듈을 개발했었고 현재는 생산성혁신팀에서 자바 모듈의 단위 테스트, 테스트 주도 개발(TDD)에 대한 기술 지원과 교육 업무를 담당하고 있다. 더 편하고 재미있게 개발하는 데 도움을 주는 기법, 라이브러리, 아키텍처를 전파하는 것에 관심이 많다. 블로그(http://benelog.egloos.com/)와 개인 위키(http://benelog.springnote.com)를 통해 개발에 대한 경험과 정리한 자료를 공유하고 있다.

김광근

생산성혁신팀에서 C/C 단위 테스트 교육 및 각종 기술 지원.

팜미디어와 핸디소프트를 거쳐 NHN에 입사하기 전까지 약 10년 동안 C/C 개발자로서 활동해 왔으며, 현재 NHN의 생산성혁신팀에서 소프트웨어의 품질 향상을 위한 교육 및 기술지원 업무를 담당하고 있다. 최근에는 각종 모바일 개발 환경에서 코드 품질을 향상시킬 수 있는 다양한 기법에 대해 관심을 가지고 연구하고 있다.

서상우

생산성혁신팀에서 QP 적용 프로젝트 지원.

현대정보기술 등 여러 SI 업체에서 10년 가까이 개발 업무를 하다가 NHN에 QA로 입사했다. QA 업무를 경험하면서 개발 품질이 비용임을 깨닫게 되었고, 개발 품질을 높일 수 있는 방법에 관심을 갖게 되었다. 현재는 생산성혁신팀에서 단위 테스트, 정적 분석 도구 사용법 등을 가이드하며 프로젝트 지원 업무를 하고 있다.

  • 1장 NHN과 소프트웨어 품질
    • 소프트웨어 개발의 특징과 오해
    • NHN의 QP 이야기
  •  
  • 2장 효과적인 명세 작성
    • 바벨탑과 언어의 분열
    • 예제를 이용한 명세 작성 기법
    • 명세 작성 워크숍
    • 자동화 도구 적용
  •  
  • 3장 단계적 빌드
    • 도입하기까지
    • 단계적 빌드 프로세스
    • 단계적 빌드에 필요한 것
    • CI 서버가 보여주는 프로젝트 운영 패턴
    •  
  • 4장 코딩 컨벤션
    • 코딩 스타일을 점검하는 도구
    • 지속적인 코딩 스타일 검사
    • 코딩 컨벤션을 적용하고 나서
    •  
  • 5장 코드 리뷰
    • 코드 리뷰 수행 방식
    • 코드 리뷰를 적용하고 나서
    •  
  • 6장 코드 커버리지
    • 도입하기까지
    • 코드 커버리지를 측정하는 도구
    • 지속적인 코드 커버리지 측정
    • 코드 커버리지를 적용하고 나서
    •  
  • 7장 정적 분석
    • 도입하기까지
    • 정적 분석을 수행하는 도구
    • 지속적인 정적 분석
    • 정적 분석을 적용하고 나서
    •  
  • 8장 사이클로매틱 복잡도
    • 도입하기까지
    • CC2 계산 방법과 예제
    • 복잡도를 측정하는 도구
    • 지속적인 복잡도 측정
    • 사이클로매틱 복잡도를 적용하고 나서
    •  
  • 9장 중복 코드 분석
    • 중복 코드를 분석하는 도구
    • 지속적인 중복 코드 분석
    •  
  • 10장 QP의 현재와 미래
    • QP의 현재
    • QP의 미래
    • QP를 도입하고 싶다면
    •  
  • 11장 NHN 테스트 자동화 프레임워크
    • NHN 테스트 자동화 프레임워크 소개
    • 모바일에서의 NTAF
    • NTAF WebKit
    •  
  • 부록
    • 앤트 설치와 사용
    • 메이븐 설치와 사용
    • 허드슨 설치와 설정
    • 테스트 코드 작성 팁
    • 참고할 만한 사이트 정리

관련 글