통합 테스트를 제거하기에 충분한 단위 테스트 범위가 있는지 어떻게 알 수 있습니까?


15

나는 레거시 시스템에서 일하고 있습니다 (테스트하지 않고 작성되었음을 의미합니다). 우리는 외부에서 기능을 테스트하는 통합 테스트를 작성하여 일부 시스템을 테스트하려고 시도했습니다.

이를 통해 코드의 일부가 깨질 염려없이 코드의 일부를 리팩토링 할 수 있습니다. 그러나 문제는 이러한 통합 테스트에 배포 (2 분 이상) 및 실행하는 데 몇 분이 필요하다는 것입니다. 또한 유지하기가 힘들다. 그들은 각각 수천 줄의 코드를 다루며 그중 하나가 깨지면 이유를 디버깅하는 데 몇 시간이 걸릴 수 있습니다.

나는 최근에 만들어 왔던 이러한 기능 변경에 대해 많은 단위 테스트를 작성했지만 커밋하기 전에 항상 새로운 배포를 수행하고 모든 통합 테스트를 실행하여 아무것도 놓치지 않도록합니다. 이 시점에서 나는 단위 테스트를 알고 있으며 일부 통합 테스트는 테스트와 겹칩니다.

좋은 단위 테스트가 잘못된 통합 테스트를 적절히 적용하여 해당 통합 테스트를 삭제할 수있는시기를 어떻게 알 수 있습니까?

답변:


18

가장 쉬운 측정 기준은 "이 통합 테스트가 마지막으로 합법적으로 실패한 시기는 언제 입니까?"입니다. 통합 테스트가 실패한 후 오랜 시간이 지난 경우 (많은 변경이 있었음), 단위 테스트가 충분한 작업을 수행하고있을 것입니다. 최근에 통합 테스트에 실패한 경우 장치 테스트에서 발견되지 않은 결함이있었습니다.

저의 선호는 일반적으로 통합 테스트의 견고성을 무인으로 안정적으로 실행할 수있는 수준으로 높이는 것입니다. 실행하는 데 시간이 오래 걸리면 밤새 실행하십시오. 그들은 때때로 실행되는 경우에도 여전히 가치가 있습니다. 이러한 테스트가 너무 약하거나 수동 개입이 필요한 경우 테스트 실행을 유지하는 데 시간이 걸리지 않을 수 있으며 가장 성공한 테스트는 폐기하는 것이 좋습니다.


3
"자동 테스트를 종료하는 이유는 무엇입니까?"

1
예, 나는 이것에 동의합니다. 물론 단위 테스트 범위가 충분하지 않으면 여전히 당신을 물게됩니다. 예를 들어, 현재 실행하는 데 약 6 시간이 걸리는 통합 테스트 스위트가 있습니다.하지만 회사의 호환성에 중점을 두어 테스트가 삭제 된 적이 없다고 생각합니다
Earlz

2
아마도 나는 이것에 대한 새로운 질문을 시작해야하지만 통합 테스트가 합법적으로 실패 할 때마다 실패하는 단위 테스트를 작성하고 둘 다 통과시키는 방법을 알아 내야한다고 제안합니까?
Daniel Kaplan

2
@tieTYT : 그렇습니다. 그것은 좋은 생각처럼 들립니다. 단위 테스트는 좋습니다. 이전에 이미 깨뜨린 것들에 대한 단위 테스트가 더 좋습니다.
Greg Hewgill

7

단위 테스트는 테스트의 성배가 아니며 코드 기반을 테스트하는 데 사용되는 것보다 많은 도구 중 하나 일뿐입니다. 따라서 다른 테스트를 대체하기 위해 어떠한 단위 테스트도 안전한 것으로 간주해서는 안됩니다. 통합 테스트가 잘못된 경우 정문을 주변 울타리와 게이트로 교체하는 것과 같이 다른 통합 솔루션으로 대체하지 말고 우수한 통합 테스트를 수행해야합니다.


이 프로젝트가 처음부터 시작되면 더 의미가 있습니다. 그러나 첫 번째 통합 테스트는 "로그인 할 수 있는지 확인"이었고 결국 "로그인 할 수 있는지 확인"하는 많은 단위 테스트를 수행했습니다. html을 변경하면 통합 테스트가 항상 중단됩니다. 이 예제는 완전히 고안되었지만 통합 테스트를 제거하는 것이 좋지 않습니까?
Daniel Kaplan

3
@tieTYT : UI를 통해 무언가를 테스트하면 종종 매우 불안정한 솔루션이됩니다. 그럼에도 불구하고, UI에 의한 테스트는 중요하지만, 여기에서 수동 테스트가 해당 테스트를 자동화하고 안정적으로 유지하는 것보다 노력이 덜 드는 경우가 있습니다. 따라서 이것이 여기에 해당한다고 생각되면 자동화 테스트 목록에서 해당 "통합 테스트"를 제거하고 수동 테스트의 테스트 계획에 추가 할 수 있습니다.
Doc Brown

@DanielKaplan 통합 테스트를보다 안정적으로 업데이트 할 수 있습니까? html이 때때로 변경되어 실패한 경우 "로그인
Jen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.