CI (Continuous Integration)에 통합 테스트가 포함되어야합니까?


11

웹 응용 프로그램을 개발 중이고 Hudson은 컴파일, 단위 테스트 및 정적 코드 분석과 같은 일반적인 작업을 수행한다고 가정합니다.

그러나 까다로운 부분은 다음 같습니다. Hudson 은 이전 작업이 완료되면 응용 프로그램 서버를 배포하고 시작하여 통합 테스트를 수행합니다.

이는 데이터베이스 연결, 3 부 응용 프로그램 연결, 소켓 포트 수신, 환경 변수, 서버 시작 실패 처리 등과 같은 어려운 작업을 의미합니다. 매번 이러한 작업을 올바르게 설정하고 해제해야합니다. 더구나, 통합 테스트는 통합 테스트를 쉽게 중단 할 수 있습니다.

통합 테스트가 CI (Continuous Integration)에 포함되어야한다고 생각하십니까? 수동으로 할 수 있습니까? 아니면 통합 테스트를 단순화 하시겠습니까?


2
문제는 CI 부분이 아닌 테스트 품질에 있습니다. 통합 테스트에서는 종속성을 모의하는 것이 좋습니다.
Luc Franken

답변:


8

Continuous Integration 이라는 이름 은 많은 것을 말합니다. 이미 통합하는 것보다 통합 테스트를 수행하기에 더 좋은 곳은 무엇입니까?
물론 테스트가 진행되는 유일한 장소가되어서는 안됩니다. 개발할 때 변경 사항이 개별적으로 작동하는 것이 아니라 결국에는 문제가 발생하지 않도록해야합니다.
결국, 모든 팀 구성원은 책임을지고 책임을지고 시험이 제한되는 사람이나 단계를 엄격하게 정의하려고 노력하는 것이 역효과를 낳습니다.


4
그러나 Continuous 도 있습니다. 통합 테스트에 몇 분 또는 몇 시간이 걸리면 지속적이지 않습니다.
U2EF1

@ U2EF1은 이산 통합 서버를 설정합니다.
카야 만

1
@Kayaman 귀하의 의견은 "분리 된 통합 서버"에 대한 인터넷상의 유일한 결과입니다. 무슨 뜻인지 분명히 말씀해 주시겠습니까?
Stijn

3

통합 테스트가 CI (Continuous Integration)에 포함되어야한다고 생각하십니까?

통과하는 통합 테스트가 있고 누군가 실제로 거기에 서서 버튼을 누를 필요가 없다면, 예-CI 시스템에 추가해야합니다.

그러나 통합 테스트를 실행하는 데 시간이 오래 걸릴 수 있으므로 실행 빈도를 제한해야합니다. CI 서버가 유휴 상태 인 야간에 실행할 수 있습니다.


3

먼저 귀하의 질문에 대답하십시오 : 예, 귀하가 저에게 묻는다면 지속적 통합의 일부입니다. 그러나 통합 테스트가 무엇인지 명확히해야한다고 생각합니다.

Martin Fowler는 완전한 구축 프로세스를 자동화하여 신속하게 배포하는 방법으로 지속적인 제공에 대해 이야기했습니다. 이를 위해서는 개발자가 Continuous Integration 프로세스에서 제공하는 빠른 피드백을 받아야합니다. 그래서 그는 빌드가 거쳐야 할 단계를 정의합니다 .

  1. 커밋 빌드
  2. 철저한 테스트
  3. 전개

커밋 빌드는 개발자의 빠른 피드백으로 인해 10 분 이상 걸리지 않아야합니다.

다음은 내가 보는 방법입니다. 첫 번째 단계에서 최신 커밋을 가져 와서 빌드하십시오. 이것이 성공하면, 단위 테스트를 실행하여 클래스 / 클래스 그룹이 정의되고 예상 한대로 작동하는지 확인하십시오.

이것이 성공하면 통합 테스트 파트로 이동하십시오. 여기에서 방금 테스트를 거친 유닛의 상호 작용을 테스트합니다. 여기에는 장치에 입력을 공급하고 상태 / 상호 작용 / 출력을 관찰하는 것이 포함됩니다. 우리는 여전히 커밋 빌드에 있음을 기억하십시오. 따라서 파일 시스템, 데이터베이스, 네트워크 피어 등과의 상호 작용은 빠른 실행을 위해 스텁되어야합니다. Martin Fowler는 CI 서버에서 빠르게 실행하기 위해 필요한 경우 메모리 내 데이터베이스 사용을 암시합니다.

장치가 필요에 따라 작동하고 상호 작용하는지 확인한 후에는 일반적으로 테스트 범위에 대해 알아보고 (작은 하위 시스템을 테스트하는 것만으로는 충분하지 않음) 기능 테스트 / QA / 배포 ( 테스트 : 프로그램을 충분히 커버한다고 생각되면 철저한 테스트). 그런 다음 목표로하는 프로덕션 환경을 미러링하는 테스트 환경을 프로비저닝하고 실제 데이터베이스, 실제 파일, 실제 네트워크 피어 등이 포함 된 테스트를 실행하십시오.

결국 통합 테스트는 코드 변경에 관한 것입니다. 변경 사항이 현재 시스템을 손상시키지 않는지 확인하려고합니다. 이들이 올바른지 확인하려면 자신이 올바르게 작동하는지 확인한 다음 종속성과 올바르게 상호 작용하고 테스트를 거쳤는지 확인해야합니다. 모든 테스트를 통과 한 후 시스템에 대해 확신을 가질 수 있습니다.

이후 단계에서 프로그램에 문제가 발생하면 (데이터베이스가 특정 값을 반환 할 때 네트워크 연결이 중단됨) 통합 테스트에서 이러한 테스트를 중단해야합니다. 커밋 빌드는 QA보다 빠릅니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.