테스트는 초보자에게 적합하지 않다

7811 단어 gotestingbeginners
나는 테스트를 매우 좋아한다.나는 내 블로그에 그것을 써서 이메일로 내 메일 목록을 보냈다. 나는 여가 시간에 다른 개발자와 그것을 토론했고 심지어는 course that teaches testing with Go도 만들었다.
비록 나는 테스트를 좋아하지만, 나는 초보자를 추천하지 않는다.
미쳤어, 그렇지?본고에서 나는 이 점의 원인을 더욱 상세하게 탐구할 계획이지만 기본적으로 두 가지로 귀결될 수 있다.
  • 초보자는 가장 자질구레한 테스트를 제외하고는 아무것도 쓸 줄 모른다.이것은 불가피하게 나의 두 번째 점을 끌어낸다...
  • 실제 작성에 필요한 기술을 배우고 코드를 작성하고 구축하는 방법을 배우려는 시도가 압도적이다.
  • 나는 이것이 좀 비슷하다고 생각한다.무엇이든지나는 그것을 둘로 나눈다. 왜냐하면 나는 그것이 더욱 소비하기 쉽다고 생각하기 때문이다.
    나는 너희들 중 많은 사람들이 이 점에서 나의 관점에 동의하지 않을 수도 있다는 것을 알고 있지만, 이 문장을 성실하게 읽어 주십시오.만약 네가 다 본 후에도 동의하지 않는다면, 나는 기꺼이 너와 토론할 것이다.어쨌든, 내가 이곳에 온 것도 공부하기 위해서이다🙃

    This article was original posted on calhoun.io, where I write about Go, web dev, testing, and more.


    초보자는 가장 자질구레한 테스트 외에는 아무것도 쓸 줄 모른다


    초보자가 코드를 작성할 때마다 그들의 주요 목표는 관심사를 분리하고 전역 변수를 피하거나 테스트 가능한 코드를 작성하는 것이 아니다.솔직히 말하면 대부분의 초보자들은 그 중 절반의 진정한 의미를 모를 수도 있다.반대로 그들의 주요 목표는 간단하다.이 빌어먹을 놈을 일하게 하는 거야.그렇습니다.
    이 점을 확인하는 데는 거의 아무런 노력도 필요 없다.초보자가 작성한 코드를 복습하는 데 시간이 좀 걸리다.
    Go로 작성된 웹 응용 프로그램을 보고 있습니까?그들은 코드의 어느 곳에서든 SQL 조회를 작성할 가능성이 높으며, 그들의 DB 연결은 전역 변수일 가능성이 높다.
    Rails 어플리케이션 보기보기에는 업무 논리가 있을 수 있고, 컨트롤러에는 대량의 논리가 막힐 수 있다.
    PHP 웹 응용 프로그램 보기?만약 모든 논리가 php 파일에 있다면, 폼 해석, DB와의 상호작용 등, 나는 놀라지 않을 것이다.
    비록 우리가 더 간단한 것, 예를 들어 기능이 제한된 계산기를 보더라도 우리는 여전히 이런 문제에 직면하게 될 것이다.초보자가 아니라 개의치 않는다.그들은 무엇이 더 좋은지 전혀 모른다.
    초보자는 의존 주입이 무엇인지 모른다.그들은 전체 변수가 어떻게 테스트를 어렵게 하는지 이해하지 못한다.그들은 심지어 시뮬레이션이 무엇인지도 모르기 때문에 시뮬레이션하기 쉬운 코드를 어떻게 설계하는지 이해하기 어렵다.
    따라서 초보자에게 정말 의미 있는 테스트는 다음과 같은 간단한 테스트뿐이다.
    func Add(a, b int) int {
      return a+b
    }
    
    // And a test...
    func TestAdd(t *testing.T) {
      got := Add(2, 4)
      want := 6
      if got != want {
        t.Errorf("Add() = %d; want %d", got, want)
      }
    }
    
    비록 나는 초보자에게 이 코드를 보여주고 테스트가 무엇인지 알게 하는 데 아무런 문제가 없지만, 나는 그들에게 이 코드를 보여주고 이것이 진정한 테스트인 것처럼 가장하는 것은 매우 터무니없다고 생각한다.
    그래서 최종 결과는 우리가 그들에게 더 많은 것을 가르치려고 시도한 것이다.우리는 그들에게 의존 주입이 무엇인지, 왜 전역 변수가 테스트를 어렵게 하는지, 어떻게 time.Now() 검증의 가장자리 상황을 어렵게 하는지 가르쳐 주려고 한다.이것이 바로 내가 걱정하기 시작한 곳이다. 왜냐하면 우리는 더 이상 초보자에게 프로그래밍을 가르치지 않기 때문이다.이 점에서 우리는 그들에게 어떻게 프로그래밍하고, 어떻게 물건을 구축하고, 모든 내용을 동시에 테스트하는지 가르치고 있다.이것이 바로 나의 두 번째 점을 끌어냈다...

    실제 작성에 필요한 기술을 배우고 코드를 작성하고 구축하는 방법을 배우는 것이 압도적이다


    예전처럼 초보자들이 작성한 코드를 생각해 보게 하고 싶지만, 이번에는 당신들이 작성한 최초의 프로그램을 회상하게 하고 싶습니다.네가 한 첫 번째 일을 생각해 봐라. 그것은 여러 개의 원본 파일로 구성되어 있다.아니면 니가 만든 첫 번째 홈페이지를 생각해봐.
    지금, 만약 당신이 나처럼, 당신의 첫 번째 웹 응용 프로그램은 이렇게 보일 수 있습니다.
    <p>
      <?php
      // This may not work. I don't know PHP anymore.
      $name = $_GET['name'];
      echo "Hello, " . $name;
      ?>
    </p>
    
    예술품 한 벌 아니에요?
    지금 상상해 보세요. 만약 당신이 처음으로 코드를 썼다면, 누군가가 당신의 코드를 테스트해야 한다고 알려 줍니다.React를 사용해야 합니다.너는 반드시 하나의 틀을 사용해야 한다.오, 데이터베이스를 설정해야 합니다. GraphQL을 설정해서 조회해야 할 수도 있습니다.
    나는 왜 그런지 모르겠지만 개발자로서 우리는 이러한 습관을 가지고 있다. 다년간의 경험과 실천 후에 우리가 지금 하고 있는 일은 다른 사람, 특히 초보자로서 즉시 같은 일을 하기를 기대한다.이것은 너무 터무니없다.이것은 마치 누군가가 직접 미적분에 뛰어들기를 바라는 것과 같다. 왜냐하면 우리는 삼각, 대수 등을 배웠기 때문에 결국 우리가 미적분을 배워서 특정한 문제를 해결하게 된다.
    단지 어떤 것이 너에게 매우 좋다는 것은 초보자에게 좋은 생각이라는 것을 의미하지 않는다.그들은 당신이 사용하는 내용에서 진정한 이익을 얻는 데 필요한 배경, 경험, 실천을 갖추지 못할 수도 있습니다.아니면, 그들이 해결하고 있는 문제는 훨씬 간단할 수도 있지만, 이 모든 복잡한 문제들을 잊어버리는 것은 지나치다.
    우리가 모두 잊어버린 것처럼 우리는 HTTP 요청의 작업 원리를 점차 이해했다.제목 작업 방식.쿠키의 작업 원리.표는 어떻게 작동하는지웹 서버에 게시되는 작업 원리, 심지어 다른 HTTP 방법도 있다.이 모든 것을 통해 우리는 구식의 시도와 실수를 통해 배울 수 있다.
    실제로 나는 테스트가 틀렸다고 생각하지 않는다. 그러나 진정한 문제는 우리가 같은 시간에 코드, 테스트, 웹 개발과 다른 백만 가지 일을 어떻게 작성하는지 배워야 한다는 오명을 가지고 있다는 것이다.나는 정말 이것이 어떻게 된 일인지 모르겠지만, 문제의 일부분은 우리가 지금까지 자격이 없는 것들이라고 의심한다.한 초보자가 물었다. "내가 뭘 배워야 합니까?"우리는 그들에게 "테스트를 배우고 반응을 하며graphql를 배우고 계속하지만 표준 라이브러리만 사용한다"고 말했다.
    아니, 아니, 아니!멈춰라.

    이것은 나에게 있어서 매우 터무니없다. 왜냐하면 어떤 다른 상황에서도 이렇게 뚜렷하기 때문이다.만약 당신이 다른 사람에게 어떻게 축구를 하는지 가르치고 있다면, 당신은 패스와 드리블 같은 기본 지식부터 시작할 것이다.너는 로나르도의 동영상부터 시작하지 않을 것이다. 그리고 나서 "이것은 전문가의 방법이다."라고 말할 것이다.그렇다면 우리는 왜 프로그래밍 초보자에게 이렇게 해야 합니까?
    우리는 "물론, 그들은 한 번에 배우려 하지 말아야 한다는 것을 알아야 한다."라고 말해서 일을 더욱 좋아지게 하려고 했지만, 그들은 없었다.더 심각한 것은 당초 초보 개발자들이 이 함정에 빠졌을 때 곤경에 빠지면 똥처럼 느껴진다는 것이다.그들은 자신이 개발자에게 필요한 것이 되지 않았을 뿐이라고 생각한다. 이것은 수치이다. 만약 그들이 이 벽돌담에 부딪히지 않았다면, 그들 중 많은 사람들이 프로그래밍을 좋아했을 것이다.
    이것은 나로 하여금 나의 진정한 관점을 생각하게 했다. 만약 우리가 한 번에 몇 가지 일에만 전념한다면, 우리 대다수 사람들은 더욱 잘 배울 것이다.우리는 도전을 받아들이고 새로운 것을 시도하고 싶지만, 물에 잠겨 마비되고 싶지 않다.웹 응용 프로그램을 구축하는 방법, http가 어떻게 작동하는지, 쿠키가 어떻게 작동하는지 등 테스트와 다른 모든 것을 배워 보는 것은 물에 잠기기 쉬운 방법이다.그래서 나는 보통 다른 것을 먼저 배우고 다시 돌아와서 테스트를 공부하는 것을 건의한다.테스트에 관한 지식을 활용하기 위해 낡은 프로젝트를 다시 설계할 수 있는 방법을 살펴볼 수 있지만, 이것은 당신이 어찌할 바를 모르고 낙담하며 결국 물러나지 않는 경우에만 가능하다.

    근데 내가 테스트를 배우고 싶다면?!(그리고 기타 백만 개의 "가설")


    쿨, 파이팅!테스트를 먼저 배우고 웹 개발이나 다른 주제를 배우는 것을 환영합니다.나는 어떤 사람들이 이미 이렇게 했다고 믿는다. 너는 아마 그것을 좋아할 것이다.내가 테스트가 초보자에게 적합하지 않다고 말했을 때, 나는 결코 그것이 나쁜 학습 주제라고 말한 것이 아니다.내가 말하고 싶은 것은 테스트를 배우려는 시도와 기타 모든 것이 틀렸다는 것이다.
    대부분의 사람들은 웹 응용 프로그램이나 시각화된 것을 구축하는 방법을 먼저 배우고 싶지만, 이것은 당신이 거기서부터 시작해야 한다는 것을 의미하지는 않는다.너는 먼저 테스트를 배울 수 있다.고통을 먼저 체험하지 않으면 그 중 일부는 큰 의미가 없을 수도 있지만, 어쨌든 내가 네가 배우고 싶은 것을 배우는 것을 막지 못하게 해라.
    이것 또한 네가 프로그래밍을 맞추거나 유사할 때 공부할 수 없다는 것을 의미하지는 않는다.스승이 있는 환경에서 당신은 항상 많은 것을 배울 수 있습니다. 비록 당신이 물에 잠겼지만, 당신이 그곳에서 당신을 지도하여 이 모든 것을 보낼 수 있기 때문입니다.네가 길을 잃었을 때, 너는 갇혔을 뿐만 아니라, 자신도 실패자라고 생각하지 않을 것이다.주위에서 어떤 사람이 너에게 말했다. "너는 아주 잘했어. 이것은 단지 톤으로 받아들일 뿐이야. 다음이 아니라 X와 Y를 시험해 봐!"요컨대 이 장면에서 어찌할 바를 몰라 곤경에 빠졌다가 물러나는 것은 그리 걱정스럽지 않다.

    PSSTT。。。


    바둑 공부나 연습에 흥미가 있습니까?내 무료 강좌 보기 - Gophercises - Programming Exercises for Budding Gophers.
    나는 Web Dev with GoTesting with Go를 포함한 고급 과정이 좀 있으니 너도 가서 보아도 된다.

    좋은 웹페이지 즐겨찾기