100 % 코드 적용 범위가 파이프 꿈입니까?


28

무거운 jquery / backbonejs 웹 응용 프로그램에서 100 % 코드 적용 범위를 기대할 수 있습니까? 실제 코드 적용 범위가 javascript / jquery에서 92 % -95 % 주위를 가리킬 때 100 % 적용 범위가 충족되지 않아 스프린트에 실패하는 것이 합리적입니까?


7
"스프린트 실패"가 이상하게 불길하게 들린다…
Donal Fellows

5
점근선입니다.
Robert Harvey

12
전체 범위를 포함하더라도 일부 버그를 찾을 수 없으므로 모든 숫자를 수정하기 위해 해당 숫자에 의존하지 마십시오.
ratchet freak

11
무엇이든 가능합니다. 실제 문제는 100 % 코드 적용 범위의 가치가 시간과 자원 비용에 가치가 있는지 여부입니다.
JohnFx

5
100 % (또는 다른 수의) 자동화 된 테스트 범위가 마술처럼 코드를 더 좋게 만들 것이라는 기본 가정이 파이프 자체를 꿈꾸는 데 대해 왜 걱정하고 있습니까?
메이슨 휠러

답변:


30

비현실적이므로 똑같이 현실적입니다.

현실적인
전체 코드 기반을 포괄하는 것으로 입증 된 자동화 된 테스트를 수행 한 경우 100 % 적용 범위를 주장하는 것이 합리적입니다.
또한 프로젝트가 얼마나 중요한지에 달려 있습니다. 더 중요할수록 완전한 코드 범위를 기대 / 요구하는 것이 더 합리적입니다.
중소 규모 프로젝트의 경우이 작업을 수행하는 것이 더 쉽습니다.

비현실적
0 % 적용 범위에서 시작하는 중 ...
프로젝트가 재 작성 또는 트리거하기 어려운 많은 오류 경로가있는 괴물입니다.
경영진은 보험 적용 범위를 확실히하기 위해 노력하고 투자하지 않습니다.

나는 커버리지가없는 것에서 알맞은 것까지 다양한 프로젝트를 진행했습니다. 100 %의 프로젝트는 없었지만 100 %에 가까운 범위를 가졌 으면 좋겠다.
궁극적으로 문제는 기존 적용 범위가 팀이 제품 배송에 익숙해지기 위해 필요한 경우를 충분히 충족시키는 지 여부입니다.

우리는 프로젝트에 대한 실패의 영향을 알지 못하므로 92 % 또는 95 %가 충분한 지 또는 100 %가 실제로 필요한지 말할 수 없습니다. 또는 그 문제에 대해 100 %는 기대하는 모든 것을 완벽하게 테스트합니다.


30
... 그리고 코드 범위가 100 %라고해서 분기 범위가 100 %라는 의미는 아니므로 코드 범위가 100 % 일지라도 많은 것을 놓칠 수 있습니다.
Bryan Oakley

3
프로젝트 크기는 +1입니다. 더 작고 재사용 가능하며 테스트 가능한 구성 요소로 분류하면 약 95 %의 적용 범위를 확보 할 수 있습니다. 100 % 적용 범위는 필요하지 않습니다. 통합 테스트는 단위 테스트 간격을 다루어야합니다.
Apoorv Khurasia 2016 년

5
@BryanOakley ... 그리고 당신의 테스트는 무의미하거나 아무 것도 테스트 할 수 없습니다
David_001

5
@BryanOakley 100 % 지점 적용 범위에서도 특정 지점 조합 으로 인해 문제가 발생할 수 있습니다. (예를 들어, 두 개의 순차 IF 문은 별도의 테스트로 분기 될 수 있지만 둘 다 에 들어가는 테스트는 누락 됩니다 . 전체 분기 적용 범위는 하나이지만 실행 경로가 누락되었습니다)
Izkata

4
모든 실행 경로를 포함하여 100 % 지점 범위만으로는 충분하지 않습니다. 당신이 나뭇 가지의 조합을 때, 어쩌면 약간의 오류는 발생 하고 당신이 잘못된 날짜를 말한다, 일부 외부 입력을 가지고있다. 모든 사례가 보장 될 가능성은 없습니다. 동시에, 100 % 미만의 적용 범위를 가지지 만 입력으로 적합하게 선정 된 엣지 케이스에 대해 확신을 가질 수 있습니다.
안드레아

32

누가 테스트를 테스트합니까?

그것은 아주이다 순진 최상의 및 비현실적인 심지어 이론적 이해와 실용적 비즈니스 의미한다.

  • 순환 복잡성이 높은 코드에서는 비현실적입니다. 모든 조합을 다루기에는 너무 많은 변수가 있습니다.
  • 많은 동시 코드는 비현실적입니다. 이 코드는 결정적이지 않으므로 테스트 실행마다 동작이 변경되므로 발생할 수있는 모든 조건을 처리 할 수 ​​없습니다.
  • 비즈니스 측면에서는 비현실적이며, 중요한 경로 코드 인 코드, 즉 중요한 코드 및 자주 변경 될 수있는 코드에 대한 테스트를 작성하기 위해 배당금 만 지불합니다.

모든 코드 줄을 테스트하는 것은 좋은 목표가 아닙니다

테스트를 작성하는 것은 매우 비싸고, 작성하고 자체 테스트해야하는 코드이며, 실제로 테스트하려는 내용에 문서화해야하는 코드이며, 비즈니스 로직 변경으로 유지 관리해야하는 코드입니다. 테스트가 오래되어 실패합니다. 자동화 된 테스트와 이에 대한 문서를 유지 관리하는 것은 때때로 코드를 유지 관리하는 것보다 비용이 많이들 수 있습니다.

이것은 단위 테스트와 통합 테스트가 유용하지 않다는 것을 의미하는 것은 아니며, 그들이 이해하는 곳에서만, 그리고 사람들을 죽일 수있는 산업 밖에서는 코드 기반의 모든 코드 줄을 테스트하고 테스트하는 것이 이치에 맞지 않습니다. 많은 사람들이 이러한 코드를 신속하게 코드 기반으로 사용하지 않으면 100 % 코드 적용 범위에 따른 긍정적 인 투자 수익률을 계산할 수 없습니다.

정지 문제 :

계산 이론에서 정지 문제 는 임의의 컴퓨터 프로그램 및 입력에 대한 설명으로부터 프로그램의 실행이 끝날지 또는 계속 실행되는지를 결정하는 문제입니다.

Alan Turing은 1936 년에 가능한 모든 프로그램 입력 쌍에 대한 정지 문제를 해결하기위한 일반적인 알고리즘이 존재할 수 없음을 증명했습니다. 증거의 핵심 부분은 컴퓨터와 프로그램의 수학적 정의 였는데, 이는 튜링 기계로 알려졌습니다. 정지 문제는 Turing 장비에 비해 결정 불가능합니다. 결정 문제의 첫 번째 예 중 하나입니다.

무언가가 100 % 효과가 있다는 것을 증명할 수 없기 때문에 왜 목표를 달성해야합니까?

단순하고 단순하며 대부분의 경우 비즈니스에 적합하지 않습니다.


7
이것은 실제로 받아 들여질만한 대답이어야합니다. 100 % 코드 적용 범위는 거의 0 %만큼 나쁩니다.
Ryathal

1
"모든 조합을 포함하기에는 너무 많은 변수가 있습니다." 이것은 100 % 코드 적용과 관련이 없습니다. 한 줄의 코드가 작성하기에 충분히 중요하고 유지하기에 충분히 중요한 경우 테스트에 포함되는 것이 중요합니다. 테스트에 포함되지 않으면 유일한 안전한 가정은 작동하지 않는다는 것입니다. 일부 코드의 경우 비즈니스 관점에서 테스트하는 것이 이치에 맞지 않습니다. 그것은 비즈니스 관점에서 작성하는 것이 의미가없는 매우 동일한 코드입니다.
still_dreaming_1

2
따라서 getXXX()/setXXX()값 객체에 대한 간단한 sor 간단한 할당 생성자 를 다루기 위해 테스트 사례를 작성 하는 것은 시간과 자원을 잘 사용한다고 생각합니다. 미안하지만 실제로는 그렇지 않으며 실제 경험이 부족한 매우 순진한 견해로 백업하지 않습니다. 테스트 코드는 여전히 유지 관리해야하는 코드입니다. 문제를 해결하기 위해 작성하는 코드가 적을수록 모든 경우에 더 좋습니다 .

Uhm "사이클로 매틱 복잡도가 높은 코드에서는 비현실적입니다. 모든 조합을 포함하기에는 너무 많은 변수가 있습니다." 물론, 이러한 코드를 작은 순환 도로 복잡하게하여 테스트하기 쉬운 작은 조각으로 나누어야하는 이유입니다. 이러한 방식으로 리팩토링은 테스트에 필수적입니다. 테스트가 쉬워집니다.
Predrag Stojadinović

17

대부분의 경우 100 % 코드 범위는 약간 "속임수"를 의미합니다.

  • GUI와 같이 시스템의 복잡하고 자주 변경되는 부분은 선언적인 템플릿이나 다른 DSL로 옮겨졌습니다.
  • 외부 시스템을 건 드리는 모든 코드는 라이브러리에 의해 격리되거나 처리되었습니다.
  • 다른 의존성, 특히 부작용이 필요한 의존성도 마찬가지입니다.

기본적으로 테스트하기 어려운 부품은 반드시 "코드"로 간주되지 않는 영역으로 분류되었습니다. 항상 현실적이지는 않지만 테스트를 돕는 것과 무관하게 이러한 모든 방법을 통해 코드베이스를보다 쉽게 ​​작업 할 수 있습니다.


DSL로 물건을 옮기는 것은 어떻게 속임수입니까?
back2dos

2
@ back2dos-포함 된 파이썬 스크립트를 단위 테스트로 말할 수는 있지만 HTML 템플릿 또는 CSS를 단위 테스트하거나 범위 추정치에 대한 행을 계산하지는 않을 것입니다.
Dan Monego

12

100 % 지점 적용 범위 의 인상적인 실제 예는 SQLite 테스트 방법을 참조하십시오 .

귀하의 질문에 완전히 다른 유형의 소프트웨어 제품 인 Javascript에 대해 구체적으로 묻는다는 것을 알고 있지만 충분한 동기 부여로 수행 할 수있는 작업에 대해 알고 싶습니다.


9

특정 응용 프로그램의 모든 부분에 대한 단위 테스트에 대한 100 % 코드 적용 범위는 새로운 프로젝트에서도 파이프 꿈입니다. 나는 그것이 사실이기를 원하지만 때로는 외부 의존성을 추상화하려고 얼마나 열심히 노력하더라도 코드 조각을 덮을 수없는 경우가 있습니다. 예를 들어, 코드가 웹 서비스를 호출해야한다고 가정 해 봅시다. 웹 서비스 호출을 인터페이스 뒤에 숨겨서 해당 부분을 모의하고 웹 서비스 전후에 비즈니스 로직을 테스트 할 수 있습니다. 그러나 웹 서비스를 호출해야하는 실제 부분은 단위 테스트가 불가능합니다. 다른 예는 TCP 서버에 연결해야하는 경우입니다. 인터페이스 뒤의 TCP 서버에 연결되는 코드를 숨길 수 있습니다. 그러나 실제로 TCP 서버에 연결되는 코드는 단위 테스트를 할 수 없습니다. 어떤 이유로 든 작동이 중단되면 단위 테스트가 실패 할 수 있습니다. 그리고 단위 테스트는 호출 할 때 항상 통과해야합니다.

일반적으로 모든 비즈니스 로직에는 100 % 코드 적용 범위가 있어야합니다. 그러나 외부 구성 요소를 호출해야하는 부분은 가능한 한 100 % 코드 범위에 가까워 야합니다. 당신이 도달 할 수 없다면 나는 너무 많이 땀을 흘리지 않을 것입니다.

훨씬 더 중요한 것은 테스트가 맞습니까? 비즈니스와 요구 사항을 정확하게 반영합니까? 코드 적용 범위를 갖기 위해 코드 적용 범위를 갖는다 고해서 잘못 테스트하거나 잘못된 코드를 테스트하는 경우에는 아무 의미가 없습니다. 즉, 테스트가 양호하면 적용 범위가 92-95 %라는 점이 뛰어납니다.


1
이상한 오류 사례와 응답 실패의 조합이 발생할 때 발생하는 테스트는 매우 까다로울 수 있습니다.
Donal Fellows

이러한 까다로운 문제가 발생했을 때 시스템이 수행 할 작업을 단위 테스트의 매력 중 일부로 이해하고 있지 않습니까? 또한 단위 테스트와 통합 테스트간에 약간의 혼동이 있습니다.
피터 스미스

이 conflates unit testingintegration testing, 테스트 코드는 쓰기됩니다하지 않았다 integration테스트. TCP 스택은 OS에 있으므로 테스트해서는 안되며 이미 작성한 사람에 의해 이미 테스트되었다고 가정해야합니다.

4

코드가 100 % 테스트 범위를 허용한다는 특정 목표로 설계되지 않으면 100 %를 달성하지 못할 수 있습니다. 그 이유 중 하나는 방어 적으로 코드를 작성하는 경우 (필요한 경우) 시스템에 대한 지식이 있으면 발생하지 않아야하거나 발생하지 않을 수있는 상황을 처리하는 코드를 보유해야하기 때문입니다. 테스트로 그러한 코드를 다루는 것은 정의상 매우 어려울 것입니다. 이러한 코드를 사용하지 않으려면 위험 할 수 있습니다. 틀린 경우이 상황 이 256 회 중 1 회 발생하는 경우? 불가능한 장소에 변화가있어 불가능한 일이 생기면 어떻게해야합니까? 따라서 "자연적인"수단으로는 100 %에 도달하기가 다소 어려울 수 있습니다. 예를 들어, 메모리를 할당하는 코드가 있고 메모리 관리자를 조롱하지 않는 한 메모리가 실패했는지 확인하는 코드가있는 경우 (쉽지 않을 수 있음) "메모리 부족"을 반환하는 테스트를 작성하면 해당 코드를 다루기가 어려울 수 있습니다. JS 응용 프로그램의 경우 다른 브라우저에서 가능한 DOM 문제, 외부 서비스 실패 등을 방어하는 코딩이 될 수 있습니다.

따라서 가능한 한 100 %에 가까워 지려고 노력하고 델타에 대한 합당한 이유가 있다고 말하지만, 반드시 100 %가 반드시 실패하는 것은 아닙니다. 5 %가 무엇인지에 따라 큰 프로젝트에서 95 %가 괜찮을 수 있습니다.


코드가 정상적인 환경에서 프로덕션 환경에서 실행되지 않아야한다고해서 테스트에서 실행되는 방식으로 코드를 작성할 수는 없습니다. 이 비정상적인 코드가 올바르게 실행되는 것이 얼마나 중요합니까? 테스트로 커버하기에 충분히 중요합니까? 테스트로 다루기가 충분히 중요하지 않은 경우 해당 사례를 처리하기에 충분히 중요하지 않다고 주장합니다. 테스트가 필요없는 코드는 존재하지 않아도되며 삭제해야하는 코드입니다.
still_dreaming_1

2

새 프로젝트로 시작하고 테스트 우선 방법론을 엄격하게 사용하는 경우 테스트가 완료된 시점에서 모든 코드가 호출 될 것이라는 점에서 100 % 코드 적용 범위를 갖는 것이 전적으로 합리적입니다. 처형되었다. 그러나 메소드 가시성으로 인해 모든 개별 메소드 또는 알고리즘을 명시 적으로 직접 테스트하지 않았을 수 있으며 경우에 따라 일부 메소드를 간접적으로 테스트하지 않았을 수도 있습니다.

코드를 100 % 테스트하는 것은 잠재적으로 비용이 많이 드는 연습입니다. 특히이 목표를 달성 할 수 있도록 시스템을 설계하지 않은 경우 테스트 노력에 대한 설계 노력에 집중하고 있다면주의를 기울이지 않을 것입니다. 특히 프로젝트가 큰 경우 특정 요구 사항을 충족하도록 응용 프로그램을 설계합니다. 미안하지만 무언가 타협하지 않으면 두 가지 방법을 모두 사용할 수는 없습니다.

테스트가 유지되지 않았거나 이전에 포함되지 않은 기존 프로젝트에 테스트를 도입하는 경우, 운동 비용이 노력보다 중요하지 않으면 100 % 코드 적용 범위를 확보 할 수 없습니다. 가장 바람직한 것은 가장 중요한 코드 섹션에 대한 테스트 범위를 제공하는 것입니다.

실제 코드 적용 범위가 javascript / jquery에서 92 % -95 % 주위를 가리킬 때 100 % 적용 범위가 충족되지 않아 스프린트에 실패하는 것이 합리적입니까?

대부분의 경우 목표를 달성하지 못한 경우 스프린트가 '실패'한 것으로 간주해야한다고 말합니다. 실제로 다음에 스프린트를 정의 할 때 계획을 바로 잡기 위해 기대치를 충족하지 않는 스프린트에서 배울 수 있어야하기 때문에 이러한 경우 스프린트를 실패한 것으로 생각하지 않습니다. 그럼에도 불구하고, 코드 커버리지가 스프린트의 상대적 성공의 요인으로 간주되는 것이 합리적이라고 생각하지 않습니다. 목표는 모든 것이 지정된대로 작동하도록 충분히하는 것이어야하며, 테스트 우선 코딩하는 경우 테스트가이 목표를 지원할 것이라고 확신 할 수 있어야합니다. 추가해야 할 추가 테스트는 사실상 설탕 코팅이며 스프린트를 만족스럽게 완료하는 데 드는 추가 비용입니다.


"죄송 합니다만, 타협하지 않고 두 가지 방법을 모두 사용할 수는 없습니다." 사실이 아닙니다. 언제든지 기능을 축소하거나 느리게 진행할 수 있습니다. 테스트 할 가치가없는 것이 있다면 쓸 가치가 없습니다. 코드 줄이 유지하기에 충분히 중요한 경우 테스트하기에 중요합니다. 테스트하기에 충분히 중요하지 않은 경우, 유지하기에 충분히 중요하지 않습니다. 테스트되지 않은 코드 라인의 유일한 안전한 가정은 작동하지 않는다는 것입니다.
still_dreaming_1

@ still_dreaming_1, 당신은 내 진술을지지하고 자신과 모순 된 것 같습니다. 기능을 축소하거나 마감일을 변경하는 것은 타협이며, 각각 프로젝트 비용과 이해 관계자 기대에 영향을 줄 수 있습니다. 이전에 완전히 테스트되지 않은 레거시 코드를 테스트하는 것은 코드가 실행될 때뿐만 아니라 원래 작성자의 의도를 이해하고 기존 레거시 코드 동작을 캡처하는 테스트를 작성하는 것이 반드시 필요한 것은 아니기 때문에 매우 어렵습니다. 코드가 예상대로 작동합니다.
S.Robins

내 요점은 훼손된 것, 개발이 더 빨리 이동하기 때문에 아직 생성되지 않은 기능 또는 변경 사항, 더 빨리 이동하기 위해 적용 범위를 잃으면 그러한 기능 및 변경 사항이 어쨌든 제대로 작동하지 않는 것으로 가정합니다. 그렇다면 제대로 작동하는지 여부에 관계없이 변경하거나 해당 기능을 추가하는 요점은 무엇입니까? 제대로 작동하는지 여부가 중요하지 않은 경우 이러한 변경을 수행 할 필요가 없으며 이제 코드에서 변경해야합니다.
still_dreaming_1

나는 더 이상, 적어도 레거시 코드베이스에서, 당신이 말하는 진실의 실용성 측면을 완전히 믿지 못합니다. 그래서 그것은 내가 당시에 시도하려는 요점에 대한 설명 일뿐입니다. 실제로, 나는 이제 100 % 적용 범위를 확보하는 것 외에도 새로운 코드 기반에서 TDD를 수행하는 것에 대해 완전히 충돌했습니다. 한편으로, 모든 형태의 논리와 이성은 나에게 그 두 가지가 모두 좋아야한다고 말하지만 실제로는 실용적으로 만들 수 없습니다. 따라서 프로그래밍 세계에는 무언가 잘못된 것이 있습니다. 새로운 패러다임이 필요합니다.
still_dreaming_1

1

물론이 작업을 수행하지는 않지만 두 개의 큰 프로젝트 에서이 작업을 수행했습니다. 어쨌든 단위 테스트를위한 프레임 워크가 있다면 정확하게 어렵지는 않지만 많은 테스트를 추가합니다.

마지막 몇 줄을 치는 것을 방해하는 특정 장애물이 있습니까? 그렇지 않은 경우, 적용 범위가 95 %에서 100 %에 이르는 것이 간단하다면 그렇게 할 수도 있습니다. 여기에 요구하고 있기 때문에, 나는 거기에 있다고 가정거야 입니다 무엇인가. 그게 뭐야?


이것은 최고의 답변 중 하나입니다. 코드 라인을 쉽게 커버 할 수없는 것을 묻는 것은 좋은 질문입니다. 그 줄을 다룰 때 코드가 향상되도록 코드를 개선해야하므로 승리 할 것입니다.
still_dreaming_1

0

92 %가 괜찮습니다. 실제 질문은 다음과 같습니다.

  • 92 %가 현재 '새로운'표준입니까? 다음 스프린트에 88 %의 테스트가 있다면 괜찮을까요? 이것은 종종 테스트 스위트가 포기되는 시작입니다.

  • 소프트웨어가 작동하고 버그가없는 것이 얼마나 중요합니까? "테스트 목적으로"가 아니라 이러한 이유로 테스트가 있습니다.

  • 돌아가서 누락 된 테스트를 작성할 계획이 있습니까?

  • 왜 테스트하고 있습니까? 초점이 기능이 아닌 라인의 % 인 것 같습니다


"소프트웨어가 작동하고 버그가없는 것이 얼마나 중요합니까?" 좋은 질문. bug 정의 의도 한대로 작동하지 않는 것. 일부 코드가 올바르게 작동하지 않으면 코드를 작성하지 마십시오. 코드의 요점은 작동하는 것입니다.
still_dreaming_1

0

Martin Fowler는 자신의 블로그 에서 다음과 같이 썼습니다 .I would be suspicious of anything like 100% - it would smell of someone writing tests to make the coverage numbers happy, but not thinking about what they are doing.

그러나 단위 수준에서 100 % 적용 범위를 의무화하는 표준도 있습니다. 예를 들어, 유럽 우주 비행 커뮤니티 표준 (ECSS, 유럽 공간 표준화 협력)의 요구 사항 중 하나입니다. 여기 에 링크 된 논문 은 이미 완성 된 소프트웨어에서 100 % 테스트 범위에 도달한다는 목표를 가진 흥미로운 프로젝트 이야기를 알려줍니다. 단위 테스트를 개발 한 관련 엔지니어와의 견해를 바탕으로합니다.

수업 중 일부는 다음과 같습니다.

  • 100 % 적용 범위는 일반적이지 않지만 달성 가능
  • 때로는 100 % 적용 범위가 필요합니다
  • 100 % 적용 범위는 새로운 위험을 초래합니다
  • 100 % 측정 항목을 최적화하지 마십시오
  • 적용 범위를 최대화하기위한 적절한 전략 개발
  • 100 % 적용 범위는 좋은 품질을위한 충분한 조건이 아닙니다

0

아마도 실현 가능하고 합리적인지 묻는 것이 가장 도움이되는 질문이 아닙니다. 아마도 가장 실용적인 대답은 받아 들여질 것입니다. 나는 이것을보다 철학적 인 수준에서 분석 할 것이다.

100 % 적용 범위는 이상적이지만 이상적으로는 필요하지 않거나 달성하기가 훨씬 쉽습니다. 나는 그것이 실현 가능하거나 합리적인 것보다 자연스럽고 인간적인지 생각하는 것을 선호합니다.

오늘날의 도구로는 올바르게 프로그래밍하는 것이 불가능합니다. 완전히 정확한 코드를 작성하는 것은 매우 어렵고 버그가 없습니다. 자연스럽지 않습니다. 따라서 다른 명백한 옵션이 없으면 TDD 및 추적 코드 적용과 같은 기술을 사용합니다. 그러나 최종 결과가 여전히 부 자연스러운 과정이라면 사람들이 일관되고 행복하게 처리하도록하는 데 어려움을 겪을 것입니다.

100 % 코드 적용을 달성하는 것은 부 자연스러운 행위입니다. 대부분의 사람들에게 그것을 달성하도록 강요하는 것은 고문의 한 형태 일 것입니다.

자연스러운 정신 모델에 매핑되는 프로세스, 도구, 언어 및 코드가 필요합니다. 이를 수행하지 않으면 제품의 품질을 테스트 할 방법이 없습니다.

오늘 모든 소프트웨어를 살펴보십시오. 그것의 대부분은 꽤 정기적으로 엉망입니다. 우리는 이것을 믿고 싶지 않습니다. 우리는 우리의 기술이 마 법적이며 우리를 행복하게 만들고 싶습니다. 그래서 우리는 기술이 엉망이되는 대부분의 시간을 무시하고 변명하고 잊어 버리기로 선택합니다. 그러나 우리가 정직하게 평가한다면, 오늘날 존재하는 대부분의 소프트웨어는 엉터리입니다.

보다 자연스러운 코딩을위한 몇 가지 노력은 다음과 같습니다.

https://github.com/jcoplien/trygve

https://github.com/still-dreaming-1/PurposefulPhp

후자는 극도로 불완전하고 실험적입니다. 실제로 그것은 내가 시작한 프로젝트이지만, 내가 그것을 완성시키기 위해 시간을 할애 할 수 있다면 프로그래밍 기술을위한 큰 진보가 될 것이라고 믿습니다. 기본적으로 계약이 우리가 관심있는 클래스 행동의 유일한 측면을 표현하고 계약을 코드로 표현하고 있다면 클래스와 메소드 정의가 계약과 함께 제공되지 않는 이유는 무엇입니까? 그렇게하면 계약이 코드가되고 모든 방법을 구현할 필요는 없습니다. 도서관이 우리를 위해 계약을 존중하는 방법을 알아 보도록하십시오.


-2

새로운 코드에서 100 %에 도달하는 것은 매우 달성 가능해야하며 TDD를 연습하는 경우 모든 프로덕션 코드 라인에 대해 의도적으로 테스트를 작성함에 따라 기본적으로 그 목표를 달성 할 수 있습니다.

단위 테스트없이 작성된 기존 레거시 코드에서는 레거시 코드가 단위 테스트를 염두에두고 작성되지 않았으며 많은 리팩토링이 필요할 수 있기 때문에 어려울 수 있습니다. 위험 및 일정의 현실을 고려할 때 이러한 리팩토링 수준은 종종 실용적이지 않으므로 트레이드 오프를 수행해야합니다.

우리 팀에서는 100 % 코드 적용 범위를 지정하고 코드 검토에서 이보다 적은 수를 보이면 구성 요소의 기술 소유자가 개발자에게 100 %에 도달하지 못한 이유를 논의하고 개발자의 추론에 동의해야합니다. 100 %에 도달하는 데 문제가있는 경우 개발자는 코드 검토 전에 기술 담당자에게 문의합니다. 우리는 일단 습관에 들어간 후 레거시 코드에 테스트를 추가하여 몇 가지 일반적인 문제를 해결하는 기술을 배우면 처음에 생각했던 것처럼 정기적으로 100 %를 달성하는 것이 어렵지 않다는 것을 알았습니다.

Michael Feather의 저서 " 레거시 코드로 효과적으로 작업하기 "는 레거시 코드 에 테스트를 추가하기위한 전략을 마련한 데있어 매우 중요합니다.


-3

불가능합니다. 절대 불가능합니다. 가능하다면 모든 수학은 초현실주의에 빠질 것입니다. 예를 들어, 두 개의 64 비트 정수를 가져와 곱한 함수를 어떻게 테스트 하시겠습니까? 이것은 항상 테스트와 프로그램의 정확성을 증명하는 데있어 내 문제였습니다. 가장 사소한 프로그램 이외의 경우, 테스트는 소수의 경우에만 적용되므로 기본적으로 쓸모가 없습니다. 그것은 1,000 개의 숫자를 확인하고 당신이 Goldbach 추측을 증명했다고 말하는 것과 같습니다.


오! 그래서 누군가 그 개념의 평면에서 문제에 대답하지 않았다고 화를 냈습니다. 테스트는 낭비입니다… 대중적인지 신경 쓰지 않습니다. 절대 작동하지 않습니다. 그럴 순 없어. 가장 똑똑한 컴퓨터 과학자들은 이것을 알고 있습니다 (Dijkstra, Knuth, Hoare et al.). eXtreme Programming을 허핑하는 JavaScript 프로그래머라면 크랭크에 신경 쓰지 않아도됩니다. Blah, 뭐든 상관없고… 엉터리 코드를 작성하십시오. 테스트를 실행하는 CO2 폐기물. — 누가 더 이상 앉아서 생각할 시간이 있습니까? 우리는 그것을 컴퓨터로 내보냈습니다.
매우 어리석은

3
질문에 "TDD"태그가 붙어 있습니다. TDD는 테스트 도구보다 디자인 도구이자 문제 탐색 도구이며, 각 "테스트"는 코드가 어떤 상황에서 어떻게 작동하는지에 대한 예일 뿐이므로 사람들이 진행 상황을 읽고 이해 한 다음 안전하게 변경할 수 있습니다. . TDD를 잘 수행하면 코드가 더 깨끗하고 사용하기 쉬워지고 테스트를 실행하면 문서가 최신인지 확인합니다. 대부분의 TDD 제품군은 버그를 거의 포착하지 못합니다. 그들이 거기있는 것이 아닙니다. 나는 당신의 대답이 이해력이 부족한 것을 배신했기 때문에 당신이 다운 투표되고 있다고 생각합니다.이 의견이 그 도움이되기를 바랍니다.
Lunivore
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.