JB Rainsberger의 블로그 게시물 에서 통합 테스트에 대해 읽었으며 디자인에서 통합 테스트가 어떤 방식으로 더 가혹한 지 궁금하십니까?
우리는 더 큰 통합 테스트를 작성하며, 마이크로 테스트만큼 심하게 디자인을 비판하지 않습니다.
JB Rainsberger의 블로그 게시물 에서 통합 테스트에 대해 읽었으며 디자인에서 통합 테스트가 어떤 방식으로 더 가혹한 지 궁금하십니까?
우리는 더 큰 통합 테스트를 작성하며, 마이크로 테스트만큼 심하게 디자인을 비판하지 않습니다.
답변:
미세 테스트는 좋은 디자인으로 이어질 수 있습니다 . 좋은 작은 테스트를 작성하면 소량의 코드를 의도적으로 테스트하고 모의 객체 로 그 간격을 채 웁니다 . 이것은 낮은 커플 링 (서로 의존하지 않는 것)과 높은 응집력 (함께있는 것들)을 유지합니다. 이렇게하면 돌아가서 변경할 때 원하는 것을 담당하는 것을 쉽게 찾을 수 있으며 변경을 수행 할 때 문제가 발생할 가능성이 줄어 듭니다. 이것은 모든 디자인을 해결하지는 않지만 도움이 될 수 있습니다.
이러한 맥락에서, JB Rainsberger는 단위 테스트 작성에 어려움을 겪는다면 설계에 문제가있어 어려움을 야기 할 수 있으므로 테스트가 설계를 암시 적으로 비판하고 있다고 지적합니다. 그는 작은 테스트가 없으면 아키텍처를 유지하는 데 도움이되므로 통합 된 테스트에서는 캡처 할 수없는 좋은 디자인 패턴을 쉽게 벗어날 수 있기 때문에 이것이 좋은 것이라고 주장합니다.
업데이트 : Rainsberger는 아래에서 지적했듯이 마이크로 테스트는 단위 테스트와 동의어가되지 않았습니다. 또한 의사 소통 내용을 정확하게 파악할 수있는 자세한 답변을 제공합니다.
매우 짧은 버전 : 더 작은 테스트는 시스템의 작은 부분을 실행하기 때문에 프로그래머가 작성할 수있는 내용을 자연스럽게 제한하므로 피드백을 더 선명하게 (알기 쉽고 / 더보기 어렵게) 할 수 있습니다. 이것이 반드시 더 나은 디자인으로 이어지지는 않지만 오히려 디자인 위험을 더 빨리 발견 할 수있는 기회를 제공한다고 덧붙입니다.
먼저, "마이크로 테스트"라고 말할 때 나는 "작은 테스트"를 의미하며 더 이상은 없습니다. "단어 테스트"를 의미하지 않기 때문에이 용어를 사용합니다. "단위"를 구성하는 요소에 대한 논쟁에 휘말리고 싶지 않습니다. 신경 쓰지 않습니다 (적어도 여기 / 지금은 아닙니다). 두 사람은 아마도 "단위"보다 "작은"에 대해 더 쉽게 동의 할 것입니다. 그래서 저는이 아이디어의 새로운 표준 용어로 "마이크로 테스트"를 점차 채택하기로 결정했습니다.
"액션"부분에서 시스템의 더 큰 부분을 실행하는 테스트를 의미하는 더 큰 테스트는 더 작은 테스트만큼 명확하거나 완벽하게 디자인을 비판하지 않는 경향이 있습니다. 주어진 테스트 그룹을 통과 할 수있는 모든 코드베이스 세트를 상상해보십시오. 즉, 코드를 재구성 할 수 있으며 여전히 해당 테스트를 통과합니다. 더 큰 테스트의 경우이 세트가 더 큽니다. 작은 테스트의 경우이 세트가 더 작습니다. 다르게 말하면, 테스트가 작을수록 디자인이 더 많이 구속되므로 디자인이 적을수록 통과 할 수 있습니다. 이런 식으로 마이크로 테스트는 디자인을 더 비판 할 수 있습니다.
나는 당신이 듣고 싶지 않지만 듣고 싶어하는 것을 직접 알려주고 다른 사람들이 편안하게 느끼지 않는 방식으로 긴급 성을 전하기 위해 당신에게 소리 치는 친구의 이미지를 불러 일으키기 위해 "더 가혹하게"말합니다 하기. 반면에 통합 테스트는 조용히 있고 더 이상 문제를 해결할 시간이나 에너지가 없을 때 문제를 암시합니다. 통합 테스트를 통해 양탄자 아래에서 설계 문제를 쉽게 해결할 수 있습니다.
더 큰 테스트 (통합 테스트와 같은)를 사용하면 프로그래머는 주로 멍청함을 통해 문제를 겪는 경향이 있습니다. 어쨌든 테스트를 통과하는 엉킨 코드를 자유롭게 작성할 수는 있지만 다음 코드로 넘어가는 순간 그 코드에 대한 이해가 빨리 사라집니다. , 다른 사람들은 엉킨 디자인을 읽는 데 어려움을 겪고 있습니다. 여기에는 통합 테스트에 의존 할 위험이 있습니다. 작은 테스트 (마이크로 테스트와 같은)를 사용하면 프로그래머는 대부분 과잉 사양을 통해 문제를 겪는 경향이 있습니다. 일반적으로 이전 테스트의 복사 / 붙여 넣기로 관련이없는 세부 사항을 추가하여 테스트를 과도하게 제한합니다. 구석으로. 좋은 소식: 몇 시간 또는 며칠 후에 테스트에서 외부 세부 사항을 제거하는 것이 훨씬 쉽고 안전하다는 것을 알게되었습니다. 실수가지나면서 과잉 지정은 점점 더 명백한 피해를 더 빨리 미치며, 경고 프로그래머는 문제를 수정해야한다는 것을 미리 알게됩니다. 나는 이것이 강점이라고 생각한다 : 나는 문제를 더 일찍 발견하고 그러한 문제가 기능을 추가 할 수있는 능력을 교란하기 전에 문제를 해결한다.