단위 테스트 에는 요즘 신비한 것이 있습니다. 사람들은이를 100 % 테스트 범위가 성배 인 것처럼, 단위 테스트가 소프트웨어를 개발하는 유일한 방법 인 것처럼 취급합니다.
그들은 요점을 놓치고있다.
단위 테스트 는 답이 아닙니다. 테스트 입니다.
이제이 논의가 나올 때마다 누군가 (종종 나조차도)는 Dijkstra의 말을 인용 할 것이다. Dijkstra는 옳습니다. 테스트는 소프트웨어가 의도 한대로 작동 함을 입증하기에 충분하지 않습니다. 그러나 그것은이다 필요한 : 어떤 수준에서, 할 수 있어야한다 보여 해당 소프트웨어가 사용자가 원하는 일을한다.
많은 사람들이 손으로 테스트합니다. 확고한 TDD 애호가조차 수동 테스트를 수행하지만 때로는 인정하지는 않습니다. 도움이 될 수 없습니다. 회의실에 들어가기 전에 고객 / 보스 / 투자자 등에 게 소프트웨어를 시연하기 전에 직접 작동하여 작동하는지 확인할 수 있습니다. 거기 아무 문제 없습니다, 그냥 모든 것을 수동으로 그것을 통해 실행하지 않고 원활 기대에 사실 그것은 미친 것 - 즉, 그것을 테스트 - 100 % 단위 테스트 범위와 테스트에서 최고의 자신감을 가지고 경우에도 .
그러나 소프트웨어를 구축하는 데 필요한 경우에도 수동 테스트로 는 충분 하지 않습니다 . 왜? 수동 테스트는 지루하고 시간이 많이 걸리며 사람이 수행하기 때문입니다. 그리고 인간은 지루하고 시간이 많이 걸리는 작업을 수행하는 데 악명 높은 것으로 악명 높습니다.
반면에 기계 는 지루하고 시간 소모적 인 작업을 수행하는 데 탁월 합니다. 결국 컴퓨터가 발명되었습니다.
따라서 테스트 는 매우 중요하며 자동화 된 테스트 는 테스트가 일관되게 수행되도록하는 유일한 방법입니다. 그리고 소프트웨어가 개발됨에 따라 테스트하고 다시 테스트하는 것이 중요합니다. 여기에 또 다른 대답은 회귀 테스트 의 중요성을 나타 냅니다. 소프트웨어 시스템의 복잡성으로 인해 시스템의 한 부분이 자주 보이지 않는 변경으로 인해 시스템의 다른 부분에서 의도하지 않은 변경 (예 : 버그)이 발생할 수 있습니다. 테스트를하지 않으면 의도하지 않은 변경 사항을 발견 할 수 없습니다. 테스트에 대한 신뢰할 수있는 데이터를 얻으려면 체계적인 방식으로 테스트를 수행해야합니다. 즉, 일종의 자동 테스트 시스템이 있어야합니다.
이 모든 것이 단위 테스트와 어떤 관련이 있습니까? 글쎄, 단위 테스트는 인간이 아닌 기계에 의해 실행됩니다. 따라서 많은 사람들이 자동화 테스트가 단위 테스트 와 같다는 잘못된 인상을 받고 있습니다. 그러나 이것은 사실이 아닙니다. 단위 테스트는 아주 작은 자동화 된 테스트 일뿐 입니다.
이제 작은 자동화 테스트 의 가치는 무엇 입니까? 장점은있는 소프트웨어 시스템의 구성 요소를 테스트하는 것입니다 분리 가능, 보다 정확한 테스트의 타겟팅 및 디버깅에 보조를 . 그러나 단위 테스트가 본질적으로 고품질 테스트를 의미하는 것은 아닙니다 . 더 세부적인 수준의 소프트웨어를 다루기 때문에 종종 고품질 테스트로 이어집니다. 그러나 컴포지트 부품이 아닌 완전한 시스템의 동작을 완전히 테스트하고 철저히 테스트 할 수 있습니다.
그러나 100 % 단위 테스트 범위에서도 시스템을 철저히 테스트하지 못할 수 있습니다. 개별 구성 요소는 완벽하게 격리되어 작동 할 수 있지만 함께 사용할 경우 여전히 실패합니다. 따라서 단위 테스트는 매우 유용 하지만 소프트웨어가 예상대로 작동하는 데 충분하지 않습니다 . 실제로 많은 개발자가 자동 통합 테스트, 자동 기능 테스트 및 수동 테스트로 단위 테스트를 보완합니다.
단위 테스트에서 가치가 보이지 않는 경우 가장 좋은 시작 방법은 다른 종류의 자동 테스트를 사용하는 것입니다. 웹 환경에서 Selenium 과 같은 브라우저 자동화 테스트 도구 를 사용하면 비교적 적은 투자로 큰 승리를 거둘 수 있습니다. 발가락을 물에 담그면 자동 테스트가 얼마나 유용한 지 더 쉽게 알 수 있습니다. 자동화 된 테스트가 완료되면 단위 테스트는 현재 진행중인 구성 요소에서만 테스트를 대상으로 할 수 있기 때문에 대규모 통합 또는 엔드 투 엔드 테스트보다 더 빠른 처리 시간을 제공하기 때문에 훨씬 더 의미가 있습니다.
TL; DR : 아직 단위 테스트 에 대해 걱정하지 마십시오 . 먼저 소프트웨어 테스트 에 대해 걱정 하십시오.