메소드 이름에서 철자 오류 수정


73

우리의 코드베이스에서 일반적으로 사용하는 방법 중 하나는 철자가 잘못되었습니다.

이것은 단순히 철자가 틀리기 때문에 단순히 나를 자극하지는 않지만 더 중요하게는 처음 입력 할 때 항상 이름이 잘못되도록합니다 (그리고 나서 "오, 맞습니다.

원래 방법을 약간 변경하고 있습니다. 난 그냥 괴물 방법의 이름을 바꿀 수 있습니까?


12
이름 바꿀 수 있습니까? 제어하지 않는 코드에서 사용하는 경우 이전 버전과의 호환성 중단을 정당화해야합니다.

16
* 맞춤법이 틀립니다. 그리고 메소드가 호출되는 모든 곳에서 변경해야합니다.
JohnP

2
* misspelt ... 아니면 다른 철자가 있습니까?
HorusKol

2
@JohnP 세 개가 있었는데 이제는 하나가 수정되었고 두 개는 여전히 올바르지 않습니다. 우연히 OP의 이름에 아주 잘 어울립니다. :)
Disillusioned

3
철자가 잘못 입력되지 않도록해야합니다!
Magus

답변:


136

난 그냥 괴물 방법의 이름을 바꿀 수 있습니까?

물론.

즉, 코드가 API로 릴리스 된 경우 일반적으로 철자가 틀린 메소드를 그대로두고 올바른 이름의 메소드로 전달해야합니다 ( 언어가 해당 기능을 지원하는 경우 사용되지 않음으로 표시 ).


33
"올바로 명명 된 방법으로 전달"이라는 아이디어는 간단하고 훌륭합니다. 깨진 창문 이론에 대한 흥미로운 링크도 있습니다.
dev_feed

2
공개 API의 일부인 경우 언어에 따라 이전 버전과 호환되는 변경 사항이 아닐 수 있습니다. 이것은 소리처럼 들리지 않을 것입니다 .. 미스 펠트 이름을 가진 기존 API에서 상속해야한다면 분명히 고칠 것입니다.
Voo

10
@voo-어? 어떤 메소드가 새로운 메소드를 추가하고 (그리고 동일한 정확한 동작을 수행하도록 메소드를 변경하면) 이전 버전과 호환되지 않습니까?
Telastyn

3
@ Telastyn 때로는 웹 서비스를 말하는 방법을 추가하는 것이 까다로울 수 있습니다. 예를 들어, 일부 클라이언트는 WSDL 변경으로 인해 갑자기 서버와의 통신을 거부합니다. 그것은 클라이언트의 구현 문제이지만 클라이언트가 중요한 것이면 화 내고 싶지 않다면 인터페이스를 변경하지 못하게 할 수 있습니다.
jwenting

17
@Telastyn misspelt 메소드 이름이 인터페이스 에있는 경우 (Delphi / Java / C #에서 사용되는 인터페이스 유형에서와 같이), 철자가 올바른 버전을 추가하면 해당 인터페이스의 모든 기존 구현이 중단 될 수 있습니다.
Disillusioned

52

이러한 리팩토링을 피해야하는 경우가 있습니다.

  1. 메소드가 공용 인터페이스에서 사용되는 경우 정규 예제의 맞춤법 참조 자HTTP 리퍼러 지금 철자를 변경하면 너무 많은 영향을 줄 것이기 때문에, 잘못된 맞춤법이 유지되고있다.

  2. 코드베이스가 테스트에 포함되지 않은 경우 모든 리팩토링은 회귀 테스트를 수행 할 수 있도록 테스트 코드를 수행해야합니다. 테스트 중이 아닌 코드베이스를 리팩토링하는 것이 특히 위험합니다. 시간이 많으면 테스트를 추가하여 시작하십시오. 당신이 시간 압력 하에서 일하는 경우, 미묘한 버그가 발생할 위험을 감수하는 것이 정시에 배송하려는 경우 최선의 방법은 아닙니다.

  3. 이 방법을 비정상적인 방식으로 사용할 수있는 경우 (Ctrl + F 또는 자동 리팩토링 도구를 통해) 실제로 사용하기가 불가능합니다. 예를 들어 C #에서는 리플렉션을 통해 메서드를 호출하여 Visual Studio의 이름 바꾸기 대화 상자를 사용할 수 없습니다. JavaScript에서는 inside라는 함수 eval()를 찾기가 어렵습니다. PHP에서 변수 변수는 문제를 일으킬 수 있습니다.

  4. 프로젝트의 규모가 크고 다른 팀이이 방법을 사용할 수있는 경우 이것은 첫 번째 요점과 비슷합니다. 즉, 다른 팀에 제공하는 인터페이스는 공용 인터페이스로 간주 될 수 있습니다.

  5. 인생에 중요한 프로젝트를 다루는 경우. 방법의 이름을 변경하고 환자가 승인 된 방사선 또는 셔틀이 속도를 잘못 계산하는 열 배를받지 않도록하기 위해 몇 개월의 서류 작업을 정당화하는 데 맞춤법 오류가 너무 중요하지 않을 수 있습니다.

다른 상황에서는 메소드 이름을 자유롭게 바꾸십시오.


1
리플렉션에 대한 언급에 +1하면 두 번 이상 물 렸습니다.
DaveShaw

33
인생에 중요한 프로젝트가 아주 약해서 리팩토링으로 누군가를 죽일 가능성이 있다면, 아무도 자신의 삶을 신뢰해서는 안됩니다. 분석법의 이름을 바꿀 수없는 경우에도 새로운 기능이나 간소화 된 사용자 인터페이스에 생명을 위협하는 버그가 발생하지 않았다고 어떻게 확신하십니까?
user2357112

2
마찬가지로, 하나의 분석법 이름을 변경하면 몇 시간의 추가 서류 작업이 발생하는 경우 (예를 들어, 동시에 변경되는 다른 모든 서류에 대해 대부분 서류 작업을 처리하는 대신), 프로그래밍 대 서류 균형이 왜곡됩니다 시스템을 변경하지 않고는 크게 개선 할 수 없습니다.
user2357112

8
@ user2357112 : 나는 가장 작은 리팩토링이 누군가를 죽일 가능성이 있다고 말한 적이 없다. 누군가를 죽이는 것이 아니라 버그가 발생할 수있는 나머지 0.001 %의 위험을 완화하기 위해 모든 것을 가능하게하는 것입니다. 공식적인 전문가가 필요합니다. 이를 위해서는 여러 계층의 테스트가 필요합니다. 이것은 형식주의가 필요합니다. "이 방법의 이름을 빠르게 바꾸고 싶습니다. 행동. 생명에 중요한 프로젝트는 모든 비즈니스 앱에 시간과 돈을 낭비하는 것으로 간주되는 기술을 사용합니다. 그렇기 때문에 그들이 믿을만하고 비싸다.
Arseni Mourzenko 2018 년

5
@ user2357112 : MainMa이 지적했듯이 이것은 캐주얼 비즈니스 앱이 아닙니다. 광범위하게 테스트 / 확인 된 특별한 종류의 소프트웨어에 관한 것입니다. 어딘가에서 반사에 의해 메소드가 호출되면 어떻게됩니까? 사전 / 사후 컴파일 도구로 무언가를 수행하면 어떻게됩니까? 설명서는 어떻습니까? 그것을 사용하는 다른 팀은 어떻습니까? 그들은 반사를 사용합니까? 만약 ... 실제 생활은 때때로 매우 복잡 할 수 있습니다. 그리고 때로는 방탄 방식으로 결과가 있는지 확인하는 것보다 메소드 이름을 그대로 두는 것이 좋습니다.
dagnelies

30

나는 몇 달 전에 (다른 이유로) 이것을했습니다. 내가 취한 단계 (언어는 Perl이었다) :

  1. 메소드의 이름을 바꾸십시오. 이전 이름을 새 이름으로 별칭을 지정합니다 (두 가지 이름으로 메서드를 호출 할 수 있으므로 코드를 손상시키지 않아야 함).
  2. 나머지 개발자들에게 이름 변경과 그 이유에 대해 알리고 지금부터 새로운 이름을 사용하도록 지시하십시오.
  3. 이전 이름의 코드베이스를 잡고 발생을 수정하십시오.
  4. 이전 이름의 사용을 기록하십시오 (이전 이름 ​​사용은 여전히 ​​작동합니다). 그러한 경우를 수정하십시오.
  5. 로그에 더 이상 항목이 표시되지 않을 때까지 기다리십시오 (4를 수행하는 동안).
  6. 별명을 해제하십시오. 이름 변경에 대한 메시지와 함께 치명적인 예외를 발생시키는 이전 이름을 사용하는 메소드를 작성하십시오.
  7. 얼마 후 이전 이름의 메소드를 제거하십시오.

    물론, 마일리지는 다를 수 있습니다.


한 가지 개선 사항-이전 이름의 사용자를 찾기 위해 grep에 의존하지 않고 전달자 내부에 로그인하십시오.
Ben Voigt 2016 년

@BenVoigt # 4가 아닌가?

6

기존 코드를 손상시키지 않는 좋은 방법은 다음과 같이 새 메소드 이름을 이전 메소드에 연결하는 것입니다.

private void MyNewMethodName()
{
    TheOldMethodName();
}

그런 다음 이전 방법을 더 이상 사용하지 않는 것으로 표시합니다 (언어가이를 지원하는 경우). 이렇게하면 기존 코드가 계속 작동하며 코드베이스에서 오래된 철자법 실수를 모두 점차적으로 제거 할 수 있습니다. 결국 메소드 본문을 복사하여 새 메소드에 붙여넣고 이전 메소드를 삭제할 수도 있습니다.

/ 편집 ivo가 주석에서 말했듯이 : 더 좋은 방법은 코드를에서 TheOldMethodName로 옮기고 MyNewMethodName이전에서 새 메소드를 호출하는 것입니다. 이것은 또한 코드가 속한 곳을 개발자가 이해하는 데 도움이되는 이점이 있습니다.


2
귀하의 방법에 동의합니다. 나는 똑같이 할 것입니다. 가장 깔끔하고 명확하며 안전한 리팩토링 방법입니다. 좋은 방법은 코드를 이전 메소드에서 새 메소드로 이동하고 이전 메소드를 새 메소드로 사용하는 것입니다. 코드베이스가 타임 라인에서 몇 번 반복되는 경우 더 이상 사용되지 않는 이전 방법 만 제거하면됩니다.
Ivo Limmen 2014 년

1
@IvoLimmen 정말 좋은 제안입니다. 이 방법으로 사람들은 새로운 방법을 사용하여 훨씬 더 머리를 숙이고 새로운 방법에서 오래된 방법에 대한 구식 호출에서 경고를 제거합니다. 나는 이것을 내 대답에 추가 할 것이다.
Rémi

1

메소드 이름 바꾸기 :

  • 원하는 것보다 더 많은 일을하지 않도록 리팩토링을 통해 수행
  • IDE가 자동 완성을 지원하는 경우 해당 방법을 참조 할 때 사용하십시오

그것들은 당신이 갈 수있는 두 가지 옵션입니다. 자동 완성 (예 : Eclipse IDE)을 선호하며 메소드 이름을 입력 할 필요가 없습니다. 이름 바꾸기를 위해; 그 메소드를 호출하는 것이 무엇인지 확인하고 각 위치에서 직접 참조를 변경하십시오. 리팩토링은 당신의 친구가 될 것이지만 그렇게 할 때 가장 조심하십시오.


0

나는 일반적으로 예를 추천합니다.

여기에있는 다른 답변에는 이름을 바꾸고 싶지 않은 이유가 나와 있습니다. 따라서 그러한 상황에 처한 경우 적절한 이름과 구현으로 새 메소드를 만들고 이전 메소드를 변경하여 새 메소드를 호출 할 수 있습니다 . 그런 다음 언어가 지원하는 경우 이전 언어를 사용되지 않는 것으로 표시하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.