너무 많은 오버 헤드 / 유지 보수 부담이 있습니까?


24

따라서 테스트의 가치를 실제로 이해하지 못하는 사람들로부터 여러 번 들었습니다. 시작하기 위해, 나는 민첩하고 테스트의 추종자입니다 ...

최근에 현재 팀이 단위 테스트를 수행하지 않는 제품 다시 쓰기에 대해 TDD를 수행하는 것에 대한 토론이 있었으며 아마도 의존성 주입 기술이나 테스트 패턴 / 디자인에 대해 들어 본 적이 없습니다. 코드를 청소하십시오).

이제이 제품의 재 작성에 대한 전적인 책임이 있으며 TDD 방식으로 제품을 사용하면 유지 관리의 악몽이되어 팀이 유지 관리 할 수 ​​없게된다고 들었습니다. 또한 웹 기반이 아닌 프론트 엔드 응용 프로그램이므로 비즈니스 드라이브가 변경됨에 따라 (물론 개선을 의미하는 변경으로 인해) 테스트 추가가 의미가 없습니다. 미래의 프로젝트는 그것들을 유지하지 못하고 그들이 고치는 등의 부담이 더 커질 것입니다.

현재 테스트 경험이없는 팀의 TDD는 좋지 않다는 것을 이해할 수 있지만,이 경우에 내 주장은 내 주위 사람들에게 연습을 가르 칠 수 있다는 것입니다. 소프트웨어. TDD를 사용하여 소프트웨어를 제작하고 유지 관리 팀에 소프트웨어를 넘겨주는 모든 테스트를 버려도 TDD를 전혀 사용하지 않는 것보다 더 나은 방법일까요?

들어 본 적이없는 팀을 위해 대부분의 프로젝트에서 TDD를 수행하는 것에 대해 언급 한 것처럼 격추되었습니다. "인터페이스"와 이상한 DI 생성자에 대한 생각은 그들을 두려워합니다.

TDD와 사람들에 대한 나의 접근 방식을 판매하려는 매우 짧은 대화가 무엇인지 나를 도와 줄 수 있습니까? 나는 보통 회사 / 팀에게 무릎을 꿇기 전에 논쟁의 여지가 매우 짧다.


3
운영! 서두르다! 왜 자동화 테스트가 장기적으로 삶을 편하게 할 수 있는지 이해하지 못하는 사람은 어디에서든 머리를 제거해야합니다.
MattC

6
@MattC TDD! = 자동 테스트
Nemanja Trifunovic

@Nemanja Trifunovic : 어 ... 누가 수동 테스트를 사용하여 TDD를 연습합니까? "앱을 시작했지만 클릭 할 버튼이 없습니다!?" "예. 빨강, 초록, 리팩터링의 빨간색입니다!"
Steven Evers

2
@SnOrfus : TDD가없는 자동화 된 테스트가 있습니다. 몇 가지 예 : 자동 통합 테스트, 회귀 테스트, 스트레스 테스트.
Nemanja Trifunovic

2
@Martin, 나는 당신이 끝낸 일과 장기적으로 당신에게 얼마나 효과가 있었는지에 대한 후속 의견 (또는 블로그 게시물)에 관심이 있습니다.
StevenV

답변:


36

TDD 방식으로 시도하면 유지 보수의 악몽이되어 팀이 유지할 수 없습니다.

당신은 그 주장을 이길 수 없습니다. 그들은 이것을 만들고 있습니다. 슬프게도, 당신은 사실도 없습니다. 귀하가 제공 한 모든 예는 이의를 제기 할 수 있습니다.

이 지점을 만드는 유일한 방법은 유지 관리 비용이 저렴한 코드를 사용하는 것입니다.

또한 웹 기반이 아닌 프론트 엔드 응용 프로그램이므로 테스트 추가는 의미가 없습니다.

모두가 이것을 말합니다. 또한 부분적으로 사실 일 수도 있습니다. 응용 프로그램이 합리적으로 잘 설계된 경우 프런트 엔드는 거의 수행하지 않습니다.

그러나 응용 프로그램이 제대로 설계되지 않으면 프런트 엔드가 너무 많아 테스트하기가 어렵습니다. 이것은 테스트 문제가 아니라 디자인 문제입니다.

비즈니스 드라이브가 변경됨에 따라 (물론 변경으로 인해 테스트가 오래됨) 향후 프로젝트에 참여하는 다른 개발자는 테스트를 유지하지 않고 수정해야 할 부담이 더 커집니다.

이것은 위와 같은 주장입니다.


당신은 논쟁에서 이길 수 없습니다. 따라서 논쟁하지 마십시오.

"이 제품의 재 작성에 대한 책임은 전적으로 본인에게 있습니다"

이 경우

  1. 어쨌든 테스트를 추가하십시오. 그러나 갈수록 점진적으로 테스트를 추가하십시오. 테스트를 먼저 작성하는 데 오랜 시간을 소비하지 마십시오. 조금 변환하십시오. 조금 테스트하십시오. 조금 더 변환하십시오. 조금 더 시험해보십시오.

  2. 누군가가 테스트가 작동하고 있음을 알아낼 때까지 이러한 테스트를 사용하십시오.

나는 C ++에서 Java 로의 재 작성에 대해 같은 주장을했고 그들이하지 말라고해도 테스트를 간단하게 사용했습니다.

나는 매우 빨리 발전하고 있었다. 올바른 결과의 구체적인 예를 요청하여 스프레드 시트로 보냈습니다. 스프레드 시트를 unittest.TestCase (말하지 않고)로 바꾸고 테스트에 사용했습니다.

사용자 승인 테스트를 받았을 때 실수가 발견되면 수락 테스트 중에 발견 된 문제를 다루기 위해 예제를 포함한 스프레드 시트를 검토, 수정 및 확장하도록 요청했습니다. 수정 된 스프레드 시트를 unittest.TestCase (말하지 않고)로 바꾸어 테스트에 사용했습니다.

왜 당신이 성공했는지 자세히 필요가 없습니다 .

성공하십시오.


S.Lott :)에서 매우 고무적인 반응. 회사 건축가가 내가 "불필요한 오버 헤드를 생성 할 것"이라는 말을 들으면 참 힘들었습니다. 나는 미지의 사람들과 함께 프로젝트를 지연시키는 것으로 볼 수 없었습니다. 궁극적으로 프로젝트가 늦게 도착했을 때, 그들은 내가 수행 한 테스트를 손가락으로 가리켜 계약을 종료 할 수있었습니다. 당신이 말했듯이, 나중에 그것이 어떻게 도움이되는지 증명하는 데 몰래 들어가는 것이 올바른 방법 일 것입니다. 당신은 논쟁의 관점에서 절대적으로 옳습니다. 나는 근거가 없습니다.
Martin Blore

프론트 엔드가 디자인 문제를 너무 많이 일으키는 이유는 무엇입니까? 요즘에는 AJAX와 같은 많은 기술이 프런트 엔드에서 많은 일을합니다.
卢 声 远 Shengyuan Lu

@ 卢 声 远 Shengyuan Lu : GUI "보기"를 테스트하기가 어렵습니다. 글꼴과 색상을 테스트 할 수 있습니다. 그러나 브라우저 문제로 인해 자동 테스트를 통해 정확한 배치와 크기를 테스트하기가 매우 어렵습니다.
S.Lott

@Martin Blore : "아니요." 정확하게. 테스팅이 어떻게 든 마술처럼 위험을 가할 것이라고 말하는 사람은 미쳤다. 어쨌든 테스트해야합니다. 피할 수 없습니다. TDD를 사용하여 잘 테스트하거나 잘못 테스트 할 수 있습니다. 열악하고 우연한 테스트를 계획하는 것은 나에게 더 위험 해 보인다. 그러나 "나이 사이어들"이 실제 경험을 갖기 전까지는 기본 토론이 없습니다.
S.Lott

5

실제 사람들의 입장에서 TDD의 가치를 실연적으로 보여줄 수 있습니다. 예를 들어 최근 버그를 예로 들어 100 %이 버그가 다시 나타나지 않도록 유닛 테스트를 구성하는 방법을 보여줍니다. 그리고 비슷한 버그 의 전체 클래스 가 나타나지 않도록하기 위해 수십 개의 단위 테스트를 작성하십시오 (누군가는 코드에서 몇 가지 휴면 버그를 발견 할 수도 있음).

이것이 단기적으로 효과가 없다면, TDD를 수행하고 자신의 작업에 부지런히 단위 테스트를 작성하는 것만으로 더 오래 일해야합니다. 그런 다음 반년 정도 지나면 (귀하의 환경에서 가능한 경우) 몇 가지 간단한 통계를 컴파일하여 다른 개발자가 수행 한 코드 / 태스크의 버그 비율을 비교합니다 (팀원의 소외를 막기 위해 애니메이션화 됨). 코드에서 발견 된 버그가 다른 버그보다 훨씬 적다는 것을 지적 할 수 있다면 경영진과 동료 개발자 모두에게 판매 할 수있는 장점이 있습니다.


피터, 좋은 생각이야. 고마워. 현재 프로젝트에는 테스트 팀이 있으므로 마일스톤 릴리스 등에서 발견 된 버그를 쉽게 캡처 할 수 있습니다.
Martin Blore

3

TDD는 이론적으로는 좋은 일이지만, 추가되는 모든 항목에 대한 테스트를 업데이트하지 않는 한 그다지 중요하지 않습니다. 테스트가 업데이트되지 않은 코드! 결과적으로,이를 수행하기에는 너무 많은 비용이들 수 있습니다. 해당 코드를 작업하는 유일한 개발자는 아닙니다.

클라이언트에는 테스트 팀이 있습니다. 글쎄, 개발자로부터 테스터로 테스트 부담을 옮기는 데 아무런 문제가 없습니다. 결국에는 그들이 거기에 있고, 테스트를 통해 버그를 발견하면 (많은 자동화 된 테스트 도구)를 사용하면 레벨에서 단위 테스트를 작성하는 데 거의 도움이되지 않습니다. 버그를 찾는 데 시간이 조금 더 걸리지 만 테스트에서 수행하지 못한 성가신 "통합"버그를 찾을 수 있습니다.

이것이 그들이 단위 테스트를 신경 쓰지 않는 이유입니다.

마지막으로, TDD는 새로운 것이 었습니다. 제가 젊은이 였을 때 우리는 테스트를 해 본 적이 없으며 작동하는 코드를 작성했습니다. 단위 테스트를 통해 일부 사람들은 따뜻하고 모호한 느낌을받을 수 있지만 올바른 코드를 요구하지는 않습니다.

추신. 추상화 계층을 비판하는 또 다른 질문이 있습니다. 여기서 DI 생성자의 부족을 비판합니다! 결정해라 :)


2

넣는대로 모든 것이 매우 빠르게 변하므로 회귀 테스트에 사용될 것이라고 설명하십시오. 누군가가 시스템 시계가 켜져있는 경우에만 호출되는 특정 함수의 10,000,000 회 실행 중 1 회 발생하는 문제를 해결하기 위해 10 년 전에 작성된 코드 라인을 위반했기 때문에 새로운 버그가 발생할 때 많은 두통을 덜어줍니다. 클라이언트가 서버 시스템 시계보다 3 분 이상 차이가납니다. 버그가있는 소프트웨어로 인해 얼마나 많은 고객을 잃을 수 있는지 물어보십시오.


2

개발 중 X, 10X 테스트 중 및 100X 배포 후 버그를 찾는다는 점을 지적하십시오. 특정 모듈에서 TDD를 구현하는 곳에서 파일럿 테스트를 수행 할 수 있는지 확인한 다음 개발, 테스트, 배포 및 지원되는 다른 모듈과 비교하십시오. 적절한 데이터가 주어지면 TDD 모듈에서 코드를 작성하는 데 얼마나 적은 노력이 사용되었는지 보여줄 수 있어야합니다. 행운을 빕니다.


2

예, 테스트를 유지하는 것은 부담입니다. 테스트 데이터를 업데이트하고 테스트 데이터를 업데이트하면 시간이 많이 걸립니다.

대안-수동으로 테스트, 회귀 버그 수정, 코드 작동 여부를 몇 초 안에 알 수 없으므로 비용이 훨씬 많이 듭니다.


2
나는 이것이 TDD가 시간 낭비이고 불필요한 오버 헤드라고 주장하는 나이가 많은 사람들에게 가장 중요한 포인트 중 하나라고 생각합니다. TDD에 시간이 걸리지 않습니다. 그것은 미래의 비용이 더 큰 것을 막는 투자라는 사실입니다.
sara

2

잘 테스트는 부담이지만 휴대하기에 좋은 부담입니다. 생산 문제가 있거나 마이그레이션 중에 상당한 시간을 절약 할 수있는 작업을 미리하는 것이 좋습니다. 부담이 적지 만 항상 시험을 받고 싶지만 그 부담을 갖고 싶습니다.

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