테스트 주도 개발 (및 애자일)의 이러한 제한이 실질적으로 관련이 있습니까?


30

TDD (Test Driven Development)에서는 차선책으로 시작한 다음 테스트 사례를 추가하고 리팩토링하여 더 나은 솔루션을 반복적으로 생성합니다. 단계는 작아야하는데, 이는 각각의 새로운 솔루션이 어떻게 든 이전 솔루션 근처에 있다는 것을 의미합니다.

이는 그라데이션 하강 또는 로컬 검색과 같은 수학적 로컬 최적화 방법과 유사합니다. 이러한 방법의 잘 알려진 한계는 그것이 글로벌 최적 또는 심지어 허용 가능한 지역 최적을 찾도록 보장하지 않는다는 것입니다. 시작 지점이 불량 솔루션의 넓은 영역에 의해 수용 가능한 모든 솔루션과 분리되어 있으면 도달 할 수 없으며 방법이 실패합니다.

더 구체적으로 말하면 : 나는 당신이 많은 테스트 사례를 구현 한 시나리오를 생각하고 있으며 다음 테스트 사례는 경쟁적으로 다른 접근법을 요구할 것입니다. 이전 작업을 버리고 다시 시작해야합니다.

이 생각은 실제로 TDD뿐만 아니라 작은 단계로 진행되는 모든 민첩한 방법에도 적용될 수 있습니다. 이 제안 된 TDD와 로컬 최적화 간의 유추에 심각한 결함이 있습니까?


삼각 측량 이라는 TDD 하위 기술을 참조하고 있습니까? "허용 가능한 솔루션"이란 올바른 것 또는 유지 가능 / 우아함 / 판독 가능한 것을 의미합니까?
illa 31

6
이것이 진짜 문제라고 생각합니다. 내 의견 일 뿐이므로 답을 쓰지 않습니다. 그러나 그렇습니다. TDD는 설계 관행 으로 선전되어 있기 때문에 로컬 최대 값으로 이어 지거나 전혀 솔루션을 제공하지 못하는 결함이 있습니다. 나는 일반적으로 TDD가 알고리즘 설계에 적합하지 않다고 말하고 싶다. : TDD의 한계에 대한 관련 논의를 참조하십시오 TDD와 스도쿠를 해결 피터 노르 빅 실제로없이 주제에 대해 알고에 의해 실제 솔루션을 제공하면서, 론 제프리 원에서 실행하고 "TDD를하고"하면서 자신의 엉덩이를 수있는을
Andres F.

5
다시 말해, TDD가 "알려진"문제로 작성하는 클래스의 양을 최소화하여 더 깨끗하고 간단한 코드를 생성하지만 알고리즘 문제 나 복잡한 문제에는 부적합하다는 논란의 여지가없는 진술을 제공하고자합니다. 실제로 큰 그림을보고 도메인 별 지식을 갖는 것이 단편 테스트를 작성하고 작성해야하는 코드를 "발견"하는 것보다 더 유용합니다.
Andres F.

2
이 문제는 존재하지만 TDD 또는 Agile에만 국한되지 않습니다. 이전에 작성된 소프트웨어의 설계가 항상 변경되어야한다는 의미 변경 요구 사항이 발생합니다.
RemcoGerlich

@ guillaume31 : 필연적으로 삼각 측량은 아니지만 소스 코드 수준에서 반복을 사용하는 기술입니다. 수용 가능한 솔루션이란 모든 테스트를 통과하고 합리적으로 잘 유지 될 수있는 솔루션을 의미합니다.
Frank Puffer

답변:


8

이러한 방법의 잘 알려진 한계는 그것이 글로벌 최적 또는 심지어 허용 가능한 로컬 최적을 찾도록 보장하지 않는다는 것입니다.

비교를보다 적절하게하기 위해, 어떤 종류의 문제의 경우, 반복 최적화 알고리즘은 좋은 로컬 최적화를 생성 할 가능성이 매우 높으며, 다른 상황에서는 실패 할 수 있습니다.

여러 테스트 사례를 구현 한 시나리오를 생각하고 있으며 다음 테스트 사례에는 경쟁 방식이 다른 접근법이 필요하다는 것을 알게되었습니다. 이전 작업을 버리고 다시 시작해야합니다.

실제로 발생할 수있는 상황을 상상할 수 있습니다 . 잘못된 아키텍처 를 선택할 때 기존의 모든 테스트를 처음부터 다시 작성해야합니다. 운영 체제 A에서 프로그래밍 언어 X로 첫 20 개의 테스트 사례를 구현한다고 가정 해 봅시다. 불행히도 요구 사항 21에는 전체 프로그램을 운영 체제 B에서 실행해야하며 X는 사용할 수 없습니다. 따라서 언어 Y로 대부분의 작업과 재 구현을 버려야합니다. 물론 코드를 완전히 버리지 않고 새로운 언어와 시스템으로 이식해야합니다.

이것은 TDD를 사용하는 경우에도 미리 전체적인 분석 및 설계를 수행하는 것이 좋습니다. 그러나 이것은 다른 종류의 접근 방식에도 해당되므로 고유 한 TDD 문제로 보지 않습니다. 또한 대부분의 실제 프로그래밍 작업에서 표준 아키텍처 (예 : 프로그래밍 언어 X, 운영 체제 Y, 하드웨어 XYZ의 데이터베이스 시스템 Z)를 선택할 수 있으며 TDD와 같은 반복적이거나 민첩한 방법론을 비교적 확신 할 수 있습니다 막 다른 골목으로 당신을 데려 가지 않습니다.

Robert Harvey 인용 : "단위 테스트에서 아키텍처를 확장 할 수 없습니다." 또는 pdr : "TDD는 최고의 디자인을 완성하는 데 도움이 될뿐 아니라 더 적은 노력으로 더 많은 도움을 얻을 수 있습니다."

실제로 당신이 쓴 것은

시작 지점이 불량 솔루션의 넓은 영역에 의해 수용 가능한 모든 솔루션과 분리되어 있으면 도달 할 수 없으며 방법이 실패합니다.

잘못된 아키텍처를 선택하면 필요한 솔루션에 도달하지 못할 수 있습니다.

반면에, 사전에 전체 계획을 세우고 올바른 아키텍처를 선택할 때 TDD를 사용하는 것은 "전역 최대 값"(또는 적어도 충분한 최대 값)에 도달 할 수있는 영역에서 반복 검색 알고리즘을 시작하는 것과 같아야합니다. ) 몇 번의 주기로.


20

TDD에 로컬 최대 값에 문제가 있다고 생각하지 않습니다. 올바르게 알고 있듯이 작성하는 코드는 리팩토링 (기능 변경없이 코드 재 작성)이 사용되는 이유입니다. 기본적으로 테스트가 증가함에 따라 테스트 덕분에 동작을 변경하지 않고 유지해야하는 경우 개체 모델의 상당 부분을 다시 작성할 수 있습니다. 시스템에 대한 변하지 않는 진실을 테스트 하므로 로컬 및 절대 최대 값 모두에서 유효해야합니다.

TDD와 관련된 문제에 관심이 있다면 내가 자주 생각하는 세 가지 다른 문제를 언급 할 수 있습니다.

  1. 완전성 문제 : 완전히 시스템을 설명하는 데 필요한 얼마나 많은 테스트? "예제 별 코딩"이 시스템을 설명하는 완전한 방법입니까?

  2. 경화 문제 :에 인터페이스를 테스트 무엇이든은, 변경할 수없는 인터페이스를 가질 필요가있다. 테스트는 변하지 않는 진실을 나타냅니다 . 기억하십시오. 불행히도 이러한 진실은 우리가 작성하는 대부분의 코드에 대해 전혀 알려지지 않았으며, 외부 대면 객체에 대해서만 잘 알려져 있습니다.

  3. 시험 손상 문제 : 검증 주장을하기 위해, 우리는 (예를 들어, 적은 확대됨)을 쓰기 차선 코드를해야 할 수도 있습니다. 코드를 최대한 잘 작성하기 위해 테스트를 작성하는 방법은 무엇입니까?


주석 처리를 위해 편집 : 리팩토링을 통해 "이중"기능에 대한 로컬 최대 값을 사용하는 예는 다음과 같습니다.

테스트 1 : 입력이 0이면 0을 반환

이행:

function double(x) {
  return 0; // simplest possible code that passes tests
}

리팩토링 : 필요하지 않음

테스트 2 : 입력이 1이면 2를 반환

이행:

function double(x) {
  return x==0?0:2; // local maximum
}

리팩토링 : 필요하지 않음

테스트 3 : 입력이 2이면 4를 반환

이행:

function double(x) {
  return x==0?0:x==2?4:2; // needs refactoring
}

리팩토링 :

function double(x) {
  return x*2; // new maximum
}

1
그러나 내가 경험 한 것은 첫 번째 디자인이 간단한 경우에만 작동했으며 나중에 더 일반적인 솔루션이 필요하다는 것을 깨달았습니다. 보다 일반적인 솔루션을 개발하려면 더 많은 테스트가 필요하지만 특수 사례에 대한 원래 테스트는 다시 작동하지 않습니다. 더 일반적인 솔루션을 개발하는 동안 (일시적으로) 해당 테스트를 제거하고 시간이 준비되면 다시 추가하는 것이 허용됩니다.
5gon12eder

3
리팩토링이 코드를 일반화하거나 (인공적인 "디자인 패턴"공간을 벗어난) 로컬 최대 값을 피하는 방법이라고 확신하지 않습니다. 리팩토링은 코드를 정리하지만 더 나은 솔루션을 찾는 데 도움이되지는 않습니다.
Andres F.

2
@ Sklivvz 이해하지만, 당신이 게시 한 것과 같은 장난감 예제 밖에서는 그렇게 작동하지 않는다고 생각합니다. 또한 함수의 이름이 "double"인 데 도움이되었습니다. 당신이 이미 답을 알고있는 방식으로. TDD는 답을 어느 정도 알고 있지만 "깨끗하게"쓰고 싶을 때 확실히 도움이됩니다. 알고리즘을 발견하거나 복잡한 코드를 작성하는 데 도움이되지 않습니다. Ron Jeffries가 이런 식으로 Sudoku를 해결하지 못한 이유입니다. TDD가 모호하지 않은 알고리즘으로 익숙하지 않은 알고리즘을 구현할 수 없습니다.
Andres F.

1
@VaughnCato Ok, 이제 나는 당신을 신뢰하거나 회의적입니다 (무례 할 것이므로 그렇게하지 마십시오). 내 경험으로는 말한 것처럼 작동하지 않습니다. TDD에서 상당히 복잡한 알고리즘이 진화 한 것을 본 적이 없습니다. 어쩌면 내 경험이 너무 제한 될 수도 있습니다 :)
Andres F.

2
@Sklivvz "적절한 테스트를 작성할 수있는 한"은 정확히 요점입니다. 질문을 간청하는 것처럼 들립니다. 내가 말하는 것은 당신이 종종 할 수 없다는 것 입니다. 먼저 테스트작성 하여 알고리즘이나 솔버에 대해 생각하기가 쉽지 않습니다 . 먼저 전체 그림을 봐야합니다 . 시나리오를 시도하는 것은 물론 필요하지만 TDD는 시나리오를 작성하는 것이 아니라 TDD는 설계를 테스트하는 것입니다 . 먼저 테스트를 작성하여 Sudoku 솔버 (또는 다른 게임의 새 솔버)의 설계를 추진할 수 없습니다. 일화 적 증거 (충분하지 않음) : 제프리스는 할 수 없었습니다.
Andres F.

13

수학적 용어로 설명하는 것은 우리 자신을 모퉁이에 그리는 것입니다. 이 발생은 TDD에만 적용되는 것이 아닙니다. 폭포수에서는 몇 달 동안 요구 사항을 모으고 쏟아 부을 수 있습니다. 세계 최대를 볼 수 있고 다음 언덕 위에 더 좋은 아이디어가 있음을 깨닫기를 바랍니다.

차이점은이 시점에서 완벽 할 것으로 예상되지 않는 민첩한 환경에서 이전 아이디어를 버리고 새로운 아이디어로 전환 할 준비가 된 것 이상입니다.

TDD에 더 구체적으로, TDD에 기능을 추가 할 때 이런 일이 발생하지 않도록하는 기술이 있습니다. 그것은의 변환 우선 순위 전제 . TDD가 공식적으로 리팩터링 할 수있는 방법 인 경우 기능을 추가하는 공식적인 방법입니다.


13

그의 대답 , @Sklivvz 설득력 문제가 존재하지 않는다고 주장했다.

나는 그것이 중요하지 않다고 주장하고 싶다 : 일반적인 반복 방법론의 기본 전제 (및 raison d' être)와 Agile, 특히 TDD는 글로벌 최적뿐만 아니라 로컬 최적도 아니라는 것입니다. ' 알려진. 다시 말해서, 그것이 문제가 되더라도, 어쨌든 반복적 인 방법으로 그것을 할 수있는 방법은 없습니다. 기본 전제를 ​​수락한다고 가정합니다.


8

TDD 및 Agile 사례는 최적의 솔루션을 생산할 수 있습니까? (또는 "좋은"솔루션입니까?)

정확히. 그러나 그것은 그들의 목적이 아닙니다.

이러한 방법은 단순히 한 상태에서 다른 상태로 "안전한 통과"를 제공하여 변경이 시간이 걸리고 어렵고 위험하다는 것을 인정합니다. 그리고 두 가지 관행의 핵심은 응용 프로그램과 코드가보다 빠르고 정기적으로 요구 사항을 충족 할 수 있도록 실행 가능하고 입증 된 것입니다.

... [TDD]는 요구 사항을 충족시키는 것으로 입증되지 않은 소프트웨어를 추가 할 수있는 소프트웨어 개발에 반대합니다 ... 2003 년 TDD는 단순함을 장려 한다고 기술을 개발 또는 '재발견'한 것으로 알려진 Kent Beck 자신감을 갖고 디자인합니다. ( 위키 백과 )

TDD는 코드의 각 "청크"가 요구 사항을 충족시키는 데 중점을 둡니다. 특히, 코딩이 열악하여 요구 사항을 이끌어내는 것과 대조적으로 코드가 기존 요구 사항을 충족하도록 보장합니다. 그러나 구현이 어떤 방식 으로든 "최적"이라고 약속하지는 않습니다.

애자일 프로세스의 경우 :

작업 소프트웨어는 진행의 주요 척도입니다 ... 각 반복이 끝날 때마다 이해 관계자와 고객 담당자는 투자 수익을 최적화하기 위해 진행 상황을 검토하고 우선 순위를 다시 평가합니다 ( Wikipedia )

민첩성은 최적의 솔루션을 찾지 않습니다 . 단지 작업 솔루션 - 최적화의 의도와 ROI를 . 그것은 나중에 보다 빨리 작동하는 솔루션을 약속합니다 . "최적의"것이 아닙니다.

그러나 문제 는 잘못 되었기 때문 입니다.

소프트웨어 개발에있어 최적은 애매하고 움직이는 목표입니다. 요구 사항은 일반적으로 유동적이며 보스의 보스로 가득 찬 회의실에서 당황 스러울 정도로 비밀이 가득합니다. 또한 솔루션 아키텍처 및 코딩의 "내재적 장점"은 동료와 경영진의 의견에 따라 분류되고 주관적인 의견에 따라 등급이 매겨집니다.

적어도에서, TDD와 민첩한 관행 어려움을 인정하고 두 가지 최적화를 시도 하다 객관적이고 측정 : . 근무 V하지-작업머지 절 나중에..

또한 객관적인 지표로 "작업 중"및 "수퍼"가 있다고해도이를 최적화 할 수있는 능력은 주로 팀의 기술과 경험에 달려 있습니다.


노력으로 최적의 솔루션을 생산할 때 해석 할 수있는 사항은 다음 과 같습니다.

기타..

이러한 것들 각각이 실제로 최적의 솔루션을 생산 하는지 여부 는 또 다른 좋은 질문입니다.


1
사실, 저는 TDD 또는 다른 소프트웨어 개발 방법의 목표가 글로벌 최적이라는 의미에서 최적의 솔루션이라고 쓰지 않았습니다. 내 유일한 관심사는 소스 코드 수준에서 작은 반복에 따라 방법은 많은 경우에 전혀 어떤 허용 (좋은의 충분한) 솔루션을 찾을 수 있다는 것입니다
프랭크 호흡기

@Frank 내 대답은 지역 및 세계 최적을 모두 다루기위한 것입니다. 그리고 그 대답은 "아니요.이 전략은 ROI를 개선하고 위험을 완화 시키도록 설계된 것이 아닙니다."입니다. ... 또는 그런 것. 그리고 이것은 Jörg의 대답이 얻는 것의 일부에 기인합니다 : "최적의 것"은 움직이는 목표입니다. ... 한 걸음 더 나아가고 싶습니다. 움직이는 목표물 일뿐 아니라 전적으로 객관적이거나 측정 가능한 것은 아닙니다.
svidgen

@FrankPuffer 어쩌면 부록의 가치가 있습니다. 그러나 기본 요점은이 두 가지가 전혀 설계되지 않았거나 달성하려는 것이 아닌지 여부를 묻는 것입니다. 또한 측정하거나 확인할 수없는 것을 달성 할 수 있는지 묻습니다.
svidgen

@FrankPuffer Bah. 나는 대답을 더 잘하기 위해 업데이트하려고했습니다. 나는 그것을 더 나쁘게 만들지 확신하지 못한다! ... 그러나 SE.SE에서 내려 직장으로 돌아와야합니다.
svidgen

이 답변은 괜찮지 만 (다른 답변과 마찬가지로) 내가 가진 문제는 "위험 완화 및 ROI 개선"이 항상 최선의 목표는 아니라는 것입니다. 실제로 그 자체만으로는 목표가 아닙니다. 당신이 일할 무언가가 필요할 때, 위험을 완화시키는 것은 그것을 자르지 않을 것입니다. 때때로 TDD에서와 같이 상대적으로 방향이 지정되지 않은 작은 단계가 작동하지 않을 수 있습니다. 위험을 최소화 할 수는 있지만 결국에는 유용한 곳에 도달 할 수 없습니다.
Andres F.

4

지금까지 아무도 추가하지 않은 한 가지는 설명하는 "TDD 개발"이 매우 추상적이고 비현실적이라는 것입니다. 알고리즘을 최적화하는 수학적 응용 프로그램에서와 비슷하지만 대부분의 코더가 작동하는 비즈니스 응용 프로그램에서는 그다지 많지 않습니다.

실제 테스트는 기본적으로 비즈니스 규칙을 실행하고 검증합니다.

예를 들어, 고객이 아내와 두 명의 자녀를 둔 30 세의 비 흡연자 인 경우 보험료 카테고리는 "x"입니다.

당신은 매우 오랫동안 정확하고 응용 프로그램이 작동하는 동안 거의 확실하지 않을 때까지 프리미엄 계산 엔진을 반복적으로 변경하지 않을 것입니다.).

실제로 생성 한 것은 특정 범주의 고객에 대해 새 계산 방법을 추가 할 때 모든 기존 규칙이 갑자기 중단되지 않고 잘못된 답변을 제공 할 수있는 안전망입니다. 디버깅의 첫 번째 단계가 버그를 수정하기 위해 코드를 작성하기 전에 오류를 재현하는 테스트 (또는 일련의 테스트)를 작성하는 것이 안전망이 훨씬 더 유용합니다. 그런 다음 누군가가 실수로 원래 버그를 다시 생성하면 코드가 체크인되기 전에 유닛 테스트가 중단됩니다. 예, TDD가 허용하는 한 가지는 큰 리팩토링과 깔끔한 ​​작업을 자신감있게 수행 할 수 있다는 것입니다. 그러나 그것은 당신의 일의 큰 부분이되어서는 안됩니다.


1
먼저, 나는 당신의 대답을 읽을 때 "그렇습니다, 그것이 핵심 요점"이라고 생각했습니다. 그러나 질문을 다시 생각한 후에는 반드시 추상적이거나 비현실적인 것은 아니라고 생각했습니다. 맹목적으로 완전히 잘못된 아키텍처를 맹목적으로 선택하면 TDD는 1000 반복 이후가 아니라도 해결하지 못합니다.
Doc Brown

@ 박사 브라운 합의, 그 문제를 해결하지 않습니다. 그러나 모든 가정과 비즈니스 규칙을 수행하여 반복적으로 아키텍처를 개선 할 수있는 일련의 테스트를 제공합니다. 아키텍처가 나빠서 고칠 수있는지면을 다시 작성해야하는 경우는 매우 드물며 (희망 할 것입니다.) 극단적 인 경우에도 비즈니스 규칙 단위 테스트는 좋은 출발점이 될 것입니다.
mcottle

"잘못된 아키텍처"라고 말하면 기존 테스트 스위트를 버려야하는 경우를 염두에 두어야합니다. 내 대답을 읽었습니까?
Doc Brown

@DocBrown-그렇습니다. "잘못된 아키텍처"가 "전체 테스트 스위트 변경"을 의미한다면 아마도 그렇게 말했을 것입니다. 아키텍처를 변경한다고해서 비즈니스 규칙 기반 인 경우 모든 테스트를 폐기해야한다는 의미는 아닙니다. 새로운 인터페이스를 지원하고 일부를 완전히 다시 작성하기 위해 모든 인터페이스를 변경해야 할 수도 있지만 비즈니스 규칙은 기술적 변경으로 대체되지 않으므로 테스트는 계속됩니다. 확실히 단위 테스트에 대한 투자가 아키텍쳐를 완전히 향상시킬 가능성이 없어서 무효화되어서는 안됩니다
mcottle

새로운 프로그래밍 언어로 모든 테스트를 다시 작성해야하더라도 모든 것을 버릴 필요는 없으며 적어도 하나는 기존 로직을 이식 할 수 있습니다. 그리고 저는 실제 프로젝트의 100 %에 동의합니다. 문제의 가정은 상당히 비현실적입니다.
Doc Brown

3

나는 그것이 방해가된다고 생각하지 않는다. 대부분의 팀에는 화이트 보드에 작성한 경우에도 최적의 솔루션을 제공 할 수있는 사람이 없습니다. TDD / Agile은 방해가되지 않습니다.

많은 프로젝트가 최적의 솔루션을 필요로하지 않으며, 필요한 프로젝트, 필요한 시간, 에너지 및 초점이이 분야에서 이루어질 것입니다. 다른 모든 것들과 마찬가지로 먼저 구축하려는 경향이 있습니다. 그럼 빨리 해 퍼포먼스가 그토록 중요하다면 일종의 프로토 타입으로 이것을 할 수 있고 많은 반복을 통해 얻은 지혜로 모든 것을 재구성 할 수 있습니다.

여러 테스트 사례를 구현 한 시나리오를 생각하고 있으며 다음 테스트 사례에는 경쟁 방식이 다른 접근 방식이 필요하다는 것을 알았습니다. 이전 작업을 버리고 다시 시작해야합니다.

이런 일이 발생할 수는 있지만 응용 프로그램의 복잡한 부분이 변경 될 우려가 있습니다. 테스트를하지 않으면이 영역에서 더 큰 두려움이 생길 수 있습니다. TDD의 장점 중 하나는 테스트 스위트를 사용하면이 시스템을 변경해야한다는 개념으로 구축 한 것입니다. 이 모 놀리 식 최적화 솔루션을 처음부터 생각해 보면 변경하기가 매우 어려울 수 있습니다.

또한 이것을 최적화 부족에 대한 우려의 맥락에 두십시오. 성능에 너무 중점을 두었으므로 필요하지 않은 것을 최적화하고 융통성없는 솔루션을 만드는 데 시간을 할애 할 수는 없습니다.


0

"로컬 최적"과 같은 수학적 개념을 소프트웨어 디자인에 적용하는 것은 속일 수 있습니다. 이러한 용어를 사용하면 소프트웨어 개발 사운드가 실제보다 훨씬 정량적이고 과학적입니다. 코드에 대해 "최적화"가 존재하더라도 코드를 측정 할 방법이 없으므로 코드에 도달했는지 알 수 없습니다.

민첩한 움직임은 소프트웨어 개발이 수학적 방법으로 계획되고 예측 될 수 있다는 믿음에 반하는 반응이었습니다. 더 좋든 나쁘 든 소프트웨어 개발은 ​​과학보다는 기술과 비슷합니다.


그러나 반응이 너무 강했습니까? 그것은 엄격한 사전 계획이 다루기 힘들고 비용이 많이 드는 많은 경우에 확실히 도움이됩니다. 그러나 일부 소프트웨어 문제 수학적 문제와 선제 설계로 해결 해야합니다 . TDD 할 수 없습니다. UI 및 Photoshop의 전체 디자인을 TDD 할 수 있지만 알고리즘을 TDD 할 수는 없습니다. 전형적인 TDD 예제에서 "sum", "double"또는 "pow"를 도출하는 것과 같은 간단한 예제는 아닙니다 [1]). 일부 테스트 시나리오를 작성하여 새 이미지 필터를 조작 할 수는 없습니다. 당신은 절대적으로 앉아서 공식을 작성하고 이해해야합니다.
Andres F.

2
[1] 사실, 저는 fibonacciTDD 예제 / 튜토리얼로 사용 된 것으로 보았을 것입니다. 나는 피보나치 나 그와 비슷한 시리즈를 TDD'ing하여 "발견 한"사람이 없다고 생각합니다. 모든 사람들은 이미 피보나치를 아는 것으로 시작합니다. 당신은 - 당신은 단순히 더 많은 테스트를 작성하고 리팩토링에 의해 시리즈를 일반화 할 수 없을거야 : 당신이 그것을 TDD'ing하여이를 발견하려고하면, 당신은 가능성이 엔드 죽은 영업 이익에 대해 물어 된 다가 갈 수 있어야 수학에 적용 추리!
Andres F.

두 가지 언급 : (1) 귀하는 이것이 기만적 일 수 있습니다. 그러나 TDD가 수학적 최적화 와 동일 하다는 것을 쓰지 않았습니다 . 방금 비유 또는 모델로 사용했습니다. 나는 모델과 실제의 차이점을 알고 있다면 수학이 거의 모든 것에 적용될 수 있다고 생각합니다. (2) 과학 (과학 연구)은 일반적으로 소프트웨어 개발보다 예측하기 어렵다. 그리고 심지어 소프트웨어 엔지니어링은 기술보다는 과학적 작업과 비슷하다고 말할 수 있습니다. 공예품은 대개 훨씬 더 일상적인 작업이 필요합니다.
Frank Puffer

@AndresF .: TDD가 당신이 생각하거나 디자인 할 필요가 없다는 것을 의미하지는 않습니다. 구현을 작성하기 전에 테스트를 작성한다는 의미입니다. 알고리즘으로 그렇게 할 수 있습니다.
JacquesB

@FrankPuffer : 좋습니다. 그렇다면 소프트웨어 개발에서 "현지 최적"을 갖는 것은 어떤 측정 가능한 가치입니까?
JacquesB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.