Java/전자정부프레임워크(eGov)

5. egov 구현도구의 CI

전거가감 2015. 9. 16. 12:26
반응형

 

CI(Continuous Integration)

CI의 정의

- 지속적으로 품질관리를 적용하는 프로세스를 실행하는 것
- 모든 개발을 완료한 후에 품질관리를 적용하는 고전적인 방법을 대체하는 방법으로서 소프트웨어의 질적 향상과 소프트웨어를 배포하는데 걸리는 시간을 줄이는데 초첨
- 초기 및 자주 통합시 발생하는 여러가지 문제점을 조기에 발견하고, 피드백 사이클을 짧게하여 소프트웨어 개발의 품질과 생산성을 향상시키는것.

CI 시스템을 구축하지 않은 경우

- 개발자들이 각자 개발한 소스코드를 SVN에 Commit하면 별도의 품질관리를 거치지 않고, 대부분 개발이 끝난 막바지에 통합을 하고 테스트함
- 잘못된 소스코드가 SVN에 반영되었을 경우 발생하는 문제는 개발 후반에 모두 장애로 발견됨

CI 시스템을 구축한 경우

- SVN에 Commit된 소스코드를 주기적으로 플링하여 컴파일, 단위테스트, 코드 인스펙션 등의 과정을 수행하며 신규 또는 수정된 소스코드가 결함이 있는지의 여부를 지속적으로 검증합니다.
- 검증결과는 이메일, RSS등의 피드백 메커니즘을 통해 개발자에게 전도리되고, 이를 통해 조기에 결함을 발견 및 해결 할 수 있습니다.

CI의 구성요소

1. CI Server

- 빌드 프로세스를 관리하는 서버
- Jenkins, Hudson, CruiseControl.NET, TeamCity

2. SCM(Souce Code Management)

- 소스코드 형상관리 시스템
- 소스코드의 개정과 백업 절차를 자동화하여 오루 수정과정을 도와 줄 수 있는 시스템
- 여러 사람이 같은 프로젝트에 참여하는 경우, 각자가 수정한 부분을 팀원 전체가 자동으로 동기화할 수 있는 시스템
- Subversion, Git, Mercurial

3. Build Tool

- 컴파일, 테스트, 정적분석 등을 실시해 동작 가능한 소프트웨어를 생성
- Ant, Maven, MSBuild, Make

4. Test Tool

- 작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로, 빌드 툴의 스크립트에서 실행
- JUnit, CppUnit, CppTest, MSTest, Selenium(사용자테스트 자동화 기능)

5. Test Coverage Tool

- 테스트 코드가 대상 소스 코드에 대해 어느정도 커버하는지 분석하는 도구
- 개발자가 작성한 테스트코드가 테스트대상 소스코드에 대해서 어느정도 테스트를 수행하는지를 코드라인과 백분율을 통해 리포틍하는 것
- Emma, Cobertura, TestCocoon

6. Inspection Tool

- 프로그램을 실행하지 않고, 소스코드 자체로 품질을 판단할 수 있는 정적분석 도구
- 코딩 표준 준수 검사, 코드 메트릭 측정, 중복코드 검사, 코드 인스팩션 검사 등
- CheckStyle, FindBugs, Cppcheck, Valgrind
- JUnit과 달리 소스코드 자체의 예상되는 잠재적인 결함을 검출하는 도구

CI 자동화 수행 절차

1. 소스코드를 바이너리 파일로 컴파일 한다.
2. 바이너리 파일을 배포 형태로 패키징 한다.
3. 단위테스트(커버리지 포함) 수행한다.(선택)
4. 정적분석을 수행한다(선택)
5. 분석 결과를 리포팅 한다.(선택)
6. 패키징한 파일을 테스트 서버에 배포한다.

CI 효과

* 흔히 발생하는 일반적인 위험을 줄여준다.
* 에러를 초기에 발견할 수 있다.
* 잘 동작하고 에러가 거의 없는 S/W를 유지 할 수 있다.
* 언제 어느 때라도 배포 할 수 있는 S/W를 생성해낸다.
* 반복적인 수작없을 줄여준다.
* 프로젝트 가시성을 좋게 해준다.

Hudson

Hudson 개요

Hudson은 오픈 소스 Ci 서버로 소스 빌드 스크립트를 사용한 자동 빌드 및 빌드결과를 개발자에게 피드백하는 기능을 제공함

Hudson 특징

* 쉬운 Installation : hudson.war형태로 servlet container에 배포
* 웹 기반 UI를 통한 쉬운 설정 및 즉각적인 피드백
* 플러그인 기반의 확장성 제공
* 깔끔하고 잘 정의된 문서 및 API

Hudson 주요특징

* 소프트웨어 자동 빌드 : 빌드 주기에 따른 일일 빌드 또는 주간 빌드 기능 제공
* 지속적이고 자동화된 빌드 검증 : SCM Polling 기능을 통한 최신 코드 기반의 빌드 수행 및 품질 검증
* 빌드 후속 절차 자동화 : 컴파일된 코드의 패키징 및 테스트 리포팅 기능 제공

Hudson Dashboard

Hudson은 빌드 결과 및 테스트 결과 등을 보여주는 대시보드 기능을 제공함

Hudson 프로젝트 메뉴

Hudson은 등록된 프로젝트의 소스 코드 변경 내용 추적을 위한 메뉴와 수동 빌드 그리고 프로젝트 빌드 상태를 보여주는 메뉴 등을 제공하고 있다.

Hudson - JUnit 연동

Hudson은 기본 설정으로 빌드 스크립트를 이용해 생성한 JUnit 테스트 리포트를 브라우저에 출력해 주는 기능을 제공하고 있으며 테스트의 Progress 누적 그래프를 Hudson 프로젝트의 초기 화면에 보여주는 기능을 제공한다.

Hudson - Inspection 도구 연동

Hudson은 코드 인스팩션 도구인 PMD 플러그인을 제공하며 빌드 스크립트를 통해 수행한 PMD 결과 리포트를 PMD 플러그인을 통해 Hudson 화면에 보여주는 기능을 제공한다.


 

반응형