문제

나는 그것을 사용하는 데 많은 이유가 있다고 생각할 수 있습니다. 그러나 단점은 무엇입니까?

(다른 서버 구매 외에)

대신 매일 빌드를 사용하는 데 어떤 장점이 있습니까?

도움이 되었습니까?

해결책

( "지속적인 통합"으로 주목할 가치가 있습니다. 자동화 An과의 통합 자동화 프로세스 빌드 및 자동으로 테스트를 실행하고 자동으로 각 조각의 실패를 감지합니다.

또한 "연속 통합"은 트렁크 또는 테스트 서버를 의미한다는 점도 주목할 가치가 있습니다. "모든 변화를 생중계"한다는 의미는 아닙니다.

지속적인 통합을 잘못 수행하는 방법에는 여러 가지가 있습니다.)


지속적인 통합 테스트를 수행하지 않는 이유는 생각할 수 없습니다. "연속 통합"에 테스트가 포함된다고 가정합니다. 컴파일한다고해서 작동한다는 의미는 아닙니다.

빌드 및/또는 테스트에 오랜 시간이 걸리면 지속적인 통합이 비싸 질 수 있습니다. 이 경우 커밋 전에 변경 사항과 관련된 테스트를 실행합니다 (커버리지 분석 도구 : DEVEL :: COVERX :: COVERS 어떤 코드와 함께 어떤 테스트가 진행되는지 발견하는 데 도움이 될 수 있습니다.) 커밋 후 통합 테스트를 수행하십시오. SVN :: 알림, 개발자가 실패하면 경고하십시오. 같은 것을 사용하여 테스트 결과를 보관하십시오 울적. 이를 통해 개발자는 테스트 스위트가 운영되는 것을 보지 않고도 빠르게 일할 수 있지만 여전히 실수를 일찍 잡을 수 있습니다.

즉, 약간의 작업으로 구축 및 테스트 프로세스 속도를 높일 수 있습니다. 여러 번 느린 테스트는 각 테스트가 너무 많은 설정을 수행하고 너무 많은 설정을 수행 해야하는 결과입니다. 시스템에서 전체 시스템이 작은 조각을 테스트하기 위해 설정 해야하는 시스템을 너무 많이 연결해야합니다.

디커플링은 종종 서브 시스템을 독립적 인 프로젝트로 나누는 데 도움이됩니다. 범위가 작을수록 더 쉽게 이해하고 더 빠른 빌드 및 테스트를 할 수 있습니다. 각 커밋은 프로그래머를 불편하게하지 않고 전체 빌드 및 테스트를 수행 할 수 있습니다. 그런 다음 모든 하위 프로젝트를 함께 수집하여 통합 테스트를 수행 할 수 있습니다.

모든 커밋에서 테스트 스위트를 운영하는 주요 장점 중 하나는 커밋 후에도 빌드를 깨뜨린 내용을 알고 있습니다. "어제 우리가 한 일이 건물을 깨뜨렸다"고, "어제 우리가 한 네 가지 일이 다른 방식으로 빌드를 깨뜨렸다. 이제 우리는"개정 된 1234가 빌드를 깨뜨렸다 "고 풀어야한다. 문제를 찾기 위해 하나의 개정판 만 조사하면됩니다.

매일 빌드를하는 장점은 적어도 매일 완전하고 깨끗한 빌드 및 테스트 실행이 있다는 것을 알고 있습니다. 그러나 당신은 어쨌든 그렇게해야합니다.

다른 팁

나는 그것에 단점이 있다고 생각하지 않습니다. 그러나 논쟁을 위해 여기에 Urbancode에 관한 Eric Minick의 기사 ( "테스트가 구축되지 않는 것입니다.") 그는 기반의 도구를 비판합니다 마틴 파울러의 작품 그들은 시험을 위해 충분한 시간을 보내지 않는다고 말합니다.

"CI에서 진정으로 성공하기 위해 Fowler는 빌드가 자체 테스트해야하며 이러한 테스트에는 장치와 엔드 투 엔드 테스트가 모두 포함되어 있다고 주장합니다. 동시에 빌드는 매우 빠르야합니다. 이상적으로는 10 분 미만입니다. -모든 커밋에서 실행되어야하기 때문에, 상당수의 엔드 투 엔드 테스트가 있으면, 전체 프로세스를 10 분 미만으로 유지하면서 빌드 타임에 실행하는 것은 비현실적입니다.

모든 커밋에 대한 빌드에 대한 요구를 추가하면 요구 사항이 불가능하다고 느끼기 시작합니다. 옵션은 피드백이 느리거나 일부 테스트 제거입니다. "

James Shore는 Cruisecontrol과 같은 CI 도구를 사용하여 지속적인 통합을하고 있다는 생각의 위험에 대한 훌륭한 블로그 항목을 가지고있었습니다.

CI 서버를 설정하는 한 가지 위험은 목표 변위입니다. 중요한 것은 "고품질 소프트웨어를 보장하는 것"과는 반대로 "빌드를 계속 통과하는 것"이라고 생각합니다. 그래서 사람들은 테스트가 얼마나 오래 진행되는지에 대한 관심을 멈 춥니 다. 그런 다음 체크인하기 전에 모두 실행하는 데 너무 오래 걸립니다. 그런 다음 빌드가 계속 깨지고 있습니다. 그런 다음 빌드는 항상 깨졌습니다. 그래서 사람들은 빌드 패스를하기 위해 테스트를 언급합니다. 그리고 소프트웨어의 품질이 줄어들지 만, 빌드가 지나가고 있습니다 ...

지속적으로 통합이 실제로 의미가없는 것을 본 경우 일반적으로 두 가지가 있습니다. 나는 CI의 큰 옹호자라는 것을 명심하고 가능할 때 그것을 사용하려고 노력합니다.

첫 번째는 ROI가 말이되지 않을 때입니다. 나는 현재 몇 가지 작은 내부 앱을 개발하고 있습니다. 응용 프로그램은 일반적으로 매우 사소하며 개발의 전체 수명주기는 약 1 주일 또는 2 주입니다. CI를 위해 모든 것을 올바르게 설정하면 아마도 두 배가 될 것이며 아마도 다시는 그 투자를 다시는 보지 못할 것입니다. 유지 보수로 되돌릴 것이라고 주장 할 수 있지만이 앱은 업데이트 된 것처럼 폐기 될 가능성이 높습니다. 귀하의 업무는 아마도 100% 코드 커버리지에 도달하지 않고 소프트웨어를 배송하는 것입니다.

내가 들었던 또 다른 시나리오는 결과로 아무것도하지 않으면 CI가 의미가 없다는 것입니다. 예를 들어, 소프트웨어를 QA로 전송해야하고 QA 직원이 며칠마다 새 버전 만 볼 수 있다면 몇 시간마다 빌드를하는 것은 의미가 없습니다. 다른 개발자가 코드 메트릭을보고 개선하려고 시도하지 않으면 추적하는 것은 의미가 없습니다. 이것이 CI가 좋은 기술이 아닌 잘못이 아니라 CI를 기꺼이 받아들이려는 팀의 부족입니다. 그럼에도 불구하고 그러한 시나리오에서 CI 시스템을 구현하는 것은 의미가 없습니다.

시작할 때는 모든 것을 설정하는 데 시간이 걸립니다.

테스트, 적용 범위, 정적 코드 검사, 중복 검색, 문서 빌드 및 배포를 추가하면 올바르게 얻는 데 시간이 오래 걸릴 수 있습니다. 그 후에는 빌드를 유지하는 것이 문제가 될 수 있습니다.

예를 들어 솔루션에 테스트를 추가하면 일부 기준에 따라 빌드가 자동으로 감지하거나 빌드 빌드 설정을 수동으로 만들어야합니다. 자동 감지는 제대로하기가 훨씬 어렵습니다. 적용 범위와 동일합니다. 문서 생성과 동일 ...

지속적인 통합을 수행하지 않는 유일한 좋은 이유는 프로젝트를 통해 통합 테스트가 오랫동안 결함을 식별하지 못하고 할 때마다 실행하는 데 너무 많은 시간이 걸리는 시점까지 프로젝트를 수행했을 때 발생합니다. 빌드. 다시 말해 : 당신은 더 이상 필요하지 않다는 것을 스스로에게 입증 한 충분한 지속적인 통합을 수행했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top