프로그래밍 공부하기

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

감상문

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

ihl 2021. 3. 13. 22:51
 

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

『NHN은 이렇게 한다! 소프트웨어 품질관리』는 소프트웨어 개발의 전 과정에서 효과적으로 품질을 측정하고 향상시키기 위한 기술을 담고 있다. 눈에 보이지 않는 소프트웨어의 품질을 측정한

book.naver.com


  프로젝트를 앞두고 협업에 대해 관심이 많아져 이전 도서관에서 빌렸던 'NHN은 이렇게한다 소프트웨어 품질관리' 라는 책을 읽게 되었다. NHN이 워낙 큰 기업이다 보니 책의 내용은 어느정도 규모가 있는 팀에게 도움이 될 내용이었으며, 책 자체가 조금 오래되어서 현재 사용할 수 없는 도구들을 소개하는 경우도 있어 솔직히 당장 소개된 도구를 쓸 수는 없을 것 같다. 그러나 SW 품질관리를 통해 이러한 툴들이 있구나를 알고 필요할 때 이런 도구들을 찾아서 도입해봐야지 하는 정도는 가능할 것 같다.

 

1. 효과적인 명세작성

  • 3단계 명세
    • 정상적인 사용
    • 비정상적이지만 합당한 사용  ex. 계산기에서 나누어 떨어지지 않는 나눗셈
    • 비정상적이고 예외적인 사용  ex. 계산기에서 첫 번째 수를 입력하지 않고 연산기호를 누른 경우, 0으로 나누기
  • 명세워크숍: 각자 자신의 관점에서 적절한 예제를 도출하여 명세작성에 기여하는 회의
기획자: 지금부터 계산기 개발프로젝트 명세 워크숍을 시작하겠습니다. 계산기의 사칙연산을 개발할 예정이며, 사용자 입력 요소는 다음 표와 같이 더해질 수인 left, 사칙연산자인 operator, 더하는 수인 right입니다. 그리고 equals 등호를 입력하면 result에 결과를 표시합니다. 테이블에서는 입력과 출력을 구분하기 위해 ?를 붙였습니다.
기획자의 예제 테이블표

QA: left, right 중 한쪽 값만 입력하거나 아무 값도 일벽하지 않고 연산자만 입력한 경우는 어떻게 할까요?
개발자: 사용자의 편의를 고려해서 right 값이 입력되지 않은 경우는 left와 동일한 값을 넣어 연산을 수행할까요?

개발자의 예제 테이블표

 

2. 단계적 빌드

  • 단계적 빌드 대상
    • 오류가 발생하기 쉬운 모듈
    • 공통으로 사용하는 모듈
    • 자주 코드를 수정하는 모듈
  • NHN의 빌드 과정: 개발자빌드 - 커밋빌드 - 통합빌드 - 릴리스 빌드
    • 커밋빌드와 통합빌드는 CI 서버에서 테스트를 수행한다.
    • 커밋빌드는 미들웨어에 의존하지 않는 테스트이다.
    • 통합빌드는 미들웨어(DB, 플랫폼, 네트워크)에 의존하는 테스트이다.
  • 단계적 빌드에 필요한 것: 형상관리 시스템 + 빌드 자동화 스크립트 + CI 서버
    • 형상관리 시스템 ex. Git, SVN
      • SVN: git과 유사하나 개발자가 자신만의 version history를 가질 수 없는 단점.
    • 빌드자동화 관리도구 ex. Ant, Maven
      • 소스코드를 .jar로 압축한 후 웹서버에 올리는 일련의 과정을 한 번에 수행 가능
    • CI 서버: 빌드 자동화 서버
      • 형상관리 시스템에 변화가 생겼을 때 자동으로 빌드를 수행하고 결과를 보고한다.
      • 형상관리 서버와 테스트 웹서버 사이에 존재하며, ci서버에서 빌드-테스트-분석/보고를 마친 후에 테스트 웹서버에 배포된다.

3. 코딩 품질

  • 코딩컨벤션 도구: CheckStyle, N'SIQ, CPPStyle
  • 코드리뷰 도구: Crucible
    • 대부분의 개발자가 코드 읽는 법은 배운 적이 없어 리뷰 수행이 쉽지 않다.
  • 코드 커버리지 = 전체 시스템 명세 중에서 테스트한 명세의 비율 계산
    • 코드커버리지 측정 도구: Cobertura, Clover, GCOV, BullseyeCoverage, Hudson Coverage
      • 계측을 위한 코드를 삽입하고 컴파일함으로써 코드 커버리지를 측정 가능하다.
  • 정적분석
    • SW를 실행하지 않고 도구를 이용하여 잠재적인 결함을 찾아내는 것
    • 생성자가 없는 클래스, 잘못된 메모리 초기화, 숫자를 0으로 나눈 경우 등의 결함을 자동으로 찾아낸다.
    • CppCheck, FindBugs, PMD
  • 사이클로매틱 복잡도 = 코드의 복잡도를 수치화한 것
    • CC2 = 조건문(if, switch, while..)의 갯수 + Boolean 연산(&&, ||..)의 갯수 + 1
    • N'SIQ Collector
  • 중복코드분석
    • CPD
Comments