테스트 데이터를 버전 관리에 체크인해야합니까?


40

PDF 파일을 처리하는 기능에 대한 테스트 코드를 작성 중입니다. 테스트의 기본 개념은 내가 특별히 선택한 일부 PDF를 가리키고 처리하며 출력이 예상 한 것인지 확인하는 것입니다.

내 질문은 :이 큰 PDF를 어디에 저장해야합니까? 코드와 함께 버전 관리로 확인해야합니까? 아니면 다른 곳에 놓아 두겠습니까? 분명히 테스트 코드는 PDF가 없거나 (또는 ​​다른 PDF가있는 경우) 쓸모가 없지만 여전히 저장소에 넣는 것은 잘못된 느낌입니다.



19
@ MichaelKjörling :Tests != Test Data
Robert Harvey

4
@RobertHarvey 사실이지만 테스트가 작동하기 위해 테스트 데이터가 필요한 경우 테스트의 일부로 고려해야한다고 생각합니다. 그것은 또한 내가 이해 한대로 지금까지 세 가지 답변 모두가 취한 접근법입니다.
CVn

답변:


84

버전 관리 시스템에는 배포 할 응용 프로그램 (예 : MSI, RPM) 을 빌드, 컴파일, 테스트 및 패키지화하는 데 필요한 모든 것이 포함되어 있어야합니다 . 또한 빌드 구성을 주장하고 다른 스크립트도 버전 관리에 있어야한다고 주장합니다.

프로젝트를 체크 아웃하고 완전한 컴파일, 빌드 및 테스트 환경을 갖추어야합니다.

테스트 데이터를 체크인하는 방법에는 두 가지가 있습니다. 먼저 테스트 데이터 자체를 확인할 수 있습니다 (이 경우 PDF). 둘째, 테스트 데이터를 생성하는 데 사용할 수있는 소스 데이터를 체크인 할 수 있습니다 (해당되는 경우). 테스트 데이터가 포함 된 빈 데이터베이스에로드 된 SQL 스크립트이거나 PDF 또는 기타 파일로 컴파일 할 수있는 텍스트 기반 파일 일 수 있습니다.

다른 사람들은 모든 것을 버전 관리에 체크인 하는 데 동의하지 않을 수도 있지만, 전문적인 경험에서 완전한 환경을 처음부터 다시 구축하는 것이 중요하다는 것을 알게되었습니다.


20
예. 확실히 맞아요. 2014 년 이진 파일을 완벽하게 처리하지 않는 개정 제어를 사용하는 것에 대한 정당성은 없습니다.
Kilian Foth

4
동의하지만 정크 아이템도 체크인하는 상황을 피하고 싶습니다. 예를 들어, 테스트 데이터에 테스트에서 생성 된 모든 pdf 파일이 포함 된 "출력"폴더가 포함 된 경우이를 저장소에 포함하지 않을 수 있습니다. 그러나 테스트 자체는 리포지토리 및 테스트 실행에 필요한 패키지의 일부 여야한다는 데 동의합니다.
Kenneth Garza

1
@KennethGarza 정말 어렵지 않습니다. 일반적으로 모든 원본 데이터 (소스 코드, 테스트 소스 코드, 테스트 데이터, 미디어, [실제] 문서, 타사 라이브러리, 빌드 스크립트, 툴링 스크립트, 변환 스크립트 등)가 포함되어야합니다. 원래 데이터에서 합리적인 시간에 생성 될 수 있어야합니다. 또한, 테스트 결과물 인 경우 테스트를 직접 실행 한 후에 만 의미가있을 수 있습니다. 그렇지 않으면 프로그램을 테스트하지 않고 VCS 소프트웨어의 파일 무결성을 유지하는 기능을 테스트하는 것입니다. :
Thomas

1
@ MarnenLaibow-Koser : 임플란트 심박 조율기 리드에서 전기 고장을 탐지하기 위해 작업 한 프로젝트의 테스트 스위트는 40GB 이상이었습니다. 그것을 다루는 것이 불쾌하지 않은 VCS는 존재하지 않습니다. 두 개의 저장소를 갖는 것은 관리 번거 로움이지만 때로는 더 나은 선택 일 수 있습니다.
whatsisname

1
@ MarnenLaibow-Koser 당신은 그것을 얻었다. 통합 테스트는 별도의 저장소에 있으며 사용자가 로컬에서 실행하려는 경우 종속성 관리가 zip 파일을 가져 와서 압축 해제합니다. 일반적으로 Continuous Integration 서버 / 팜은 통합 테스트를 수행해야하며 통합 테스트가 통과 될 때까지 병합 기능 분기를 방지합니다.
user482745

15

준비한 설정 파일없이 테스트를 사용할 수없는 경우 테스트 코드와 함께 VCS에 파일을 포함시키는 것이 좋습니다.

테스트에 사용 된 파일은 코드가 아니지만 코드가 의존하는 종속성으로 볼 수 있습니다. 따라서 모든 것을 함께 유지하는 것이 장점입니다.


이에 반해 일부 VCS는 큰 이진 파일을 제대로 처리하지 못하고 다른 VCS는 이진 파일을 VCS에 포함시키는 것에 반대합니다. 이러한 경우 중 하나에 해당하는 경우 쉽게 액세스 할 수있는 잘 알려진 위치에 테스트 파일을 저장하는 것도 좋습니다.

또한 " foo.pdf모든 테스트를 실행하기 위해 의존합니다"라는 테스트 코드에 주석을 추가하는 것도 고려할 것 입니다.


테스트를 통해 테스트 데이터를 확인하고 찾을 수없는 경우 (예 : URL에서) 시도하거나 둘 중 하나라도 실패하면 아무 문제가 없습니다. 네트워크에 의존하는 것은 테스트를 더 느리고 취약하게 만들기 때문에 나쁜 생각입니다 . 그러나 시도는 덜 취약하지 않으며, 적절한 데이터를 자동으로 가져오고 로컬로 캐싱하는 것이 수동으로 문서 / 코멘트를 읽고 가져 와서 배치하는 것보다 빠릅니다.
Warbo

7

정적 데이터이면 버전 관리에 넣습니다. 체크인 한 파일은 실제로 변경되지 않습니다. 해당 기능이 더 이상 필요하지 않으면 제거되거나 새로운 테스트 파일이 추가됩니다. 어느 쪽이든, 이진 diff가 공간을 차지하는 것에 대해 걱정할 필요가 없습니다.

테스트 데이터를 생성하는 경우 ( 예 : 무작위로 테스트가 실패하면 자동으로 저장해야하며 그렇지 않으면 버립니다. 이 방법으로 저장된 모든 데이터는 정기 회귀 테스트로 전환되어야합니다. 따라서 이러한 에지 케이스는 추첨의 행운에 의존하기보다는 미래에 확실히 테스트됩니다.


2
테스트 데이터를 무작위로 생성하는 경우 실제로 재현 가능한 자동 테스트 작성에 관한 책을 사야합니다.
Dawood는 Monica Monica를

5
@DavidWallace 따라서 퍼즈 테스트, 속성 확인 및 통계 소프트웨어 테스트와 같은 모든 분야가 잘못되었을뿐만 아니라 해롭다 고 말하는 것입니다.
Warbo

5
@DavidWallace 임의! = 재현 할 수 없습니다.
congusbongus

5
@DavidWallace 당신은 당신이 원하는대로 그것을 호출 할 수 있습니다. 무작위 테스트 데이터, 레코드 입력, 필요한 경우 재활용, 인체 공학적 재현 가능. 상처의 세계로 연결되지 않습니다.
congusbongus

2
@DavidWallace는 "어떤 테스트 사례가 실제로 필요한지를 생각하지 않고" "임의의 테스트 없음"을 의미하는 것이 아니라 "임의의 테스트 만이 아니라 "를 의미 합니다. "버그를 발견 한 데이터를 재생할 수 없습니다"에 대해서는 실제로 댓글을 달고있는 답변을 읽었습니까? ;)
Warbo

0

테스트 및 기본 애플리케이션 코드와 함께 해당 데이터를 확실하게 포함하십시오. 그것은 매우 체계적으로 테스트 스위트를 만드는 데 도움이됩니다. 따라서 PDF 추출을 테스트하고 코드를 캡슐화하면 앱 코드의 경로를 기반으로 테스트 데이터의 경로를 구성 할 수 있어야합니다 -그것은 항상 나를 위해 일했습니다.

git을 사용하면 .gitignore를 설정하여 임시 출력 또는 테스트 로깅이 저장소를 오염시키지 않도록 할 수 있습니다.

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