레거시 코드로 작업 할 때 단위 테스트 생성기가 도움이 되었습니까?


10

테스트 범위가 매우 작은 작은 (~ 70kLOC 생성) C # (. NET 4.0, 일부 Silverlight) 코드 기반을보고 있습니다. 코드 자체는 사용자 승인 테스트를 통과했다는 점에서 작동하지만 취하기 쉽고 일부 영역에서는 잘 고려되지 않습니다. 일반적인 용의자 (NMock, NUnit, StatLight for Silverlight 비트)를 사용하여 레거시 코드 주위에 견고한 단위 테스트 범위를 추가하고 싶습니다.

내 정상적인 접근 방식은 코드 상태에 만족할 때까지 프로젝트, 단위 테스트 및 리팩토링 작업을 시작하는 것입니다. 나는 과거에 이것을 여러 번 해왔으며 잘 작동했습니다.

그러나 이번에는 테스트 생성기 (특히 Pex )를 사용하여 테스트 프레임 워크를 만든 다음 수동으로 플레 싱하려고합니다.

내 질문은 : 레거시 코드베이스에서 작업을 시작할 때 과거에 단위 테스트 생성기를 사용 했습니까? 그렇다면 권장합니까?

내 두려움은 생성 된 테스트가 코드베이스의 의미 론적 뉘앙스를 놓치게되어 코드에서 의도 된 동작을 명확하게 표현하는 테스트가 아니라 커버리지 메트릭을 위해 테스트를하는 까다로운 상황을 초래할 것이라는 점이다.


PeX를 한 번 시도했지만 결과는 매우 만족스럽지 않습니다-YMMV. 이러한 도구가 코드와 기능 요구 사항을 "이해"할 것으로 기대하지 마십시오. "의미 론적 뉘앙스"만 놓치지 않고 전체 의미가 누락됩니다. 또한 레거시 코드베이스로 시작할 때는 일반적으로 단위 테스트부터 시작하지 않고 시스템 또는 통합 테스트부터 시작합니다. 그것은 PeX가 만들어진 것이 아닙니다.
Doc Brown

답변:


9

사물을 조금 다르게 보는 것이 좋습니다. 사고없이 기존 애플리케이션에 새 단위 테스트 코드를 추가하면 최상의 결과를 얻지 못할 수 있습니다. 코드베이스에 익숙해지기 위해이 작업을 수행하거나 테스트 생성기를 테스트하고 테스트하고 싶을 때 내 의견을 무시하십시오.

실용적으로 모든 버그 목록을 살펴 봐야합니다. 그런 다음 각 버그에 대한 단위 테스트를 작성하여 동작 방식을 결정하십시오. 이상적으로는 각 버그에 도달 할 때마다 새 코드 만 추가하는 것이 좋습니다.

단위 테스트 코드를 추가하는 시간 :

  • 새로운 기능 추가
  • 리팩토링 된 코드
  • 버그 수정
  • 코드가하는 일 배우기
  • 버그가 존재 함을 증명

사실 후에 단위 테스트를 추가하는 값을 정량화하는 것은 어렵습니다.

나는 보통 나 자신이 원하는 것을 반대하는 답변을 쓰도록 허용하지 않지만, 이것이 좋은 교훈이라고 생각합니다.


나는 당신과 100 % 동의합니다.이 질문은 다운 타임을 가장 잘 쓰는 방법을 궁금해하는 것에서 나왔습니다. 나의 일반적인 관행은 버그를 수정하거나 기능을 추가하는 과정에서 테스트 및 리팩토링하는 것입니다. 나는 몇몇 사람들이이 지역에서 몇몇 전쟁 이야기를 공유 할 수 있기를 바라고 있었다.
Duncan Bayne

1
+1, 사실 이후 적용 범위를 촬영하는 것은 일반적으로 생산적이지 않습니다. 회귀를 방지하는 수정 된 버그에 대한 테스트는 매우 생산적입니다. 버그의 회귀는 관련된 모든 사람에게 매우 실망 스러울 수 있습니다. 테스트는 더 나은 코드를 작성하는 데 도움이됩니다. 테스트를 볼트로 체결하면 일반적으로 하위 표준 테스트가 수행됩니다. OP의 두려움이 발견되고 생성 된 테스트의 신호 대 잡음비가 막히는 것 같습니다. 테스트되지 않은 코드에는 아마도 매우 가지가 많은 비트가 있습니다. 코드 냄새가 나는 도구가 더 유용 할 것입니다. FXCop 및 유사한 도구 일 수 있습니다.
kevpie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.