C/C++ 환경에서의 CI( 지속적통합 ) 구축사례
목차 Ⅰ. 개요 Ⅱ. 추진배경 Ⅲ. 개발환경구축 ( 도구연계 ) Ⅳ. 도구연계성과 page 2
Ⅰ. 개요 : 1. 조사대상소개 K사 Z프로젝트개요 3차원광학기술을이용한검사장비시스템개발 도메인 : 제조 개발형태 : 패키지 SW 개발 개발언어 : C/C++ 개발인력 : 약 14 명 개발기간 : 약 16 개월 프로젝트상세 Key Features 3차원측정값을사용한혁신적불량판별방식으로가성에러발생을원천차단 측정값과공인스탠다드를이용한직관적인프로그램작성및검사조건설정 투명도, 색깔, 그림자등주변환경및부품특성에영향을받지않는 3차원기반검사가능 page 3
Ⅱ. 추진배경 : 1. 기존개발환경 개발및프로젝트관리 형상관리오픈소스도구인 SVN(Subversion) 를활용하여소스코드형상관리수행 MS Visual Studio 2008 버전을이용하여소프트웨어개발수행 통합빌드 통합담당자를할당하여개발이어느정도완료된시기에통합빌드수행 대규모통합으로인해통합시잦은오류발생 테스트 각개발자별수동으로코드를작성하여단위테스트수행 거의대부분개발자가단위테스트결과물을남기지않음 기존개발환경구성및개발흐름도 개발자 PC 1 MS Visual Studio 2008 - C/C++ 코드개발 - 개인빌드수행 개발자 형상관리 Repository (with SVN) 2 3 4 통합담당자 1 소스코드개발및관리 2 주기적인소스코드체크인 3 릴리즈시점에소스코드통합빌드및배포 4 통합오류메시지전달 page 4
Ⅱ. 추진배경 : 2. 문제점분석 1. 개발막바지에이르러통합작업수행 개발자간잘못된의사전달로인해수많은오류발생 각종오류를한꺼번에처리해야만하는 Integration Hell 현상발생 통합시점에이미소스코드가방대해져오류의원인파악및해결을위해많은시간할애 기존통합방식 통합빌드 형상관리 Repository (with SVN) 개발자 통합담당자 개발자각각맡은부분에대하여개발및수정진행 통합시점이늦어그동안발생한타인이맡은모듈에대한수정을고려하지못함 개인 PC 에서는빌드가제대로되는반면통합빌드시많은오류발생 page 5
Ⅱ. 추진배경 : 2. 문제점분석, 계속 2. 수작업에의한테스트수행 개별단위테스트는수행되지만테스트케이스가보존되지않음 별도의테스트커버리지를측정하지않아테스트수행정도를가늠하기어려움 회귀테스트 * 수행시테스트케이스를새로작성해야하기때문에막대한공수를필요로함 * 회귀테스트 : 개발과테스트를완료한모듈에서오류제거및수정과같은변경이일어날경우, 이러한변경에의해유입된오류가없는지를확인하는일종의반복시험 기존단위테스트방식 1. 표준방식없이개별단위테스트수행 일반적으로단일모듈빌드및실행후입력파라미터값입력결과가정확하지않음에도대략예상한바와같이나올경우개발자직관에따라테스트종료 2. 테스트커버리지측정미수행 int add(int a, int b) { int x = a; int y = b; int z = x + y; 빌드및실행 } return z; 파라미터입력및결과확인 테스트케이스가보존되지않음 회귀테스트를포함한재테스트시테스트수행공수증가 테스트시실행된코드의정도파악불가 실행되지않은코드에서결함이발생할가능성내포 page 6
Ⅱ. 추진배경 : 2. 문제점분석, 계속 3. 통합오류에대한빠른대처부족 통합빌드오류를통합담당자가각개발자에게직접전달 개발자가해당소스코드를개발한후많은시간이흘러통합오류확인 통합오류에대하여신속한대응체계를갖추지못함 기존통합오류확인방식 개발자 통합담당자 통합오류가실제해당코드를작성한개발자에게전달되지않고누락되는경우발생 통합오류를확인하고해결하는데많은시간소요 page 7
Ⅱ. 추진배경 : 3. 개선방향 1. 개발막바지에이르러통합작업수행 2. 수작업에의한테스트수행 3. 통합오류에대한빠른대처부족 통합빌드, 단위테스트및테스트커버리지측정, 통합빌드및테스트결과이메일발송을위한통합개발환경구축필요 page 8
Ⅲ. 개발환경구축 : 1. 구축시고려사항 ( 구축제약사항 ) 개발환경구축목적확인 형상관리, 통합빌드, 단위테스트수행및테스트커버리지측정, 테스트를포함한빌드결과의손쉬운확인이가능한통합개발환경필요 자동화대상기능선정 기존의형상관리시스템에서관리중인소스코드들을자동으로빌드하는환경구축 빌드시단위테스트수행및테스트커버리지측정, 빌드및테스트결과이메일발송필요 개별도구선정 선정조건 1: 개발언어에맞는도구선정 C++ 선정조건 2: 오픈소스도구, 상용도구에상관없이현재개발환경에적합한도구선정 선정조건 3: 향후개발 IDE 버전업그레이드를가정하여도구선정 (Visual Studio 2008->Visual Studio 2010) 도구간연계성파악 기존형상관리시스템인 SVN 과연계가가능한도구위주로선정 기존개발 IDE 와연계가가능한도구위주로선정 page 9
Ⅲ. 개발환경구축 : 2. 통합개발환경구성도 8 빌드서버 (with MS Windows Server 2008 R2) 공유폴더 개발자 1 7 빌드관리자 형상관리 Repository (with SVN) 2 E-mail Service (with SMTP 6 Build Scheduling & Build Script (with TFS 2010) 3 4 5 Compile & Build (with VS 2008) Unit Test (with GTest) Test Coverage Analysis (with VS 2010 Ultimate) Build Report Unit Test Report Test Coverage Report 1 소스코드개발및관리 ( 테스트케이스개발포함 ) 2 최신소스코드자동체크아웃 ( 업데이트 ) 3 정해진스케쥴링에따라자동빌드수행 4 빌드시단위테스트자동수행 5 빌드시커버리지분석자동수행 6 빌드실패시이메일전송 7 빌드오류검토및공유 8 빌드결과확인 page 10
Ⅲ. 개발환경구축 : 2. 통합개발환경구성도 ( 상세 ) 개발자 PC MS Visual Studio 2008 - C/C++ 코드개발 - 개인테스트수행 (with google test) - 개인빌드수행 형상관리 Repository (with SVN) 빌드서버 PC (with MS Windows Server 2008 R2) MS Team Foundation Server 2010 Build Service - 주기적통합빌드수행 - 통합단위테스트수행 / 테스트커버리지측정 MS Visual Studio 2008 - 일반프로젝트및테스트프로젝트컴파일 개발자 빌드관리자 MS Visual Studio 2010 Ultimate - 테스트커버리지수행및결과확인 - 빌드프로세스정의 - 이메일전송설정 SMTP 가상서버 - 이메일전송요청 page 11
Ⅲ. 개발환경구축 : 3. 통합개발환경흐름도 통합개발환경에서의각역할자행위흐름시나리오 각개발자는기존의개발방식대로개발이가능 빌드서버를사용한통합빌드및테스트자동화를통해빌드및테스트실패시이메일로내용전송 빌드및테스트결과를언제든지특정공유폴더에접근하여확인가능 개발자 프로그램개발 테스트케이스개발 소스코드커밋 통합빌드및테스트오류확인 빌드서버 소스코드 체크아웃 ( 업데이트 ) 통합빌드 테스트실행 결과이메일전송 ( 빌드및테스트실패시 ) 빌드관리자 통합빌드 / 테스트결과이메일확인 통합빌드및테스트오류확인 통합빌드및테스트오류전파 page 12
Ⅲ. 개발환경구축 : 4. 개별도구상세 (MS Team Foundation Server 2010) MS Team Foundation Server(TFS) 2010: 프로젝트의빌드스케줄링및빌드내역관리를위한상용 CI 도구 1. 기본구성 MS TFS 2010 개요 Application Management Lifecycle(ALM) 지원 - 프로젝트의모든생명주기에걸쳐응용프로그램개발에필요한기능을한도구에내포하여검증된방법을통해응용프로그램의수명주기관리가능 - 소스관리, 테스트관리, 빌드관리및작업항목 ( 이슈 ) 관리기능포함 2. Dashboard 설정된모든프로젝트의빌드현황을그래피컬하게제공 MS TFS 2010 을사용한 ALM 관리 Team Foundation Server 미사용시 Team Foundation Server 사용시 3. 한계점 2010 버전에서는 C# 언어및 managed C++ 언어에대해서만테스트기능지원 - C 언어및 native C++ 언어사용시테스트실행및관리를위해별도의테스트프레임워크필요 * http://msdn.microsoft.com page 13
Ⅲ. 개발환경구축 : 4. 개별도구상세 (MS Visual Studio 2010 Ultimate) MS Visual Studio(VS) 2010: C 언어기반의언어 (C++, C# 등 ) 를사용한응용프로그램개발에도움을주는상용 IDE 도구, 버전 (Professional, Premium, Ultimate 등 ) 에따라추가적인기능지원 MS VS 2010 개요 MS VS 2010 을이용한테스트커버리지측정예시 1. MS VS 2010 개요 C 언어기반의 IDE 도구 2. MS VS 2010 Ultimate 지원기능 MS TFS 2010 과의연계를통한 Team Project 관리가능 테스트케이스생성및실행, 테스트커버리지측정기능포함 2. MS VS 2010 Ultimate 의테스트지원 C# 언어및 managed C++ 언어에대한테스트및테스트커버리지측정 - IDE 상에서버튼선택의형태로수행가능 C 언어및 native C++ 언어사용시테스트및테스트커버리지측정 - IDE 상에서수행불가 - 별도의테스트프레임워크를사용하여테스트수행 - 설치폴더의 vsinstr.exe, vsperfmon.exe, vsperfcmd.exe 파일을수동실행하여테스트커버리지측정가능 * http://msdn.microsoft.com page 14
Ⅲ. 개발환경구축 : 4. 개별도구상세 (Google C++ Testing Framework) Google C++ Testing Framework(GTest): 자동화된단위테스트수행을위한 C/C++ 기반의오픈소스테스트프레임워크 Google C++ Testing Framework 개요 1. GTest 개요 C/C++ 기반의오픈소스테스트프레임워크 기본적으로 JUnit 의개념을 C/C++ 언어에서사용하기위하여 google 에서개발및배포 2. GTest 장점 테스트흐름제어 - 테스트함수가 ASSERT 와 EXPECT 계열로분리되어테스트흐름을제어하는것이가능 (ASSERT 사용시테스트케이스가실패이면다음테스트로넘어가는반면, EXPECT 사용시실패하더라도나머지테스트케이스를모두실행 ) 테스트옵션설정 - 테스트케이스를선별적으로실행또는실행횟수조절가능 - 테스트실패시브레이크설정가능 빌드에대한통합 - Visual Studio 를사용하는경우실행하여바로출력창에서결과확인가능 - 빌드와통합되어자동화된테스트실행가능 * http://code.google.com/p/googletest/ GTest 주요 Assertion 문 Fatal assertion Nonfatal assertion Verifies ASSERT_TRUE(conditio n); ASSERT_FALSE(conditi on); EXPECT_TRUE(conditio n); EXPECT_FALSE(conditi on); condition is true condition is fals e Fatal assertion Nonfatal assertion Verifies ASSERT_EQ(expected, actual); ASSERT_NE(val1, val2); EXPECT_EQ(expected, actual); expected == ac tual EXPECT_NE(val1, val2); val1!= val2 ASSERT_LT(val1, val2); EXPECT_LT(val1, val2); val1 < val2 ASSERT_LE(val1, val2); EXPECT_LE(val1, val2); val1 <= val2 ASSERT_GT(val1, val2); EXPECT_GT(val1, val2); val1 > val2 ASSERT_GE(val1, val2); EXPECT_GE(val1, val2); val1 >= val2 page 15
Ⅲ. 개발환경구축 : 5. 도구연계 ( 설치개요 ) 설치절차 먼저 GTest 및 MS TFS 2010 및 MS VS 2010 Ultimate를빌드서버에설치 각개발자별테스트케이스생성을위해개발자들도 GTest를동일한방법으로설치 MS TFS 2010에서제공하는기본빌드프로세스템플릿을사용하여실제빌드순서에따라빌드프로세스정의 1 2 3 4 GTest 설치및테스트 MS TFS 2010 설정 MS VS 2010 Ultimate 설정 빌드프로세스정의 설치프로그램실행을통한 GTest 설치 GTest 적용을위해 Visual Studio 프로젝트속성설정 팀프로젝트환경구성 빌드서비스등록및구성 일일빌드환경설정 E-mail Alert Service 구성 테스트커버리지측정을위해 Performance Tool 위치정보 환경변수등록 MS TFS 2010에서제공하는기본빌드프로세스템플릿을활용하여실제빌드순서에따라빌드프로세스정의 * 빌드서버에기본컴파일을위한컴파일도구 (MS Visual Studio 2008) 는사전에설치되어있어야함 page 16
Ⅲ. 개발환경구축 : 5. 도구연계 (GTest 설치및테스트 ) GTest 라이브러리빌드 1. 다음의 URL에서 GTest 최신버전을다운로드 http://code.google.com/p/gtest/downloads/list 2. 다운로드한파일을적절한경로에압축해제한후 msvc 폴더로이동 해당폴더가기본적으로 읽기전용 으로설정되어있음으로, 속성 에서이를해제함 3. GTest 라이브러리솔루션인 gtest.sln을열어서설정을일관되게조정 구성 : Release/Debug, 32/64 라이브러리 : MD, MDd, MT, MTd 언어 : 멀티바이트 / 유지코드 참고 : MFC 사용은기본값인 표준 을적용함 ( 변경할필요없음 ) 4. 생성된라이브러리확인 Debug 폴더 : gtestd.lib/gtest_maind.lib Release 폴더 : gtest.lib/gtest_main.lib page 17
Ⅲ. 개발환경구축 : 5. 도구연계 (GTest 설치및테스트 ), 계속 Visual Studio 프로젝트속성설정 Visual Studio 2008 을실행하여새로운 Windows 콘솔응용프로그램을위한빈프로젝트를생성하고프로젝트의구성속성을다음과같이설정 C/C++ -> 일반 -> 추가포함디렉터리에압축해제한 GTest 폴더하위의 include 폴더추가 링커 -> 일반 -> 추가라이브러리디렉터리에앞서정의한 GTest_Lib 폴더추가 C/C++ -> 코드생성 -> 런타임라이브러리의값을 /MTd(Debug 모드시 ), /MT(Release 모드시 ) 로변경 빌드이벤트 -> 빌드후이벤트의명령줄에 "$(TargetPath)" 추가 ( 큰따옴표포함하여추가 ) page 18
Ⅲ. 개발환경구축 : 5. 도구연계 (GTest 설치및테스트 ), 계속 GTest 를활용하여테스트코드작성시유의사항 테스트대상파일관련포함디렉터리및라이브러리디렉터리는대상에맞게설정 #include "GTest\GTest.h" #include "BankAccountDll.h" // GTest 를사용하기위한헤더파일추가 // 테스트대상헤더파일추가 #ifdef _DEBUG #pragma comment(lib, "GTestd.lib") #pragma comment(lib, "GTest_maind.lib") #else #pragma comment(lib, "GTest.lib") #pragma comment(lib, "GTest_main.lib") #endif // Debug 모드와 Release 모드에따라 // 각기다른라이브러리파일을필요로하기때문에작성 #pragma comment (lib, "BankAccountDll.lib") // 테스트대상명시 TEST(FirstTest, init) { // TEST( 테스트케이스명, 테스트명 ) 으로실행할테스트정의 CBankAccount *target = new CBankAccount("Mr.Brown", 100); EXPECT_EQ(99, target->getbalance()); // ASSERT 또는 EXPECT를사용하여테스트함수수행 } page 19
Ⅲ. 개발환경구축 : 5. 도구연계 (GTest 설치및테스트 ), 계속 GTest 를활용한간단한테스트실행 작성한파일을빌드하면 ' 빌드후이벤트 ' 실행으로인해출력창에다음과같은테스트결과확인가능 테스트실패시출력창에서테스트실패메시지를더블클릭하면해당코드라인으로이동하여내용확인가능 page 20
Ⅲ. 개발환경구축 : 5. 도구연계 (MS TFS 2010 설정 ) MS TFS 2010 설정 MS TFS 2010 을사용하여빌드및테스트환경을설정할경우다음과같은순서로진행함 1. 팀프로젝트환경구성 2. 빌드서비스등록및구성 3. 일일빌드환경설정 4. E-mail Alert Service 구성 상기설정은대부분 Microsoft 사의 MSDN 홈페이지 ( http://msdn.microsoft.com) 가이드를참고하면별다른문제없이설정가능 3. 일일빌드환경설정은 Java 기반의통합빌드도구에서지원하는빌드스크립트의역할을대신함 4. E-mail Alert Service 구성의경우 SMTP 기반의이메일전송을가능하게함 page 21
Ⅲ. 개발환경구축 : 5. 도구연계 (MS TFS 2010 설정 ), 계속 일일빌드환경설정시유의사항 일일빌드환경설정은 Java 기반의통합빌드도구에서지원하는빌드스크립트의역할을대신함 빌드설정창에서정해진시간에빌드를수행하도록하는것이가능 빌드후출력파일은반드시공유설정이되어있는폴더로만설정가능 page 22
Ⅲ. 개발환경구축 : 5. 도구연계 (MS TFS 2010 설정 ), 계속 E-mail Alert Service 구성시유의사항 E-mail Alert Service 구성의경우 SMTP 기반의이메일전송을가능하게함 팀설정옵션의프로젝트경고항목을이용하여이메일전송설정가능 하지만기본프로젝트경고서비스를사용할경우빌드성공, 실패여부에상관없이메일이발송됨 page 23
Ⅲ. 개발환경구축 : 5. 도구연계 (MS TFS 2010 설정 ), 계속 E-mail Alert Service 구성시유의사항, 계속 E-mail Alert Service 구성의경우 SMTP 기반의이메일전송을가능하게함 빌드실패시에만이메일전송을위해, Microsoft 홈페이지에서 'TFS Power Tools' 를다운로드하고설치함 'TFS Power Tools' 가설치된후에는팀항목하위에 'Alerts Explorer' 항목이추가로생성되며이항목을이용하여빌드실패시에만이메일전송을하도록설정가능 page 24
Ⅲ. 개발환경구축 : 5. 도구연계 (MS VS 2010 Ultimate 설정 ) 테스트커버리지측정을위한준비사항 1. 측정대상 dll 파일 ( 구성속성 > 링커 > 고급 > 프로필속성을 예 (/Profile) 로변경하여빌드한 dll 파일 2. 테스트실행파일 ( 구글테스트를활용하여빌드한 exe 파일 ) 테스트실행파일과측정대상 dll 파일은같은폴더내에위치시켜야함 dll 파일은테스트커버리지측정시변경되므로원본은따로폴더를생성하여유지하는것을추천 3. 환경변수등록 ( 내컴퓨터 > 속성 > 고급시스템설정 > 환경변수 > 시스템변수 > Path 변수편집 ) 32bit : $(Visual Studio 2010 설치경로 )\Team Tools\Performance Tools\; 추가 64bit : $(Visual Studio 2010 설치경로 )\Team Tools\Performance Tools\x64\; 추가 예 : C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Performance Tools\; page 25
Ⅲ. 개발환경구축 : 5. 도구연계 (MS VS 2010 Ultimate 설정 ), 계속 수동명령어실행을통한테스트커버리지측정방법 1. Instrumentation cmd 창을실행하여다음의명령어실행 명령어 : vsinstr coverage 테스트대상 dll 파일명 2. 테스트커버리지모니터실행 Instrumentation이완료되면이어서다음의명령어를실행 명령어 : vsperfmon coverage -output:( 측정결과파일명 ).coverage 3. 테스트파일실행 새로운 cmd 창을실행하여테스트파일 (exe) 실행 예시 : d:\workspace\projects\dlltest\debug\dlltest.exe 4. 테스트커버리지모니터종료 다음의명령어를실행하여테스트커버리지모니터종료 명령어 : vsperfcmd -shutdown MS TFS 2010 을사용하여빌드자동화시에는위의명령어를해당빌드프로세스양식으로기술 page 26
Ⅲ. 개발환경구축 : 5. 도구연계 ( 빌드프로세스정의 ) 빌드프로세스템플릿을활용한빌드프로세스정의 MS TFS 2010 의일일빌드환경설정시, 빌드프로세스템플릿을통해빌드프로세스정의가능 기본컴파일및빌드를위한기본빌드프로세스템플릿은지원되며, 아래그림과같이도구상자의항목을끌어와각각의내용을파라미터형태로입력하는것으로빌드프로세스정의가능 Java 기반의빌드자동화지원도구에서빌드스크립트를직접작성하는것에비해그래피컬인터페이스를지원하여사용자편의성이좋음 도구상자의활동을조합하여빌드프로세스정의 page 27
Ⅲ. 개발환경구축 : 5. 도구연계 ( 빌드및테스트결과확인 ) 빌드결과확인 빌드탐색기를통해일일빌드환경에서정의한빌드의수행여부확인가능 page 28
Ⅲ. 개발환경구축 : 5. 도구연계 ( 빌드및테스트결과확인 ), 계속 빌드오류이메일공지사례 일일빌드실패 ( 테스트실패포함 ) 시이메일공지를통해오류에대한빠른대응가능 해당빌드번호를통해빌드결과확인가능 page 29
Ⅲ. 개발환경구축 : 5. 도구연계 ( 빌드및테스트결과확인 ), 계속 빌드출력파일확인 MS TFS 2010 을사용하여정해진시간에통합빌드및테스트가수행된경우일일빌드환경설정시지정한공유폴더에서이메일로발송된빌드번호를통해통합빌드및테스트결과확인가능 1. 별도로지정한공유폴더밑에 프로젝트별로프로젝트폴더가위치 2. 프로젝트폴더내에빌드시간별로빌드결과출력폴더위치 ( 이메일공지를통해받은빌드번호를통해식별 ) page 30
Ⅲ. 개발환경구축 : 5. 도구연계 ( 빌드및테스트결과확인 ), 계속 빌드출력파일확인, 계속 본사례에서는빌드폴더를다음과같이구성함 logs 로그폴더. 빌드의로그파일이저장됨 TestResult 테스트수행결과및테스트코드커버리지결과 (Configuration 명 ) 빌드결과. Visual Studio 에서설정된빌드 Configuration 명에따라서생성됨 page 31
Ⅲ. 개발환경구축 : 5. 도구연계 ( 빌드및테스트결과확인 ), 계속 빌드출력파일확인, 계속 기존에각개발자가자신의 PC 에서빌드결과로그와바이너리파일을확인하던것과마찬가지로, log 폴더와각빌드정의시설정한각각의 Configuration 명칭을사용한폴더하위에빌드로그및통합빌드결과바이너리파일들이생성됨 (Configuration 명 ) 폴더에빌드결과가위치함 예 ) x86 > Debug page 32
Ⅲ. 개발환경구축 : 5. 도구연계 ( 빌드및테스트결과확인 ), 계속 빌드출력파일확인, 계속 TestResult 폴더에는 GTest 를실행한결과가생성됨 1. TestResult 폴더에테스트결과가위치함 2. 테스트결과보고서파일 - 기본생성되는파일은 xml 파일이며, html 파일은본사례에서별도변환과정을거쳐생성 page 33
Ⅲ. 개발환경구축 : 5. 도구연계 ( 빌드및테스트결과확인 ), 계속 빌드출력파일확인, 계속 마찬가지로 TestResult 폴더에테스트코드커버리지를측정한결과가생성됨 1. 동일하게 TestResult 폴더에테스트코드커버리지측정결과위치 2. 커버리지측정보고서파일 (html) - 기본생성되는파일은 xml 파일이며, html 파일은본사례에서별도변환과정을거쳐생성 ) 항목설명예 검사 ( 라인 ) 테스트케이스가수행된라인수예 ) KYMedley.dll 586 라인 검사안함 ( 라인 ) 라인커버리지 (%) 테스트케이스가수행되지않은라인수 예 ) KYMedley.dll 22713 라인 전체코드중검사된라인의비율예 ) KYMedley.dll 2.52 % - 586 / (586 + 22713) * 100 = 2.52 % page 34
Ⅳ. 도구연계성과 주요성과 [ 도입전 ] [ 도입후 ] 1. 개발막바지에이르러통합작업수행 수많은오류발생 Integration Hell 현상발생 오류의해결을위해많은시간할애 2. 수작업에의한테스트수행 테스트케이스가보존되지않음 재테스트시테스트수행공수증가 테스트실행정도파악불가 3. 통합오류에대한빠른대처부족 통합오류정보누락발생 통합오류를확인하고해결하는데많은시간소요 개별개발결과물에대한통합빌드자동화구현된테스트케이스들의테스트실행자동화실행된테스트케이스들의테스트커버리지측정자동화통합빌드및테스트에대한결과이메일발송 통합빌드에대한개발자의노력감소 주기적인통합빌드수행 작성된코드에대한상시테스트가능 결함의초기예측및예방가능 작성된프로그램에대한정량적품질지표제공 신속한오류확인가능 page 35
END of DOCUMENT