리팩터링 가이드

이 문서는 리팩터링을 수행하는 동안 고려해야 할 기법과 모범 사례의 모음입니다.

테스트 핀 지정

테스트 핀 지정은 리팩터링 대상 엔터티의 출력물 또는 동작을 의도치 않게 변경하지 않도록 보장하는 데 도움이 됩니다. 이는 소비자가 해당 버그를 암시적으로 의존할 수 있기 때문에 기존의 버그 있는 동작을 보존하는 데도 포함됩니다.

예제 단계

  1. 리팩터링 대상에 대한 가능한 입력을 모두 식별합니다(예: 템플릿에 삽입되는 것이나 조건부로 사용되는 것).
  2. 각 가능한 입력에 대해 중요한 가능한 값 확인합니다.
  3. 각 유용한 결합 값에 대해 상세한 스냅샷을 저장하는 테스트를 생성합니다. 이는 현재 동작을 ‘핀’ 지정했다는 것을 보장해야 합니다. 이 스냅샷은 스크린샷, HTML 덤프 또는 디버깅 문에서의 목록일 수 있습니다.
  4. 리팩터링을 시작하기 전에 코드에 대해 모든 테스트 핀 지정을 실행합니다(Oracle).
  5. 리팩터링을 수행합니다(또는 작업이 완료된 커밋을 확인합니다).
  6. 리팩터링 후 코드에 대해 다시 모든 테스트 핀을 실행합니다(Pin).
  7. Oracle과 Pin을 비교합니다. Pin이 다르면, 리팩터링이 기존 동작을 보존하지 않음을 알 수 있습니다.
  8. 리팩터링이 완료될 때까지 이전 세 가지 단계를 필요에 따라 반복합니다.

예제 커밋 기록

테스트를 추가하거나 제거하는 커밋을 남겨 다른 사람이 테스트의 결과를 확인하고 검증할 수 있도록 합니다.

AAAAAA Add pinning tests to funky_foo
BBBBBB Refactor funky_foo into nice_foo
CCCCCC Remove pinning tests for funky_foo

그런 다음 MR에서 테스트 핀을 실행하는 방법에 대한 검토자에게 지침을 남길 수 있습니다. 예:

먼저 테스트를 제거하는 커밋을 되돌립니다.

git revert --no-commit $(git log -1 --grep="Remove pinning test for funky_foo" --pretty=format:"%H")

그런 다음 테스트를 실행하십시오.

yarn run jest path/to/funky_foo_pin_spec.js

핀을 초록색으로 유지하기

리팩터링이 100% 순수하게 이루어지는 것은 어렵습니다. 이는 모든 것을 절대로 포착하는 핀이 미미하고 예상된 차이로 실패할 수 있다는 것을 의미합니다. 예상된 변경사항으로 핀을 정리하여 핀을 초록색으로 유지하려고 노력하세요. 이렇게 하면 다른 사람들이 리팩터링이 안전했음을 빠르게 확인할 수 있습니다.

예제 해설(비공식 위키)

예제