메뉴 건너뛰기

1 품질 게이트키퍼

품질 게이트키퍼(Quality Gatekeeper)는 개발 단계에서 소스코드 품질 강화를 위해 조직의 품질 게이트(품질 요구사항)를 설정하고 품질 게이트를 통과하지 못하는 소스 코드는 중앙 저장소에 반영되지 못하게 하는 품질 보장 활동을 말한다.

일반적으로 품질 게이트키퍼를 위한 활동은 커밋 빌드 검증(Commit Build Verification), 동료 검토(Peer Code Review), 정적 분석을 통한 목표 품질 게이트 통과, 코드 인스펙션 등의 활동이 있다.
 

2 품질 게이트키퍼를 위한 솔루션 

다음 그림은 앞서 설명한 품질 게이트키퍼의 주요 활동을 포함한 전체 솔루션을 보여주고 있다. 

qa01.png


  • 1. 개발자는 사용자 스토리 혹은 버그 업무를 처리하기 위해 Git 저장소 관리 도구인 Bitbucket에서 개발 브랜치를 할당 받는다. 요구사항에 따라 소스코드를 추가 혹은 수정하고 해당 코드를 개발 브랜치로 Commit & Push를 수행한다. 
  • 2. 빌드 서버인 Bamboo는 Bitbucket의 저장소를 Trigger하여 Push가 일어나면 빌드를 수행한다. 
  • 3. Bamboo는 빌드 검증을 위한 절차에 따라 빌드 검증 및 단위 테스트를 수행하고 해당 경과를 Bitbucket에 알려준다. 
  • 4. Bamboo는 빌드와 함께 정적 분석 결과를 SonarQube에 알려준다. 
  • 5. 개발자는 개발 브랜치에 개발된 자신의 코드를 중앙 저장소에 반영(Merge)하기 위해 코드리뷰를 제공하는 Pull Request를 요청한다. 
  • 6. Bitbucket에 Pull Request가 생성되면, SonarQube는 품질 게이트 통과 여부와 코드 리뷰의 디퍼 창에 Code Inspection 결과를 알려준다. 
  • 7. 리뷰어는 Pull Request의 요청에 따라 코드 리뷰를 수행하고 SonarQube의 품질 게이트 정보와 Code Inspection 정보를 확인하여 최종적으로 문제가 없다고 판단되면 소스코드를 중앙 저장소로 반영한다. 

품질 게이트키퍼의 주요활동은 Bitbucket, Bamboo, SonarQube에 의해 자동으로 진행될 수 있어 이는 개발 품질과 함께 생산성을 향상시키는데 도움을 줄 수 있다.

2.1 코드 개발 

JIRA에서는 Bitbucket과 연동을 통해 사용자 스토리와 같은 이슈에서 개발을 위한 브랜치 생성을 지원한다. 특정 이슈에서 Development 패널에서 Create branch 버튼을 통해 Bitbucket의 개발 브랜치를 생성할 수 있다. 다음 그림은 브랜치 생성을 진행하는 Bitbucket의 예제 화면을 보여주고 있다. 
  • Repository
    Repository는 브랜치를 생성할 저장소를 선택한다.
  • Branch type
    Git flow처럼 버그 수정을 위한 Bugfix, 새로운 기능 개발을 위한 Feature, 핫픽스용 Hotfix, 릴리즈를 위한 Release의 Prefix를 지정하여 브랜치를 구분할 수 있다. 
  • Branch from
    베이스가 되는 브랜치를 선택한다. 만약 해당 브랜치가 Bamboo의 빌드와 연동되어 있을 경우 빌드 검증 결과를 알려준다.
  • Branch name
    생성할 브랜치의 이름 작성한다. 기본적으로 이슈의 ID가 Prefix로 지정되어 있어 개발자가 자신이 작업할 브랜치를 쉽게 찾을 수 있다.

qa02.png


빌드 생성을 위한 모든 준비가 완료되면 Create branch를 통해 최종적으로 Bitbucket에 개발 브랜치를 생성한다. Atlassian에서 제공하는 IDE Connetor를 통해 Mylyn 업무 창에서 나에게 할당된 이슈 리스트를 확인할 수 있으며, 개발 브랜치를 Bitbucket 저장소로부터 내려 받아 작업 후 소스코드를 Commit & Push를 수행한다.


2.2 빌드 검증

빌드 검증은 개발자의 Commit & Push와 함께 동작한다. 빌드 검증의 목적은 다른 개발자의 코드가 통합이 되지 않는 코드를 식별하여 저장소의 반영을 차단함으로써 통합의 어려움 제거하는데 있다. 


Bamboo 빌드 서버는 Bitbucket 저장소를 트리거하여 개발자의 소스 코드가 Commit되면 자동으로 통합 빌드를 수행하고 해당 결과를 Bitbucket에 알려준다. 다음 그림은 Bitbucket 저장소의 Commit 리스트와 해당 Commit에 연결된 JIRA 이슈 정보, 그리고 Bamboo 빌드 정보를 보여주고 있다.



qa03.png


2.3 코드 인스펙션과 SoanrQube

SonarQube는 코드 품질의 지속적인 인스펙션을 위한 Sonar Source에서 개발한  오픈 소스 플랫폼이다. 현재 ABAP, C/C++, Objective-C, COBOL, C#, SonarFlex, Java, JS, PHP, PL/I, PL/SQL, Python, RPG, Swift, VB6, VB.NET, HTML, JSF/JSP, XML와 같은 소스 코드의 인스펙션을 지원하고 있다. 


SonarQube는 조직의 품질 게이트, 즉 전체 코드 품질 요구사항을 설정하여 제품의 전체 코드가 해당 품질 게이트를 통과하는지를 관리한다. 기본적으로 저장소 별 코드 신뢰성, 보안성, 유지보수성, 커버리지, 중복성, 코드 지표를 등급별 가시화할 수 있다. 세부적으로는 소스 저장소에 존재하는 버그, 취약성, 코드 Smells, 단위 테스트 커버리지, 코드 중복성, 코드 라인, 코드 복잡성 등의 정보를 제공한다. 


다음 그림은 SonarQube에서 관리되는 소프트웨어 프로젝트 저장소의 품질 상태를 보여주고 있다. 신뢰성, 보안, 유지보수, 커버리지, 중복성에 대한 그레이드와 최종적으로 조직에서 요구사항 품질 게이트를 통과했는지 여부 가시화하여 프로젝트의 품질 현황을 한눈에 확인할 수 있다.


qa04.png


SonarQube에서 특정 프로젝트를 선택하면 해당 프로젝트에 대한 코드 인스펙션의 세부 정보를 확인할 수 있다. 코드 인스펙션을 위한 룰들은 Rules에서 관리되고 Quality Profile로 묶어서 하나의 룰 셋을 만들 수 있으며, 이러한 룰 셋은 각 프로젝트와 연동되어 현재 프로젝트의 품질 상태를 점검한다. 

다음 그림은 특정 프로젝트에 대한 코드 인스펙션의 세부 정보를 보여주고 있다. 해당 프로젝트에 존재하는 버그의 수와 그레이드, 취약성의 수와 그레이드, 코드 스멜과 수정을 위한 예상 소요일을 알려주는 Debt, 단위 테스트 커버리지, 코드 중복 라인 수를 보여준다. 현황의 우측에는 코드라인 수, 개발 언어, 사용된 품질 게이트와 품질 프로파일 정보, 최근 활동의 리스트 등을 확인한다. 

qa05.png


프로젝트에는 홈 메뉴를 포함하여 Issues, Measures, Code, Activity와 같은 추가적인 정보를 제공한다. Issues에서는 현재 프로젝트에서 인스펙션 상에 존재하는 버그, 취약성, 코드 스멜 이슈의 리스트를 보여주고, 중요도, 상태, 생성일, 룰, 태그, 모듈, 폴더, 파일, 담당자, 작성자, 언어 별로 필터를 수행할 수 있다. 

다음 그림은 현재 프로젝트에 존재하는 전체 이슈 리스트를 보여주고 있으며, 하단에는 선택된 이슈의 문제점과 이 이슈를 해결하기 위한 솔루션을 제공하고 있다. 각 이슈는 이슈의 심각도, 상태, 해결책, 담당자, 수정에 대한 노력, 태그 정보, 파일 명, 라인 번호를 포함하고 있어 현황과 코드에 대한 빠른 추적을 할 수 있게 해준다.

qa06.png


2.4 코드 리뷰

코드 리뷰는 동료 검토라는 용어로 쓰이고 정적분석 도구를 통해 정형화할 수 없는 코드 상의 문제점들을 팀 내의 동료가 검토하는 활동을 말한다. 일반적으로 코드 리뷰는 코드 품질 보장을 위한 활동으로 알려져 있지만, 동료들이 개발한 코드를 통해 자신의 코딩 실력을 향상시키는데 도움을 줄 수 있다. 

다음 그림은 Bitbucket 상에서 코드 리뷰를 수행하는 화면을 보여주고 있다. 코드 리뷰는 Pull Request와 함께 생성되며, Diff 탭에서 소스코드를 비교하고 Comment를 추가하면서 리뷰를 수행한다. 필요에 따라서 Task를 할당하여 해당 Task가 완료되지 않으면 소스 코드의 Merge를 방지할 수 있게 한다.

qa08.png


앞서 설명한 SonarQube의 코드 인스펙션을 Bitbucket의 Diff 창에 표현하여 코드 리뷰어들이 코드를 Merge를 결정하는데 도움을 줄 수 있다. 다음 그림은 SonarQube의 코드 인스펙션 결과를 Bitbucket 코드 리뷰 상에서 함께 보는 예시이다. 


qa09.png


앞서 설명한 품질 게이트키퍼의 모든 활동(빌드검증, 단위테스트, 정적분석, 코드 인스펙션)이 종료되고 코드에 문제가 없음을 확인되면 최종적으로 소스코드를 중앙 저장소(Master Branch)로 Merge하여 수정된 코드를 반영한다.

2.5 개발 추적

고객 혹은 요구사항 작성자는 자신의 사용자 스토리에서 요구하는 모든 사항이 개발되었고 조직에서 요구하는 코드 품질을 통과하였고 코드 리뷰가 완료되었음을 확인하기 원할 것이다. 일반적으로 요구사항과 개발 코드의 추적은 해결이 힘든 사항 중에 하나이지만, JIRA 기반으로 요구사항을 관리하고 품질게이트 활동을 수행하면 자연스럽게 요구사항과 개발을 추적할 수 있다.  

다음 그림은 JIRA 사용자 스토리의 화면으로 하단 Development 패널을 보면 개발을 위한 브랜치, 개발 커밋, 코드 리뷰 및 Merge 상태, 빌드 검증 상태를 확인할 수 있다. 

qa10.png


관련 데모 영상은 다음 링크에서 확인할 수 있다.



Atlassian Gold Partner 주식회사 커브

  • 문의하기 : http://qa.curvc.com

Who's PSEG

profile

PSEG는 Practical Software Engineering Group의 약자입니다. 

이론을 넘어 실용적으로 활용할 수 있는 소프트웨어 공학을 공유하는게 그룹의 목적입니다.

?

 


  1. Jira Linux 메모리 증설 방법

    JIRA Memory 설정JIRA의 <Install_directory>/bin/setenv.sh 파일을 아래 그림과 같이 수정 후 서비스를 재시작 한다. JVM_MINIMUM_MEMORY="2048m" JVM_MAXIMUM_MEMORY="2048m" JIRA web접속을 하여 System > System Info 탭의Java VM Memory Statistics의 T...
    Date2018.06.05 CategoryJIRA ByTom Reply0 Views624
    Read More
  2. Jira Window 메모리 증설 방법

    JIRA Memory 설정JIRA Memory 설정하기 위해 서비스를 중지 하고 실행 파일 경로를 복사 한다. cmd 실행 하여 tomcat8.exe //RS 를 tomcat8w //ES 으로 변경 하여 실행한다. JAVA 탭으로 이동하여 Initial memory pool, Maximum memory pool...
    Date2018.06.05 CategoryJIRA ByTom Reply0 Views754
    Read More
  3. No Image

    Academic pricing (50% 할인)

    Atlassian은 자격을 갖춘 교육 기관에 서버 라이센스를 50 % 할인합니다. 다음 기관들은 Atlassian Academic 라이센스를 취득 할 자격이 있습니다 : 교육 기관 : 공립 또는 사립 직업 학교, 방송 통신 학교, 단기 대학, 단과 대학, 대학 또는 국가인가 ...
    Date2017.12.02 CategoryETC ByTerry Reply0 Views1043
    Read More
  4. Agile ALM with Atlassian - 7부 빌드, 릴리즈, 배포 관리

    7부에서는 Agile ALM에서 말하는 빌드, 릴리즈, 배포 관리를 Atlassian 솔루션과 함께 구현하는 방법에 대하여 소개합니다. 이 시리즈의 다른 내용을 다음 링크를 통해 확인할 수 있습니다. Agile ALM with Atlassian - 1부 ALM 이란 Agile ALM with Atlassian...
    Date2017.07.14 CategoryETC ByPSEG Reply0 Views3524
    Read More
  5. Agile ALM with Atlassian - 6부 코드 품질 보장 활동

    6부에서는 Agile ALM에서 말하는 코드 품질 보장 활동을 Atlassian 솔루션과 SonarQube 솔루션으로 함께 구현하는 방법에 대하여 소개합니다. 이 시리즈의 다른 내용을 다음 링크를 통해 확인할 수 있습니다. Agile ALM with Atlassian - 1부 ALM 이란 Agile A...
    Date2017.07.14 CategoryETC ByPSEG Reply0 Views2814
    Read More
  6. Agile ALM with Atlassian - 5부 아키텍처와 디자인

    5부에서는 Agile ALM에서 말하는 심플 아키텍처와 디자인을 Atlassian 솔루션과 함께 구현하는 방법에 대하여 소개합니다. 이 시리즈의 다른 내용을 다음 링크를 통해 확인할 수 있습니다. Agile ALM with Atlassian - 1부 ALM 이란 Agile ALM with Atlassian ...
    Date2017.07.12 CategoryETC ByPSEG Reply0 Views3124
    Read More
  7. Agile ALM with Atlassian - 4부 스크럼 프로젝트 관리

    4부에서는 Agile ALM에서 말하는 스크럼 프로젝트 관리를 Atlassian 솔루션과 함께 구현하는 방법에 대하여 소개합니다. 이 시리즈의 다른 내용을 다음 링크를 통해 확인할 수 있습니다. Agile ALM with Atlassian - 1부 ALM 이란 Agile ALM with Atlassian - ...
    Date2017.07.12 CategoryETC ByPSEG Reply0 Views2883
    Read More
  8. Agile ALM with Atlassian - 3부 요구사항 관리와 사용자 스토리

    3부에서는 Agile ALM에서 말하는 요구사항 관리를 Atlassian 솔루션과 함께 구현하는 방법에 대하여 소개합니다. 이 시리즈의 다른 내용을 다음 링크를 통해 확인할 수 있습니다. Agile ALM with Atlassian - 1부 ALM 이란 Agile ALM with Atlassian - 2부 Agi...
    Date2017.07.12 CategoryETC ByPSEG Reply0 Views3714
    Read More
  9. No Image

    JIRA issue export가 안될 때 체크 포인트

    JIRA issue export가 안될 때 체크 포인트 하나 공유드립니다. Atlassian JIRA는 한 번에 export 가능한 issue 개수를 (디폴트) 1,000개로 설정하고 있습니다. 이유는 너무 많은 이슈 목록을 처리할 때 메모리 부족을 방지하기 위함이랍니다. 다행히 ex...
    Date2017.07.10 CategoryJIRA ByTerry Reply0 Views1295
    Read More
  10. Agile ALM with Atlassian - 2부 Agile ALM 이란

    2부에서는 Agile ALM에서 말하는 Agile ALM의 정의와 Atlassian 솔루션과 함께 구현하는 방법에 대하여 소개합니다. 이 시리즈의 다른 내용을 다음 링크를 통해 확인할 수 있습니다. Agile ALM with Atlassian - 1부 ALM 이란 Agile ALM with Atlassian - 2부 ...
    Date2017.07.10 CategoryETC ByPSEG Reply0 Views2880
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7