테스트 기반 개발이란 무엇입니까?

large__8282043567테스트 중심 개발은 매우 짧은 개발 주기의 반복에 의존하는 프로세스입니다. 그것은 신뢰의 높은 수준의 심플한 디자인을 장려 극단적 인 프로그래밍(경험치)의 테스트 우선 개념을 기반으로합니다.

:

  1. 테스트 작성
  2. 모든 테스트 실행
  3. 구현 코드 작성
  4. 모든 테스트 실행
  5. 리팩터링

이 절차는 종종 빨강-녹색-리팩터링이라고합니다.

테스트를 작성하는 동안 우리는 빨간색 상태에 있습니다. 테스트는 실제 구현 전에 작성되므로 실패해야합니다. 그렇지 않으면 테스트가 잘못되었습니다. 그것은 이미 존재하거나 잘못 작성된 것을 설명합니다. 테스트를 작성하는 동안 녹색에있는 것은 거짓 긍정의 표시입니다. 이와 같은 테스트는 제거 또는 리팩토링해야합니다.

다음은 녹색 상태입니다. 마지막 테스트의 구현이 완료되면 모든 테스트가 통과해야합니다. 그렇지 않으면 구현이 잘못되어 수정되어야합니다.

아이디어는 구현을 최종적으로 만드는 것이 아니라 테스트를 통과 할 수있는 충분한 코드를 제공하는 것입니다. 모든 것이 녹색이면 기존 코드를 리팩터링할 수 있습니다. 즉,우리는 새로운 기능을 도입하지 않고 코드를 더 최적화하고 있음을 의미합니다. 리팩토링이 진행되는 동안 모든 테스트는 항상 통과해야합니다. 그 중 하나가 실패하면 리팩터링으로 기존 기능이 손상되었습니다. 리팩토링은 새로운 테스트를 포함해서는 안됩니다.

속도가 핵심

large_5836417589
나는 탁구(또는 탁구)의 게임으로 테디빌딩을 보는 경향이 있다. 이 게임은 매우 빠릅니다. 동일은 티드 디에 대한 진정한 보유하고 있습니다. 나는 테이블(테스트 및 구현)의 양쪽에 1 분 이상을 소비하지 않는 경향이있다. 짧은 테스트를 작성하고 실행(핑),구현을 작성하고 모든 테스트(퐁)를 실행하고,다른 테스트(핑)를 작성하고,해당 테스트(퐁)의 구현을 작성하고,리팩터링하고 모든 테스트가 통과하는지 확인합니다(점수),반복하십시오. 탁구,탁구,탁구,탁구,탁구,점수,다시 봉사하십시오. 완벽한 코드를 만들려고하지 마십시오. 대신,당신은 시간이 점수(리팩터링)할 권리라고 생각할 때까지 공을 압연 유지하려고합니다.

테스트를 위한 것이 아닙니다. 우리가 디자인에 접근하는 방식이다. 이 코드를 작성하기 전에 구현에 대해 생각하는 우리를 강제하는 방법입니다. 이 코드를 더 잘 구조화하는 방법입니다. 즉,테스트에서 발생하는 것을 의미하지 않는다. 그것과는 거리가 멀다. 그들은 매우 유용하며 무언가가 깨질 것을 두려워하지 않고 훌륭한 속도로 개발할 수 있습니다. 리팩토링이 발생할 때 특히 그렇습니다. 기능이 깨지지 않는다는 확신을 가지면서 코드를 재구성할 수 있다는 것은 코드 품질을 크게 향상시켜 줍니다.

의 주요 목적은 TDD 은 코드와 디자인 시험으로 매우 유용한 제품입니다.

조롱

테스트가 빠르게 실행되어 지속적인 피드백을 제공하려면 메서드,함수 및 클래스를 쉽게 조롱하고 스텁 할 수있는 방식으로 코드를 구성해야합니다. 실행 속도가 심각 예를 들어,우리의 테스트는 데이터베이스와 통신 할 필요가,그것을 영향을받을 것이다. 외부 의존성을 조롱함으로써 우리는 그 속도를 크게 높일 수 있습니다. 전체 단위 테스트 스위트 실행은 초가 아닌 분 단위로 측정해야합니다. 속도보다 더 중요한 것은 코드를 쉽게 조롱하고 스텁 할 수있는 방식으로 코드를 설계하는 것은 우려의 분리를 적용하여 코드를 더 잘 구조화하도록 강요합니다. 모의 유무에 관계없이 코드는 예를 들어 한 데이터베이스를 다른 데이터베이스로 쉽게 대체 할 수있는 방식으로 작성되어야합니다. 즉,”다른”예를 들어,조롱 또는 메모리 내 데이터베이스가 될 수 있습니다.스칼라를 조롱하는 예는 스칼라 테스트 기반 개발에서 찾을 수 있습니다. 선택의 프로그래밍 언어가 스칼라가 아닌 경우,기사는 여전히 모든 언어에 적용 할 수있는 패턴을 확인하기 위해 매우 유용 할 수 있습니다.

당직자

당직자 패션에서 작업 할 때 매우 유용한 도구는 당직자입니다. 그것들은 우리가 작업을 시작하기 전에 실행되고 코드의 변화를 감시하는 프레임 워크 또는 도구입니다. 이러한 변경이 감지되면 모든 테스트가 실행됩니다. 자바 스크립트의 경우 거의 모든 빌드 시스템과 작업 주자가이를 허용합니다. 꿀꺽 꿀꺽(내가 좋아하는)과 꿀꿀 거리는 소리는 많은 예 중 두 가지입니다. 스칼라는 리볼버를 가지고 있습니다. 대부분의 다른 프로그래밍 언어에는 코드가 변경 될 때 모든(또는 영향을받는)테스트를 다시 컴파일(필요한 경우)하고 실행하는 유사한 도구가 있습니다. 나는 항상 내 화면이 두 개의 창으로 나뉘어져 있습니다. 하나는 내가 작업하고있는 코드와 다른 하나는 지속적으로 실행되는 테스트 결과를 가지고 있습니다. 내가해야 할 일은 그 당직자의 출력이 내가 처한 단계(빨간색 또는 녹색)와 일치한다는 것에주의를 기울이는 것입니다.

문서

일반적으로 잘 구조화 된 테스트)의 또 다른 매우 유용한 부작용은 문서입니다. 대부분의 경우 구현 자체보다 테스트를 통해 코드가 수행하는 작업을 훨씬 쉽게 찾을 수 있습니다. 다른 유형의 설명서에서 제공할 수 없는 추가 이점은 테스트가 구식이 아니라는 것입니다. 테스트와 구현 코드 간에 불일치가 있으면 테스트가 실패합니다. 실패한 테스트는 부정확 한 문서를 의미합니다.

문서 문서로 테스트 대신 기존의 문서의 테스트의 사용 뒤에 좀 더 깊은 추론을 제공합니다.

요약

제 경험상,디딜 방아는 아마도 소프트웨어 도구 상자에서 가장 중요한 도구 일 것입니다. 그러나 일단 그 예술을 마스터하면 생산성과 품질이 크게 향상됩니다. 학습과 연습 모두에 가장 좋은 방법은 쌍 프로그래밍과 함께합니다. 두 명의 참가자가 필요한 탁구 게임에서와 같이,한 코더가 테스트를 작성하고 다른 코더가 해당 테스트의 구현을 작성하는 쌍이 될 수 있습니다. 역할은 모든 테스트 후에 전환 할 수 있습니다(코딩 작업에서 종종 수행되므로).

그것을 시도하고 많은있을 것이기 때문에 장애물에 직면 할 때 포기하지 마십시오.

테스트 기반 개발:자바 예제를 사용하는 모범 사례는 좋은 출발점입니다. 이 자바 예제를 사용하더라도,같은,전부는 아니지만,방법은 모든 프로그래밍 언어에 적용 할 수 있습니다. 자바의 예를 들어(앞의 경우에서와 같이,그것은 다른 언어로 쉽게 적용 할 수있다)

또 다른 좋은 방법은 코드 카타(이 사이트에는 많은 사람들이 있습니다)입니다.

당신의 경험은 무엇입니까? 그것을 실행하는 팀이 있고 나는 너의 경험에 관하여 듣고 싶으면 처럼 많은 변이가 있는다.

답글 남기기

이메일 주소는 공개되지 않습니다.