답변

5

대용량의 기존 스파게티 코드베이스에 단위 테스트를 추가하고 있습니다.

내 접근 방식은 문제를 해결하도록 요청 받았을 때 현재 작업과 관련된 코드 기반 부분에 새로운 래퍼를 만들려고합니다. 이 새로운 래퍼는 TTD (테스트를 먼저 작성)를 사용하여 개발되었습니다. 어떤 경우에는 으로 테스트 한 레거시 코드가 아닙니다. 다른 때에 나는 기존 모듈의 새로운 복사본을 만들어 심각한 모듈에 대한 폭력을 시작합니다. 때때로 처음부터 기능을 다시 작성합니다.

하지만 꽤 잘 테스트 한 상태로 유지할 때 나는 꽤 조종 할 수 있다고 느낍니다.

너무 많은 복사 및 붙여 넣기로 개발 된이 코드베이스에서 발견 한 것은 특정 부분을 이해하고 일부 기능을 추출한 후 (테스트 우선 수행) ... 이러한 기능은 종종 다른 많은 장소에서 사용 가능하다는 것이 드러났습니다. 따라서 레거시 코드를 자체적으로 테스트 한 라이브러리로 대체하는 속도가 빨라졌습니다.

현재 문제 (일반적으로 수정하려고하는 버그)로 다루지 않은 코드 부분에 테스트를 다시 쓰거나 추가하려고 시도하지 않지만 권한이 없습니다. 접촉되고 관련 될 수있는 것에 대해서는 상당히 공격적인 사전 행동 태도를 취합니다.

업데이트 : Penguinix 질문 : "당신은 어떤 언어로 작업합니까? 당신이 추천하는 테스트 하네스가 있습니까?"

지금 나는 ... ... 유행성 이하선염에서 일하고 있습니다! 그러나 같은 원칙이 어디서든 작동합니다. 내가 MinUnit을 보았다 http://www.jera.com/techinfo/jtns/jtn002.html

, 즉 종류의 나에게 깨달음의 "선"순간이었다 : UT에 대한 이해를 변형

뭔가 MinUnit했다. 그것은 단위 테스트에 관한 오해를 없애 버렸습니다. 정교한 OO 프레임 워크 등을 필요로하는 복잡한 작업이었습니다. UT는 많은 테스트를 작성하는 것이 었습니다. "하네스"는 약 3 분 만에 원하는 언어로 직접 작성할 수 있습니다. 그냥 타고 일어나십시오.

+0

어떤 언어로 작업합니까? 추천하는 특정 테스트 장치가 있습니까? –

1

이것은 코드베이스의 상태에 따라 달라집니다 ... 거대한 클래스입니까? 메가 메소드가있는 클래스 하나? 수업은 단단히 결합되어 있습니까? 구성에 부담이 있습니까?

이것을 고려하여 Working Effectively with Legacy Code을 읽고 문제점을 찾아내어 권장 사항을 적용하는 것이 좋습니다.

+0

http://www.manning.com/baley/ .NET의 Brownfield 응용 프로그램도 훌륭하게 보입니다. –

+0

흥미로운 것 같습니다. 저는 'Working Effectively ...'를 사용하고 있습니다. 지금 제 첫 번째 주요 brownfield 어플리케이션에서 사용하고 있으며, 많은 도움이되었습니다. Refactoring http://www.amazon.com/dp/0201485672도 유용 할 것 같습니다 (내 다음 구매). –

+0

마틴 파울러 (Martin Fowler)의 리팩토링은 리펙토링 기능을 갖춘 성경입니다. 그것은 내 개발에 매우 ​​도움이되었습니다. 또한 Head First Design Patterns 및 Code Complete를 권장합니다. –