프로덕션 코드에서 잘못 명명 된 함수를 처리하는 방법은 무엇입니까?


28

최근 GitHub에서 Python 라이브러리를 보았습니다. 라이브러리는 훌륭하지만 함수 이름에 눈부신 오타가 하나 있습니다. dummy_fuction()그것이 있어야 하는 동안 전화합시다 dummy_function(). 이 기능은 "실제로"존재하며 임베디드 시스템에서 가장 많이 사용됩니다.

가장 먼저 떠오르는 것은 올바른 이름의 함수의 두 번째 버전을 추가하고 다음 릴리스의 첫 번째 버전에 더 이상 사용되지 않는 경고를 추가하는 것입니다.

세 가지 질문 :

  1. 위의 접근 방식으로 의도하지 않은 결과가 발생할 수 있습니까?
  2. 이런 종류의 문제에 대한 표준 접근법이 있습니까?
  3. 지원 중단 경고를 얼마나 오래 보관해야합니까?

1
이것은 정적 언어가 동적 언어보다 훨씬 강력한 상황입니다 (심지어 빈번하지는 않지만). 컴파일러는 이름이 바뀐 함수가 이미 존재하는지 확인할 수 있습니다.
조르지오

7
참조 또한 HTTP 리퍼러 [원문]
AakashM

2
또한 Apache의 mod_speling을 지적 했지만 의도적 일 수 있습니다.
복원 Monica Monica iamnotmaynard

1
@AakashM : 위키 백과 기사에서 철자가 틀린 버전이 더 널리 퍼져있는 상태에서 페이지 전체에서 (단어가 아닌 객체를 언급 할 때도) 잘못된 철자와 정확한 철자를 모두 사용하는 방식이 마음에 듭니다.
Martijn Pieters

에 대한 또 다른 좋은 점 http_referer- "참조 필드를 할 때와 같습니다. 맞춤법 선택에 대한 슬픔 만 남았습니다. 이제 맞춤법이 분당 수십억 번 사용되므로 OED에서 맞춤법을 수정하려고합니다. 그들보다. " - 필립 할람 베이커
제이미 불

답변:


29

우선, 정책은 관리자에게 달려 있습니다.

귀하의 질문은 흥미롭지 만 대부분 의견에 근거한 것 같습니다.

내 개인적인 견해로는 당신의 접근 방식은 건전합니다. 함수의 이름을 바꾸고 철자가 틀린 버전을 더 이상 사용되지 않는 이슈로 남겨두고 올바른 것으로 리디렉션하십시오.

위의 접근 방식으로 의도하지 않은 결과가 발생할 수 있습니까?

예를 들어 코드가 손상 될 수 있습니다. 누군가가 맞춤법 오류를 견디지 ​​못하고 이름이 바뀐 자체 버전을 구현 한 경우 이제 라이브러리를 업데이트하면 이름 충돌이 발생합니다.

이런 종류의 문제에 대한 표준 접근법이 있습니까?

라이브러리를 작성할 때 철자를 잘못 쓰지 마십시오.)

지원 중단 경고를 얼마나 오래 보관해야합니까?

다음 주요 릴리스 (버전 번호의 첫 번째 숫자가 증가 할 때)까지 지원 중단이 남아 있어야한다고 생각합니다.

이것은 일부 정당화 된 이전 버전과의 호환성 깨짐이 용인 될 수 있으며 코드가 여전히 잘 작성되도록 라이브러리 사용자에게 달려 있습니다.

changelog에서 지적하십시오 : 얘들 아, 사용했다면 어디든지 dummy_fuction바꾸십시오 dummy_function.

라이브러리의 버전이 정해져 있지 않다면 버전 관리를 시작하는 것이 좋습니다.


1
잘 들었습니다. 라이브러리 버전이 정해져있어 버전 관리 방식이 좋습니다. 실제로 자체 IDE가 있으므로 철자가 틀린 버전을 코드 완성 도구에서 숨겨서 새 사용자가 사용하지 못하게해야합니다. Q2에 대한 답변을 위해 +1을 더 줄 수 있다면!
Jamie Bull

2
이것은 다른 소프트웨어에서도 본 접근법입니다. 필자는 개발 한 소프트웨어에 타사 API를 사용하며 API에는 오타가 포함 된 getter 메서드가 포함되어 있습니다. 이 문제는 메소드의 이름을 바꾸고 올바른 버전을 호출하는 오래된 (잘못된) 철자가있는 더미 메소드를 작성하여 해결되었습니다. 더미 메소드에는 더 이상 사용되지 않으며 올바른 버전에 대한 링크를 언급하는 것 외에 다른 문서가 없습니다. 이 방법은 이전 버전과의 호환성을 유지하기 위해 수년 동안 존재 해 왔습니다 .
Karl Nicoll
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.