형상관리(Configuration Management)
형상관리 계요
소스 버전관리 도구는 시스템 형상 요소(소스 및 데이터)를 문서화하고 변경을 버전관리 절차에 따라 관리하고, 효율적으로 처리 하기 위한 통졔된 환경을 의미합니다.
형상관리 특징 및 기능
* 형상요소에 대한 변경 사항을 관리
* 버전관리를 수행하고, 배포도구를 통해 변경사항을 배포
* 일정주기에 백업도구를 통해 백업을 수행

이름 |
설명 |
CVS |
Revison Control System이라 불린 초기 버전관리 시스템의 기원, 프로젝트 전체를 형상관리할 수 없는 단점등 초창기 버전관리 도구로써 제약 사항을 가지고 있음 |
Subversion |
프리소프트웨어 버전관리 시스템, SVN이라고 줄여서 부르기도 한다. 제한이 있던 CVS를 대체함. 현재도 개선/버전 업이 이루어진다. |
OpenCM |
제한이 있던 CVS를 대체하기위한 안전하고 완전성 높은 형상관리 도구이나, 사용층이 얇고 오픈소스 프로젝트의 진행이 정체된 상태 |
SVN 설명 -1
CVS 대비 SVN의 특장점
* CVS와 거의 동일한 사용법.
* Commit 단위 : CVS는 개별 파일별로 리버전관리, SVN은 변경이 발생하는 파일별로 리버전관리
* Atomic Commit : 여러 파일 Commit시 커밋이 실패할 경우, CVS는 실패한 파일의 앞까지만 커밋이됨. SVN은 전체 파일이 이전상태로 롤백
* 트리별, 파일별 접근 제어 리스트 지원
* 파일에 대한 이름변경/이동, 디렉토리 버전 관리도 지원됨
* CVS에 비해 빠른 동작속도
저장소, Repository
* 프로젝트의 모든 소스들과 소스에 대한 변경 사항이 저장됨
* 네트워크를 통해 여러 사람이 접근가능

Revisions(수정, 변경)
* 소스 파일 등을 수정하여 Commit하면 일정한 규칙에 의해 숫자가 증가
* 파일 별로 리비전이 매겨지지 않고 변경발생 단위로 전체 리비전이 매겨짐<br>쉽게말해서, 파일 하나를 수정했더라도 상위의 폴더까지 같이 커밋이 된다는 뜻
* 리비전을 보고 프로젝트 진행 상황을 알 수 있음

Check Out
* 저장소에 소스를 받아오는 것
* 저장소 인증 정책에 따라 ID, Password로 사용자를 판단함.

Update
* 저장소에 있는 소스 중 로컬과 비교하여 변경된 항목의 최신 버전의 소스를 가져옴

Commit
* Check Out한 소스를 수정, 파일추가, 삭제 등을 한 뒤 저장소에 저장하여 갱신하는 작업
* Commit을 하면 전체의 Revision이 1 증가

History
* SVN에 관리되는 소스와 관련된 데이터의 과거 모든 리비전 내역을 출력

충돌
* 로컬에 체크아웃 이후 수정한 소스를 저장소에 Commit할때, 저장소의 Revision이 더 높을 경우 충돌 발생(타인에 의해 수정되어 Commit된 상태)
* 충돌 해결 방안

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
- 컴파일, 테스트, 정적분석 등을 실시해 동작 가능한 소프트웨어를 생성
- Ant, Maven, MSBuild, Make
- 작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로, 빌드 툴의 스크립트에서 실행
- JUnit, CppUnit, CppTest, MSTest, Selenium(사용자테스트 자동화 기능)
- 테스트 코드가 대상 소스 코드에 대해 어느정도 커버하는지 분석하는 도구
- 개발자가 작성한 테스트코드가 테스트대상 소스코드에 대해서 어느정도 테스트를 수행하는지를 코드라인과 백분율을 통해 리포틍하는 것
- Emma, Cobertura, TestCocoon
- 프로그램을 실행하지 않고, 소스코드 자체로 품질을 판단할 수 있는 정적분석 도구
- 코딩 표준 준수 검사, 코드 메트릭 측정, 중복코드 검사, 코드 인스팩션 검사 등
- 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 화면에 보여주는 기능을 제공한다.

