하나가 비교적 큰 프로그램 (예 : C #에서 900k SLOC)을 가지고 있다고 가정하십시오. 전체 코드 기반은 더 이상 회사와 함께 있지 않은 한 명의 선임 개발자가 작성했습니다. 모든 코드는있는 그대로 테스트 할 수 있으며 IoC는 전체적으로 사용됩니다. 단, 이상한 이유로 단위 테스트를 작성하지 않았습니다. 이제 귀사는 코드를 분기하고 변경 사항이 핵심 기능을 위반하는시기를 감지하기 위해 추가 된 단위 테스트를 원합니다.
- 테스트를 추가하는 것이 좋습니다?
- 그렇다면 어떻게 이런 식으로 시작합니까?
편집하다
OK, 그래서 나는 반대 결론에 대한 좋은 주장을하는 대답을 기대하지 않았습니다. 어쨌든 문제가 발생했을 수 있습니다. 나는 "중복 문제"도 읽었으며 일반적인 합의는 "쓰기 시험이 좋다"는 것입니다 ... 그렇지만이 특별한 경우에는 도움이되지 않습니다.
레거시 시스템에 대한 글쓰기 테스트를 고려할 때 혼자 있다고 생각하지 않습니다. 나는 시간이 얼마나 걸리고 새로운 테스트가 몇 번이나 문제를 포착하는지 (그리고 그들이 몇 번이나하지 않는지)에 대한 통계를 유지할 것입니다. 나는 돌아와서 일년 내내 지금부터 내 결과로 업데이트 할 것입니다.
결론
따라서 기본 코드와 같이 기존 코드에 단위 테스트를 추가하는 것은 기본적으로 불가능합니다. 일단 코드가 작동하면 테스트를 적색 / 녹색으로 밝힐 수 없으며, 테스트를 위해 어떤 동작이 중요한지 명확하지 않으며, 어디서 시작해야하는지 확실하지 않으며 완료되면 확실하지 않습니다. 이 질문을하는 것조차도 처음에는 필기 시험의 요점을 놓칩니다. 대부분의 경우 의도 된 기능을 해독하고 단위 테스트를 소급하여 추가하는 것보다 TDD를 사용하여 코드를 다시 작성하는 것이 실제로 더 쉽다는 것을 알았습니다. 문제를 해결하거나 새로운 기능을 추가 할 때 그것은 다른 이야기이며, 지금은 단위 테스트를 추가 할 때라고 생각합니다 (아래에서 지적했듯이). 결국 대부분의 코드는 종종 예상보다 빨리 재 작성됩니다.