어떤 사람이 TDD 기반 인터뷰 질문을 공유 할 수 있습니까?


최상의 답변

저는 현재 AutoTrader에서 일하고 있는데 제 생각에는이 일을 아주 잘 수행합니다.

우리는 더 큰 모니터와 키보드 / 마우스가있는 노트북 앞에 앉아서 시니어 개발자 중 한 명과 짝을 이루고 다른 시니어 개발자가 관찰했습니다.

매우 재미 있습니다. 평범한 인터뷰 신경과 새로운 사람들을 만나고 있다는 사실을 제외하고 모두. 그러나 확실히 내가 당신의 짝일 때, 나는 약간의 친근한 관계를 갖기 위해 노력하고 당신이 환영받는 느낌을 갖도록 노력합니다. 평소처럼. 실제로 성공할 수 있도록 응원하고 있습니다.

간단한 작업에 대한 절반 페이지 문제 설명을 얻습니다. 그런 다음 약간의 쌍 프로그래밍을 수행합니다.

관찰되고 채점되는 몇 가지 항목이 있습니다.

  • 먼저 테스트를 작성합니까? 코드 후? 결코?
  • 디자인에 대해 생각하기 위해 테스트를 사용합니까?
  • 명확하게 이름을 지정합니까?
  • OOP, 절차 적 프로그래밍을 선호합니까? 엄청난 기능?
  • 쌍과 잘 어울리나요? 아니면 전혀 요?
  • 계속 진행하면서 자신의 생각을 설명하고 두 사람이 기여하도록 초대합니까? 아니면 조용히 앉아 있습니까?
  • 컬렉션과 같은 Java의 표준 기능을 사용합니까? 그렇지 않다면 어떻게하나요?
  • IDE (선택한 IDE)를 잘 사용하십니까?
  • 문제를 잘 나누십니까? 신통치 않게? 전혀 그렇지 않습니까?

유닛 테스트를 위해 Java, TDD 및 / 또는 디자인을 할 수 있고 합리적으로 개성있는 것처럼 보이면 점수가 높은 경향이 있습니다.

이 테스트는 이상한 언어 기능 지식이나 이상한 알고리즘 지식, 문제 해결에 관한 것이 아닙니다.

실생활에서 이력서에 작성한 이러한 것들을 어떻게 사용하는지 확인하는 것이 전부입니다.

정말 즐길 것입니다. 모든 사람에게 후보자의 위치를 ​​공정하게 보여줍니다.

가짜 이력서 주장도 무자비하게 제거합니다.

TDD를 해보시겠습니까? assert가 무엇을 의미하는지 모르십니까? 이런. OOP를 마스터했다고하나요? 작동하지 않는 모든 코드가 우리가 제공 한 단위 테스트와 동일한 방법에 있습니까? 오, 이런.

(그렇습니다. 실제로 일어났습니다).

저에게는이 과정의 양쪽에서 눈을 뜨게되었습니다.

답변

TDD는 도구입니다. 잘못된 점은 TDD를 종교로 취급하는 것입니다.

TDD는 일반적으로 단위 테스트로 수행됩니다. 작은 부분 또는 기능 테스트 ( 단위) ). 단위 테스트는 빠르게 실행되어야하므로 일반적으로 외부 서비스 종속성을 모방하고 코드 자체가 테스트되고 있는지 확인합니다.

거대한 코끼리 방에있는 문제는 때때로 조롱 한 외부 서비스에 함수의 대부분의 논리가 포함되어 있다는 것입니다. “단위”가 쿼리를 사용하여 데이터베이스에서 항목을 가져와 반환하는 경우 조롱 은 100 \% 쓸모가 없습니다. 유형 검사 대신 사용하는 경우는 예외입니다.

다시 다른 방식으로 말씀 드리겠습니다. 소위 “사고 리더” ”TDD의 복음을 전파하는 사람도 자주 역동적 인 언어의 복음을 전파합니다. 그래서 그들이 말하는 언어는 훨씬 더 생산적 입니다. 실제로 테스트하려면 훨씬 더 많은 작업이 필요하고 리팩터링이 필요할 때 이러한 테스트를 다시 작성해야합니다.

C #, Java 또는 TypeScript와 같은 안전한 언어로 코드를 작성하면됩니다. 유형이 여전히 유효한지 확인하는 것에 대해 걱정할 필요가 없습니다. 그리고 실제로 아무것도 테스트하지 않는 테스트를 작성할 필요가 없을뿐만 아니라 정적 유형 언어를 사용하면 실제적인 이점이 있습니다.

그렇다면 “아무것도 테스트하지 않음”이라는 테스트는 실제로 무엇을 의미합니까? 데이터베이스에 대해 SQL 쿼리를 수행하는 함수가 있다고 가정 해 보겠습니다. 특정 필드로 필터링 된 항목을 찾아야합니다. 빠른 단위 테스트를 작성하기 위해 SQL 쿼리를 모의합니다. 모의 라이브러리가 샘플 데이터 세트에서 작동하는 PostgreSQL의 모든 로직을 실제로 시뮬레이션하지 않는 한, 함수의 실제 핵심 logic 은 전혀 테스트되지 않습니다. ; 논리를 확인하기 위해 작성할 수있는 유일한 실질적인 테스트는 모의 가 적절한 응답을 반환하고 있는지 확인하는 것뿐입니다.

나는 자주 모의를 본다. 단순히 “데이터베이스가 올바른 횟수로 호출되었는지 확인하십시오.” 결국 100 \% 코드 커버리지를 얻을 수 있습니다! 실제로는 전혀 의미가없는 비 기술적 인 관리자에게 깊은 인상을 남길 수있는 숫자입니다! Go team 사기성 통계!

아니요. 필요한 것은 시스템 테스트 또는 통합 / E2E 테스트로 전체 시스템이 일. 단위 테스트뿐만 아니라 데이터베이스에 대한 호출을 조롱하지 하지 않는 테스트 대신 이러한 호출을 수행합니다.그리고 테스트 스위트가 실제 테스트 데이터베이스를 세우고이를 지우고 테스트 사이에 시드해야 할 때 TDD는 실용적이지 않습니다. 너무 느립니다.

그러니 먼저 코드를 작성한 다음 E2E 테스트를 작성하여 올바른 결과를 얻고 있는지 확인하세요. Jesthttps : //jestjs.io/docs/en/snapshot-testing과 같은 테스트 스위트의 스냅 샷 기능을 사용하여 응답 가 변경되지 않는지 검증 할 수 있습니다. 한 번 살펴보고 올바른지 확인한 다음 Jest에게 옳다고 말하면 향후 실행에서 동일하게 유지되는지 확인합니다. 거의 자동화 된 방식으로 API를 테스트하고 테스트를 업데이트 할 수 있습니다!

따라서 TDD 충실한 사람들의 열광을 무시하면 필요하지 않기 때문에 작업을 두 배 빠르게 완료 할 수 있습니다. 테스트 실패

를 확인하기 위해 전체 E2E 제품군이 실행될 때까지 10 분 (또는 그 이상! 한 시간 넘게 걸린 테스트 제품군을 보았습니다…) span> 코드 작성을 시작하기 전에.

또한 Moray Taylor의 답변에서 지적한대로 UI 전혀 테스트는 많은 상황에서 비실용적입니다. UI에 적용 할 수있는 E2E 테스트에는 일부 수준이 있지만 대부분의 경우 일반적인 경우에는 투자 수익이 그만한 가치가없는 것 같습니다.

즉, 100 개 이상의 다른 비디오 게임에서 사용하던 그래픽 라이브러리 를 작업 중이었고 E2E 테스트를 작성했습니다. 라이브러리의 내부 로직에 대한 변경이 내가 본 적도 없었던 일부 모호한 게임을 깨뜨리지 않는지 검증하기위한 도구입니다. 도서관은 항상 더 철저한 테스트를 받아야합니다. 하지만 단일 애플리케이션의 UI의 경우 E2E 테스트가 제 경험상 거의 의미가 없습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다