나 에게 지금 진행되고있는 일에서 관련 일화가 있습니다 . TDD를 사용하지 않는 프로젝트를 진행 중입니다. 우리의 QA 직원들은 우리를 그 방향으로 움직이고 있지만, 우리는 작은 복장이며 오래 걸리는 과정이었습니다.
어쨌든 최근에는 타사 라이브러리를 사용하여 특정 작업을 수행했습니다. 해당 라이브러리의 사용과 관련하여 문제가 있었으므로 본질적으로 동일한 라이브러리의 버전을 직접 작성해야했습니다. 전체적으로 약 5,000 줄의 실행 코드와 약 2 개월이 걸렸습니다. 나는 코드 라인이 좋지 않은 메트릭이라는 것을 알고 있지만이 답변에 대해서는 괜찮은 규모의 지표라고 생각합니다.
임의의 비트 수를 추적 할 수있는 특정 데이터 구조가 필요했습니다. 프로젝트가 Java로되어 있기 때문에 Java를 선택 BitSet
하고 조금 수정했습니다 (리딩을 추적하는 기능이 필요했습니다 0
.Java의 BitSet은 어떤 이유로 .....)하지 않습니다. 적용 범위가 ~ 93 %에 도달 한 후 실제로 작성한 시스템에 스트레스를주는 몇 가지 테스트를 작성하기 시작했습니다. 기능의 특정 측면을 벤치마킹하여 최종 요구 사항에 충분히 빠르도록해야했습니다. 당연히 BitSet
인터페이스 에서 재정의 된 기능 중 하나는 큰 비트 세트 (이 경우 수백만 비트)를 처리 할 때 엄청나게 느 렸습니다. 다른 재정의 된 기능은이 기능에 의존하므로 병목 이 컸습니다 .
내가하고있는 드로잉 보드에 가고, 그리고 기본 구조 조작 할 수있는 방법 파악되었다 결국 무엇 BitSet
입니다 long[]
. 알고리즘을 설계하고 동료에게 입력을 요청한 다음 코드 작성에 대해 설정했습니다. 그런 다음 단위 테스트를 실행했습니다. 그들 중 일부는 고장 났고, 그것을 고치기 위해 알고리즘을 어디에서 찾아야하는지 정확하게 지적한 것입니다. 단위 테스트의 모든 오류를 수정 한 후에는 기능이 제대로 작동한다고 말할 수있었습니다. 최소한이 알고리즘이 이전 알고리즘과 마찬가지로 작동한다고 확신 할 수 있습니다.
물론 이것은 방탄이 아닙니다. 내 코드에 단위 테스트가 확인하지 않는 버그가 있으면 알 수 없습니다. 그러나 물론 동일한 버그가 느린 알고리즘에도 있었을 수 있습니다. 그러나 특정 기능의 잘못된 출력에 대해 걱정할 필요가 없다고 확신 할 수 있습니다. 기존의 단위 테스트는 새로운 알고리즘을 테스트하여 올바른지 확인하는 데 몇 시간, 며칠이 걸리지 않았습니다.
즉 , TDD에 관계없이 단위 테스트를 수행해야하는 시점입니다. 즉 , 단위 테스트는 코드 리팩토링 / 유지 관리가 끝날 때 TDD와 TDD 외부에서 모두 동일하게 수행합니다. 물론 이것은 정기적 인 회귀 테스트, 연기 테스트, 퍼지 테스트 등과 쌍을 이루어야하지만 단위 상태는 이름에서 알 수 있듯이 가장 작은 원자 수준에서 사물을 테스트하여 오류가 발생한 위치를 알려줍니다.
필자의 경우 기존 단위 테스트가 없으면 알고리즘이 항상 작동하도록하는 방법을 고안해야합니다. 결국 , 단위 테스트 와 비슷한 소리가 들리지 않습니까?