태그 보관물: refactoring

refactoring

작동하는 C ++ 리팩토링 도구가 있습니까? [닫은]

누구든지 큰 코드 기반 (약 100.000 줄)에서 안정적으로 작동하는 C ++ 용 리팩토링 툴을 알고 있습니까?

지난 몇 년 동안 SlickEdit, Eclipse CDT와 같이 다시 찾을 수있는 모든 것을 시도했습니다. 그들은 모두 사용할 수 없었습니다.

요약 : 시간이 걸리고 “Visual Assist X”와 “C ++의 리 팩터”를 평가했습니다. 둘 다 인상적인 기능이 있지만 완벽하지는 않습니다. 큰 코드 블록을 추출하는 것은 일반적으로 수동 수정 없이는 만족스럽지 않으므로 보상하지 않습니다.

“Visual Assist X”는 훨씬 더 완전한 자동 완성 등과 같은 멋진 기능을 가지고 있습니다. 그러나 특정 지점에서 깜박임이 많이 발생하고 속도가 느려집니다.

제 생각에는 “아니오, C ++를위한 프로덕션 리팩토링 툴이 없습니다”라는 대답입니다.

2015 년 3 월 업데이트
hdoghmens의 답변에 대해서는 오늘 C ++ 용 Resharper를 사용해 보았습니다. 그의 링크
https://www.jetbrains.com/resharper/ 는 C ++에 대해 아무 말도하지 않습니다. 그러나 1 년 전에 발표 된 Resharper C ++을 발견했습니다.

https://www.jetbrains.com/resharper/features/cpp.html

20MB의 코드베이스를 사용하여 VC2010을 사용해 보았습니다.

테스트 1 : 추출 방법 : Resharper 예외가 발생합니다. 소스 코드가 변경되지 않았습니다.

테스트 2 : 소스가 다른 추출 방법 : 제대로 작동

테스트 3 : 추출 된 함수의 서명 변경 : C ++ 코드가 손상됨 :

bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&)

아마 그 이유는 C ++가 메인 페이지에 나열되지 않은 이유입니다.

제 생각에이 질문에 대한 답은 여전히 “아니오” 입니다.



답변

Visual Studio를 사용하는 Visual Assist X 가 매우 유용하다는 것을 알았습니다 . 또 다른 선택은 C ++에 대한 리 팩터입니다 .


답변

Visual Assist 및 Visual Studio를 사용하면 큰 코드베이스를 훨씬 쉽게 처리 할 수 ​​있습니다. 시각적 지원은 클래스 나 멤버가 어떻게 사용되는지 추적하는 데 유용하며 검색 및 바꾸기보다 오탐없이 이름을 바꾸는 데 더 효과적입니다.


답변

clang 은 앞으로 몇 년 동안 C ++ 리팩토링 도구의 환경을 크게 바꿀 것으로 기대 합니다. C ++ 코드를 구문 분석하고 의미 적으로 분석하기위한 API를 제공하는 오픈 소스 모듈 식 컴파일러입니다. IDE 및 기타 도구는 자체 파서 및 시맨틱 분석기를 작성하는 어려운 작업을 수행하는 대신이 API를 사용할 수 있습니다.

Google은 이미 clang을 사용하여 대규모 리팩토링 도구를 만들었습니다 .


답변

Mozilla에는 Pork ( Wiki , Developer Wiki ) 라는 자체 리팩토링 도구가 있습니다. 다음 은 Pork의 개발자 블로그입니다. 내가 읽은 내용에서 Pork는 Mozilla의 리팩토링에 성공적으로 사용되었습니다.

* 닉스 랜드에서 온 사람이라면 돼지 고기가 도움이 될 것입니다.


답변

당사의 DMS 소프트웨어 리엔지니어링 툴킷 은 C ++를 포함하여 대규모 코드를 통해 복잡한 변환을 수행하도록 설계된 변환 엔진입니다. 수백만 줄의 코드 시스템을 안정적으로 변경하는 데 사용되었습니다. 컴파일러 정확한 언어 분석기 및 변압기를 사용하여 작동합니다.

여기에는 이름 및 유형 확인 기능이있는 전체 C ++ 파서가 있으며 AST 코드를 빌드하고 절차 적 또는 소스 간 변환 (C ++ 표면 구문 사용)을 적용하여 해당 트리를 수정하고 주석이 보존 된 컴파일 가능한 출력을 재생성 할 수 있습니다. (편집 : 2011 년 7 월 1 일 : 이제 표준을 이해하는 한 C ++ 1X를 수행합니다.)

C ++ 구성 요소 재구성 및 언어 간 100 % 완전 자동화 된 번역 등 대규모 리엔지니어링 프로젝트에 사용되었습니다. 웹 사이트에서 이에 대해 읽을 수 있습니다.

DMS는 또한 임의의 소스 분석 도구를 구축하는 데 사용됩니다. 복제 감지, 테스트 범위, 스마트 차이 (삽입 및 삭제가 단순한 행이 아닌 소스 코드 구조 비교 및 ​​추상 편집 작업) 등이 있습니다.

그것이 아닌 것은 대화식 리팩토링 도구입니다. 우리는 대부분의 리팩토링을 잘 수행하기 위해서는 철저한 제어와 데이터 흐름 분석이 필요하다고 생각합니다. DMS는이를 지원하는 일반 기계를 갖추고 있으며이 시점에서 C, COBOL 및 Java에 대해 기계가 구현되며 C ++가 다음 라인에 있습니다. 이것은 힘든 일입니다. 이런 종류의 문제가 잘 해결 될 때까지는 아무도 심각한 C ++ 리팩토링 도구를 많이 볼 수 없습니다. 먼저 완전한 C ++ 파서가 필요합니다 :-}

2011 년 7 월 5 일 편집 : 대화 형 버전에서 실행하는 것처럼 보입니다. 우리는이를 수행하는 방법을 조사하기 위해 에너지 부 I 상 SBIR을 수상했습니다. http://science.energy.gov/sbir/awards-and-general-stats/fy-2011/phase-i-by-state/?p=1#tx ( “텍사스”에서 시맨틱 디자인을 찾으십시오)를 참조 하십시오 . 서둘러 결과를 기대하지 마십시오. 이것은 3 단계 다년간 프로그램의 시작일뿐입니다.

2011 년 8 월 11 일 편집 : 첫 번째 진행 … 이제 모든 C ++ 0x 및 OpenMP 지시문을 처리합니다.

1/4/2012 편집 : C ++ 코드의 모든 제어 흐름 분석을 수행합니다.

2014 년 9 월 15 일 편집 : 이제 C ++ 14 프론트 엔드 파서 / 변환 엔진이 잘 갖추어져 있습니다. 이 시점에서 꽤 안정적으로 이름을 바꾸더라도 :-}


답변

emacs를 사용하는 경우 Xrefactory를 사용해보십시오 . 메소드 추출, 클래스 / 함수 / 변수 이름 변경 및 매개 변수 삽입 / 삭제 / 이동을 지원하며 매우 우수한 / 빠른 코드 완성 엔진을 갖추고 있습니다.


답변

현재 내가 추천 할 수 있는 C에 대한 리팩토링 도구 ++, 확실히 100,000 라인 위의 큰 코드베이스합니다. 나는 OP와 같이 이것이 바뀔 것이라고 기대했고 언젠가 뭔가가 있기를 바랍니다. 정말 좋은 도구를보기 전에 언어 자체가 크게 바뀌어야 할까봐 걱정됩니다.

btw, SlickEdit가 리팩토링 기능을 떨어 뜨렸습니까?