실제로 TDD를 수행하고있는 회사 수를 확인하기 위해이 질문을하고 싶었습니다.
11 년 동안 나는 전문적으로 프로그래밍을 해왔으며, 마지막 두 조직 만이 TDD에 대해 알고있었습니다 (이는 TDD가 오늘날만큼 인기가 없었던 5 년 전). TDD의 판매 피치에 들어가기 전에 추격을 줄이고 질문에 대답하겠습니다. :)
내가 일한 마지막 회사 (인문 및 과학 컬렉션의 온라인 학술 출판사)에서 우리는 TDD를 연습해야한다는 것을 알았지 만 결코 거기에 도달하지 못했습니다. 우리의 방어에는 250k 코드 기반이 있었기 때문에 테스트 할 수없는 크기의 코드 기반에 테스트를 추가하는 것은 극복 할 수 없다고 느꼈습니다. 우리 중 최고조차도 실수를 저지 릅니다 .
소량의 TDD조차도 누구나 브라운 필드 필드 테스트 할 수없는 코드에 대한 고통스러운 개조 테스트가 얼마나 될 수 있는지 알고 있습니다 ... 주요 원인은 암시 적 종속성입니다 (코드에서 결과를 주장하기 위해 모든 레버를 뽑을 수는 없습니다-당신은 조롱 할 수 없습니다) 시나리오) 및 단일 책임 원칙 위반 (테스트는 복잡하고, 고려되고, 너무 많은 설정이 필요 하며 이해하기 어렵다 )
출시 전에 플랫폼 을 테스트 하기 위해 QA 팀 (1 명에서 2 명에서 15 명 이상으로)을 일시적으로 성장 시켰습니다 . 시간과 비용이 엄청나게 비쌌으며 일부 테스트는 '테스트'를 완료하는 데 3 개월이 걸렸습니다. 그럼에도 불구하고 우리는 우리가 문제와 함께 선적하고 있다는 것을 알고 있었고, 단지 '차단 자'또는 '중요하지 않은'것이 아니라 '높은 우선 순위'에 불과했습니다.
몇 년 동안 상업적 경험을 쌓았다면 모든 회사가 중요한 작업을 수행 한 다음 그보다 높은 우선 순위를, 특히 그 이상의 사람 이 기능 / 버그 수정을 추진할 때 그보다 높은 우선 순위를 발명 한다는 점에 감사하게 생각합니다 . 나는 산다 ...
Jenkins CI와 함께 현재 회사 (통신, 웹 및 모바일 앱 개발 하우스)에서 TDD를 연습하고 있으며 다른 정적 분석 보고서를 제공합니다 (코드 범위는 테스트 스위트 통과를 주장한 후 가장 유용합니다). . 내가 TDD를 사용한 프로젝트는 지불 시스템과 그리드 컴퓨팅 시스템입니다.
판매 피치 ...
기술이 아닌 팀원에게 자동화 된 테스트를 정당화하는 것은 종종 어려운 일입니다. 테스트를 작성하면 개발 프로세스에 더 많은 작업이 추가되지만 ... 지금 테스트에 투자 할 때 나중에 유지 관리 노력을 절약 할 수 있습니다. 당신은 정말로 시간을 빌리고 있습니다 . 제품을 오래 사용할수록 비용을 크게 절약 할 수 있으며 큰 재 작성 을 피할 수 있습니다 .
먼저 테스트는 인 텐트를 먼저 코딩 한 다음 코드가 해당 의도를 충족하는지 확인하는 것을 의미합니다. 이것은 초점을 제공하고 의도 된 것 이상을 수행하기 위해 코드를 증류합니다 (팽창 없음). 동시에 실행 가능한 사양 및 문서입니다 (테스트가 잘 작성되어 있고 테스트가 시스템 코드만큼 읽기 쉽고 깨끗 해야하는 경우).
프로그래머가 아닌 사람들은 종종 이러한 통찰력을 가지지 못하므로 TDD는 그 가치를 많이 가지지 않으며 이전 릴리스 날짜의 일회용 지름길로 간주됩니다.
프로그래밍은 우리의 영역이며, 제 생각에 이것은 전문가로서 TDD와 같은 모범 사례에 대해 조언 하는 것이 우리의 책임 입니다. 하지가 개발 시간을 단축하기 위해 이루어집니다 경우 프로젝트 관리자가 결정하기 위해, 그것은 그들의 관할권 밖으로이다 . 같은 방식으로 어떤 프레임 워크, 캐싱 솔루션 또는 검색 알고리즘을 사용하는지 알려주지 않고 자동 테스트를 사용해야하는지 여부를 알려주지 않아야합니다.
에서 내 의견으로는 소프트웨어 개발 산업 (전체적으로), 현재 소프트웨어에 대한 테스트를 갖는 표준이 아니라는 사실을 나뉩니다.
의료, 항공, 자동차, 화장품, 부드러운 장난감, 주류 등의 다른 산업에서 이것을 묘사하십시오. 나는 약혼자에게 제품을 테스트하지 않은 업계의 이름을 말하라고했지만 그녀는 할 수 없었습니다!
아마도 테스트가 수행되지 않기 때문에 테스트가 발생하지 않는다고 말하는 것은 불공평합니다. 그러나 자동화 된 테스트가없는 회사에서는 매우 수동적 / 인간적인 (읽기 어려우며 종종 오류가 발생하기 쉬운) 프로세스입니다.
한 가지 점은 귀하의 질문에 대해 논쟁 할 것입니다 ...
그들은 일반적으로 개발이 즉시 시작되기를 원하거나 짧은 설계가 끝난 후에 원했습니다. 애자일과 더 유사합니다.
이어서 "애자"는 시험없이 진행 규정하지 않습니다에 나열된 첫 번째 멤버 agilemanifesto.org는 이다 켄트 벡 (Kent Beck) , XP와 TDD의 창조자!
TDD에 관심이 있거나 책을 읽지 않았고 예리한 프로그래머라면 두 권의 책을 적극 추천합니다.
테스트에 따라 성장하는 객체 지향 소프트웨어
Clean Code-Robert C Martin ( "Uncle Bob") 시리즈
이 두 권의 책은 서로를 칭찬하고 몇 페이지로 많은 의미를 응축합니다.
이 질문을 해 주셔서 감사합니다 :)