단위 테스트가 그렇게 훌륭하다면 왜 더 많은 회사에서 수행하지 않습니까? [닫은]


103

제가 일한 최초의 실제 소프트웨어 회사는 단위 테스트 (NUnit)에 관한 것입니다. 그 당시에는 우리가 진짜 고집 스러웠는지 모르겠습니다. 우리의 코드 커버리지가 어떤 것인지 전혀 모르고 대부분의 단위 테스트를 작성했습니다. 그 이후로 많은 테스트를 수행하는 일부 회사를 만났습니다. 그러나 그것은 의자 테스트입니다. 사람에 의존하고 반복성이 낮으며 버그를 잡을 가능성이 낮습니다. 다른 태도는 다음과 같습니다. "미래에"함께 가고 싶었던 것입니다. 기본적으로 돈이 하늘에서 떨어질 때.

단위 테스트가 그리워요. 하지만 새로운 직업을 찾을 때 단위 테스트는 회사가 미래에 "계속 진행"하기를 원하거나 전혀하지 않는 것입니다 (어, 그것은 한동안 존재했습니다 지금!). 지난 2 년 동안 내가 살펴본 작업 요구 사항의 60-75 %가 단위 테스트를 전혀 나열하지 않았다고 말하고 싶습니다. 단위 테스트 경험이있는 한두 명만 (중급 개발자 위치) 요구 사항으로 생각할 수 있습니다.

그래서 질문은 무엇이 빠졌 습니까? 사람들을 더 생산적으로 만든다고 생각하지만, 실제로 그렇게하는 데 상당한 시간을 보낸 후에야합니다. 단위 테스트의 비용 절감에 대한 좋은 연구가 없습니까? 내가보고있는 회사 유형입니까?

편집 : 제목이 약간 악마 지지자이지만, 나는 나 자신을 단위 테스트 지지자라고 생각합니다.


어떤 종류의 도메인에서 작업하고 있습니까? 나는 항상 내가 일한 곳마다 다양한 완성도의 단위 테스트를 경험했습니다. 그러나 의료 및 산업 영상에서 내 경험의 거짓말, 그래서 ... 왜 수 있습니다
Kena

네, 당신 말이 맞다고 생각합니다. 내 도메인은 일반적으로 기간 업무 앱입니다. 균형 잡힌 삶은 없습니다. 그러나 때로는 잔액이 일부 청구되며 비용이 많이들 수 있습니다.
jcollum

11
의자 테스트 : 사람이 의자에 앉아 애플리케이션을 구동하고 버그를보고합니다.
jcollum

3
@Darknight는 그의 정직함을 위해 50k upvotes를 가져야합니다. 늙어 가고, 오늘의 시간으로 돌아 가라. 단위 테스트는 그것이 속한 90 년대로 되돌려 놓으십시오. 가장 큰 시간 낭비. 당신이 중요해 보일 수 있도록 기르는 것일 뿐이지 만 대부분의 경우에는 아무것도하지 않습니다. 요즘에는 IDE라는 것이 있는데 더 이상 콘솔이나 메모장으로 프로그래밍하지 않습니다. 텍스트 위에 커서를 놓고 값을 볼 수 있기 때문에 코드가 정확하다는 것을 알고 있습니다. 다른 모든 이전 타이머로 단위 테스트를 과거에 유지하십시오.
Portfoliobuilder

1
@portfoliobuilder 예, IDE 내의 값에 마우스를 가져 가면 코드 품질이 향상됩니다. 상태는 항상 동일하고 코드는 절대 변경되지 않기 때문입니다. 바로! 그리고 행운을 빌어.
Franz D.

답변:


112

제 경험상 여기에는 몇 가지 요인이 관련되어 있습니다.

  1. 경영진은 단위 테스트가 실제로 무엇인지, 왜 그것이 실제 내재적 가치를 가지고 있는지 이해하지 못합니다.
  2. 경영진은 빠른 제품 제공에 더 관심을 갖는 경향이 있으며 단위 테스트가 해당 목표에 역효과를주는 것으로 (잘못) 인식합니다.
  3. 테스트가 전적으로 QA의 관점에 속한다는 오해가 있습니다. 개발자는 코더이며 테스트를 작성할 수 없습니다.
  4. 도구를 무료로 사용할 수 있다는 사실에도 불구하고 경영진이 단위 테스트를 올바르게 수행하기 위해 돈을 써야한다는 일반적인 오해가 있습니다. (물론 개발자가 고려할 시간을 늘리는 것이 있지만 실제로 금지되지는 않습니다.)
  5. Will의 대답은이 대답을 반올림합니다. 테스트 코드의 가치를 결정하는 것은 매우 어렵습니다 (jcollum 편집).

당연히 다른 요소가 있지만 지금까지 내가 겪은 것입니다.


네, 내 경영진에 대해 거의 설명했지만 테스트가 없습니다.
Ty.

그리고 일부 인기있는 언어 (C / C ++)에서 지원하지 않습니다.
Martin Beckett

@mgb-CxxUnit은 나를 위해 꽤 잘 작동합니다 ...
Dominic Rodger

2
CxxTest도 매우 좋습니다. C ++의 잘못된 반사 메커니즘으로 인해 더 다양한 "솔루션"이 제시된 것 같습니다. CxxTest는 빌드 시스템에서 전처리 단계를 필요로하는 반면 TUT와 같은 도구는 전적으로 컴파일 시간과 언어를 지원하지만 사용하기 어색합니다.

2
나는 stackoverflow.com의 사용자가 이와 같은 많은 문제에 대해 관리를 비난하는 경향이 있음을 발견했습니다. 실제 친구들에게 발생하는 '경영 문제'에 대해 물어 보았을 때 일반적으로 그들이 경영진에 대한 우려를 표명하지 않았으며 사람들의 관점을 바꾸는 캠페인에 덜 착수해야한다는 것을 알았습니다. '경영은 ...'라고 말하는 대신, 나는 경영진이 내 관점을 볼 수 있도록 도울 수있는 방법을 생각하고 그들에게 내 입장이 옳다고 확신시킨다. 개발자들이 단위 테스트를 잘 팔지 못하기 때문에 이것이 문제라고 생각합니다.
Brian Stinar

87

1) 어렵다
2) 시간이 걸린다
3) 테스트 코드의 가치를 결정하는 것이 매우 어렵다

포인트 3은 끈적 거리는 것입니다. 좋은 단위 테스트는 버그를 줄입니다. 그러나 좋은 프로덕션 코드도 마찬가지입니다. 단위 테스트로 인해 존재하지 않는 버그 수를 어떻게 확인합니까? 존재하지 않는 것을 측정 할 수 없습니다. 연구를 가리킬 수는 있지만 비즈니스 관리자의 스프레드 시트에는 적합하지 않습니다.


11
"좋은 단위 테스트는 버그를 줄입니다.하지만 좋은 프로덕션 코드도 마찬가지입니다." -좋은 단위 테스트를 통해 프로덕션 코드를 개선 할 수 있습니다. 코드가 처음에는 나쁘지만 테스트 범위가 양호하더라도 코드가 좋을 때까지 자신있게 시스템을 리팩토링 할 수 있습니다.
Esko Luontola

1
Esko는 좋은 커버리지를 갖는 것 외에도 실제로 무언가를 테스트하는 좋은 테스트를 받아야합니다. 100 % 코드 커버리지를 가질 수 있고 실제로 거의 테스트하지 않을 수 있습니다.
Jacob Adams

훌륭한 대답입니다! 당신은 훨씬 적은 단어로 내 대답과 같은 말을했습니다.
Wedge

2
예, 단위 테스트에는 시간이 걸립니다. 그러나 "무작위 버그 수정"도 마찬가지입니다. 적절한 테스트 주도 개발에는 테스트에서 "문서화 된" "모든"기능이 있습니다. 테스트가 녹색이면 제품이 의도 한대로 작동하는 것입니다 (사용성 문제 등 제외). 내 경험에 따르면 총 개발 시간은 거의 영향을받지 않습니다. 버그 수정에 시간을 소비 한 후보다 일에 더 많은 시간을 할애하고 처음부터 올바르게 처리합니다.
Arve Systad

그리고 상당수의 연구에서 단위 테스트가 음의 값을 갖는 것으로 나타났습니다. 그래서 연구를 보여주는 매우 결정적이며, 그 때문에 문제의 가게에 대한 값이 양수 가능성이 할 수있을 때까지 일부 관리 저항을 산출한다
룬 FS

70

모든 책임을 "관리"에 두는 것은 쉽습니다. 그러나 경영진이 정말로 단위 테스트를하지 말라고 말하고 있습니까?

일반적으로 관리는 모듈화, 추상 데이터 유형, 디자인 패턴 또는 단위 테스트 등 작업 수행 방법을 알려주지 않습니다. 이들은 성공적이고 유능한 소프트웨어 엔지니어가 적용하는 거래 도구이지만 열악한 엔지니어는 적용하지 않습니다.

귀하의 질문에 대한 진정한 답은 단위 테스트가 정말 어렵고 컴퓨터 과학 학생들은 이에 대한 훈련을받지 않았다는 것입니다.

자신 만의 문자열 클래스를 작성할 때 쉽습니다. 실제 제품을 테스트 할 때 파워 포인트 슬라이드에서 아무도 말하지 않은 문제에 직면하게됩니다.

  • 사용자 상호 작용. 애플리케이션의 절반은 사용자 인터페이스 로직입니다. 버튼을 움직여도 분해되지 않는 자동화 된 방식으로 어떻게 테스트합니까?
  • 외부 API 및 프레임 워크와의 상호 작용. Windows 커널 드라이버를 작성하는 경우 어떻게 단위 테스트합니까? 사용하는 모든 IRP 및 커널 기능에 대한 스텁을 작성하여 효과적으로 OS 커널 시뮬레이션을 생성합니까?
  • 네트워크 통신은 21 세기의 것입니다. 여러 분산 구성 요소로 구성된 단위 테스트를 어떻게 조정합니까?
  • 좋은 테스트 케이스를 어떻게 선택합니까? 나는 일반적으로 사람들이 "1000 번의 반복 루프에서 임의의 작업을 수행하고 중단되는지 확인"접근 방식을 시도하는 것을 봅니다. 이렇게하면 노력이 수익보다 높고 중요한 버그가 누락되고 단위 테스트가 중단됩니다.
  • 성능 요구 사항이 충족되는지 어떻게 테스트합니까?
  • 테스트의 패턴에 대한 지식은 거의 없습니다. 스텁, 미리 준비된 답변, 회귀 테스트는 대부분의 사람들이 모르는 개념입니다. 직장에서 실제로 단위 테스트에 대한 책을 읽은 사람은 몇 명입니까?

우리가 관리를 비난 할 수있는 한 가지는 요구 사항 사양에 결과물의 품질 수준에 대한 요구 사항이 거의 포함되지 않는다는 것입니다.

다음에 상사가 예상 시간을 요구할 때 단위 테스트 작성 시간을 포함하고 어떤 일이 발생하는지 확인하십시오.


2
좋은 생각. 그러나 "제품"코드를 생성하는 시간과 별개로 단위 테스트를 생성 할 시간을 요구하지 마십시오!
Jeff Kotula

3
이 답변을 읽으면 단위 테스트의 개념과 기본 사항에 익숙하지만 효과적으로 수행하는 방법을 전혀 모릅니다. 주제에 대한 좋은 책을 추천 할 수 있습니까?
Breton

1
내가 작업 한 한 커널 드라이버에서 사용자 모드 테스트 장치에 연결 한 라이브러리로 많은 코드를 리팩토링했습니다. 이 특정 코드는 환경에 구애받지 않으므로 충분히 쉬웠습니다. 나는 그것을 시도하지 않았지만 파일 시스템 및 데이터베이스와 같은 IRP는 모의 할 수 있어야합니다.
George V. Reilly

1
Bochs 또는 QEMU를 사용하면 커널 드라이버와 통신 할 장치의 시뮬레이션을 작성할 수 있습니다.
Zan Lynx

2
@floding, 매혹적인 대답. 단위 테스트에 관한 책을 읽어야 할 것 같아요.
Dan Rosenstark 2010 년

28

대부분의 테스트는 아무것도 테스트하지 않습니다.
fileopen () 함수와 파일이 존재하지 않으면 실패하고 파일이 존재하면 성공하는 unittest를 작성합니다. 큰! 이제 BIG5 중국어의 파일 이름으로 작동하는지 확인 했습니까? NFS 공유에 있습니까? USB 키에있는 파일과 UAC가 켜져있는 Vista에서

문제는 함수를 작성한 동일한 프로그래머가 동일한 수준의 기술로 동일한 가정에 따라 단위 테스트를 작성한다는 것입니다. 실제로 작동하려면 다른 사람이 테스트를 작성해야하며 코드를 보지 않고 게시 된 사양에 대해서만 작성해야합니다. -대부분의 회사에서 사양을 작성하는 것만으로도 돌파구가 될 것입니다!

단위 테스트는 개별 함수 코드의 오류를 확인합니다. 입력 / 출력이 잘 알려져 있고 내부 구조가 복잡하지만 많은 경우 시간 낭비 일 뿐인 데이터 액세스 레이어, 수학 라이브러리 등에서 작동 할 수 있습니다.
오류가 코드의 다른 부분 또는 OS 및 사용자와의 상호 작용으로 인한 경우 실패합니다. 높은 / 낮은 DPI 설정이 대화 상자를 엉망으로 만들거나 '.'를 바꾸는 외국어 설정과 같은 문제 및 ','는 일반적으로 발견되지 않습니다.


15
이 답변은 마크를 약간 놓친 것 같습니다. 단위 테스트와 기능 테스트는 동일하지 않으며 동일해서는 안됩니다.
Wedge

4
당신이 놓친 요소는 단위 테스트가 단순한 일이 아니라는 것입니다. 나중에 NFS 공유에서 fileopen ()을 사용하여 버그를 수정해야한다는 사실을 알게되면 이에 대한 테스트 스위트에 테스트를 추가 할 수 있습니다. 그런 다음 앞으로 더 많은 개발을 할 때 회귀 테스트를 실시합니다.
Paul Osborne

2
많은 오류는 프로그래머가 생각하지도 않았고 단순히 코드를 확인하는 것으로도 찾을 수없는 코드 외부의 상호 작용에서 발생합니다. 일반적인 GUI 문제는 DPI 설정이 매우 높거나 낮은 컴퓨터입니다. 원하는대로 대화 상자 기능을 단위 테스트 할 수 있지만이를 발견하지는 못합니다.
Martin Beckett

5
그것은 단위 테스트의 기능이 아니며 코드의 다른 부분 간의 상호 작용은 매우 단위 테스트가 가능하며 실제로 해당 부분이 별도의 팀에서 작성되는 경우 공유 인터페이스에 대해 코드를 단위 테스트하고 다른 팀의 구성 요소를 조롱합니다. 좋은 습관.
Steven Evers

1
TDD는 코드를 작성하기 전에 테스트를 작성하게함으로써 "코드를 작성한 프로그래머가 테스트를 작성합니다"라는 조작 된 테스트 문제를 처리합니다.
Ophidian


15

단위 테스트에 관심이없는 개발자를 많이 찾았습니다. 당신이 시작할 때 그것은 항상 적은 보수로 많은 일처럼 보입니다. 아무도 추가 작업에 등록하기를 원하지 않으므로 저항합니다. 일단 사람들이 시작하면 보통 열정적으로 고수하지만 시작하는 것은 어려울 수 있습니다.


12

단위 테스트의 채택 문제를 제외하고, 단위 테스트는 일반적으로 적절하다고 생각하지만 항상 가치가있는 것은 아닙니다. 단위 테스트가 열악한 구성에 취약하지 않도록 보호하는 특별한 것은 없습니다.

단위 테스트에는 비용 (생성, 유지 관리 및 실행)이 있으며 해당 비용보다 더 큰 이점을 제공하는 경우에만 가치가 있습니다. 테스트 생성은 다른 기술과 마찬가지로 성공을 위해 특정 경험과 지식이 필요합니다. 충분한 경험이 없으면 다른 경험이있는 개발자라도 가치가없는 낮은 품질, 낮은 가치 및 / 또는 높은 비용의 단위 테스트를 만드는 것은 매우 쉽습니다. 특히 단위 테스트의 가치를 판단하는 것이 얼마나 어려운지를 감안할 때.

또한 단위 테스트는 코드 품질을 향상시키는 한 가지 방법 일뿐 아니라 유일한 방법은 아닙니다. 상황에 따라 일부 팀에서는 소프트웨어 품질을 높이는 가장 효과적인 방법이 아닐 수 있습니다.

단위 테스트에 많은 노력을 기울이는 것이 소프트웨어 품질을 보장하는 것은 아닙니다. 또한 단위 테스트 없이도 최고 품질의 소프트웨어를 생산할 수 있습니다.


당신이 말하는 것은 정적으로 입력 된 언어에서 사실입니다. 동적으로 입력되는 언어에서는 절대적으로 중요합니다. 나는 당신의 코드가 테스트 없이는 쓰레기가 거의 보장된다는 것을 의미합니다. 나는 이것이 일부 사람들이 단위 테스트를 그렇게 높이 평가하는 이유의 큰 부분이라고 생각합니다.
빌 K

11

글쎄, 우리 회사는 TDD 또는 단위 테스트를 사용하지 않았습니다. 솔직히 말해서 어떻게해야할지 모르겠습니다. 우리는 CapitalizeString () 등과 같은 어리석은 함수에 대해 분명히 할 수 있지만 복잡한 객체가있는 매우 복잡한 시스템에 대해 수행하는 방법을 모릅니다. 또한 인터뷰에 응한 대부분의 사람들은 경험이 없거나 제한적입니다. 단위 테스트는 SO 군중에서 큰 것으로 보이지만 사용 가능한 작업 풀에서는 특별히 크지 않습니다.

TDD는 별도의 주제입니다. 우리는 TDD에 도덕적으로 반대합니다. 우리는 카우보이 코더는 아니지만 이것이 프로젝트의 창의성과 유연성을 저해한다고 믿습니다. 또한 단위 테스트 기능을 작성한 코더가 있다는 것은 의미가 없습니다. 내가 뭔가를 할 때, 나는 내가 생각할 수있는 모든 엣지 케이스로 코딩한다. 내가 필요로하는 것은 내가 놓쳤을 수도있는 것들을 찾기위한 또 다른 두뇌입니다. 우리는 그것을 가지고 있지 않습니다. 팀은 작고 독립적입니다.

요컨대, 우리는 TDD를 믿지 않지만 단위 테스트를 원합니다. 우리는 그렇게 할 경험이 없으며 쉽게 찾을 수 없습니다.


제가 일하는 곳에 충분한 코더가 있었을 때, 우리는 페어 프로그래밍을했습니다. 다른 하나가 코딩 된대로 테스트를 작성하는 것이 매우 효과적이라는 것을 알았습니다. 또한 코드에 대한 매우 지능적인 질문으로 이어졌습니다.
Zan Lynx

4
누락 된 것처럼 보이는 TDD의 요점은 모든 에지 케이스를 단위 테스트에 작성한다는 것입니다. 각 경우에 대해 단위 테스트에 어설 션을 작성합니다. 그런 다음 실제 코드가 어설 션에 실패하면 코드에 버그가 있으며 논리를 잘못 구현 한 것입니다. 단위가 작고 어설 션이 단위의 특정 코드를 테스트하므로 논리 오류가있는 위치를 쉽게 찾을 수 있습니다. 중요한 것은 먼저 주장을 작성하는 것입니다. 그런 다음 코드를 전달하십시오. 이 프로세스가 버그 성장을 방해하는 부분을 지적 할 수 있습니까?
Christopher Parker

2
테스트를 먼저 작성하지 않고 단위 테스트를 시도하는 것은 매우 어려울 것입니다. 이는 코드가 소급 적으로 테스트 하네스에 들어가기 어렵 기 때문입니다. 이것이 테스트 우선의 주요 이점 중 하나입니다. 테스트가 디자인을 주도했기 때문에 디자인을 처음부터 테스트 할 수 있습니다.
Alan Christensen

3
단위 테스트를 "어떻게할지"모르지만 TDD가 창의성과 유연성을 저해한다고 믿으려면 어떻게해야합니까?
jcorcoran 2014 년

1
@Steve 6 년이 지난 지금까지 단위 테스트 (또는 TDD)를 도입했는지 여부와 계속 진행했는지 여부를 아는 것이 좋습니다.
Luke Puplett 2015-04-22

11

모범 사례에 따라 실제로 아무것도하지 않는 회사가 많이 있습니다. 코드 리뷰도, 단위 테스트도, 테스트 계획도, 아무것도 없습니다.

지속적 통합 플랫폼을 사용하고 단위 테스트를 개발할 수있는 기회로 삼으십시오! 힘을 높이는 동시에 코드의 품질과 안정성을 높이는 쉬운 방법

편집 : 이유는 그들이 CI 및 단위 테스트를 매우 쉽게 만드는 현재 도구를 알지 못한다고 생각합니다.


저는 일반적으로 이와 같은 정책 결정에 영향을 미치지 않는 위치에 있습니다. 나는위원회 위원장들에 의해 기각되는 하급 상원 의원입니다.
jcollum

Hudson을 시작하고 단위 테스트를 작성하는 데 몇 분 정도 걸립니다. 단위 테스트가 이미 "TODO"목록에 있으면 작업을 수행하는 것입니다. 위원회는 종종 멋진 차트와 이미지에 깊은 인상을 받기 때문에 Hudson의 예쁜 트렌드 그래프를 보여줍니다.)
Allen Rice

네! 진실을 위해 들어 봅시다. 우리 개발자가 모범 사례에 대해 열심히 노력하는 데에도 불구하고 항상 실제 세계에서 사용되는 것은 아닙니다. 정말 유감입니다.
NeedHack

6

게으름이 잘못된 단위 테스트의 근본 원인이라고 생각하지 않습니다. 우리 회사의 경우 시간 제약과 "완성"태도는 단위 테스트를 수행하는 데 가장 큰 방해 요소입니다. 또한 시스템이 실패하는 곳은 "단위 수준"이 아니라 통합 수준 (서비스, 데이터베이스 액세스, 테스트를 위해 특정 데이터가 필요한 복잡한 쿼리)에 더 가깝습니다. 이러한 것들은 테스트하기가 더 어렵고 기능을 수행 할 시간이 거의 없다면 유용한 테스트를 동시에 수행 할 시간이 없을 것입니다.


이것은 일반적입니다. 나는 당신이 미래에 그것을 변경할 것이라고 생각한다면 그것이 변경된 후에 작동하는지 확인하는 테스트를 가져야한다는 주장이라고 생각합니다.
jcollum

6

단위 테스트는 컴파일러와 마찬가지로 코드 개발 워크 플로의 자연스러운 부분이어야합니다.

그러나이를 위해서는 단위 테스트의 이점에 대해 경영진을 교육해야합니다. 그러나 주니어 개발자는 그러한 영향을 미칠 가능성이 상대적으로 낮습니다. 따라서 회사가 단위 테스트를지지하는지 여부는 단위 테스트를 옹호하는 수석 개발자 또는 아키텍트가 있는지 여부에 따라 다릅니다.

나는 이것이 "누락 된 것이 무엇이고 왜 더 많은 회사가 단위 테스트를하지 않는가"라는 질문에 대한 답이라고 생각합니다 . :-)


1
+1은 "코드 개발 워크 플로의 자연스러운 부분이어야 함"입니다. 모든 전문 개발자는 공식 프로세스에 관계없이 자체 단위 테스트를 수행해야합니다 . 이 문제에 대한 유일한 정당한 주장은 단위 의 정의입니다 .
Dunk

1
@Dunk "단위"를 정의하지 않으면 "전문 개발자는 자체 테스트를 수행해야합니다"라고만 말하는 것입니다.
ChrisW

1
@ChrisW-예, 전문 개발자는 자체 테스트를 수행해야합니다. 개발자가 제대로 작동한다고 확신 할만큼 충분히 테스트하지 않은 코드를 제출할 이유가 없습니다. 불행히도 이것은 많은 개발자에게 요구하기에는 너무 많은 것 같습니다.
Dunk

1
단위의 정의가 정당한 주장이라고 말할 때 나는 단위의 세분성에 대해 이야기하고 있습니다. 수업인가요? 수업 모음인가요? 구성 요소입니까? 클래스 수준 단위 테스트 (일부 예외 포함)가 혜택보다 더 많은 비용이 들고 의미없는 테스트가 많이 발생한다고 생각합니다.
Dunk

다른 사람들이이 스레드에서 지적했습니다. 반면에 하나의 단위로 함께 작동하는 클래스 모음을 정의하면 자동화 된 테스트를 수행 할 수 있으며 테스트는 일반적으로 더 높은 수준의 필수 기능에 더 집중할 수 있기 때문에 더 의미가 있습니다.
Dunk

5

이미 언급 한 몇 가지의 조합 일 것입니다. TDD의 비용 절감을 측정하기가 어렵습니다. IT를 아웃소싱하려는 경우, 직원이있는 직원에 대해 연간 지불하는 비용과 계약 비용을 보여줄 수 있습니다. 매우 구체적입니다. "오,이 테스트에서 버그가 발견되었는데 디버그 및 수정에 4 시간이 걸렸습니다 ..."?


버그가 디버그하고 수정하는 데 걸리는 시간을 어떻게 추측 할 수 있습니까? 일반적으로 디버깅은 내 경험보다 무작위 적입니다. 문제가 어디인지 아닌지 알 수 있습니다.
Dominic Rodger

1
그렇기 때문에 테스트의 이점을 정량화하기가 너무 어렵다고 말했습니다.
Ovi Tisler

5

일부 장소에서 사용하지 않는 이유는 단순히 시작하고 계속하는 데 많은 작업이 필요하기 때문입니다. 단위 테스트를 작성하는 데 실제 기능을 작성하는 것만 큼 많은 시간이 걸린다는 사실은 개발자의 생산성을 절반으로 줄이는 것과 같은 일부 관리자에게 보입니다.

또한 팀 (또는 누군가)을 구축하여 인프라를 제자리에 배치하고 유지 관리해야합니다.

로 그리고 앨런이 말한다, 많은 장소는 단순히 모범 사례를 사용하지 않는 - 그들은 단지 가시적 인 무언가를보고 싶어요.


5

내가 본 바에 따르면 많은 회사가 실제로 단위 테스트가 불가능한 거대하고 고도로 결합 된 코드 기반을 가지고 있습니다. 그들은 또한 적절한 테스트 가능한 요구 사항이 없기 때문에 단위 테스트는 "구축 된"사실상의 요구 사항에 대해 테스트합니다.


5

프로그래머는 그냥 시작해야한다고 생각합니다. 시작하기위한 몇 가지 간단한 테스트는 개발의 일부로 정당화하기 쉽습니다.

단위 테스트와 같은 것은 빠른 디버깅을 위해 거의 항상 필요합니다. 올바른 입력을 정렬하고, 디버거 중단 점을 설정하고, 애플리케이션을 시작하는 것보다 테스트를 시작하는 것이 얼마나 빠른지 설명하십시오.

코드에 테스트를 문서화하십시오. 테스트의 위치와 실행 방법을 설명하는 주석을 넣으십시오. 미래의 프로그래머는 그것을 보게 될 것이며, 테스트가 확산되기를 바랍니다!


4

단위 테스트는 대부분의 사람들이 들어 본 블랙 박스 용어 중 하나이지만 단위 테스트를 정확히 구성하는 것이 무엇인지, 어디서 시작해야하는지, 작성하는 방법, 실제로 테스트를 실행하는 방법, 정확히 무엇을 테스트해야하는지 등을 모릅니다. . 등.

많은 경우, 불확실한 개발자가 단순히 "엔터프라이즈 수준 개발자"에게만 필요한 장식이나 불필요한 것으로 무시하는 것이 더 쉽습니다.


4

저는 단위 테스트의 열렬한 팬이며 다양한 클라이언트 유형을위한 계약 개발 프로젝트를 수행하는 회사의 파트너이기도합니다. 한 달 안에 다양한 크기의 3 ~ 4 개의 프로젝트를 다루겠습니다.

프로젝트가 일회성으로 보일 것 같으면 단위 테스트가 내 비즈니스에 도움이되지 않기 때문에 단위 테스트에 크게 투자하지 않을 것입니다. 이러한 유형의 프로젝트에서는 불확실하거나 익숙하지 않거나 자주 변경 될 수있는 항목 (예 : 내가 제어하지 않는 데이터 소스에 대한 파서)을 단위 테스트 할 것입니다.

내가 알고있는 무언가를 구축하는 경우 수명이 길고, 더 큰 작업이며, 여러 번 반복하여 작업하거나, 오류가 발생하면 클라이언트에게 큰 영향을 미칠 것입니다. , 나는 더 많은 단위 테스트에 투자 할 것입니다. 다시 테스트의 우선 순위는 불확실하거나 익숙하지 않거나 변경되는 코드를 중심으로합니다.

단위 테스트는 작업의 복잡성과 성과가 있을지 여부를 중심으로 진행되어야한다고 생각합니다. 사용되지 않을 추가 코드를 작성하는 것은 의미가 없습니다.


3

내 경험상 그것은 실제로 당신이 작성하는 소프트웨어에 달려 있습니다. UI에 대한 단위 테스트를 작성하는 것이 매우 어렵다는 것을 알았습니다. 나는 명확한 인 / 아웃이있는 시스템 부분에 대해서만 단위 테스트를 사용합니다.


나는 동의한다. 모델 / 뷰 / 컨트롤러를 사용하는 경우 모델과 컨트롤러를 단위 테스트하는 것이 좋습니다. UI는 거의 항상 사람이 가장 잘 테스트합니다.
Zan Lynx

3

단위 테스트가 그리워요.

이것은 회사가 단위 테스트를 채택 할 충분한 이유 가 아닙니다 .

충분한 이유는 "저렴"(및 / 또는 "더 나은") 일 수 있습니다. 이는 단위 테스트에 대해 증명하기가 쉽지 않습니다.

유일한 좋은 이유는 "단위 테스트를 작성하는 것이 개발자의 시간을 최대한 활용하는 것"일 수 있습니다. 이는 IMO를 증명하기가 정말 어렵습니다. 어떤 곳에서는 사실 일 수 있습니다. 일부 소프트웨어에서는 일부 개발자에게는 사실 일 수 있지만 다른 곳에서는 사실이 아닐 수 있습니다.

단위 테스트의 세계를 생각하지 않는 개발자가 많이 있습니다. 다른 형태의 테스트 (예 : 자동화 된 통합 / 기능 테스트)가 더 저렴하고 가치가 있다고 생각하는 개발자도 있습니다. 단위 테스트를 좋아합니까?


3

물론 이상적인 세계에서는 단위 테스트에 반대 할 수 없습니다.

그러나 단위 테스트 작성 여부는 다음과 같은 여러 가지에 따라 달라집니다.

  • 소프트웨어 사용 방법. 자신만을위한 소프트웨어를 작성하고 있다면 단위 테스트를 작성 하시겠습니까? 아마 아닐 것입니다. 상업적으로 판매 할 사전 패키지 소프트웨어를 작성하고 있다면 아마도 그렇습니다.

  • 얼마나 많은 사람들이 코드를 유지하고 있는지 .... 당신 만 있다면, 코드를 빠르게 실행하는 것만으로도 문제가 없는지 확인하기에 충분하다는 변경을 한 후 충분히 확신 할 수있을 것입니다. 원래 코드를 작성하지 않은 다른 사람들이 이제 코드를 유지해야한다면 단위 테스트를 통해 코드를 업데이트하여 큰 문제를 수정할 때 (분명히 단위 테스트에서 캡처되지 않은) 어떤 것도 깨뜨리지 않았 음을 확신 할 수 있습니다. .

  • 코드 복잡성 : 테스트가 필요한 테스트 코드 만. 한 줄 변수 할당 방법은 테스트가 필요하지 않습니다. 여러 실행 경로가있는 50 줄 메서드는 아마도 가능합니다.

  • 상업적 상업적 고려 사항 : 사실 단위 테스트를 작성하는 것은 그렇게하지 않는 것보다 오래 걸립니다. 상업적 미래가 불확실한 프로토 타입 소프트웨어를 작성하고 있다면, 코드를 빨리 만드는 것, 지금은 충분히 잘 작동하는 것, 더 잘 작동하는 단위 테스트 코드를 2 주 만에받는 것 사이에는 보상이 있습니다. 때로는 소프트웨어가 짧은 선반을 갖고 다음 프로젝트로 넘어갈 지 여부를 신속하게 파악 (소비자 선호도)하는 것이 좋습니다.

다른 사람들이 지적했듯이 테스트는 그것을 작성한 사람만큼 좋습니다.


3

주된 이유는 많은 개발자와 개발 관리자가 단위 테스트가 존재하는지 또는이를 사용하는 방법에 대한 단서가 없기 때문입니다.

두 번째 이유는 이미 일부 품질 표준을 충족하는 코드에서만 단위 테스트를 합리적인 방식으로 사용할 수 있다는 것입니다. 일부 기존 코드베이스가 해당 범주에 속하지 않을 가능성이 있습니다.

세 번째 이유는 게으름 및 / 또는 저렴함입니다.


3

단위 테스트는 테스트 가능한 코드를 작성하는 경우에만 유용하기 때문입니다. 그리고 테스트 가능한 코드를 작성하는 것은 어렵습니다. 그리고 사람들은 게 으르거나 싸다.

편집 : "게으른 및 / 또는 저렴"으로 미묘한 "게으른"; 드물게 사람들은 실제로 기술과 능력이 있고 테스트를 작성할 의향이 있지만 수익에 더 직접적인 영향을 미치는 다른 작업이 있습니다.


나는 사람들이 '게으르다'고 생각하지 않는 것을 제외하고는 이것을 찬성합니다. '프로그래밍', 즉 '인기있는 프로그래밍 언어 및 관련 도구, 문서, 교육, 워크 플로 등'은 테스트 가능한 코드를 쉽게 작성할 수있는 방식으로 설계되지 않았습니다. 따라서 테스트 가능한 코드를 작성하려면 항상 추가 작업을 수행해야합니다. 그 시점에서 '이미 작동하기 때문에'보상이 없습니다 (테스트를 먼저 작성하고 나중에 코드를 작성하는 TDD가 실용적입니다). 이것이 현재의 프로그래머뿐만 아니라 코더가 현재 구축하는 '프로그래밍'도구의 작성자를 속이는 인지 적 편견 에 가깝다고 생각하십시오 .
n611x007 2014-08-05

1
예, 물론 때때로 사람들은 값이 싸고 파산하고 더 나은 일을합니다 (또는 정중하게 "만들어야 할 절충안이 있습니다.").이를 반영하도록 편집되었습니다. (저는 게다가 대부분의 코드가 쓸모가 없다는 것을 농담으로 덧붙이려고했습니다. 그래서 테스트도 쓸모가 없습니다; 그러나 그것은 단지 수면의 부족 일뿐입니다;))
phtrivier

2

문제의 일부는 개발자들이 비즈니스 사람들이 동일한 가치를 가지기를 기대하고 "단위 테스트를해야할까요?"에 대한 답에 정말로 신경을 쓴다는 것입니다. 우리는 어셈블리 언어가 아닌 고급 언어를 사용하도록 사전에 비즈니스로부터 승인을받지 않습니다. 일반적으로 작업을 완료하는 합리적인 방법 일뿐입니다.

요점은 우리 가 전화를 걸 자격이있는 유일한 사람이라는 것입니다 (우리 모두가 주제에 대해 동일한 지식을 가지고 있다고 말하는 것은 아닙니다). 또한 팀이 정책 상 단위 테스트 (또는 오늘의 방법 이름 지정)를 수행하지 않더라도 일반적으로 수행 수 없다는 의미는 아닙니다 .

진실은 우리가 너무 세분화하여 수행하는 대부분의 작업에 대한 ROI를 실제로 증명할 수 없다는 것입니다. 왜 단위 테스트가이 비합리적 / 비 전형적인 증명 표준에 부합하는지는 나를 넘어선 다 ...


그러나 관리와 관련된 관리가 필요합니다. 공동 개발자를 참여시켜야하고이를위한 가장 좋은 방법은 위에서 아래로 요구 사항이되는 것입니다.
John

2

사람들은 게으르고 강제 될 때만 변화를 받아들입니다.


2

내 2 센트 :

  • 약간의 교육과 훈련이 필요하지만 새로운 졸업생은 이미 적절한 지식을 갖추고 있습니다.
  • 더 나은 도구를 사용하면 테스트 오버 헤드를 줄일 수 있으며 이러한 문제도 발생합니다 (리팩토링 등).

그래서 그것은 시간 문제입니다.

Bob Martin이 다음과 같이 주장하는 Martin-Coplien 논쟁이 있습니다.

"현재 개발자가 단위 테스트에서 실행하지 않은 코드 라인을 제공하는 것은 무책임합니다."

[ http://www.infoq.com/interviews/coplien-martin-tdd]


2
저는 코드의 모든 줄이 단위 테스트에 포함 된 복잡한 실제 시스템의 존재를 믿지 않습니다.
quant_dev

2

테스트에서 모든 사람을 판매하려면 다음을 수행하십시오.

  1. 여러 테스트를 작성하십시오.
  2. 코드를 변경하고 테스트에 실패한 다른 개발자에게 알립니다.
  3. 그들은 코드를 수정할 것입니다.
  4. 이제 특정 버그없이 릴리스 할 수 있습니다.

관리자조차도 이것을 이해할 수 있습니다.


단위 테스트로 인해 릴리스에 버그가없는 것은 아닙니다. 버그 수를 줄일 수 있지만 테스트로 인해 생산에 /하지 않은 / 버그 수를 측정하는 것은 매우 어렵습니다.

나는 경영진이 새로운 기능을 코딩 할 수있을 때 누군가가 많은 테스트를 작성하는 것에 만족할 것이라는 것을 모릅니다. 그들이 TDD와 함께하지 않으면 작성하지 않은 코드를 다루는 테스트를 작성하는 데 어려움을 겪을 가능성이 있습니다.
jcollum

@jcollum 평소와 같이 비용 / 수익 비율에 따라 다릅니다.
quant_dev

2

많은 웹 사이트가 제대로 작성되지 않은 것과 같은 이유로 기업은 단위 테스트를 수행하지 않습니다. 무지와 사람들은 오래된 습관을 고수합니다. 우리 회사에서는 단위 테스트 (Nunit 및 Typemock 사용 )를 시작했기 때문에 더 높은 코드 적용 범위에 도달하고 출시 기간이 단축되었습니다.


2

대부분의 좋은 아이디어와 마찬가지로 채택은 아이디어의 품질보다는 조직의 경로 의존성과 더 관련이 있습니다.

제품을 출하 한 대부분의 회사에서 상당한 수준의 QA 책임자와 함께 실질적인 QA 부서가 만들어졌습니다. 테스트는 QA 팀의 핵심입니다.

QA 팀은 일반적으로 QA 팀에 강력한 코더를 배치하지 않기 때문에 단위 테스트 코드를 작성하지 않을 것입니다.

프로그래밍 팀은 QA 팀과 충돌을 일으키기 때문에 테스트 코드 작성을 꺼립니다.

QA가 별도의 직무로 분리되지 않은 그룹에서 단위 테스트에 대한 더 많은 관심과 채택을 보았습니다.


1

단위 테스트를 작성하고 업데이트하는 데 비용이 많이 듭니다. 대부분의 회사 이전 소프트웨어에는 단위 테스트가 없으며 작성하는 데 너무 많은 비용이 듭니다. 그래서 그들은 그것을하지 않고 개발 프로세스에 시간을 추가하므로 새로운 기능에도 추가하지 않습니다.


ROI에 대한 링크를 읽어야합니다.
jcollum

1

대부분의 회사는 쓸모가 없습니다. 분명히 당신 (또는 내가) 일하는 사람이 아닙니다.


이것은 질문에 대한 답을 제공하지 않습니다. 작성자에게 비판이나 설명을 요청하려면 게시물 아래에 댓글을 남겨주세요.
AlexVogel 2014 년

Q : "왜 더 많은 회사가 [단위 테스트]를 수행하지 않습니까?" A : "대부분의 회사는 쓸모가 없기 때문입니다." 대답처럼 들리 네요 ...
Roger Lipscombe 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.