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

이런 질문에 대해 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 포털개발센터장


  • 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
    •  
  • 부록
    • 앤트 설치와 사용
    • 메이븐 설치와 사용
    • 허드슨 설치와 설정
    • 테스트 코드 작성 팁
    • 참고할 만한 사이트 정리


출처: http://wikibook.co.kr/naver-quality-practice/

Posted by insightalive
,