테스트에 대한 특정 접근 방식의 가치는 개발중인 시스템의 미션 크리티컬 방식과 다른 미션 크리티컬 시스템의 의존도에 따라 다릅니다. 귀하의 웹 사이트에 대한 간단한 방명록 스크립트는 미션 크리티컬 한 것으로 간주 될 수 없지만 데이터베이스에 대한 필터링되지 않은 입력을 허용하고 해당 사이트가 중요한 서비스를 제공하는 버그로 인해 웹 사이트가 실행되는 웹 사이트가 잠재적으로 더 많이 손상 될 수 있습니다. 방명록 스크립트를 철저히 테스트하는 데 중요합니다. 프레임 워크 / 라이브러리 코드도 마찬가지입니다. 버그가있는 프레임 워크를 개발하면 해당 프레임 워크 기능을 사용하는 모든 응용 프로그램에도 동일한 버그가 있습니다.
테스트 중심 개발은 테스트와 관련하여 추가적인 안전성을 제공합니다. 테스트하려는 코드와 함께 또는 테스트 후에 테스트를 작성하면 테스트가 잘못 될 위험이 있습니다. 모든 테스트를 먼저 작성하면 코드가 내부적으로 작동하는 방식이 테스트 작성에 영향을 줄 수 없으므로 특정 오류 출력이 정확하다고 생각하는 테스트를 실수로 작성할 가능성이 줄어 듭니다.
테스트 주도 개발은 개발자가 더 많은 작업을 수행하고 싶지 않기 때문에 테스트하기 쉬운 코드를 작성하도록 권장합니다! 테스트하기 쉬운 코드는 이해, 재사용 및 유지 관리가 쉬운 코드 인 경향이 있습니다.
그리고 유지 관리는 TDD의 보상을 실제로 얻을 수있는 곳입니다. 소프트웨어에 소비되는 프로그래밍 노력의 대부분은 유지 관리와 관련이 있습니다. 즉, 라이브 코드를 변경하여 새로운 기능을 제공하거나 버그를 수정하거나 새로운 상황에 맞게 조정할 수 있습니다. 이러한 변경을 수행 할 때 변경 한 내용에 원하는 효과가 있는지 확인하고 더 중요한 것은 예기치 않은 영향을주지 않는 것입니다. 코드에 대한 전체 테스트 스위트가 있다면 변경 사항이 다른 내용을 위반하지 않는지 쉽게 확인할 수 있으며 변경 사항이 다른 부분을 위반하면 이유를 신속하게 찾을 수 있습니다. 혜택은 장기적입니다.
당신은 당신의 질문에 다음과 같이 말했습니다.
몇 가지 사항에 대한 테스트를 작성하면 약간의 이점이 있지만 매우 적습니다. 테스트를 먼저 작성한다는 아이디어가 마음에 들지만 테스트를 디버깅하여 실제 코드를 디버깅하는 것보다 실제로 의미하는 바를 말하기 위해 더 많은 시간을 소비합니다. 테스트 코드가 테스트하는 코드보다 훨씬 더 복잡하기 때문일 수 있습니다. 사용 가능한 도구 (이 경우 rspec)를 사용하지 않았 으면 좋겠습니다.
이것은 당신이 테스트를받지 못하고 있다고 제안하는 것 같습니다. 단위 테스트는 일련의 메소드 호출과 매우 간단해야하며 예상 결과와 실제 결과를 비교하기위한 주장이 뒤 따릅니다. 테스트의 버그가 재앙이 될 수 있기 때문에 간단합니다. 루프, 분기 또는 다른 프로그램이 제어를 테스트에 도입하면 테스트에 버그가 발생할 가능성이 높아집니다. 테스트 디버깅에 많은 시간을 소비하는 경우 테스트가 지나치게 복잡하다는 것을 나타내며 단순화해야합니다.
테스트를 단순화 할 수없는 경우 그 사실만으로 테스트중인 코드에 문제가 있음을 암시합니다. 예를 들어 클래스에 긴 메소드, if / elseif / else 또는 switch 문이 많은 메소드 또는 클래스의 현재 상태에 따라 복잡한 상호 작용이있는 많은 메소드가있는 경우 테스트는 매우 복잡해야합니다. 전체 코드 범위를 제공하고 모든 이벤트를 테스트합니다. 클래스에 다른 클래스에 대한 하드 코딩 된 종속성이있는 경우 코드를 효과적으로 테스트하기 위해 점프해야하는 후프 수가 다시 증가합니다.
실행 경로가 적은 짧은 메소드를 사용하여 클래스를 작고 집중적으로 유지하고 내부 상태를 제거하려고하면 테스트를 단순화 할 수 있습니다. 그리고 이것은 문제의 핵심입니다. 좋은 코드는 본질적으로 테스트하기 쉽습니다. 코드를 테스트하기가 쉽지 않으면 문제가있을 수 있습니다.
단위 테스트를 작성하는 것은 장기적으로 도움이되며,이를 피하는 것은 나중에 문제를 저장하는 것입니다. 기술 부채 개념에 익숙하지 않을 수도 있지만 재정 부채와 매우 유사합니다. 테스트 작성, 코드 주석 달기, 하드 코딩 된 종속성 작성 등은 부채로가는 방식입니다. 코너를 일찍 자르면 시간을 "빌리 게"되며 마감 시한을 맞추는 데 도움이 될 수 있지만 프로젝트에서 더 빨리 절약 할 수있는 시간은 대출입니다. 매일 코드를 정리하지 않고 적절하게 주석을 달거나 테스트 스위트를 빌드하면 비용이 많이 듭니다. 더 오래 갈수록 더 많은 관심이 축적됩니다. 결국, 코드가 의도하지 않은 결과를 유발하지 않으면 서 변경할 수없는 복잡한 문제가 된 것을 알게 될 것입니다.
단위 테스트를 조기에 작성하여 "기술적 신용"형태로 최신 상태로 유지하는 것을 생각할 수 있습니다. 좋은 연습을 따르는 데 프로젝트에서 일찍 돈을 써서 은행에 시간을 투자하고 있습니다. 나중에 프로젝트의 유지 보수 단계에 도달하면이 예측에 관심을 가지게됩니다. 변경하고 싶을 때 변경의 정확성을 쉽게 확인할 수 있으며 원치 않는 부작용이 없는지 신속하게 확인할 수 있습니다. 버그가 나타나면 버그를 연습하는 새로운 단위 테스트를 추가 한 다음 코드에서 버그를 수정하십시오. 다음에 단위 테스트를 실행하면 버그가 수정되었고 다른 문제가 발생하지 않았 음을 확인할 수 있습니다. 또한 "회귀"를 피할 수 있습니다.
TL : DR-그렇습니다. 그들은 실제적인 도움이지만 투자입니다. 이점은 나중에 분명해집니다.