TDD / 자동 단위 테스트의 장단점을 궁금해하고 전문 개발자가 단위 테스트를 지원하지 않고 응용 프로그램을 작성할 수 있는지에 대한 커뮤니티의 견해를 찾고 있습니까?
TDD / 자동 단위 테스트의 장단점을 궁금해하고 전문 개발자가 단위 테스트를 지원하지 않고 응용 프로그램을 작성할 수 있는지에 대한 커뮤니티의 견해를 찾고 있습니까?
답변:
무엇을 테스트하려면?
100 % 코드 적용 범위에 대해 이야기하는 경우 극히 드물고 유용하지 않으며 종종 불가능합니다. 마찬가지로 CRUD 관련 코드를 테스트하는 것은 시간 낭비이며 실제로 유용한 작업을 수행하는 대신 필요하지 않은 코드를 작성하는 데 몇 시간을 소비하는 것은 비전문가 입니다.
이제 개발자는 단위 테스트 작성 방법과 필요한 위치를 알아야합니다.
단위 테스트가 "단위"를 테스트하기위한 일반적인 오해가 있습니다.
다른 모든 테스트와 마찬가지로 단위 테스트는 기능을 테스트합니다 . 테스트 할 수있는 것은 없습니다.
그러나 복잡한 시스템의 기능은 종종 효과적으로 테스트 할 수 없습니다.
예를 들어, 사용자가 "삭제"버튼을 눌렀는데 아무런 반응이 없습니다. 왜? 데이터베이스 내에 오류가 있거나, 연결이 끊어 졌거나, 핵심 논리가 오작동하거나, 심지어 작업이 성공했지만 인터페이스가 제대로 업데이트되지 않았을 수 있습니다. 각 계층에는 서로를 호출하는 많은 함수가 포함되어있을 수 있으며 오류의 위치가 항상 명확하지는 않습니다.
단위 테스트는 구성 요소 를 분리 하는 패러다임을 기반으로하며 개별적으로 테스트합니다.
다시 한 번, 전체 시스템이 작동한다고 보장하지는 않지만 테스트를 단순화합니다.
TDD 자체는 요구 사항이 아닙니다. 개발자가 먼저 "실제로 코딩하려고하는 것은 무엇입니까?"라고 대답함으로써 코딩을 단순화합니다.
많은 사람들은 테스트를 작성하지 않으면 시간이 절약된다고 생각합니다. 잘못된. 전략적으로 생각 하면, 오류가 발생하기 까지 시간이 지남에 따라 오류 비용이 기하 급수적으로 증가합니다 .
코드에 오류가 발생하여 같은 날 감지하고 수정했다고 가정 해보십시오. 비용은 $ X 입니다.
오류가 감지되지 않고 매주 내부 빌드로 이동한다고 가정 해 봅시다. 다행스럽게도 품질 보증팀에서 버그 추적기를 발견했으며 버그 추적기에서 버그가 발생했으며이 문제는 5 분 간의 회의에 대한 5 분 토론 주제였습니다. 마지막으로 문제를 해결했습니다. 비용은 모든 사람이 소비 한 인력의 합계이며이 경우 $ 3 * X 일 수 있습니다 .
오류가 베타 테스트로 넘어 가고 더 많은 사람들이 참여한다면 어떨까요? $ 10 * X 라고합시다 .
오랫동안 탐지되지 않은 상태에서 1,000 명의 고객에게 갔다면 (100 만 명은 안된다!) 10 명은이를 감지하고, 지원 직원과 토론을 나누었고, 일부는 상사라고 불렀을 수도 있고, 팀원들은 그것을 재현하려고합니다. 등이 있습니다. 마지막으로 버그가 다시 나타나고 수정합니다. 총 얼마입니까? 그럼 이상 $ 50 * X .
보시다시피, 버그는 조만간 당신 이나 동료 에게 돌아올 것 입니다. 유일한 차이점은 발생시기와 비용입니다.
단위 테스트는 버그 수명을 단축 시켜 비용을 절감합니다.
테스트를 작성하지 않는 하나의 변명을 볼 수 있습니다. 프로토 타입을 작성하는 경우 (예 : 다른 사람에게 절대 가지 않는 것) 아니면 단일 용도로 무언가를 쓰고있을 수도 있습니다.
There's a common misconception that unit tests are for testing "units". Unit tests, likewise all other tests, test functionality.
단위 테스트는 테스트에 의미 물론입니다 단위 ; 그것이 이름의 유래입니다.
필자의 경험에 따르면 단위 테스트에서 발생할 수있는 오류의 95 %는 특히 데이터베이스 디자인 변경 후 데이터 계층 호출에서 발생합니다. 데이터베이스를 사용하는 경우 액세스하는 데 사용하는 모든 방법을 테스트하십시오. 테스트는 정교화 될 필요가없고 위생 검사 만 필요합니다.
귀하의 질문에 대한 답변-데이터베이스에 액세스하고 전문 개발자 인 경우 단위 테스트를 사용해야합니다. 그렇지 않으면 다릅니다.
실제로 응용 프로그램 사용 방법에 따라 다릅니다. 이것이 미션 크리티컬 한 어플리케이션입니까? 아니면 개발자가 내부적으로 만 사용하는 간단한 확인 응용 프로그램입니까? 회사의 핵심 응용 프로그램을 작업 할 때는 비즈니스 결정을 확실히하기 위해 필요한만큼의 단위 테스트가 있어야합니다. 회사에 따라 고객이보고있는 응용 프로그램이며 버그로 인해 비용이 발생할 수 있습니다. 제대로 수행되면 단위 테스트는 배포시 응용 프로그램이 작동하는지 확인하는 데 큰 도움이 될 수 있습니다. 그러나 그것은 모두 치료법이 아니며 인간의 테스트는 여전히 수행되어야합니다. 간단한 내부 (또는 보조) 응용 프로그램에는 단위 테스트가 필요하지 않지만 여전히 잘 작성해야합니다.
TDD는 단지 테스트를 먼저 작성하는 것이 아닙니다. 코드를 쉽게 테스트 할 수 있도록하는 것입니다. 그리고 쉽게 테스트 할 수없는 코드보다 읽기 / 디버그 / 유지 관리가 더 쉽습니다. 쉽게 테스트 할 수없는 코드는 종종 SOLID와 같은 패턴과 OO 원칙을 따릅니다. 나는 전문 개발자로서 항상 코드를 그렇게 작성해야한다고 주장합니다.
당신은 확실히 "테스트 없음"을 원하지 않습니다. 단위 테스트를 작성하는 경우 코드가 테스트와 일치하는지 최소한 어느 정도 보증해야합니다 (테스트가 사양과 일치하는지 확인해야 함).
그러나 단위 테스트 만 있으면 완료되지 않습니다. 여전히 통합 테스트와 엔드 투 엔드 테스트를 수행해야합니다 (그리고 시간이 지남에 따라 버그 회귀를 포착하기 위해 테스트 사례가 누적 됨).
나는 여기서 사지로 나가서 주로 주관적이며 당신의 목표에 달려 있다고 말합니다. tl; dnr :하는 것이 좋지만 그것에 대해 독단적 인 것은 더 많은 문제를 일으킬 것입니다.
TDD / Unit 테스트는 코드의 안정성을 향상시킬 것입니다. 코드베이스를 잘 몰라도 쉽게 변경할 수 있으며, 리팩터링 속도가 빨라지고, 어리석은 일을하지 않도록 할 수 있습니다. 단위 테스트는 시간 낭비 일 수도 있습니다. 코드 작성에 소요되는 시간입니다. 또한 코드를 맹목적으로 따르지 않으면 코드가 작동한다고 생각할 수 있습니다.
모범 사례를 지원하고이를 구현할 시간을 제공하고 지속되는 응용 프로그램을 원하는 회사에서 근무하는 경우 모두가 단위 테스트 및 코드 검토를 사용하고 연습하는 것이 가장 좋습니다. 개발자가 QA 팀을 남용하지 않으면 QA 팀을 보유하는 것이 수용 가능한 대체 수단이 될 수 있습니다. 시제품 (생산 시제품)을 작성하는 경우 연기 테스트보다 더 빠를 수 있습니다.
엉망이 세상에서 끝나지 않을 무언가를 연구하고 있다면 적용 범위가 적을 것입니다. 금융 거래? 많이. 코드베이스를 알고있는 강력한 개발자로 구성된 팀이 있고 함께 일하고 매출이없는 경우 적용 범위가 더 적을 수 있습니다. 기타.
아마도 그것은 아마도 어떤 기능 일 것입니다.
단위 테스트를 작성하지 않는 것이 허용되는 상황이 많이 있습니다. TDD는 지금 '에'있지만 은총 알이 아닙니다.
시간과 눈물을 절약 할 수있는 유지 보수 가능한 단위 테스트 를 작성하는 것이 전문가입니다 !
가 있습니다 misconception that Unit test finds bugs
. 모든 경우에 해당되는 것은 아닙니다. 단위 테스트는 버그를 찾거나 회귀를 감지하는 것이 아닙니다. 정의에 따라 examine each unit of your code separately
입니다. 그러나 응용 프로그램이 실제로 실행되면 모든 장치가 함께 작동해야하며 전체가 독립적으로 테스트 된 부분의 합계보다 더 복잡하고 미묘합니다.
따라서 TDD 프로세스 내에서 단위 테스트의 목표는 소프트웨어 구성 요소를 강력하게 설계하는 것입니다.
편집 : 단위 테스트가 실제로 버그를 감지하는 예외가 있습니다 . 유닛 코드를 리팩토링하거나 구조를 변경할 때, 행동을 바꿀 의미는 없습니다. 이 경우, 유닛 테스트는 종종 유닛의 동작이 변경되었는지 알려줍니다.
전문 개발자로서 단위 테스트를 작성하지 않아도됩니까?
아니.
의문의 여지없이 이것은 신입생이 가장 먼저 배우는 교훈 중 하나입니다. 당신은 있어야합니다 코드가 작동하는지 증명하기 위해 단위 테스트를 개발 하기 전에 당신은 당신의 코드가 테스트를위한 준비가되었음을 QA를 말한다. 그렇게하지 않으면 프로젝트 비용이 증가하고 팀 사기가 줄어 듭니다.
이 단위 테스트는 얼마나 철저해야합니까?
리트머스 테스트는 다음과 같습니다. QA가 코드에서 버그를 발견하면 단위 테스트를 사용하여 상사에게 실사를 입증 할 수 있습니까?
대답이 '아니요'인 경우 더 나은 단위 테스트 (또는 테스트)를 작성해야합니다.
답변이 '예'이면 코드를 확인할 준비가 된 것입니다.
전문 개발자로서 자동화 된 단위 테스트를 작성하지 않아도 됩니까?
예.
특히 자동화 된 단위 테스트를 작성하는 데 소요되는 시간과 노력이 테스트에서 얻는 이점보다 중요합니다. 여기에는 조롱하기 어려운 UI 코드가 포함되지만 이에 국한되지는 않습니다.
강조 : UI 코드에 대한 자동화 된 단위 테스트를 작성하는 것이 불가능하다는 말은 아닙니다 . 내 경험에 따르면 일부 UI 코드에 대해 자동화 된 단위 테스트를 작성하기가 어려운 경우가 있습니다.