태그 보관물: programming-practices

programming-practices

단위 테스트를 위해 프로젝트가 얼마나 커야합니까? [닫은] 수행 할 수있을만큼 분리 된

내 프로젝트가 단위 테스트를 수행 할 수있을만큼 분리 된 것으로 가정합니다. 그러나 단위 테스트의 가치를 높이려면 클래스와 함수 측면에서 프로젝트가 얼마나 커야합니까?

우리 모두는 실수를 저지르고 완벽하지는 않지만 작은 프로젝트의 오류를 단계별로 처리하는 적절한 프로그래머라고 생각합니다. 아니면 프로젝트 규모에 관계없이 단위 테스트가 어려운가요?



답변

프로젝트가 이미 충분히 큽니다.

내 경험상 하나의 클래스와 하나의 함수로 단위 테스트의 필요성을 고려했습니다.

    class Simple {
        boolean reallySimple() {
            return true; // how do we make sure it doesn't change to false?
        }
    }


    class SimpleTest {
        void assertReallySimple() {
            // ensure reallySimple return value isn't changed unexpectedly
            UnitTestFramework.assertTrue(new Simple().reallySimple());
        }
    }


답변

한 거기 사람들 확실히 있기는하지만 나는 “당신이해야 단위 테스트 다”아이디어로 구입 한 적이 없다 (참조 모기의 대답은 !).

내가 아는 한 단위 테스트의 주요 이점은 다음과 같습니다.

  1. 변경으로 인해 문제가 발생하지 않도록합니다.
  2. 클래스에 대한 합리적인 인터페이스를 디자인하는 데 도움을줍니다 (강제로 자신의 코드에 대한 클라이언트가되므로).
  3. 코드 사용 방법을 문서화합니다.

기본적으로 이러한 요소에 대한 테스트를 작성하고 유지하는 데 걸리는 시간을 측정해야합니다.

숫자 1은 일반적으로 테스트를 작성하는 데 가치가 있습니다. 내 경험상, 코드의> 95 %가 조만간 수정됩니다.


답변

간단합니다. 프로그램을 한 번 실행 한 후 폐기하면 유닛 테스트가 필요하지 않습니다.

이것이 당신에게 과도하게 보인다면, 대안이 무엇을 의미하는지 고려하십시오. 단위 테스트가 지불하지 않는 크기보다 작은 크기가 있다면 “마법 크기에 도달 했습니까? 테스트를 작성해야합니까?” 이제 프로그래머는 미래를 예측하는 데 악명이 높으며 자신의 기술을 판단하는 데 악명이 높습니다. 지금 당신에게 명백하게 보이는 코드는 심지어 한 달을 기다려도 이해할 수 없게 될 것입니다. 당신이 절대적으로있는 프로젝트는, 긍정적으로 특정 다시 사용되지 않습니다, 당신은 단지 당신이 전에 뭔가 해결 방법을 찾아 볼 수도 있습니다 원격 기회에 주위를 유지하는 것이 됩니다 다시 요청을하고, 변경 요청을 받게됩니다.

따라서 테스트가 도움이되는지 여부를 잘못 판단 할 가능성이 높으며 테스트가 필요할 때 테스트 할 정확한 의미가 실제로 100 % 확실하지 않습니다. 사소한 일회성 프로그램을 제외한 모든 프로그램이 단위 테스트를 통해 이익을 얻는다고 믿기 때문에 다시는 실행되지 않는 테스트에 소요되는 노력 비용이 테스트되지 않았고 이해하기 어려운 코드를 확장하는 위험에 대해 무시할 수 있다고 생각합니다.


답변

얼마 전에 저는 단위 테스트가 개발 속도를 높이는 좋은 게시물을 발견했습니다 . 질문에 대답하는 데 도움이 될 수 있습니다.

… 코드베이스에 실질적인 단위 테스트가 제공된다면 어떻게 될까요? “모든 테스트에 성공하면 코드가 여전히 수행해야하는 작업을 보장합니다” 라고 말하고 테스트에 실패하면 일부 동작이 중단 된 위치를 정확하게 보여줍니다. 이것은 훌륭합니다. 코드가 여전히 수행해야 할 작업을 수행하면 방황하지 않고 원하는 것을 추가하도록 코드를 변경할 수 있습니다. 테스트를 실행하면 믿음이 있습니다. 이것은 소프트웨어 엔지니어가되기에 좋은 세상입니다. 나는 더 빨리 나아갈 수 있음을 알았습니다 …

나는“믿음”이 있습니다.

이것이 아마도 단위 테스트가 엔터프라이즈 컨텍스트에서 개발 속도를 높이는 가장 중요한 이유 일 것입니다.

모든 테스트를 통과해도 모든 것이 여전히 작동한다고 믿을 수 있습니다. 테스트에 실패하면 문제가 발생한 위치를 정확하게 지적합니다 …

높은 단위 테스트 범위우수한 단위 테스트 를 가져야합니다 . 이러한 조건을 준수하면 새로운 기능을 추가하려는 노력이 응용 프로그램의 크기와 거의 독립적이며 장기적으로 개발 속도가 빨라지 는 상황에 처하게 됩니다 .

Michael Feathers는 그의 책 중 하나에서 코드 변경 작업을하는 두 가지 방법을 소개했습니다.

  • 편집하고기도하세요
  • 덮고 수정하십시오.

코드베이스가 얼마나 큰지는 중요하지 않습니다.


답변

Kent Beck 에 따르면 Stack Overflow 질문에 대한 답변에서 단위 테스트는 얼마나 깊습니까? , 잘못되기 쉬운 코드를 테스트해야합니다.

일반적으로 생성자에서 잘못된 변수를 설정하는 것과 같은 실수를하지 않으면 테스트하지 않습니다.


답변

시간을 절약하고 개선하기 위해 단위 테스트가 구현됩니다.

  • 버그 추적
  • 코드 리팩토링 및 / 또는 재 작성
  • 통합 테스트
  • 회귀 테스트 등

프로그램의 비교적 복잡한 부분에 대한 단위 테스트를 작성해야합니다.

지금 단위 테스트를 작성해도 나중에 시간을 절약 할 수 없다면이를 건너 뛸 수 있습니다. 그러나 당신은 결코 알지 못합니다. 개인적으로 단위 테스트를 작성하지 않고 수동으로 모든 테스트를 수행하는 것이 더 저렴한 (시간, 돈 및 신경의 의미) 경우를 생각할 수 없습니다.


답변

“이것을 단위 테스트해야합니까?”는 일반적으로 다음과 같은 질문에 대답하여 대답 할 수 있습니다.

물론, 그것보다 훨씬 더 복잡하지만 시작하기에 좋은 방법입니다. 결국 다른 함수에서 사용되어 코드가 이미 테스트되고 있는지 또는 다른 함수에서 시간을 더 잘 소비하는지 등을 계량합니다.