회귀 테스트, 표징 테스트와 인정 테스트 사이에는 어떤 차이가 있습니까?

일부 남겨진 코드를 재구성하기 전에 다른 개발자들은 다음과 같은 건의를 포기한다.

Make sure it's covered with a test first!


물론 이 코드는 테스트를 거치지 않았다.너는 임무를 완수할 시간과 기한이 거의 없기 때문에, 나 같은 사람은 너에게 교묘한 기교를 사용하라고 건의할 것이다. Approval Testing
승인 테스트는 기존 코드를 테스트하는 가장 빠른 방법입니다.너는 코드를 가져와서 그것에 각종 입력을 던진 후에 출력을 포착해라.곧 회귀 네트워크를 구축하면 재구성할 때 문제가 있는지 알려줄 것이다.
때때로 사람들은 마이클 페세의 작품Working Effectively with Legacy Code을 잘 안다.이런 상황에서 그들은 보통 다음과 같이 묻는다.

Yeah, I've heard about Approval Tests. Is this the same as Characterization Tests? Asking for a friend…


Feathers의 책을 읽어 본 적이 없는 사람들에게 '회귀 테스트' 는 테스트되지 않은 코드를 처리하는 데 자주 사용하는 이름인 것 같다.미세한 차이가 있습니까?🤔

나는 이미 이 문제에 여러 번 대답했기 때문에, 나는 그것을 여기에 보존했다. 이렇게 하면 우리는 곤혹스러운 동료들과 그것을 나눌 수 있다😉

네, 인증과 정성 테스트는 똑같습니다.


다른 명칭을 쓰는 이유는 아직 공인된 기준이 없기 때문이다.서로 다른 사람들이 같은 기술을 위해 다른 이름을 지었다.사실, most people seem to be using "Regression Tests"는 그것을 가리킨다!
중요한 것은 그것의 정신이다.
우선, 시스템의 표현이 다르면 테스트가 실패할 수 있다는 목표를 이해해야 한다.
이 과정은 크게 세 단계로 나뉜다.

  • 코드를 자동 테스트로 실행하기👈이것은 통상적으로 게임에서 가장 어려운 부분이다.그것은 짜증나는 의존성을 줄이는 것을 포함한다.깃털 기술이 그걸 해줄 거야!

  • 재미있는 출력을 포착하다.이것은 아마도 되돌아오는 응답일 것이다.또는 실행 과정에서 발생하는 흥미로운 사실을 포착하기 위해 맞춤형 기록기를 도입할 수 있습니다.

  • 가능한 한 입력을 바꾸어 모든 가능한 장면을 덮어씁니다.테스트 범위는 어떤 내용이 테스트되지 않았는지 확인하는 데 도움을 줄 수 있습니다.나는 최소한 한 번의 테스트에 실패한 것을 검증하기 위해 고의적인 버그를 도입하는 것을 좋아한다.
  • '성격 테스트'라는 이름은 이미 페더의 관중들 사이에서 널리 퍼졌다.나는 이것이 좋은 이름이라고 생각한다. 특히 코드를 남기는 것에 대해서는.
    '승인 테스트'도 좋은 이름이다.나는 더 좋다고 생각한다.
    왜?그것이 암시했기 때문이다.이름이 중요해.내가 너에게 이 점을 설명하기 위해 다른 이름을 알려줄게. 그래, 더 많아.

    골드 마스터 및 스냅샷 테스트


    만약 당신이 이미 한동안 나타났다면, 당신은 황금 대가의 기술을 떠올릴 것이다.응, 마찬가지야.우리의 목표는 우리가 미래의 변화를 비교할 수 있도록 기존의 행위를 포획하는 것이다.

    "The purpose of characterization testing is to document your system's actual behavior; not to check for the behavior you wish your system had"

    — Michael Feathers


    '김스님'이라는 이름은 녹음 제작업계에서 나왔는데 구체적으로the process of mastering였다.이것은 유일하게 복제할 수 있는 진리다.
    소프트웨어가 무엇을 해야 하는지보다 더 중요한 정신을 담고 있지만, 나는 황금 대가라는 이름을 좋아하지 않는다.나에게 있어서 이것은 네가 그것을 건드리지 않는다는 것을 의미한다. 나는 유류 시스템을 처리할 때 이것은 좋은 마음가짐이 아니라고 생각한다.
    나는'인정'을 더 좋아한다. 왜냐하면 행위는 이미 인류의 인정을 받았기 때문에 우리는 이 점을 바꿀 수 있기 때문이다.나는 사람의 방면이 이 과정에 매우 중요하다고 생각한다.우리는 소프트웨어의 발전을 통제하고 있다.이것은 우리가 반드시 체계적인 행위에 대해 결정을 내려야 한다는 것을 의미한다.'승인 테스트'는 이 점을 표현했다!

    좋은 프린터(알 수 없음)의 중요성


    2020년 9월에 그는 비준 테스트에 관한 강연을 했다.
    At 15:40 인증 테스트의 네 가지 부분에 대해 설명합니다.
  • 일정
  • 법안
  • 인쇄
  • 단언(전 출력과 비교)
  • 인쇄 절차는 이러한 테스트를 진정으로 유용하게 하는 데 매우 중요하다.프린터는 캡처된 출력을 문자열로 변환하여 새 값을 이전 값과 비교할 수 있습니다.
    좋은 프린터는 관련되지 않고 불안정한 데이터를 제거하고, 인간의 읽기에 의미 있는 방식으로 출력을 포맷할 수 있다.
    예를 들어, 승인 테스트in the Supermarket Refactoring kata에서 캡처한 출력은 다음과 같습니다.
    ----------------------------------------
    Receipt date:           [date]
    ----------------------------------------
    3 for 2(apples)                    -0.99
    
    Total:                             -0.99
    
    데이터가 어떻게 실제 영수증으로 포맷되는지 아십니까?
    테스트 실행 사이에서 변경될 수 있기 때문에 실제 날짜가 삭제되었음을 주의하십시오.
    이것이 바로'스냅샷 테스트'가 왜 요점을 잡지 못했는가!
    페이스북과 그 테스트 라이브러리Jest는 이미 스냅숏을 보급했다.그것들은 남겨진 코드를 처리할 때 매우 유용하다.그것들은 당신이 비준 테스트를 진행하는 것을 돕는다.
    "Snapshots Tests"라는 이름은 출력을 캡처하는 작업에 초점을 맞추는 것이지 좋은 프린터의 중요성을 의미하지는 않습니다.
    나는 Jest의 스냅숏이 통상적으로 오용되었다고 생각한다.흔히 볼 수 있는 것은 사람들이 스냅숏만 업데이트할 뿐 무슨 일이 일어났는지 제대로 알지 못한다는 것이다.따라서 테스트를 했지만 오류가 발생할 수 있다. 변경이 합법적인지 아닌지를 판단하는 간단한 방법이 없기 때문이다.
    이 기술을 남용한 것은 제스트의 잘못이 아니지만, 페이스북이'승인 테스트'라는 명칭을 다시 사용해야 한다는 점을 더 잘 알아야 한다고 생각한다.반대로 그들은 자신의 해결 방안을 제기했다🤷‍♂️

    승인 테스트는 추가 리소스를 안내합니다.


    나는 이것을 다른 것이 아니라 사용할 것이다. 왜냐하면 이 이름은 너로 하여금 이 점을 돕기 위해 편리한 도구를 찾게 할 것이다.비록 네가 표징 테스트를 직접 작성할 수 있지만, 나는 네가 좀 보라고 건의한다. approvaltests.com
    '승인 테스트' 항목에는 많은 자원과 문서가 있습니다.그것은 십여 가지 언어로 실현된 것이다.approvaltests 라이브러리 외에도 프로세스를 단순화하기 위한 Touca 제품을 찾을 수 있습니다.그것은 대규모 응용 승인 테스트를 지원하고 포획된 출력과 협업할 때 발생할 수 있는 전형적인 문제를 복구한다.

    '인정 테스트'라고 합니다.


    기존 코드 비헤이비어를 테스트에 캡처하는 기술의 이름이 다음과 같습니다.
  • 특성 테스트
  • 인증 테스트
  • 황금 대가
  • 스냅샷 테스트
  • 잠금 테스트(감사합니다)
  • 컴백 테스트(이것이 바로 Touca가 자신을 묘사하는 방식)
  • 그 중에서 나는 그것을 '비준 테스트' 라고 부르는 것을 건의한다.다른 명칭이 같은 기술을 가리키는 것을 확인하다.
    검토approvaltests.com 및 프린터 사용을 고려하여 승인 테스트를 보다 유용하게 수행할 수 있습니다.
    너는 이런 기술의 또 다른 이름을 들어 본 적이 있니?
    이름 없이 승인 테스트를 사용했습니까?
    🤠

    좋은 웹페이지 즐겨찾기