먼저 새 API 동작을 원하는 새 API를 작성하십시오. 이 새 API의 이름이 OLDER API와 동일한 경우 새 API 이름에 _NEW라는 이름을 추가합니다.
int DoSomethingInterestingAPI ();
된다 :
int DoSomethingInterestingAPI_NEW (int takes_more_arguments); int DoSomethingInterestingAPI_OLD (); int DoSomethingInterestingAPI () {DoSomethingInterestingAPI_NEW (whatever_default_mimics_the_old_API); 이 단계에서는 DoSomethingInterestingAPI ()라는 이름을 사용하여 모든 회귀 테스트가 통과합니다.
다음으로 코드를 살펴보고 DoSomethingInterestingAPI ()에 대한 모든 호출을 적절한 DoSomethingInterestingAPI_NEW () 변형으로 변경하십시오. 여기에는 새로운 API를 사용하기 위해 회귀 테스트의 일부를 변경 / 갱신하는 것이 포함됩니다.
다음으로 DoSomethingInterestingAPI_OLD ()를 [[deprecated ()]]로 표시하십시오. 더 이상 사용되지 않는 API를 유지하십시오 (원하는 코드를 모두 안전하게 업데이트 할 때까지).
이 방법을 사용하면 회귀 테스트의 실패는 단순히 해당 회귀 테스트의 버그이거나 원하는대로 코드의 버그를 식별합니다. _NEW 및 _OLD 버전의 API를 명시 적으로 작성하여 API를 수정하는 단계적 프로세스를 통해 한동안 새롭고 오래된 코드가 공존 할 수 있습니다.
실제로이 접근법의 좋은 예는 다음과 같습니다. BitSubstring () 함수를 사용했습니다. 여기서 세 번째 매개 변수를 하위 문자열의 비트 수로 만드는 접근법을 사용했습니다. C ++의 다른 API 및 패턴과 일관성을 유지하기 위해 함수의 인수로 시작 / 종료로 전환하고 싶었습니다.
https://github.com/SophistSolutions/Stroika/commit/003dd8707405c43e735ca71116c773b108c217c0
새 API로 BitSubstring_NEW 함수를 만들고 모든 코드를 업데이트하여 사용했습니다 (BitSubString에 더 이상 호출하지 않음). 그러나 여러 릴리스 (개월) 동안 구현을 떠나서 더 이상 사용되지 않음으로 표시하여 모든 사람이 BitSubString_NEW로 전환 할 수 있습니다 (그 당시 인수를 카운트에서 시작 / 종료 스타일로 변경).
그런 다음 전환이 완료되면 BitSubString ()을 삭제하고 BitSubString_NEW-> BitSubString ()의 이름을 바꾸고 또 다른 커밋을 수행했습니다 (BitSubString_NEW라는 이름은 더 이상 사용되지 않습니다).