단위 테스트를 매우 유용하게 만드는 중요한 요소 중 하나는 빠른 피드백 입니다.
앱이 통합 / 시스템 / 기능 테스트 (대부분의 개발 상점에서 현실과는 거리가 먼 이상적인 상황)로 완전히 커버 될 때 발생하는 상황을 고려하십시오. 이들은 종종 전담 테스트 팀이 운영합니다.
- SCM 리포지토리에 변경 사항을 적용하면
- 언젠가 (아마 며칠 후) 테스트 담당자는 새로운 내부 릴리스를 받고 테스트를 시작합니다.
- 그들은 버그를 발견하고 버그 보고서를 제출합니다.
- (이상적인 경우) 누군가가 버그 보고서를 다시 할당합니다.
이 작업에는 며칠 또는 몇 주가 걸릴 수 있습니다. 지금까지는 이미 다른 작업을 수행하고 있으므로 미리 작성된 코드에 대한 세부 정보가 없습니다. 또한 일반적으로 버그의 실제 위치에 대한 직접적인 증거조차 없으므로 버그를 찾아 수정하는 데 상당한 시간이 걸립니다.
단위 테스트 (TDD)
- 당신은 테스트를 작성
- 테스트를 만족시키기 위해 코드를 작성합니다.
- 테스트는 여전히 실패합니다.
- 코드를보고 일반적으로 몇 초 안에 "oops"경험이 있습니다 (예 : "oops, 해당 조건을 확인하는 것을 잊어 버렸습니다!").
- 즉시 버그를 수정하십시오.
이 모든 것은 몇 분 안에 일어난다 .
통합 / 시스템 테스트가 유용하지 않다는 것은 아닙니다. 그들은 단지 다른 목적을 수행합니다. 잘 작성된 단위 테스트 를 사용하면 통합 단계에 도달 하기 전에 코드에서 버그의 상당 부분 을 발견 할 수 있습니다. 여기서 버그 를 찾아 수정하는 데 훨씬 더 많은 비용이 듭니다. 단위 테스트로는 잡기가 어렵거나 불가능한 이러한 유형의 버그를 잡으려면 통합 테스트가 필요합니다. 그러나 내 경험상 그것들은 좀 더 드물다. 내가 본 대부분의 버그는 메소드 내부의 어딘가에 단순하거나 사소한 누락으로 인해 발생합니다.
또한 단위 테스트는 인터페이스의 유용성 / 안전성 등을 테스트하므로 설계 및 API를 개선하는 데 매우 중요한 피드백을 제공합니다. 어떤 IMHO가 모듈 / 서브 시스템 통합 버그의 가능성을 상당히 줄일 수 있는가 : API가 더 쉽고 깨끗할수록 오해 나 누락의 가능성이 줄어 듭니다.
자동화 된 단위 테스트, 자동화 된 통합 테스트 및 자동화 된 승인 테스트에 대한 경험은 무엇이며 경험상 ROI가 가장 높은 것은 무엇입니까? 그리고 왜?
ROI는 많은 요인에 따라 결정되며, 그 중 가장 중요한 것은 프로젝트가 그린 필드인지 레거시인지에 달려 있습니다. 그린 필드 개발을 통해 저의 조언 (그리고 지금까지 경험)은 처음부터 TDD 스타일을 단위 테스트하는 것입니다. 이 경우 가장 비용 효율적인 방법이라고 확신합니다.
그러나 레거시 프로젝트에서 충분한 단위 테스트 적용 범위를 구축하는 것은 큰 과제이며 혜택을 얻는 데 매우 느립니다. 가능한 경우 UI를 통해 시스템 / 기능 테스트를 통해 가장 중요한 기능을 다루는 것이 더 효율적입니다. 자동화 된 테스트 지원 도구가 점차 향상되고 있지만 데스크톱 GUI 앱은 GUI를 통해 자동 테스트하기가 어려울 수 있습니다. 이는 조잡하지만 효과적인 안전망을 신속하게 제공합니다. 그런 다음 앱의 가장 중요한 부분에 대해 단위 테스트를 점차적으로 구축 할 수 있습니다.
다음 프로젝트에서 자동화를 위해 한 가지 형태의 테스트 만 골라야한다면 어떤 것입니까?
그것은 이론적 인 질문이며 무의미합니다. 모든 종류의 테스트는 우수한 SW 엔지니어의 도구 상자에서 사용되며, 대체 할 수없는 시나리오가 있습니다.