일상적이고 실용적인 용어로 말하면, 나는 그것이 전적으로 상황에 달려 있다고 생각합니다 .
의대 대규모 팀에서 (금융, 군사, 대규모, 높은 예산이나 비즈니스 크리티컬 시스템을 생각) 고 / 매우 높은 표준 작업 후 나는 명확하게 생각한다 "테스트의 결과"해야한다 "디버깅" , 그들은 분명히 있습니다 매우 다른 것들 . 이상적으로 테스트를 수행하면 스테이징 환경에서 디버깅이 이루어지고 프로덕션 환경에서는 0에 가까워 야합니다.
테스트는 광범위하고 규칙적이며 형식이 정교합니다. 디버깅은 특정 오류를 수정해야 할 때 가끔 발생하는 특정 프로세스입니다. 이는 명확하지 않으며 시스템의 기능과 결과 출력에 대한 심층적 인 조사가 필요합니다.
내 마음에는 테스트가 필수적이지만 디버깅은 실패에 대한 해결이 불투명 할 때만 필요한 특정 도구입니다.
나는 단순히 "버기 (burggy)"가 될 수없는 것보다 큰 팀 및 시스템을위한 TDD 의 명백한 유용성을 완전히 이해하고 있다. 또한 복잡한 (종종 "백엔드") 시스템이나 출력과 비교하여 코드에 복잡한 비율이 높은 경우에는 분명히 의미가 있습니다. 그런 다음 "테스트"는 언제, 왜 실패가 발생했는지 알려주는 현실적인 기회를 제공합니다. 많은 복잡한 작업을 수행하고 명확하게 측정 가능한 출력을 생성하는 시스템은 일반적으로 쉽게 테스트 할 수 있으므로 테스트는 디버깅과 다릅니다. 이러한 경우, 테스트는 절차와 기대치 및 실제 결과의 일치를 확인하거나 확인하지 않는 공식화 된 방법을 강하게 암시합니다. 테스트는 항상 수행되며 때때로 디버깅의 필요성을 알려줍니다.
이것이 유비쿼터스 진실이라면 사랑 스러울 것입니다. 제 개발주기가 명확하게 정의 된 이진 출력 (빨간색, 녹색)으로 구분되어 있으면 좋을 것입니다 ...
필자의 경우 (중소 규모, 자금이 부족한 웹 기반, 데이터 중심의 기업 관리 시스템에서 98 % 독주로 일하는 것이 분명합니다) TDD가 어떻게 나를 도울 수 있는지 알 수 없습니다. 또는 오히려 "디버깅"과 "테스트"는 사실상 동일합니다.
주로 "테스트"라는 용어의 사용은 TDD의 방법론을 암시 / 밀접하게 관련시킵니다.
나는 이것이 완전히 완전하지 않은 지위 주의자 인 "믿지 않는자를 피하고, 피하고 피한다", 말도 안되는 것은 냉담한 일이라는 것을 알고있다. 그러나 실제적인 모자를 쓰고 내 맥락에 대해 생각하는 것은 막연하지도 않습니다. 내 상상 속에 TDD가 어떻게 고객에게 더 많은 돈을 제공 할 수 있는지 알아보십시오.
또는 "테스트"가 공식 코드 기반 프로세스라는 일반적인 가정에 동의하지 않습니다.
내 기본 이의 제기 ( 특정 * 컨텍스트 *에 적용 가능 )는 ...
내가 코드를 작성하지 못할 경우 그 안정적으로 작동 - 당시 얼마나 지옥 I가 안정적으로 작동하는 코드를 작성하기로하고 테스트 하위 표준 코드 아마도 말했다.
나에게 난 귀찮게에 충분히 나에게 힘이 (내 특정 상황에서) 어떤 예를도 인수하는 본 적이 없다 생각 에 대해 단일 테스트를 작성 , 내가 지금, 어쩌면 "사용자 저장소 (repository) 반환하지 않습니다 일부 우습게 실체가 테스트 코드를 작성할 수 있습니다 이름이 == X 인 엔터티를 정확히 요청할 때만? "라고 말하지만이 스트리밍을 작성하는 데에는 아마도 더 많은 유틸리티가있을 것입니다. 자만심이 강렬한 야생의 피가 끓어 오르는 무지하고 폐허가 된 쓰레기이지만, 나는 여기서 악마의 옹호자를해야 할 필요성을 느낍니다. (누군가가 나에게 빛을 보여주고 나를 개조하기를 바라고 있기 때문에, 아마도 내 고객에게 돈을 더 가치있게 줄 것입니까?).
논란의 여지없이 "디버깅"은 "테스트"와 동일합니다. 이것으로 나는 매일 일하는 삶에서 적어도 3 분의 1의 시간을 다른 브라우저에서 내 시스템의 로컬 버전으로 놀고, 작업을 중단하고 조사하기 위해 필사적으로 다양한 엉뚱한 것들을 시도한다는 것을 의미합니다. 실패한 이유 및 수정.
나는 100 %가 TDD 만트라 "레드 / 그린 / 리 팩터"의 명백한 효용에 동의하지만, 저 (저예산 예산, 솔로 개발자 RIA 랜드에서 일하는) 나는 누군가가 내가 어떻게 할 수 있는지 보여달라고 정말로 좋아할 것입니다. 아마도 , 논리적으로 그리고 절대적으로는 현실적으로 추가적인 가치를 얻을 이상 (쓰기에서 단지 잠재적 결함이 실제로 본질적으로 진짜 인간의 상호 작용에 바인딩 내 노력의 전체 (그리고 기본적으로 전용) 출력과 상호 작용에서보다 테스트 코드).
개발자가 "테스트"에 대해 이야기 할 때 일반적으로 TDD를 의미합니다.
테스트가있는 것처럼 코딩하려고합니다. 모든 테스트에 초점을 둔 개발이 장려 한 모든 패턴 / 관행과 트렌드는 환상적이고 아름답지만 내 작은 세상에서 "테스트"는 더 많은 코드를 작성하지 않습니다. 실제 세계를 테스트하는 것은 현실적으로 접근하는 방식으로 결과를 출력하며, 이는 사실상 디버깅과 동일합니다. 또는 여기서 능동적 인 변화는 인간의 출력 중심 비 자동 "테스트"의 직접적인 결과 인 "디버깅"입니다. 이것은 "테스트"가 자동화되고 형식적인 것으로, 일반적으로 받아 들여지고 인간적이고 임시적이거나 구조화되지 않은 것으로서 "디버깅"이라는 일반적 견해와는 대조적입니다.
목표가 실제로 돈 / 노력의 가치이고 웹 기반 대화 형 응용 프로그램을 만드는 경우 노력의 결과는 웹 페이지이며 본질적 으로 인간 입력에 반응하는 방식입니다. 따라서 "테스트"는 테스트를 통해 가장 잘 수행됩니다 실제 인간 상호 작용을 통한 웹 페이지 이 상호 작용으로 인해 예기치 않은 출력 또는 원하지 않는 출력이 발생하면 "디버깅"이 발생합니다. 디버깅은 또한 프로그램 상태의 실시간 검사 아이디어와 밀접한 관련이 있습니다. 테스트는 일반적으로 자동화와 관련이 있으며 종종 유감스러운 협회라고 생각합니다.
목표가 실제로 노력에 가치가 있고 자동화 된 테스트가 효율적이고 매우 유익한 경우 디버깅이 해당 테스트의 결과물이거나 자동화 된 테스트를 대체 할 수없는 이유는 세계에서 두 번째로 가장 많이 방문한 웹 사이트 인 이유는 무엇입니까 (Facebook) ) 너무 자주 눈에 띄지 않는 (사용자에게는 분명하지만 테스트 팀과 테스트 코드는 명확하지 않음) 버그로 가득 차 있습니까?
어쩌면 그들은 안심 녹색 조명에 집중하고 실제로 작업 결과를 사용하는 것을 잊어 버렸기 때문일까요?
너무 많은 개발자들은 테스트가 코드를 사용하는 것이라고 생각하고 디버깅은 아이콘이 빨간색으로 변하고 이유를 해결할 수 없기 때문에 IDE에서 가끔 수행하는 것입니다. 나는이 단어들이 그들과 관련된 유감스러운 가치 판단을 가지고 있다고 생각한다. 이것은 일반적으로 기대와 결과 사이의 격차를 좁히기 위해 우리가 집중해야하는 실제 현실을 모호하게한다.