일반적인“기능 라인 코드”와“코드 라인 테스트”비율은 무엇입니까?


27

나는 TDD 접근 방식에 익숙하지 않으며 첫 번째 실험에서 1 줄의 기능 코드를 작성한다는 것은 2-3 줄의 테스트 코드를 작성한다는 것을 의미합니다. 따라서 1000 LOC를 작성하려는 경우 테스트를 포함한 전체 코드베이스는 ~ 3500 LOC와 같습니다.

이것이 정상으로 간주됩니까? 작성한 코드의 비율은 무엇입니까?


8
그래, TDD는 값 비싼 태그와 함께 제공됩니다!
EL Yusubov

6
2-3X 숫자는 최상 으로 보수적 입니다. 실제로 C # / Java, Python / Ruby와 같은 것의 경우 4-5X에 가깝습니다 .Erlang과 같은 간결한 것이 1 : 1에 가깝습니다. 방법에 따라 달라집니다 독단적 당신이 TDD, 더 독단적에 대해 있으며, 더 큰 그 비율은 얻을!

6
@tomwrong : Kent의 책에서 그는 Ward가 두려움이 권태로 바뀔 때까지 테스트를 작성해야한다고 말합니다.
herby

4
@ElYusubov : 나는 그것이 "고가"라는 것에 동의하지 않습니다. LOC에서 여전히 작업량을 계산하는 사람들에게는 그렇게 보입니다. 그러나 가격은 LOC가 아니며 시장에 출시 된 돈과 시간입니다. TDD는 다른 합리적인 개발 프로세스보다 비싸지 않습니다.
herby

5
여러분, 왜 답변을 올리는 대신 댓글을 달까요? 당신이 쓰는 것은 의미가 있습니다.
Andrey Agibalov

답변:


18

TDD에서는 1 : 3이 정상입니다.

내 경험과 다른 인용에서도 기억합니다.


12
무슨 인용?
TehShrike

... 모호하게 기억합니다 ... 나는 이미 어디에 있었는지 기억하지 못합니다 (Kent Beck의 TDD By Example, 아마도 c2.com의 어딘가에). 그러나 프로덕션 코드보다 3 ​​배 더 많은 테스트 코드가 괜찮다는 의미를 기억합니다.
herby

와우, 내 경험에서도 똑같습니다. (지금은 cloc 결과를 응시하고 있는데이 비율에 어떤 게시물 찾기 위해 구글 검색)
니콜라이 Tsenkov을

9

다른 코딩 스타일과 언어에 따라 변형이 있습니다. 그러나 사용하는 언어에 관계없이 가장 큰 변형이 있습니다.

로버트 마틴은 한 번 말했다 :

"테스트가 구체화 될수록 코드가보다 포괄적이됩니다."

그렇게 생각했습니다. 더 구체적인 테스트는 더 많은 테스트 코드를 의미합니다. 보다 일반적인 생산 코드는 코드가 적기 때문에 코드가 발전함에 따라 테스트 / 코드 비율이 높아져야합니다.

그러나 잠깐, 그것도 좋지 않습니다. 예를 들어 특정 알고리즘을 정의 할 때와 같은 특정 경우에는 몇 개의 "if", 잠시 동안 그리고 2-3 회 재귀를 포함하는 6-10 줄의 코드 만있을 수 있습니다. 그 코드에는 아마도 100 줄 이상의 테스트 코드가있을 것입니다.

실제 프로젝트에서 단지 몇 개의 알고리즘보다 큰 테스트 / 코드 비율은 1 : 1과 2 : 1 사이 여야합니다. 2 : 1을 초과하면 리팩토링 또는 삭제해야하는 테스트 (또는 테스트하기 어려운 코드)가 있습니다. 생산 코드와 동일한 테스트에 항상주의를 기울여야합니다.

어쨌든 귀하의 질문에 가장 적합한 답변은 "Cyclomatic Complexity" 입니다. 분석법의 순환 복잡성이 높을수록 모든 경우를 다루기 위해 기하 급수적으로 더 많은 테스트를 작성해야합니다.


3

방법의 크기에 따라 비율이 달라집니다. 분석법의 크기는 프로그래밍 스타일, 언어 및 문제 영역에 따라 다릅니다.

방법이 짧으면 3 : 1이 합리적입니다. 방법이 길면 3 : 1이 높은 편입니다.

따라서 귀하의 질문에 대답하려면 달려 있습니다. :-)


"방법이 길다"는 의미에 따라 다릅니다. 그것이 내 머리 속에 만들어 낸 이미지는 방법이 불필요하고 너무 많은 일을하고 너무 많은 책임을진다는 것입니다 (종종 너무 많은 매개 변수가 있음). 이 경우, 그러한 방법은 시험에 의해 다루기 위해 비례 적으로 더 많은 조합이 필요하므로 비율이 크게 변할 것이라고 생각하지 않습니다 ...
herby

잠시 테스트를 설정하고 테스트 할 메소드를 호출 한 후 3 줄의 코드로 결과를 확인하십시오. 테스트하는 방법이 스칼라에서와 같이 한 줄 길이 인 경우 생산 코드 배급에 대한 테스트는 3 : 1입니다. 방법이 6 줄이면 1 : 2입니다. 여섯 줄은 그리 길지 않습니다.
Jon Strayer

2

소프트웨어 크리티컬 애플리케이션의 경우 일반적인 비율은 각 10 개의 기능적 LoC에 대해 하루의 테스트입니다.

그리고 이것은 테스트가 아니라 사양에 관한 TDD를 세지 않습니다.


1

내 테스트 코드의 크기는 실제 코드의 절반 정도입니다. 그렇지 않으면 테스트가 너무 복잡하거나 코드를 테스트하기가 너무 어렵거나 코드가 너무 조밀하거나 복잡하다는 것을 나타냅니다.

또는 단순히 너무 많은 테스트를하고 있고, 수익을 줄이는 데 시간을 낭비하고 있습니다.

"단위 테스트가 부적절하거나 불필요 할 때" 도 참조하십시오.


-1

내 비율은 약 2-1에서 10-1입니다 (테스트 코드). 테스트가 구현이 아닌 가치 / 행동에 관한 것인지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.