문제

최근 에이 개발 방법을 발견 한 후, 나는 그것이 다소 좋은 방법론이라고 생각합니다. 그래서 첫 번째 프로젝트의 경우, 작은 DLL의 코드 가치 (C#.NET, 가치가있는 것)를 가지고 있으며이 코드에 대한 테스트 세트를 만들고 싶지만 방법과 방법에 대해 약간 길을 잃었습니다. 어디서 시작하나요.

나는 Nunit과 vs 2008을 사용하고 있으며, 어떤 종류의 수업을 시작 해야하는지, 테스트를 작성 해야하는 내용 및 일반적으로 테스트 기반 개발로 코드를 이동하는 방법에 대한 팁은 크게 감사 할 것입니다.

도움이 되었습니까?

해결책

책을 참조하십시오 레거시 코드로 효과적으로 작동합니다 Michael Feathers.

요약하면, 기존 코드를 테스트 가능하고 테스트 된 코드로 리팩터링하는 것은 많은 작업입니다. 때로는 실용적 이기에는 너무 많은 일입니다. 그것은 코드베이스의 크기와 다양한 클래스와 기능이 서로 의존하는 양에 따라 다릅니다.

테스트가없는 리팩토링은 행동의 변화 (즉, 버그)를 도입합니다. 그리고 순수 주의자들은 행동이 변하지 않는지 확인하기위한 테스트가 없기 때문에 그것이 실제로 리팩토링되지 않는다고 말할 것입니다.

전체 애플리케이션에 전반적으로 테스트를 추가하지 않고 코드 영역에서 작업 할 때 테스트를 추가하십시오. 아마도이 "핫스팟"으로 다시 돌아와야 할 것입니다.

상향식에서 테스트를 추가하십시오 : 정확성을 위해 작은 독립 클래스 및 기능을 테스트하십시오.

상단에서 테스트를 추가하십시오. 전체 서브 시스템을 블랙 박스로 테스트하여 코드 변경으로 동작이 변경되는지 확인하십시오. 그래서 당신은 그들을 통해 무슨 일이 일어나고 있는지 알아낼 수 있습니다. 이 접근법은 아마도 당신에게 가장 큰 이익을 얻을 것입니다.

테스트를 추가하는 동안 "올바른"행동이 무엇인지에 대해 처음에는 너무 걱정하지 말고 행동의 변화를 감지하고 피하십시오. 가장 큰 테스트되지 않은 시스템은 종종 잘못 보일 수있는 내부 동작을 가지고 있지만 시스템의 다른 부분은 의존합니다.

데이터베이스, 파일 시스템, 네트워크와 같은 종속성을 격리하여 테스트 중에 모의 데이터 제공 업체를 교체 할 수 있도록 생각하십시오.

프로그램에 내부 인터페이스가없는 경우 한 서브 시스템/레이어 사이의 경계를 정의하는 선이 있으면이를 소개하고 테스트해야 할 수도 있습니다.

또한 자동 조롱 프레임 워크와 같은 코뿔소 또는 모크 기존 수업을 조롱하는 데 도움이 될 수 있습니다. 나는 테스트 가능성을 위해 설계된 코드에서 그것들의 필요성을 실제로 찾지 못했습니다.

다른 팁

레거시 코드로 효과적으로 작동합니다 테스트없이 단위 테스트 환경으로 코드를 마이그레이션 할 때의 성서이며 코드를 쉽게 테스트 할 수있는 방법과 테스트 방법에 대한 많은 통찰력을 제공합니다.

나는 또한 발견했다 예에 의한 테스트 중심 개발 그리고 실용 단위 테스트 : nunit과 함께 C# 해당 환경에서 단위 테스트에 대한 괜찮은 소개입니다.

TDD를 시작하는 간단한 접근 방식 중 하나는 오늘 앞으로 테스트를 먼저 작성하고 기존 (단위 테스트) 코드를 만질 필요가있을 때마다 변경하기 전에 시스템의 기존 동작을 확인하는 전달 테스트를 작성하는 것입니다. 그것은 당신이 아무것도 깨뜨리지 않았다는 확신을 높이기 위해 해당 테스트를 다시 실행할 수 있도록합니다.

나는 이것을 "테스트 중심의 역 엔지니어링"이라고 부릅니다.

"하단에서"시작 - 각 클래스는 별도로 검사하고 테스트를 작성할 수 있습니다. 의심스러운 경우 추측하십시오.

전방 방향으로 평범한 TDD를 수행 할 때 테스트를 신성한 것으로 취급하고 코드가 깨 졌다고 가정합니다. 때로는 테스트가 잘못되었지만 시작 위치는 코드라는 것입니다.

TDRE를 할 때 코드는 신성합니다. 입증하다 코드에는 오랜 버그가 있습니다. 리버스 케이스에서는 코드 주위에 테스트를 작성하여 테스트가 작동하고 코드가 작동 할 때까지 테스트를 조정합니다.

그런 다음 나쁜 코드를 파헤칠 수 있습니다. 일부 나쁜 케이드에는 현명한 테스트 사례가 있습니다. 이는 청소하면됩니다. 그러나 일부 나쁜 코드에는 무의미한 테스트 케이스도 있습니다. 이것은 당신이 교정 할 수있는 버그 또는 서투른 디자인 일 수 있습니다.

코드가 실제로 잘못되었는지 판단하려면 전체 테스트 사례로 상단에서 시작해야합니다. 실제로 작동하는 라이브 데이터는 시작입니다. 또한 알려진 버그를 생성하는 라이브 데이터도 시작하기에 좋은 장소입니다.

라이브 데이터를 Unittest 케이스로 전환하기 위해 작은 코드 생성기를 작성했습니다. 그렇게하면 테스트 및 리팩토링의 일관된 기초가 있습니다.

테스트 가능한 테스트를 통해 테스트 가능한 코드가 쉽게 찾을 수 있습니다. 일부가 있으면 테스트 가능해야합니다. 없다면 - 반대를 가정하십시오. ;)

TDD (Test Driven Development)는 설계 전략만큼 테스트 전략이 아닙니다. 수업의 인터페이스를 설계하고 클래스의 범위 (또는 해당 문제에 대한 하위 시스템)를 올바르게 얻는 데 도움이되는 테스트.

TDD 중에 만든 테스트를 수행하고 나중에 실행하는 것은 좋은 테스트를 거치지 만 그 디자인 철학의 (매우 환영받는) 부작용 일뿐입니다.

이것은 테스트에 대한 코드의 저항을 기대합니다. 쉽게 테스트 할 수 있도록 코드를 듣고 인터페이스를 변경하십시오. 테스트 작성을 시작할 때 재 설계 할 가능성이 높습니다.

DLL은 일종의 서비스를 제공합니다. 모든 서비스에 대해이 서비스를 받기 전에 무엇을해야합니까,이 서비스를 받기 위해 어떤 매개 변수를 전달 해야하는지, 요청 된 서비스가 올바르게 실행되었는지 어떻게 알 수 있습니까?

해당 질문에 대한 답이 있으면 첫 번째 테스트를 작성할 수 있습니다. 그러한 테스트는 오히려 호출 될 것입니다 특성화 테스트 단위 테스트보다 DLL이 TDD를 사용하여 개발되지 않은 경우 단위 테스트보다 쓰기가 더 쉽습니다.

특성화 테스트는 또한 M. Feathers의 "레거시 코드와 효과적으로 작업"에서 논의되며, 이는 다른 응답에서 권장됩니다.

또한 새로운 코드 라인을 추가하려면 실패한 테스트를 작성하십시오.

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