주니어 프로그래머가 테스트를 작성하게 하는 방법은 무엇입니까?[닫은]

StackOverflow https://stackoverflow.com/questions/7252

  •  08-06-2019
  •  | 
  •  

문제

테스트를 충분히 작성하지 못하는 주니어 프로그래머가 있습니다.
두 시간마다 “너 테스트 해봤어?”라고 잔소리를 해야 한다.
우리는 다음을 시도했습니다.

  • 디자인이 심플해진다는 걸 보여주네요
  • 보여주면 결함을 방지할 수 있습니다.
  • 나쁜 프로그래머만이 그렇지 않다는 것을 자존심으로 만드는 것
  • 이번 주말에는 코드에 NULL 참조가 있고 이를 테스트하지 않았기 때문에 팀원 2명이 출근해야 했습니다.

내 작업에는 최고 품질의 안정적인 코드가 필요하며 일반적으로 모든 사람이 '이해'하므로 테스트를 진행할 필요가 없습니다.우리는 그에게 테스트를 작성하게 할 수 있다는 것을 알고 있지만, 유용한 테스트는 당신이 그것에 빠져 있을 때 작성된 테스트라는 것을 모두 알고 있습니다.

더 많은 동기를 알고 있나요?

도움이 되었습니까?

해결책

이것은 다음 중 하나입니다 가장 어려운 일 할 것.사람들을 그것을 얻으십시오.

가끔 주니어 레벨 프로그래머가 '알고' 선배 프로그래머로부터 올바른 기술을 배우도록 돕는 가장 좋은 방법 중 하나는 약간의 페어 프로그래밍을 수행하는 것입니다.

이 시도:다가오는 프로젝트에서는 후배를 자신이나 다른 선임 프로그래머와 짝을 이루십시오.그들은 "운전"(키보드를 치는 사람)과 "코칭"(운전자의 어깨 너머로 바라보며 제안, 실수 등을 지적하는 것)을 번갈아 가며 함께 일해야 합니다.자원 낭비처럼 보일 수도 있지만 다음을 확인할 수 있습니다.

  1. 이 사람들이 함께하면 훨씬 더 빠르고 더 높은 품질의 코드를 생성할 수 있습니다.
  2. 당신의 후배가 그를 올바른 길로 인도하는 선배와 함께 "해낼" 만큼 충분히 배운다면(예:"좋아, 이제 계속하기 전에 이 기능에 대한 테스트를 작성해 보겠습니다.") 이는 귀하가 투입한 리소스의 가치가 충분히 있을 것입니다.

어쩌면 당신의 그룹에 누군가가 단위 테스트 101 Kate Rhodes의 프레젠테이션에 따르면, 잘 전달된다면 사람들이 테스트에 대해 흥미를 갖도록 하는 좋은 방법이라고 생각합니다.

당신이 할 수 있는 또 다른 일은 Jr.를 갖는 것입니다.개발자는 볼링 게임 카타 테스트 주도 개발을 배우는 데 도움이 될 것입니다.Java로 되어 있지만 어떤 언어에도 쉽게 적용할 수 있습니다.

다른 팁

모든 커밋 전에 코드 검토를 수행하고(1분 동안 "이 변수 이름을 변경했습니다"라도) 코드 검토의 일부로 모든 단위 테스트를 검토합니다.

테스트가 완료될 때까지 커밋을 승인하지 마세요.

(또한 - 그의 작업이 테스트되지 않았다면 애초에 왜 프로덕션 빌드에 있었습니까?테스트되지 않은 경우 들여 보내지 마십시오. 그러면 주말에 일할 필요가 없습니다)

나는 내가 발견하고 수정하는 모든 버그를 테스트로 표현해야 한다고 주장하기 시작했습니다.

  1. "흠, 그건 아닌데..."
  2. 가능한 문제 찾기
  3. 테스트를 작성하고 코드가 실패했음을 보여줍니다.
  4. 문제를 해결
  5. 새 코드가 통과했음을 보여줍니다.
  6. 원래 문제가 지속되면 반복

나는 작업을 진행하는 동안에도 이 작업을 수행하려고 노력하며 부분적인 테스트 스위트가 이미 마련되어 있는 상태에서 거의 동시에 완료됩니다.

(저는 상업용 프로그래밍 환경에 살고 있지 않으며 특정 프로젝트를 작업하는 유일한 코더인 경우가 많습니다.)

내가 이름이...인 모의 프로그래머라고 상상해 보세요.마르코.제가 학교를 졸업한 지 얼마 되지 않아서 실제로 시험을 치를 필요가 전혀 없었다고 상상해 보세요.내가 실제로 이것을 강요하거나 요구하지 않는 회사에서 일한다고 상상해 보세요.좋아요?좋은!이제 회사가 테스트 사용으로 전환하고 있으며 이에 맞춰 저를 연결하려고 노력하고 있다고 상상해보십시오.지금까지 언급된 항목들에 대해서는 마치 아무런 조사도 하지 않은 것처럼 다소 으스스한 반응을 보이겠습니다.

제작자와 함께 시작해 보겠습니다.

디자인이 단순해진다는 것을 보여줍니다.

어떻게 하면 더 많이 쓰고 일을 더 단순하게 만들 수 있을까요?이제 더 많은 사례를 확보하는 등의 조치를 계속 지켜봐야 할 것입니다.나에게 물어 보면 더 복잡해집니다.자세한 내용을 알려주십시오.

표시하면 결함을 예방할 수 있습니다.

나는 그것을 안다.이것이 테스트라고 불리는 이유입니다.내 코드는 양호하고 문제가 있는지 확인했기 때문에 해당 테스트가 어디에 도움이 될지 모르겠습니다.

나쁜 프로그래머만이 그러지 않는다고 말하는 것을 자존심으로 만드는 것입니다.

아, 내가 중고 테스트를 많이 하지 않는다고 해서 내가 나쁜 프로그래머라고 생각하는군요.나는 당신에게 모욕감을 느꼈고 확실히 짜증이 났습니다.나는 말보다 도움과 지원을 원합니다.

@저스틴 스탠다드:새로운 프로젝트를 시작할 때 후배를 자신이나 다른 선임 프로그래머와 짝을 이루세요.

아, 이건 너무 중요해서 일이 어떻게 진행되는지 확인하고 일이 어떻게 진행되는지 확인하는 데 자원이 소비될 것입니다.이는 도움이 되며 더 많은 작업을 시작할 수도 있습니다.

@저스틴 스탠다드:읽다 단위 테스트 101 케이트 로즈의 프레젠테이션.

아, 정말 흥미로운 프레젠테이션이었고 테스트에 대해 생각하게 만들었습니다.제가 고려해야 할 몇 가지 사항을 망치게 되었고, 제 견해가 조금 흔들렸을 수도 있습니다.

나는 이것이 일을 수행하는 올바른 방법이라고 생각하는 데 도움이 되는 더 설득력 있는 기사와 기타 도구를 보고 싶습니다.

@도미닉 쿠니:시간을 내어 테스트 기술을 공유해 보세요.

아, 이것은 기술에 관해 나에게 기대되는 것이 무엇인지 이해하는 데 도움이 되고, 내 지식 가방에 다시 사용할 수 있는 더 많은 항목을 넣습니다.

@도미닉 쿠니:질문, 예제 및 책에 답하십시오.

질문에 대답할 수 있는 사람(사람)이 있으면 도움이 되고, 시도할 가능성이 더 높아질 수 있습니다.좋은 예는 훌륭하고, 목표로 삼을 것과 참고할 점을 제공합니다.이와 직접적으로 관련된 책은 훌륭한 참고 자료입니다.

@아담 헤일:서프라이즈 리뷰.

말하자면, 당신은 내가 전혀 준비하지 못한 일을 촉발시켰습니다.불편하지만 최선을 다하겠습니다.이제 이런 일이 다시 일어날까봐 두렵고 약간 불안할 것입니다. 감사합니다.그러나 겁주는 전술이 효과가 있었을 수도 있지만 비용이 발생합니다.그러나 다른 방법이 작동하지 않으면 이것이 필요한 푸시일 수 있습니다.

@리트미스:항목은 테스트 사례가 있는 경우에만 완료된 것으로 간주됩니다.

아, 흥미롭네요.나는 지금 이 일을 정말로 해야 한다는 것을 안다. 그렇지 않으면 나는 아무것도 완료하지 못할 것이다.이것은 의미가 있습니다.

@조모리스:제거 / 희생.

눈부심, 눈부심, 눈부심 - 배울 수 있는 기회가 있고, 지원과 지원을 통해 팀에서 매우 중요하고 기능적인 부분이 될 수 있습니다.이것은 현재 내 장애 중 하나이지만 오래 가지 않을 것입니다.그러나 이해하지 못하면 갈 것이라는 것을 이해합니다.나는 그것을 얻을 것이라고 생각합니다.


결국 이 모든 일에는 우리 팀의 지원이 큰 역할을 했습니다.누군가가 시간을 내어 도움을 주고, 내가 좋은 습관을 들이도록 돕는 것은 언제나 환영입니다.그렇다면 나중에 좋은 지원망을 갖는 것이 좋을 것입니다.나중에 누군가가 몇 번 와서 코드를 검토하고 모든 것이 어떻게 진행되는지 검토하는 것이 아니라 친근한 방문으로서 항상 감사할 것입니다.

추론, 준비, 교육, 후속 조치, 지원.

나는 많은 프로그래머들이 합리적인 수준에서 테스트의 가치를 인식하고 있음을 발견했습니다."예, 테스트해야 한다는 것은 알지만 이 작업을 빨리 완료해야 합니다."라는 말을 들어본 적이 있다면 무슨 뜻인지 알 것입니다.그러나 감정적인 측면에서는 실제 코드를 작성할 때만 뭔가를 완료했다고 느낍니다.

그렇다면 목표는 테스트가 실제로는 오직 무언가가 "완료"된 시기를 측정하여 테스트를 작성하려는 본질적인 동기를 부여하는 방법입니다.

하지만 그것이 예상보다 훨씬 더 어려울 것 같아 걱정됩니다."정말 급해요. 나중에 다시 작성/리팩터링한 다음 테스트를 추가하겠습니다."라는 변명을 많이 듣게 될 것입니다. 물론 후속 조치는 결코 일어나지 않습니다. '답장 다음주에도 마찬가지로 바쁘다.

내가 할 일은 다음과 같습니다.

  • 첫 외출..."우리는 이 프로젝트를 공동으로 할 예정이다.나는 테스트를 작성할 것이고 당신은 코드를 작성하게 될 것입니다.내가 테스트를 어떻게 작성하는지 주의 깊게 살펴보세요. 왜냐하면 그것이 우리가 여기서 일을 하는 방식이고 그것이 내가 여러분에게 기대하는 것이기 때문입니다."

  • 그에 이어..."끝났어?엄청난!먼저 개발을 주도하는 테스트를 살펴보겠습니다.아, 시험은 없나요?작업이 완료되면 알려주시면 코드 검토 일정을 다시 잡아드리겠습니다.테스트를 공식화하는 데 도움이 필요한 경우 알려주시면 도와드리겠습니다."

주니어 프로그래머로서 저는 여전히 테스트 작성 습관을 들이기 위해 노력하고 있습니다.분명히 새로운 습관을 들이는 것은 쉽지 않지만 이것이 나에게 도움이 될 것이라고 생각하면서 코드 검토 및 코칭/페어 프로그래밍에 대한 의견을 +1해야 합니다.

테스트의 장기적인 목적을 강조하는 것도 가치가 있을 수 있습니다.어제 작동했던 작업이 오늘도, 다음 주, 다음 달에도 작동하는지 확인합니다.내가 이렇게 말하는 이유는 답변을 훑어볼 때 그 내용이 언급된 것을 보지 못했기 때문입니다.

코드 검토를 할 때(그렇게 하기로 결정했다면) 젊은 개발자가 자신을 실망시키는 것이 아니라, 코드를 더 좋게 만드는 것. 그렇게 하면 그의 자신감이 손상될 가능성이 줄어들기 때문입니다.그리고 그것은 중요합니다.반면에, 당신이 아는 것이 얼마나 적은지 아는 것도 마찬가지입니다.

물론 저는 전혀 아는 바가 없습니다.하지만 그 말이 도움이 되었기를 바랍니다.

편집하다:[저스틴 스탠다드]

자신을 실망시키지 마십시오. 당신이 해야 할 말은 거의 옳습니다.

코드 검토에 대한 귀하의 요점은 다음과 같습니다.당신이 발견하게 될 것은 주니어 개발자가 그 과정에서 배울 뿐만 아니라 리뷰어도 배울 것이라는 것입니다.코드 검토에 참여하는 모든 사람은 협업 프로세스로 만드는지 배웁니다.

솔직히 넣어야 한다면 저것 그 사람이 뭔가를 하도록 많은 노력을 기울인다면 그 사람이 팀에 적합하지 않을 수도 있고 떠나야 할 수도 있다는 생각을 받아들여야 할 수도 있습니다.자, 이것이 반드시 그를 해고한다는 의미는 아닙니다...이는 회사에서 그의 기술이 더 적합한 다른 곳을 찾는 것을 의미할 수도 있습니다.하지만 다른 곳이 없다면... 무엇을 해야 할지 아실 겁니다.

나는 그 사람도 상당히 신입사원(1년 미만)이고 아마도 최근에 학교를 졸업했다고 가정하고 있습니다. 이 경우 그는 회사 환경에서 일이 어떻게 돌아가는지 익숙하지 않을 수 있습니다.우리 대부분은 대학에서 그런 일을 피할 수 있습니다.

이 경우 내가 찾은 작품 중 하나는 일종의 "새로운 고용 리뷰"를 갖는 것입니다. 당신이 전에 한 번도 해본 적이 없다고해도 중요하지 않습니다 ... 그는 그것을 알지 못할 것입니다.그냥 그를 앉히고 그의 성과를 검토하고 그에게 몇 가지 실제 수치를 보여줄 것이라고 말하십시오. 일반 검토 시트(공식적인 검토 프로세스가 있습니까?)를 가져오고 원하는 경우 제목을 변경하여 보이도록 하십시오. 공식적으로 그에게 그가 어디에 있는지 보여주십시오.테스트를 하지 않는 것이 성능 평가에 부정적인 영향을 미친다는 점을 매우 공식적인 환경에서 보여주면 그는 요점을 이해할 것입니다.당신은 그의 행동이 현명하든 그렇지 않든 그에게 실제로 영향을 미칠 것이라는 것을 그에게 보여주어야 합니다.

알아요, 공식적인 일이 아니기 때문에 이 일을 피하고 싶을 수도 있습니다...하지만 내 생각엔 당신이 그렇게 하는 것이 합리적이고 그를 해고하고 새로운 사람을 채용하는 것보다 훨씬 더 저렴할 것입니다.

그는 이미 이것을 하고 있습니다.정말.그는 단지 그것을 적지 않을 뿐입니다.확신이 없나요?그가 표준 개발 주기를 거치는 모습을 지켜보세요.

  • 코드 작성
  • 컴파일
  • 실행하여 무엇을 하는지 확인하세요.
  • 다음 코드 조각을 작성하세요

3단계는 테스트입니다.그는 이미 테스트를 수행하고 있으며 수동으로 수행합니다.그에게 다음 질문을 해보세요."오늘의 코드가 여전히 작동한다는 것을 어떻게 알 수 있습니까?" 그는 대답 할 것입니다 :"정말 적은 양의 코드입니다!"

묻다:"다음 주는 어때요?"

그가 대답을 얻지 못하면 다음과 같이 질문하십시오."어제 작동했던 것이 변경으로 인해 중단될 때 프로그램에서 어떻게 알려주기를 원하시나요?"

이것이 자동 단위 테스트의 전부입니다.

저는 주니어 프로그래머로서 여러분의 주니어 개발자와 비슷한 상황에 처했을 때 어떤 느낌이었는지 공개하고 싶다고 생각했습니다.

처음 대학을 나왔을 때 나는 현실 세계를 다룰 준비가 너무 부족하다는 것을 깨달았습니다.예, 저는 JAVA 기본 사항과 철학(묻지 마세요)을 알고 있었지만 그게 전부였습니다.처음 직장을 구했을 때는 아무리 말해도 조금 벅찼습니다.제가 아마도 주변에서 가장 큰 카우보이 중 한 명이었다고 말씀드리자면, 저는 약간의 버그 수정/코멘트 없는 알고리즘/테스트/문서화를 함께 해킹하여 밖으로 발송할 것입니다.

나는 운 좋게도 어떤 종류의 감독을 받을 수 있었고, 매우 환자 수석 프로그래머.운 좋게도 그는 나와 함께 앉아서 해킹된 내 코드를 1~2주 동안 검토하기로 결정했습니다.그는 내가 어디에서 잘못되었는지, c와 포인터의 더 미세한 점을 설명해 주곤 했습니다(그 말이 나를 혼란스럽게 했습니다!).우리는 약 일주일 만에 꽤 괜찮은 클래스/모듈을 작성했습니다.제가 말할 수 있는 것은 선임 개발자가 제가 올바른 길을 따라갈 수 있도록 도와줄 시간을 투자하지 않았다면 아마도 제가 오래 버틸 수 없었을 것이라는 것뿐입니다.

다행히도 2년 후에는 동료 중 일부가 나를 평범한 프로그래머로 여기기를 바랍니다.

홈 포인트 가져가기

  1. 대부분의 대학은 학생들이 실제 세계에 대비하도록 준비시키는 데 매우 열악합니다.
  2. 페어링 프로그래밍이 정말 도움이 되었습니다.그것이 모든 사람에게 도움이 될 것이라는 말은 아니지만 나에게는 효과가 있었습니다.

그것이 걱정된다면 "최고 품질의 안정적인 코드"가 필요하지 않은 프로젝트에 할당하고 jr에게 맡기십시오.개발자 실패.그들이 버그를 고치기 위해 '주말에 방문'하도록 하세요.점심을 많이 먹고 소프트웨어 개발 실무에 대해 이야기를 나누세요(강의가 아닌 토론).시간이 지나면 그들은 할당된 작업을 수행하기 위한 모범 사례를 습득하고 개발하게 될 것입니다.

누가 알겠는가, 그들은 당신의 팀이 현재 사용하는 기술보다 더 나은 것을 생각해 낼 수도 있습니다.

주니어 프로그래머나 누구든지 테스트의 가치를 인식하지 못한다면 테스트를 수행하도록 하기가 어려울 것입니다. 기간입니다.

나는 주니어 프로그래머가 버그를 고치기 위해 주말을 희생하도록 만들었을 것입니다.그의 행동(또는 행동 부족)은 그에게 직접적인 영향을 미치지 않습니다.또한 테스트 기술을 향상시키지 않으면 승진 및/또는 급여 인상이 불가능하다는 점을 분명히 하십시오.

결국, 당신의 모든 도움, 격려, 멘토링에도 불구하고 그는 당신의 팀에 적합하지 않을 수 있으므로 그를 내보내고 그것을 얻을 수 있는 사람을 찾으십시오.

나는 모든 커밋을 검토하는 코드에 대한 RodeoClown의 두 번째 의견입니다.그가 그것을 몇 번 하고 나면 그는 물건을 테스트하는 습관을 갖게 될 것입니다.

그래도 그런 커밋을 차단해야 하는지 모르겠습니다.내 직장에서는 모든 사람이 모든 것에 무료로 커밋할 수 있으며 모든 SVN 커밋 메시지(차이점 포함)가 팀에 이메일로 전송됩니다.

메모:너 정말 원한다 썬더버드 컬러 비교 애드온 이 일을 할 계획이라면.

내 상사나 나 자신(2명의 '상위' 코더)은 결국 커밋을 읽고, "단위 테스트를 추가하는 것을 잊어버렸습니다"와 같은 내용이 있으면 이메일을 보내거나 그 사람에게 가서 채팅을 하면서 이유를 설명합니다. 필요한 단위 테스트 등이 있습니다.다른 사람들도 커밋을 읽어보는 것이 좋습니다. 커밋은 무슨 일이 일어나고 있는지 알 수 있는 좋은 방법이지만 후배 개발자들은 그렇게 많이 언급하지 않습니다.

정기적으로 다음과 같은 말을 함으로써 사람들이 이러한 습관을 들이도록 독려할 수 있습니다. "야, 밥, 내가 오늘 아침에 한 커밋 봤어? 어쩌고 저쩌고 할 수 있는 멋진 트릭을 찾았어. 커밋을 읽고 확인해 봐." 어떻게 되는 거지!"

참고:우리에게는 2명의 '선임' 개발자와 3명의 주니어 개발자가 있습니다.이는 확장되지 않을 수도 있고 더 많은 개발자와 함께 프로세스를 약간 조정해야 할 수도 있습니다.

  1. 코드 적용 범위를 리뷰의 일부로 만드세요.
  2. 버그를 수정하기 위한 전제 조건으로 "버그를 노출하는 테스트 작성"을 만드세요.
  3. 코드를 체크인하려면 특정 수준의 적용 범위가 필요합니다.
  4. 테스트 중심 개발에 관한 좋은 책을 찾아 이를 사용하여 테스트 우선 개발이 어떻게 개발 속도를 높일 수 있는지 보여주세요.

많은 심리학과 도움이 되는 "멘토링" 기술이 있지만 솔직히 말해서 이는 "내일 계속 직업을 갖고 싶다면 테스트를 작성하는 것"으로 귀결됩니다.

당신이 적절하다고 생각하는 어떤 용어로든, 가혹하거나 부드럽다고 생각하는 것은 중요하지 않습니다.그러나 사실 프로그래머는 단순히 코드를 작성하고 체크인하는 것만으로는 돈을 받지 않습니다. 그들은 신중하게 코드를 작성하고, 테스트를 작성하고, 코드를 테스트하고, 전체를 체크인하는 데만 돈을 받습니다.(적어도 귀하의 설명에 따르면 그렇게 들리는 것 같습니다.)

따라서 누군가가 자신의 일을 거부할 경우 내일 집에 머물 수 있다고 설명하면 그 일을 할 사람을 고용할 것입니다.

다시 말하지만, 필요하다고 생각하면 이 모든 작업을 부드럽게 수행할 수 있지만 많은 사람들은 크게 세게 때리기만 하면 됩니다. 현실 세계의 삶, 그리고 당신은 그들에게 그것을 줌으로써 그들에게 호의를 베풀게 될 것입니다.

행운을 빌어요.

테스트 작성과 테스트 유지에만 전념하도록 잠시 동안 그의 직무 설명을 변경합니다.많은 회사에서 신입사원을 시작하면서 한동안 이런 일을 한다고 들었습니다.

또한 그가 해당 역할을 수행하는 동안 챌린지를 발행하세요.a) 현재 코드에서 실패하는 테스트를 작성합니다. a) 소프트웨어 요구 사항을 충족합니다.이를 통해 그가 견고하고 철저한 테스트(프로젝트 개선)를 만들고 핵심 개발에 다시 통합될 때 테스트를 더 잘 작성할 수 있게 되기를 바랍니다.

edit>는 소프트웨어의 요구 사항을 충족합니다. 이는 코드가 해당 테스트 사례를 고려할 의도가 없거나 필요하지 않은 경우 의도적으로 코드를 중단하기 위한 테스트를 작성하는 것이 아니라는 의미입니다.

동료가 테스트 작성 경험이 부족하다면 단순한 상황 이상으로 테스트하는 데 어려움을 겪고 있을 수 있으며 이는 부적절한 테스트로 나타납니다.내가 시도할 방법은 다음과 같습니다.

  • 시간을 투자하여 종속성 주입, 극단적 사례 찾기 등과 같은 테스트 기술을 동료와 공유하세요.
  • 테스트에 관한 질문에 답하겠다고 제안합니다.
  • 잠시 동안 테스트의 코드 검토를 수행합니다.동료에게 좋은 테스트의 모범이 되는 변경 사항을 검토하도록 요청하세요.그들이 실제로 테스트 코드를 읽고 이해하고 있는지 확인하려면 그들의 의견을 살펴보세요.
  • 팀의 테스트 철학에 특히 잘 맞는 책이 있다면 그에게 사본을 제공하세요.코드 검토 피드백이나 토론에서 책을 참조하여 그 또는 그녀가 선택하고 따라야 할 스레드가 있으면 도움이 될 수 있습니다.

나는 특히 수치심/죄책감 요인을 강조하지 않을 것입니다.테스트는 널리 채택되고 있는 좋은 관행이며, 좋은 테스트를 작성하고 유지하는 것은 전문가의 예의이므로 팀 동료가 주말을 직장에서 보낼 필요가 없다는 점을 지적할 가치가 있지만 이에 대해 자세히 설명하지는 않겠습니다.

정말로 "강인해지고" 싶다면 공정한 시스템을 도입하세요.아무도 자신이 선발되고 있다는 느낌을 좋아하지 않습니다.예를 들어, 팀에서는 특정 수준의 테스트 적용 범위를 유지하기 위해 코드가 필요할 수 있습니다(게임 가능하지만 최소한 자동화 가능).테스트를 위해서는 새로운 코드가 필요합니다.코드 검토를 수행할 때 검토자가 테스트 품질을 고려하도록 요구합니다.등등.그 시스템을 구축하는 것은 팀 합의에서 나와야 합니다.토론을 주의 깊게 진행하면 동료의 테스트가 예상과 다른 근본적인 이유를 발견할 수 있습니다.

그/그녀를 가르치는 것은 멘토의 책임입니다.테스트 방법을 얼마나 잘 가르치고 있습니까?그 사람과 페어 프로그래밍을 하고 있나요?주니어는 xyz에 대한 좋은 테스트를 설정하는 방법을 알지 못할 가능성이 높습니다.

학교를 갓 졸업한 그는 많은 개념을 알고 있습니다.일부 기술.약간의 경험.하지만 결국 모든 주니어는 잠재력을 갖고 있습니다.그들이 작업하는 거의 모든 기능에는 이전에 한 번도 해본 적이 없는 새로운 것이 있을 것입니다.물론 후배가 수업 중 프로젝트에 대해 "문"을 열고 닫는 간단한 상태 패턴을 수행했을 수도 있지만 실제로 패턴을 적용한 적은 없습니다.

그/그녀는 당신이 얼마나 잘 가르치는가에 따라 훌륭해질 것입니다.만약 'Just get it'을 할 수 있었다면 애초에 주니어 포지션을 맡았을 것 같나요?

내 경험에 따르면 주니어는 고용되어 시니어와 거의 동일한 책임을 맡지만, 급여가 더 적고 흔들리기 시작하면 무시됩니다.내가 씁쓸해 보인다면 용서해주세요. 왜냐하면 내가 그렇습니다.

@ jsmorris

나는 선임 개발자와 "설계자"가 전날 밤 늦게까지 머물지 않고 그런 "쉬운" 작업을 마치지 않은 것에 대해 이메일로 나와 테스터(대학 졸업 후 첫 번째 직업이었습니다)를 꾸짖게 했습니다.우리는 하루 종일 그 일을 하고 오후 7시에 종료한다고 말했습니다. 저는 그날 점심 식사 전 오전 11시부터 몸부림쳤고 우리 팀의 모든 구성원에게 적어도 두 번은 도움을 요청했습니다.

나는 다음 내용을 팀에 응답하고 참조로 추가했습니다."나는 한 달 동안 당신에게 실망했어요.나는 팀으로부터 도움을 받은 적이 없다.필요하시면 길 건너편 커피숍에 가겠습니다.거의 모든 것이 의존하는 12개의 매개변수, 800줄 메서드를 디버그하지 못해 죄송합니다."

커피숍에서 한 시간 동안 더위를 식힌 후 사무실로 돌아와서 쓰레기를 챙겨 떠났습니다.며칠 후 그들은 나에게 전화해서 내가 들어올 것인지 물었고, 나는 그러겠다고 말했지만 아마도 내일 인터뷰가 있을 것이다.

"그럼 그만둬?"

소스 저장소에서:각 커밋 전에 후크를 사용합니다(예: SVN의 경우 사전 커밋 후크).

해당 후크에서 각 메서드에 대해 하나 이상의 사용 사례가 있는지 확인하세요.사전 커밋 후크를 통해 쉽게 적용할 수 있는 단위 테스트 조직에 대한 규칙을 사용하세요.

통합 서버에서 모든 것을 컴파일하고 테스트 커버리지 도구를 사용하여 테스트 커버리지를 정기적으로 확인합니다.코드에 대한 테스트 적용 범위가 100%가 아닌 경우 개발자의 모든 커밋을 차단합니다.그는 코드의 100%를 다루는 테스트 케이스를 보내야 합니다.

프로젝트에서는 자동 검사만 제대로 확장할 수 있습니다.모든 것을 손으로 확인할 수는 없습니다.

개발자는 자신의 테스트 케이스가 코드의 100%를 포괄하는지 확인할 수 있는 수단을 가지고 있어야 합니다.이렇게 하면 그가 100% 테스트된 코드를 커밋하지 않으면 "죄송합니다. 잊어버렸네요"라는 잘못이 아니라 그 자신의 잘못입니다.

기억하다 :사람들은 당신이 기대하는 바를 결코 행하지 않고, 항상 당신이 조사한 바를 따른다.

우선, 대부분의 응답자들이 지적한 것처럼, 그 사람이 테스트의 가치를 보지 못한다면 당신이 할 수 있는 일은 별로 없으며, 당신은 이미 그 사람을 해고할 수 없다고 지적했습니다.그러나 여기서 실패는 선택 사항이 아니므로 몇 가지 사항은 어떻습니까? ~할 수 있다 하다?

귀하의 조직이 6명 이상의 개발자를 보유할 만큼 큰 경우에는 품질 보증 부서를 두는 것이 좋습니다(한 사람만 시작하더라도).이상적으로는 테스터 1명과 개발자 3~5명의 비율이 있어야 합니다.프로그래머의 문제는...그들은 테스터가 아니라 프로그래머입니다.나는 아직 정식으로 적절한 QA 기술을 배운 프로그래머와 인터뷰를 한 적이 없습니다.

대부분의 조직은 코드에 가장 적게 노출되는 신입사원에게 테스트 역할을 할당하는 치명적인 결점을 범합니다. 이상적으로는 코드 경험이 있는 고위 개발자가 QA 역할로 이동해야 합니다. , 그리고 (희망적으로) 발생할 수 있는 코드 냄새와 실패 지점에 대한 육감을 개발했습니다.

더욱이, 실수를 저지른 프로그래머는 아마도 결함을 찾지 못할 것입니다. 그 이유는 일반적으로 구문 오류(컴파일에서 선택되는 오류)가 아니라 논리 오류이기 때문입니다. 코드를 작성할 때처럼 테스트하세요.코드를 개발한 사람이 해당 코드를 테스트하도록 하지 마세요. 그들은 다른 사람보다 버그를 덜 발견할 것입니다.

귀하의 경우, 재조정된 작업 노력을 감당할 수 있다면 이 새로운 사람을 QA 팀의 첫 번째 구성원으로 만드십시오.그에게 "실제 세계에서의 소프트웨어 테스팅:프로세스 개선'을 참조하세요. 새로운 역할을 수행하려면 분명히 약간의 교육이 필요할 것이기 때문입니다.그가 마음에 들지 않으면 그만두고 문제는 여전히 해결됩니다.

약간 덜 복수심에 불타는 접근 방식은 이 사람이 자신이 잘하는 일을 하게 하고(이 사람이 실제로 업무의 프로그래밍 부분에 능숙하기 때문에 고용되었다고 가정합니다) 테스트를 수행할 테스터 한두 명을 고용하는 것입니다( 대학생들은 실습이나 "co-op" 용어를 사용하는 경우가 많으며 노출을 좋아하며 비용이 저렴합니다.)

참고 사항:결국에는 QA 팀이 QA 책임자에게 보고하거나 적어도 소프트웨어 개발자 관리자에게는 보고하지 않기를 원할 것입니다. 왜냐하면 QA 팀이 제품 완성을 주요 목표로 하는 관리자에게 보고하도록 하는 것은 이해 상충이기 때문입니다.

조직 규모가 6명 미만이거나 새 팀을 구성할 수 없는 경우에는 페어링 프로그래밍(PP)을 권장합니다.나는 모든 익스트림 프로그래밍 기술을 완전히 개종한 것은 아니지만 확실히 쌍 프로그래밍을 신봉하는 사람입니다.그러나 짝을 이루는 프로그래밍 팀의 두 구성원 모두 헌신적이어야 하며 그렇지 않으면 단순히 작동하지 않습니다.그들은 두 가지 규칙을 따라야 합니다:검사관은 화면에 코딩되는 내용을 완전히 이해해야 하거나 코더에게 설명을 요청해야 합니다.코더는 자신이 설명할 수 있는 것만 코딩할 수 있습니다. "보게 될 것입니다", "나를 믿으십시오" 또는 손을 흔드는 것은 용납되지 않습니다.

나는 당신의 팀이 그것을 할 수 있는 경우에만 PP를 추천합니다. 왜냐하면 테스트와 마찬가지로 아무리 응원하거나 위협해도 자아로 가득 찬 내향적인 두 사람이 편안하지 않다면 함께 일하도록 설득할 수 없기 때문입니다.그러나 세부적인 기능 사양을 작성하고 코드 검토를 수행하는 것과 그렇지 않은 것 사이에 있다는 것을 알았습니다.짝을 이루는 프로그래밍에서는 일반적으로 PP가 승리합니다.

PP가 당신에게 적합하지 않다면 TDD가 최선의 선택이지만 문자 그대로 받아들일 경우에만 가능합니다.테스트 주도 개발은 먼저 테스트를 작성하고 테스트를 실행하여 테스트가 실제로 실패했음을 입증한 다음 작동하도록 가장 간단한 코드를 작성하는 것을 의미합니다.이제 트레이드오프는 수천 개의 테스트 모음을 보유해야 한다는 것입니다. 이 테스트도 코드이며 프로덕션 코드와 마찬가지로 버그가 포함될 가능성이 높습니다.솔직히 말해서 저는 주로 이런 이유 때문에 TDD의 열렬한 팬은 아니지만 테스트 사례 문서보다 테스트 스크립트를 작성하는 것을 선호하는 많은 개발자에게 효과적입니다. 일부 테스트는 없는 것보다 낫습니다.테스트 적용 가능성을 높이고 스크립트의 버그를 줄이려면 TDD를 PP와 결합하세요.

다른 모든 방법이 실패하면 프로그래머는 맹세 항아리와 동등해야 합니다. 프로그래머가 빌드를 깨뜨릴 때마다 $20, $50, $100(직원에게 어느 정도 고통스러운 금액)를 좋아하는 항아리에 넣어야 합니다( 등록되었습니다!) 자선 단체.돈을 갚을 때까지 피하세요 :)

농담은 제쳐두고, 프로그래머가 테스트를 작성하도록 하는 가장 좋은 방법은 그에게 프로그래밍을 허용하지 않는 것입니다.프로그래머를 원하면 프로그래머를 고용하라 -- 테스트를 원하면 테스터를 고용하라.저는 12년 전 주니어 프로그래머로 테스트 업무를 시작했고 그것이 제 진로가 되었고 무엇과도 바꾸지 않을 것입니다.적절하게 육성되고 소프트웨어 개선을 위한 권한과 권한이 부여된 탄탄한 QA 부서는 처음에 소프트웨어를 작성하는 개발자만큼 가치가 있습니다.

다소 무정할 수도 있지만, 상황을 설명하는 방식을 보면 이 사람을 해고해야 할 것처럼 들립니다.아니면 최소한 다음 사항을 분명히 하세요.주택 개발 관행(작문 시험 포함) 따르기를 거부함 그리고 다른 사람이 정리해야 하는 버그가 있는 코드를 체크인하면 결국 해고될 것입니다.

주니어 엔지니어/프로그래머가 테스트 스크립트를 설계하고 수행하는 데 많은 시간을 들이지 않는 주된 이유는 대부분의 CS 인증이 이를 크게 요구하지 않기 때문에 디자인 패턴과 같은 엔지니어링의 다른 영역은 대학 프로그램에서 더 자세히 다루기 때문입니다.

내 경험에 따르면 주니어 전문가에게 습관을 들이는 가장 좋은 방법은 이를 프로세스의 일부로 명시적으로 만드는 것입니다.즉, 반복에 소요되는 시간을 추정할 때 케이스 설계, 작성 및/또는 실행 시간이 이 시간 추정에 포함되어야 합니다.

마지막으로, 테스트 스크립트 디자인을 검토하는 것은 디자인 검토의 일부가 되어야 하며, 실제 코드는 코드 검토에서 검토되어야 합니다.이로 인해 프로그래머는 자신이 작성한 각 코드 줄을 적절하게 테스트해야 할 책임이 있고 수석 엔지니어와 동료는 작성된 코드와 테스트에 대한 피드백과 지침을 제공할 책임이 있습니다.

"디자인이 더 단순해진다는 것을 보여줍니다"라는 귀하의 의견을 바탕으로 저는 여러분이 TDD를 연습하고 있다고 가정합니다.사후에 코드 검토를 수행하는 것은 효과가 없을 것입니다.TDD의 중요한 점은 테스트 철학이 아니라 디자인이라는 것입니다.그가 디자인의 일부로 테스트를 작성하지 않았다면 사후에 테스트를 작성해도 많은 이점을 얻지 못할 것입니다. 특히 주니어 개발자의 경우 더욱 그렇습니다.그는 결국 많은 특수 사례를 놓치게 될 것이고 그의 코드는 여전히 형편없을 것입니다.

가장 좋은 방법은 매우 참을성 있는 선임 개발자가 그와 함께 앉아서 짝 프로그래밍을 하게 해주세요.그리고 그가 배울 때까지 계속하십시오.또는 배우지 못하는 경우에는 실제 개발자를 좌절하게 만들 수 있으므로 그에게 더 적합한 작업에 그를 다시 할당해야 합니다.

모든 사람이 동일한 수준의 재능 및/또는 동기를 갖고 있는 것은 아닙니다.개발 팀은 애자일 팀이라 할지라도 "A팀"과 "B팀"으로 구성됩니다.A팀 구성원은 솔루션을 설계하고, 모든 중요한 생산 코드를 작성하고, 비즈니스 소유자와 소통하는 등 고정관념에서 벗어나는 사고가 필요한 모든 작업을 수행하는 사람입니다.B팀은 구성 관리, 스크립트 작성, 잘못된 버그 수정, 유지 관리 작업 수행과 같은 작업을 처리합니다. 이 모든 작업은 실패에 따른 결과가 적고 엄격한 절차가 적용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top