성숙한 프로젝트에 테스트 주도 개발(TDD)을 도입하는 것이 가능합니까?[닫은]

StackOverflow https://stackoverflow.com/questions/107919

  •  01-07-2019
  •  | 
  •  

문제

  • TDD의 가치를 너무 늦게 깨달았다고 가정해 보겠습니다.프로젝트는 이미 성숙되었으며 많은 고객이 사용하기 시작했습니다.
  • 사용되는 자동화된 테스트는 대부분 기능/시스템 테스트이고 자동화된 GUI 테스트가 많이 있다고 가정해 보겠습니다.
  • 새로운 기능 요청과 새로운 버그 보고서(!)가 있다고 가정해 보겠습니다.그래서 아직도 많은 발전이 계속되고 있습니다.
  • 단위 테스트가 없거나 거의 없는 비즈니스 개체가 이미 많이 있을 것입니다.
  • 그들 사이의 협업/관계가 너무 많아 더 높은 수준의 기능/시스템 테스트를 통해서만 다시 테스트됩니다.통합 테스트 자체는 없습니다.
  • 많은 테이블, 뷰 등을 갖춘 대규모 데이터베이스가 마련되어 있습니다.단일 비즈니스 개체를 인스턴스화하기 위해 이미 상당한 양의 데이터베이스 왕복이 이루어졌습니다.

이 단계에서 TDD를 어떻게 도입할 수 있을까요?

조롱하는 것이 옳은 길인 것 같습니다.하지만 여기서 우리가 해야 할 조롱의 양은 너무 많은 것 같습니다.기존 작업(BO, 데이터베이스 등)을 대상으로 작동하는 모의 시스템을 위해서는 정교한 인프라를 개발해야 하는 것 같습니다.

그렇다면 TDD는 처음부터 시작할 때만 적합한 방법론이라는 뜻인가요?이미 성숙한 제품에 TDD를 도입하기 위한 실행 가능한 전략에 대해 듣고 싶습니다.

도움이 되었습니까?

해결책

복잡한 모의 인프라를 만들면 아마도 코드의 문제가 숨겨질 것입니다.변경하려는 코드 베이스 영역에 대해 테스트 데이터베이스를 사용하여 통합 테스트부터 시작하는 것이 좋습니다.변경 사항을 적용하더라도 문제가 발생하지 않을 것이라는 충분한 테스트를 마친 후에는 코드를 더 테스트하기 쉽게 만들기 위해 리팩터링을 시작할 수 있습니다.

Se also Michael Feathers의 훌륭한 책 레거시 코드로 효과적으로 작업하기, 레거시 코드 베이스에 TDD를 도입하려는 사람이라면 반드시 읽어야 할 책입니다.

다른 팁

저는 TDD를 기존 애플리케이션에 도입하는 것이 완전히 가능하다고 생각합니다. 실제로 최근에 제가 직접 해봤습니다.

새로운 기능을 TDD 방식으로 코딩하고 이를 수용하도록 기존 코드를 재구성하는 것이 가장 쉽습니다.이렇게 하면 테스트된 코드의 작은 부분부터 시작하지만 그 효과는 전체 코드 베이스에 퍼지기 시작합니다.

버그가 있는 경우 이를 재현하기 위한 단위 테스트를 작성하고 필요에 따라 코드를 리팩터링합니다(노력할 가치가 없는 경우를 제외하고).

개인적으로 저는 기존 시스템에 테스트를 추가하려고 미친 듯이 노력할 필요가 없다고 생각합니다. 이는 큰 이점 없이 매우 지루할 수 있기 때문입니다.

요약하자면, 작게 시작하면 프로젝트가 점점 더 많은 테스트 감염을 겪게 될 것입니다.

그래 넌 할수있어.귀하의 설명에 따르면 프로젝트의 상태는 양호합니다. 견고한 기능 테스트 자동화가 앞으로 나아갈 길입니다!어떤 측면에서는 단위 테스트보다 훨씬 더 유용합니다.TDD != 단위 테스트는 짧은 반복과 확실한 승인 기준에 관한 것임을 기억하세요.

기존의 승인된 프로젝트가 있으면 실제로 테스트가 더 쉬워진다는 점을 기억하십시오. 작동하는 애플리케이션이 최고의 요구 사항 사양입니다.따라서 당신은 함께 일할 종이 조각만 가지고 있는 사람보다 더 나은 위치에 있습니다.

TDD를 사용하여 새로운 요구 사항/버그 수정 작업을 시작하세요.방법론을 전환하는 데에는 오버헤드가 발생한다는 점을 기억하고(귀하의 고객이 이를 알고 있는지 확인하십시오!) 아마도 '좋은 옛날 방식'에 익숙한 팀원들이 상당한 거부감을 가질 것으로 예상할 것입니다.

꼭 필요한 경우가 아니면 오래된 물건을 만지지 마세요.기존 항목에 영향을 미치는 개선 요청이 있는 경우 추가 설정 작업을 수행하는 데 추가 시간을 고려하십시오.

개인적으로 나는 모형을 위한 복잡한 인프라를 도입하는 데 큰 가치를 느끼지 않습니다. 물론 경량 모드에서 동일한 결과를 얻을 수 있는 방법이 있지만 분명히 상황에 따라 다릅니다.

레거시 코드를 테스트하는 데 도움이 될 수 있는 도구 중 하나는(리팩터링할 시간이 없다고 가정할 때 Typemock Isolator입니다.)typemock.com 표준 반사 기술 (동적 프록시 등)을 사용하지 않지만 대신 프로파일러 API를 사용하기 때문에 인터페이스를 추출 할 필요없이 기존 코드에 종속성을 주입 할 수 있습니다.Sharepoint, HTTPContext 및 기타 문제가 있는 영역에 의존하는 앱을 테스트하는 데 사용되었습니다.꼭 살펴보시길 권합니다.(저는 해당 회사에서 개발자로 일하고 있지만 기존 레거시 코드를 리팩터링하여 시간과 돈을 절약하는 유일한 도구입니다. 또한 더 많은 기술을 위해 "레거시 코드로 효과적으로 작업"하는 것이 좋습니다.

로이

그래 넌 할수있어.한번에 다 하지 말고, 모듈을 만질 때마다 테스트하는데 꼭 필요한 것만 소개해주세요.

또한 더 높은 수준의 승인 테스트로 시작하여 거기에서 계속 작업할 수도 있습니다(다음을 살펴보세요). 피트니스 이를 위해).

몇 가지 기본적인 통합 테스트부터 시작하겠습니다.이것은 나머지 직원들로부터 동의를 얻을 것입니다.그런 다음 종속성이 있는 코드 부분을 분리하기 시작합니다.종속성 주입을 사용하면 코드를 훨씬 더 테스트하기 쉽게 만들 수 있습니다.버그를 테스트 가능한 코드를 작성할 수 있는 기회로 여기십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top