2008-10-15 5 views
3

내 스튜디오에는 10 년 이상 개발 된 대형 코드베이스가 있습니다. 우리가 시작한 코딩 표준은 C++와 관련된 모든 종류의 표준에 대해 걱정해야하기 전에 집안에 개발자가 거의없는 상태에서 개발되었습니다.큰 코드베이스에서 코드 표준 리팩토링

최근에 우리는 작은 R & D 프로젝트를 시작하여 우리의 환경에보다 적합한 코딩 규칙을 업데이트했습니다. R & D 작업은 기존 프로젝트 코드에 통합됩니다. 우리에게 직면 한 주요한 문제 중 하나는 두 가지 작업 영역에 대해 두 가지 기준을 갖고 있고 현재 코드 기반이 교차한다는 것입니다. 저는 스튜디오에서 두 가지 기준을 원하지 않습니다. 사실 하나의 표준으로 앞으로 나아갈 수있어서 기쁩니다. (우리가 어떻게 이런 상황에 빠져들 었는지에 대한 '방법'은 중요하지 않습니다. 단지 우리가 존재하고 우리가 존재하지 않기를 바랐습니다.)

문제는 기존 코드를 리팩터링하는 것입니다. 두 가지 코드베이스 (상대적으로 작은 코드베이스와 매우 큰 코드베이스)를 다르게 보는 것에별로 신경 쓰지 않습니다. 기존 표준 코드베이스 중 하나를 리팩토링하여 다른 표준을 따르는 데 관심이 있습니다. 문제는 더 작은 코드 기반이 (IMO) 더 바람직한 표준이라는 것입니다.

나를 위해 대규모 리팩토링을 할 수있는 도구를 찾기 시작했습니다. 나는 코드를 재정렬하고 강화하는 것에 관심이 없다. 나는 기본적으로 함수/변수 수준의 이름을 변경하고

class MyClass {} 
.... 
class MyClass A; 

class my_class {} 
.... 
class my_class A; 

같은 것들을 변화에 관심이 있어요. 시각 보조 (Visual Assist)와 같은 것을 사용하지 않으려면 오랜 시간이 걸릴 것입니다. 나는 위쪽으로 10000 개의 소스/헤더 파일에 수십만 줄의 코드를 가지고있다. VA를 한 번에 한 클래스 씩 사용하면 시간을 낭비하게되고 노력할 가치가 없습니다.

저는 다른 게시물에서 Vera을 실행했습니다. 그것은 그것이 일을 잘하고 잘 할 것 같은 것 같습니다. Vera를 사용하고있는 상황에 대해 경험이있는 사람이 있는지 알고 싶습니다. 또는 작업을 완료 할 수있는 도구에 대한 다른 권장 사항이 있습니다. 나는이 도구가 실제로 코드 구조를 이해하는 것이 중요하다고 생각하여 조심스럽게하지 않으면 미묘한 버그로 이어질 수 있기 때문에 검색/바꾸기 방식으로 변수의 이름을 변경하지 않도록하십시오.

편집 : 내 예제에서는 이름 사이에 _을 사용하는 것으로 나타 났지만 다른 방식으로 이동하는 것이 더 유용 할 수 있습니다. 큰 이름 바꾸기에 도움이 될 일반적인 솔루션을 찾고 있습니다.

감사합니다. 내가 변수의 이름을 바꾸는 생각

답변

9

내 프로세스는 누군가 특정 모듈을 터치 할 때마다 이름을 바꾸는 것입니다. 궁극적으로 모든 모듈이 리팩토링되지만 증분 접근 방식은 코드 파손을 줄여줍니다 (완전한 테스트 세트가 있다고 가정).

+0

이 예전의 오래된 질문으로 돌아가지만 이것은 우리가 리팩터링을 많이 한 방법입니다. – Mark

0

는 까다로운 일이 될 것입니다 - 그렇게 어렵지 않을 것이다, 그래서 다행히 당신은 대문자로 대회 _에서거야 내가 걸릴 것

(하지만 _ 읽고하는 것이 더 쉽습니다 더 나은) 코드 미화 (예 : Artistic Style 또는 Uncrustify)를 입력하고 변환하여 변환하십시오. 이 전환에 대해 몇 가지 맞춤 규칙 만 있으면되므로 너무 어렵지 않을 것입니다.

+0

필자의 예는 아마도 선호도 였지만 확실한 것은 아니었다. 우리는 다른 방향으로 움직일지도 모른다. 나는 일을 끝내는 방법에 대해 더 궁금하다. 나는 명확성을 위해 질문을 편집했다. – Mark

+0

크리 키, 그러면 커다란 직업이 있습니다. 나는 그것을 단편적으로 할 것이다 - 당신이 모듈을 바꿀 때 이름을 바꾼다. 그런 식으로 손댈 수없는 것을 보게 될 것입니다. 팀은 그러한 접근 방식의 실용성에 대해서도 잘 알고 있어야합니다. – gbjbaanb

+0

PS _는 C++ 코드에서 사용되는 표준으로, Stroustrup은 가독성이 뛰어나고 STL과 부스트 라이브러리는이를 사용한다고 생각합니다. – gbjbaanb

2

사용자 지정 스크립트를 사용하여 이와 같이 변경했습니다. 가능한 경우 sed를 사용합니다. 그렇지 않으면 정규 표현식을 잘 지원하는 스크립트 언어를 사용하겠습니다.그것은 버그를 소개하는 원유 해킹이지만 더 나은 솔루션을 찾지 못하면 앞으로 나아갈 경로입니다.

+0

도구가 너무 느리고 변환이 간단하다면 위의 예처럼 약간의 스크립트가 매력처럼 작동합니다. 특히 모든 것이 여전히 작동하는지 자동 검사로 확인하는 경우 – Tetha

0

IMHO, 변수 이름 바꾸기는 간단하게 노력할 가치가 없습니다. 중요한 것은 코드가 강력하고 읽기 쉽고 효율적이라는 것입니다. 전에 사용 된 스타일을 채택하고 중요한 일에 시간을 할애하십시오.

+0

변수 이름 바꾸기 새 스타일 호출 코드에서 문제가되거나 이전 스타일 코드에서 클래스를 사용합니다. 나는 그것이 강력하다는 것만 큼 중요하지 않다고 동의하지만, 얼마 후 작성하는 것은 어려워진다. – moogs

+0

변수 만이 아닙니다. 그것은 일관성에 관한 것입니다. 나는 그것이 중요하다고 생각합니다. 저를 믿으십시오. 필자는 이것이 정말로 중요한지 아닌지에 대한 생각으로 씨름 해 왔지만, 코드베이스의 일관성을 측정하는 데 약간의 노력이 필요하다고 생각합니다. – Mark

+0

가끔은 그만한 가치가 있습니다. 헝가리 표기법을 사용하는 경우 변수 유형이 이름에 인코딩 될 수 있습니다. 변수 유형을 변경하면 이름을 변경해야 할 수도 있습니다. 새로운 코드에 표기법을 사용하지는 않지만, 요즘에는 주로 오래된 코드로 작업하고 있습니다. – criddell

2

(1) 신뢰할 수 있고 자동화 된 테스트 세트와 (2) C++ 의미를 이해하는 리팩토링 도구 (필자는 그러한 도구에 대해 들어 보지 못했다)가 없으면 자동화 된 이름 변경을 권장하지 않습니다. 연습을 할 때마다 항상 당신이 지금 작업하고있는 모듈 만 리팩토링하는 것이 었습니다. 길지만 비교적 고통스럽지 않은 과정입니다.

0

refactorings과 같은 소스 코드 변환을 포함하여 대부분 자동화 된 C++ 소스 코드 분석을 수행하기 위해 Mozilla 사람들이 사용하고 작성하고 유지 관리하는 "pork"을 고려해 볼 수 있습니다. 자바 스크립트를 사용하여 스크립팅 가능하며 매우 복잡한 의미 론적 분석과 변환을 지원합니다. 그래서 기호의 이름을 바꾸는 것은 돼지 고기에 대해 쉬운 일 중 하나입니다.

이제는 GCC plugins are on the way이 될 것입니다. 앞으로 이러한 일이 더 쉽게 될 것입니다.