문제

는 동안 내가 쓴에 대한 단위 테스트의 대부분은 코드가 나는,나만 최근 내 손에서의 복사본을 TDD 에 의해 예 켄트 벡.나는 항상 후회하는 특정 디자인 결정을 내가 만든 이후 그들은 막 응용 프로그램 에서는'검사할 수 있는'.내가 읽기를 통해 예약하는 동안 그것의 일부는 보이는 외국인,내 수 있다는 느낌은 그것을 관리하고 그것을 시도하기로 결정했에 현재 프로젝트는 기본적으로 클라이언트/서버 시스템을 어디에 두 가지를 통해 통신.결합니다.중 하나에서 가제트와 다른 호스트에서.응용 프로그램에서는 Python.

출발했고 곧 얽혀있어서의 혼란을 다시 쓰고 작은 테스트를 내가 나중에 생각지 않았고 테스트니다.나는 그들 대부분은 지금은 응용 프로그램을 실행할 수 있는 테스트는 모두 응고 그냥 2.

나의 경험에 따라,제가 몇 가지 질문이 어떤 나는 다음과 같습니다.나는 몇 가지 정보를 얻서 새로운 TDD:이 있는 샘플 응용 프로그램으로 테스트를 수행하는 방법을 보여 줍니다 TDD? 그러나 몇 가지 특정 질문에는 나는 대한 답변/토론한다.

  1. 켄트 벡 목록을 사용하여는 그는 추가하고 파업에서 안내하는 개발 프로세스.당신은 어떻게 그러한 목록은?나는 처음이 있었 같은 몇 가지 항목을"서버 시작해야","서버를 중단하는 경우 채널은 사용할 수 없습니다"등입니다.하지만 그들은 혼합하고 마지막으로 지금,그것은 뭔가 좋아"클라이언트에 연결할 수 있어야 합하여"서버(는 씨의 지배 서버 시작 etc.).
  2. 당신은 어떻게 핸들이 다시 쓰?저는 처음에 선택한 반양방 시스템에 따라 명명된 파이프도록을 개발할 수 있다는 응용 프로그램 논리에 자신의 컴퓨터 그리고 나중에 추가 USB 통신 부분입니다.그것은 그들에게로 이동되는 소켓을 기반으로 일한 다음에서 이동을 사용하여 원는 소켓을 사용하는 파이썬 SocketServer 모듈이 있습니다.각 시간 것을 변경하는 것을 발견했 다시 작성했다는 상당한 부분의 테스트는니다.나는 생각하는 테스트는 것이 다소 불변 안내 동안 개발.그들은 그 느낌이 더 좋아하는 코드를 처리합니다.
  3. 나는 데 필요한 클라이언트와 서버를 통해 통신하는 채널을 시험용하실 수 있습니다.나 수 있는 모의 하나의 측면을 테스트하는 다른 하지만 그런 다음 전체 채널 없을 테스트하고 제가 걱정하는데 미니다.이 법칙이 약한 전체에서 빨강/녹색/리팩터 리듬이다.은 이 부족의 경험이나 내가 뭔가 잘못하고 있는가?
  4. "가짜 당신이 그것을 만들 때까지"나를 떠나 많이 지저분하는 코드를 나중에 시간을 많이 소비하는 리팩터링하고 깨끗한다.이 방법은 것이 일하는가?
  5. 의 끝에서 세션을,저는 이제 클라이언트와 서버 실행은 약 3~4 단위 테스트를 확인할 수 있습니다그것은 내게 주의 주위에 그것을 할 수 있습니다.나는 생각을 할 수 있었다 그것은 하루에 사용한 경우합 후 단위 테스트 코드는 방법입니다.나는 실패를 볼 수를 얻을.

내가 찾는 사람의 의견과 조언을에서 사람들이 구현한 큰 아닌 사소한 프로젝트를 완전히(또는 거의 완전히)이 방법론을 사용하여.그것은 나를 따르는 방법 후에 내가 뭔가를 이미 실행하고 싶을 추가하는 새로운 기능은 아니지만 그 일을 처음부터는 것을 귀찮고지 않은 노력이 가치가 있습니다.

P.S.:면 알려 주시기 바랍 이해야 커뮤니티에 위키고 나는 그것을 마크와 같습니다.

Update0 :모든 답변들이 동일하게 도움이 됩니다.나는 하나 않았기 때문에 그것은 흔들리게 나의 경험니다.

Update1:연 실습니다.

도움이 되었습니까?

해결책

로 예비,코멘트 TDD 연습을 걸립니다.돌이켜보면에서 테스트를 썼 시작했을 때 TDD,나의 문제,다만 내가 볼 때에 코드를 썼습니다 몇 년 전입니다.그 일을 계속,그리고 당신처럼를 인식하기 시작하는 좋은 코드에서,같은 일이 일어날 것입니다 당신의 테스트-양해를 부탁드리겠습니다.

당신은 어떻게 그러한 목록은?나 처음에는 몇 가지 있었 같은 항목에"서버 시작해야","서버 중단 는 경우 채널은 사용할 수 없습니다"등입니다.지 그들이 혼합되었고 마지막으로 지금,그것은 뭔가 좋아"클라이언트해야 에 연결할 수 있는"서버

""목록할 수 있습보다는 비공식(는 경우에 벡의 책)만으로 이동할 때 항목으로 테스트를 작성하려고의 문에"[어떠한 상황이 발생하면 이]다음[이 상태에 있어야 진정한에는"형식입니다.이것을 생각하는 그것이 무엇에 대한 자세한 내용을 확인할 수 있는 방법을 확인하고 직접 변환됩으로 테스트-나지 않는 경우에 그것은 당신을 제공해야 단서에 대한 조각의 기능은 없습니다.생각 사용하여 케이스/시나리오이다.예를 들어"서버 시작해야",불분명하지 않았기 때문에 시작되는 작업입니다.

각 시간이 변경된 것,내가 찾는 을 다시 상당한 부분의 테스트되었다.나 을 생각하는 테스트는 것입 다소 불변 가이드 중 개발.그들은 그냥 같은 느낌을 더 코드를 처리합니다.

첫째,네,테스트 더 코드고,유지 보수가 필요합-와 쓰기에 유지 관리 테스트 연습을 걸립니다.동의함으로 S.로트,필요하신 경우에는 변경 테스트 많은,아마 당신은 테스트를"너무 깊은".이상적으로 테스트할 수준에서 대중의 인터페이스하지 않은,가능성이 높고,변경하지 않는 수준에서의 구현은 세부사항 수있는,진화합니다.하지만 일부의 운동에 대해 오는 디자인,그래서 당신을 얻을 것으로 예상 그것의 일부를 잘못을 이동해야/리팩터링 테스트뿐만 아니라.

나 수 있는 모의 하나의 측면을 테스트 다른 하지만 그런 다음 전체적인 채널 되지 않을 것을 테스트하고 제가 걱정하는 나는 미니다.

완전히 확실하지 않는다.에서의 소리를 사용하여 모의 오른쪽 아이디:한쪽,모의 다른 중 하나,그리고 확인하는 각 측면에 작품을 가정하면,다른 하나는 구현된다.테스트 전체가 시스템을 함께 통합 테스트하는,당신은 또한 당신을 하고 싶지만,일반적으로의 부분 TDD 과정입니다.

"가짜 당신이 그것을 만들 때까지"나를 떠났 의 많은 지저분하는 코드가 나중 많은 시간을 보냈과 리팩터링 습니다.이 방법은 것이 일하는가?

당신이 지출해야하는 시간이 많이 refactoring 을 하고 있는 동안 TDD.다른 한편으로 할 때,당신은 가짜,그것을 일시적이며,귀하의 즉각적인해야 다음 단계를 유엔은 가짜습니다.일반적으로 필요가 없습 여러 테스트를 통과하기 때문에 당신은 가짜다-당신이해야에 초점을 맞추고 한 번에 한 조각,그리고 작업에 refactoring 습니다.

나는 생각을 할 수 있었다 그것은 하루에 경를 이용 후 단위 테스트 코드 방법입니다.나는 실패를 볼 수를 얻을.

다시,그것은 연습해야 합니다 얻을 수 있습니다.또한,때로는 TDD 이 더 유익한 다른 사람 보다는 어떤 상황에서,때 나는지 정확히 알고 코드를 쓰고 싶어,그것은 그냥 빠르게 쓰기에 좋은 부분의 코드를 작성 테스트합니다.
외 Beck,한 권의 책이 즐겼은 예술의 단위 테스트,의 Roy Osherove.그것은 TDD 예약,그리고 그것입니다.Net 지향하지만,고려할 수 있습니다 그것은 모 든:좋은 부분을 작성하는 방법에 대해 유지 관리 테스트는 테스트는 품질과 관련된 질문입니다.내가 찾는 책은 공감과 함께 제 경험을 가진 후 작성 테스트하고 때로는 분투해야...
그래서 내가 충고입니다,던지지 않는 수건을 너무 빨리,그리고 그것을 약간의 시간.할 수도 있습니다 그것에게 기회를 제공하기 위해 뭔가를 쉽게 테스트-서버 통신에 관련된 것 같은 소리 하지 않는 가장 쉬운 프로젝트를 시작으로!

다른 팁

  1. 켄트 벡 목록을 사용하여...마지막으로 지금,그것은 뭔가 좋아"클라이언트에 연결할 수 있어야 합하여"서버(는 씨의 지배 서버 시작 etc.).

자주 나쁜습니다.

별도 테스트에 대한 별도 각층의 건축은 좋습니다.

통합 테스트하는 경향이 애매한 건축 문제입니다.

그러나,테스트하는 공공 기능이 있다.모든 기능이다.

고 투자하지 않는 많은 시간을 최적화하는 테스트입니다.중복에서 테스트를 다치게 하지 않으로 많은에서와 마찬가지로 작업 중인 응용 프로그램.는 경우에는 것을 변경하고 하나의 테스트,작동 하지만 다른 테스트 바꿈,아마도 다음할 수 있습 리팩터링하 테스트합니다.전하지 않았습니다.

2.당신은 어떻게 핸들이 다시 쓰?...난 것을 발견했고 다시 작성하는 상당한 부분의 테스트합니다.

당신은 테스트를 너무 낮은 수준의 세부 사항입니다.테스트 가장 바깥쪽의,공공,눈에 보이는 인터페이스입니다.부정하는 변하지 않습니다.

예,중요한 건축의 변경을 의미한 테스트를 변경합니다.

테스트 코드는 방법은 당신 증명 합니다.그것은 거의 중요한 응용 프로그램 자체입니다.네,그것은 더 많은 코드입니다.예 관리해야 합니다.

3.나는 데 필요한 클라이언트와 서버를 통해 통신하는 채널을 시험용하실 수 있습니다.나 수 있는 모의 하나의 측면을 테스트하는 다른 하지만 그런 다음 전체 채널 되지 않을 것 이다.

단위 테스트합니다.와 조롱.

거기에는 통합 테스트를 테스트합니다.

혼동하지 않는다.

사용할 수 있습니다 단위 테스트 할 수있는 도구를 통합 테스트,하지만 그들은 다른 것입니다.

당신이해야 할 모두.

4."가짜 당신이 그것을 만들 때까지"나를 떠나 많이 지저분하는 코드를 나중에 시간을 많이 소비하는 리팩터링하고 깨끗한다.이 방법은 것이 일하는가?

그렇습니다.는 방법을 정확하게 작동합니다.에는,어떤 사람들은 이보다 더 효과적 긴장해 노력하고 자신의 머리를 수행하는 모든 디자인이다.어떤 사람들이 좋아하지 않을 하고 싶으신 모든 디자인을 앞;당신은 무료로 많은 디자인까지 프런트하고 싶은 경우.

내가 찾는 refactoring 는 것은 좋은 일과 디자인까지 프런트가 너무 어렵습니다.아마 그것이었기 때문에 코딩을 위해 거의 40 년 동안하고 내 두뇌는 입니다.

5.나는 실패를 볼 수를 얻을.

모든 진정한 천재를 찾을 수 있는 테스트가 느려집니다.

우리의 나머지 부분할 수 없 확인 우리의 코드 작동까지 우리는 우리의 완전한 세트 테스트 증명 는 그것을 작동합니다.

가 필요하지 않은 경우 proof 는 당신의 코드를 작동할 필요가 없습 테스트합니다.

Q.켄트 벡 목록을 사용하여는 그는 추가하고 파업에서 안내하는 개발 프로세스.당신은 어떻게 그러한 목록은?나는 처음이 있었 같은 몇 가지 항목을"서버 시작해야","서버를 중단하는 경우 채널은 사용할 수 없습니다"등입니다.하지만 그들은 혼합하고 마지막으로 지금,그것은 뭔가 좋아"클라이언트에 연결할 수 있어야 합하여"서버(는 씨의 지배 서버 시작 etc.).

나는 시작을 선택하여 아무것도 확인할 수 있습.예에서,당신이 선택한"서버가 시작되면".

Server starts

지금 내가 어떤 간단하게 시험할 수 있습을 작성합니다.가 적은 변형,그리고 적은 움직이는 부품입니다.내가 고려할 수 있습니다"서버 구성이 제대로"예를 들어,.

Configured server correctly
Server starts

정말이지만,,"서버가 시작되면"에 따라"서버 구성이 제대로"그래서 내가 만드는 해당 링크를 분명하다.

Configured server correctly
Server starts if configured correctly

지금 보기 위해 변형이 있습니다.I ask,"무엇이 잘못 갈 수 있을까?" 나 서버를 구성하게 되었습니다.얼마나 많은 다른 방법으로 중요?각각의 사람들은 시험입니다.는 방법도 서버가 시작되지 않도록 구성되어 올바르게?각각의 경우는 테스트입니다.

Q.당신은 어떻게 핸들이 다시 쓰?저는 처음에 선택한 반양방 시스템에 따라 명명된 파이프도록을 개발할 수 있다는 응용 프로그램 논리에 자신의 컴퓨터 그리고 나중에 추가 USB 통신 부분입니다.그것은 그들에게로 이동되는 소켓을 기반으로 일한 다음에서 이동을 사용하여 원는 소켓을 사용하는 파이썬 SocketServer 모듈이 있습니다.각 시간 것을 변경하는 것을 발견했 다시 작성했다는 상당한 부분의 테스트는니다.나는 생각하는 테스트는 것이 다소 불변 안내 동안 개발.그들은 그 느낌이 더 좋아하는 코드를 처리합니다.

를 변경하는 경우 행동을,나는 그것이 합리적이 변경 테스트,심지어 변경을 처음!이 있을 경우 변경 테스트는지 직접 확인하는 동작을 나는 과정에서의 변경은,하지만,그 기호는 검사에 의존이 너무 많은 서로 다른 행동을 합니다.사람들은 테스트를 통합하다고 생각은 사기입니다.(구글은"통합 테스트를 사기")

Q.나는 데 필요한 클라이언트와 서버를 통해 통신하는 채널을 시험용하실 수 있습니다.나 수 있는 모의 하나의 측면을 테스트하는 다른 하지만 그런 다음 전체 채널 없을 테스트하고 제가 걱정하는데 미니다.이 법칙이 약한 전체에서 빨강/녹색/리팩터 리듬이다.은 이 부족의 경험이나 내가 뭔가 잘못하고 있는가?

나가 건축하는 경우 클라이언트는 서버,그리고 채널을 확인하는 각서 격리됩니다.을 시작으로 클라이언트가스 테스트-드라이브,내가 결정하는 방법 서버와 채널을 필요하게 작동합니다.그때 나를 구현하는 채널와 서버는 동작과 일치하가 필요합니다.체크인할 때 클라이언트,나는 스텁 채널할 때 검사하는 서버,내가 조롱하며 채널검사 할 때,채널 제가 스텁 및 모의 클라이언트와 서버입니다.이해 당신 때문에,내가 할 심각한 가정의 본질에 대해 이 클라이언트는 서버,그리고 채널이 있습니다.

Q."가짜 당신이 그것을 만들 때까지"나를 떠나 많이 지저분하는 코드를 나중에 시간을 많이 소비하는 리팩터링하고 깨끗한다.이 방법은 것이 일하는가?

는 경우에 당신은 당신의"가짜 그것은"코드를 얻을 매우 지저분한 청소하기 전에 그것은,그 보냈습니다 수 있습니다 너무 길을 날조습니다.는 말했다,내가 찾는데도 나는 끝까지 청소는 더 많은 코드 TDD,전반적인 리듬을 느낀다 훨씬 낫다.이 연습에서 온다.

Q.의 끝에서 세션을,저는 이제 클라이언트와 서버 실행은 약 3~4 단위 테스트를 확인할 수 있습니다그것은 내게 주의 주위에 그것을 할 수 있습니다.나는 생각을 할 수 있었다 그것은 하루에 사용한 경우합 후 단위 테스트 코드는 방법입니다.나는 실패를 볼 수를 얻을.

난 것을 말하지 않으면 클라이언트와 서버는 매우,매우 간단합니다,당신은 더 이상 3 이상 또는 4 개의 테스트 서을 확인하는 철저하게 그들을.내가 생각하는 테스트를 확인하고(또는 적어도 실행)의 수는 다른 행동을 한 번에 대 한 계정 수 있습니다 노력을 다합니다.

또한,측정하지 않는 학습 곡선입니다.내가 먼저 실제 TDD 경험의 구성 되어 다시 쓰고 3 개월 간의 작업에서 9,14 시간 일입니다.나 125 테스트는 12 분을 실행합니다.아무 생각도 없었 내가 무슨 일을 하고 있었고 그것을 느껴지지만,꾸준하고,그 결과는 환상적입니다.저는 기본적으로 다시 썼에서 3 주 무엇을 원했다 3 개월이 잘못입니다.면 내가 쓴 그것은 지금,나는 아마 그것이 3-5days.의 차이가 있나요?나 테스트해야 500 테스트는 1~2 초 동안 실행됩니다.와 함께 제공되는습니다.

로 초보 프로그래머,하는 것은 까다로운 발견에 대한 테스트 기반 발달했다는 아이디어를 테스트해야 합니다.

초보자에게는 실제로 사실이 아닙니다.디자인됩니다.(인터페이스 객체 클래스고,방법이,어떤의 해당하는 언어입니다.) 다음 당신이 쓰는 테스트입니다.다음 코드를 작성하는 실제로는 물건입니다.

그것은 이후에 예약하지만,벡 것으로 쓰는 경우 디자인의 코드 그저 일어나는 무의식적으로 당신의 머리에서.경험이 풍부한 프로그래머는 사실이 될 수 있습니다,하지만 응용 프로그램에서는 나 같은 nuh-어......

내가 찾은 처음 몇 장의 코드를 완료 정말 유용한지에 대해 생각하는 디자인이다.그들은 강조한다는 사실 당신의 디자인을 잘 변경 될 수 있습니다,심지어 당신이 당신의 아래에서 핵심 수준의 구현합니다.그렇게 될 때,당신은 잘해야를 다시 쓰기 테스트,그들이 있었기 때문에 기반으로 동일한 가정으로 당신의 디자인이다.

코딩은 어렵습니다.Let's 쇼핑을 이동합니다.

에 대한 포인트 중 하나를 참조 질문 나는 잠시 뒤로에 관한 점이다.

오히려 처리하는 것보다 다른 지점에서 차례로 나는 일부를 제공하는 글로벌 조언입니다.습니다.그것은 내게 좋은하는 동안 몇'맛없어'프로젝트(개인만)실제 얻을 TDD.구글에 훨씬 더 매력적인 이유는 이유에 TDD 너무 좋다.

에도 불구하 테스트는 운전자의 코드,내가 여전히 화이트보드와 낙서 일부 디자인이다.이에 적어도 당신은 몇 가지 아이디어를 가지고 무엇을 의미가 있습니다 일을 할 수 있습니다.그때 생산하는 테스트 목록을 당기구는 나는 필요합니다.한번 작업을 시작하고,더 많은 기능 및 테스트를 얻을 수 목록에 추가됩니다.

중 하나 것에 비해서 유난히 눈에 들어오는 당신의 질문은 행위의 다시 작성 테스트를 다시합니다.이 같은 소리를 수행하고 있 행동 테스트,보다는 오히려 상태입니다.다시 말해서,테스트 소리를 너무 밀접하게 연결하는 당신의 코드입니다.따라서,간단한 변화를 하지 않는 효력이 출력됩니다:몇몇 테스트합니다.단위 테스트(적어도 좋은 유닛 테스트),너무 기술 마스터합니다.

내가 추천 Google 테스트 블로그 꽤 많기 때문에 일부에 대한 기사가 나에 대한 테스트 TDD 프로젝트 훨씬 낫다.

의 명명된 파이프를 넣어 뒤에 오른쪽 인터페이스 방법을 변경하는 인터페이스 구현(에서 명명된 파이프 소켓을 다른 소켓 라이브러리)해야만 영향을 테스트하는 구성요소를 구현하는 인터페이스입니다.그래서 절단 것을 더/다르게 도움이...는 인터페이스 소켓 뒤에 있는 것을 가능성이 진화하.

을 하기 시작했죠 TDD 어쩌면 6 개월 전?나는 여전히 배우고 자신입니다.내가 말할 수 있는 시간이 지남에 나 테스트 및 코드가 훨씬 더 나은,그래서 그것을 유지.정말 추천 버전인 디자인 패턴을 뿐입니다.

당신은 어떻게 그러한 목록에 추가 고 파업에서 안내 개발 프로세스?내가 처음 했 같은 몇 가지 항목을"서버가 시작 까지","서버를 중단하는 경우 채널 사용할 수 없습니다"

항목에서 TDD 할일 목록은 더 세부적으로는 이보다,그들은 목표로 하나의 테스트의 행동 하나의 방법만,예를 들어:

  • 테스트는 성공적인 클라이언트의 연결
  • 테스트는 클라이언트의 연결 오류를 입력 1
  • 테스트는 클라이언트의 연결 오류를 입력 2
  • 테스트는 성공적인 클라이언트 통신
  • 테스트는 클라이언트의 통신에 실패에 연결되지 않은 경우

당신을 수 있는 테스트 목록(긍정과 부정)에 대한 모든 예를 했다.또한,단위 테스트는 설치하지 마십시요 어떤 사이의 연결을 서버와 클라이언트입니다.당신은 메소드를 호출에서 분리,...이 답변은 질문 3.

당신은 어떻게 핸들이 다시 쓰?

는 경우에 단위의 테스트는 동작과 구현,그들은 있지 않은 다시 작성해야합니다.는 경우에 단위 테스트 코드는 정말로 만들어 파이프라와 통신을 생산 코드고,다음은 분명히 테스트를 수정해야 할 경우에서 전환하는 파이프 소켓에.단위 테스트하여 멀리에서 외부 자원 등의 파일 시스템,네트워크,데이터베이기 때문에 그들은 천천히,를 사용할 수 없는...이 장치 규정 테스트.

이 의미는 낮은 수준으로 기능하지 않은 단위 테스트,그들은 그들로 테스트됩니다 통합 테스트를 통해 전체 시스템이 테스트 end-to-end.

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