익숙하지 않은 코드베이스를 설명하는 데 유용한 도구 나 기술은 무엇입니까? [닫은]


9

익숙하지 않은 코드를 수동으로 검사 (검토 또는 수정) 할 때 세 가지 옵션이있는 것 같습니다.

  • 하향식 읽기 파일 이름이 보인다 방법을 기초로 다음의 각 소스 파일을 선택, 코드의. 나는 보통 거의 모든 것을 읽습니다. 일부 파일은 두 번입니다.
  • 폭 우선 읽기 I 찾아 최소한의 이해를 호출하는 방법을 모두 읽고. 그런 다음 함수가 호출 한 모든 함수 등을 읽으십시오. 전화를 몇 번 깊게하면 내 정신 스택이 오버플로되는 경향이 있습니다.
  • 깊이 우선 읽기 이 있는지 모르는 내가 디버거의 모든 코드를 단계별로, 8 분 또는 8 시간이 소요됩니다.

내가하는 일을 상당히 확실하게 이해하기에 충분한 코드를 읽은 후에 는 기본 코드가 20 % 이하인 반면 코드베이스의 80 % 이상을 읽었 음을 종종 반영합니다 . 나는 많은 시간을 낭비했다.

익숙하지 않은 코드를 빠르게 파악하는 데 유용한 도구는 무엇입니까? 중요한 코드 경로의 "큰 그림"을 제공하고 어떤 부분의 세부 사항까지 드릴 다운 할 수있는 도구가 있습니까?


2
20 %가 기본적인 부분입니다 왜 80 % 퍼센트를 파악하지 않고는 이해할 수없는
래칫 괴물

@ratchetfreak 그런 절대적인 용어로 말하지 않을 것입니다. 예를 들어 도구는 항상 호출되는 코드를 격리 할 수 ​​있습니다. 또는 많은 스택 수준 만 실행하십시오.
Drew Dormann

답변:


8

물론 가장 좋은 방법은 코드 기반을 아는 사람이 코드를 안내하는 것입니다. 이것이 옵션이 아닌 경우 도움이되는 몇 가지 도구가 있습니다.

  • VisualStudio는 코드베이스의 UML 클래스 다이어그램을 자동으로 생성 할 수 있습니다. 최소한 클래스 계층 구조가 표시됩니다.
  • Doxygen은 매우 도움이 될 수 있습니다. 코드에 doxygen 스타일 주석이없는 경우에도 doxygen은 여전히 ​​읽을 수있는 문서, 클래스 다이어그램 및 호출 그래프를 생성 할 수 있으므로 익숙하지 않은 코드 기반을 둘러 보는 데 도움이 될 수 있습니다.

일반적으로 모든 기능을 갖춘 IDE를 사용하고 싶을 때 마우스 오른쪽 버튼을 클릭하고 "정의로 이동"할 수 있습니다. 이렇게하면 복잡한 디렉토리 구조에서 많은 파일에 grep을 사용하는 것과 비교하여 많은 시간을 절약 할 수 있습니다.

코드를 처리하는 데 걸리는 시간에 따른 또 다른 중요한 사항입니다. 단위 테스트가있는 경우 테스트를 살펴보십시오. 테스트가 없으면 작성을 시작하십시오. 특정 클래스 나 함수의 기능에 대한 가설을 세우고 테스트 할 테스트를 작성하십시오. 이것은 많은 훈련이 필요하지만, 코드에서 일어나는 일에 대한 답변을 얻는 좋은 방법입니다.


2
@Dima에게 감사합니다. Doxygen은 그 중 일부를 다루는 데 환상적입니다. (내가 아는 하나의 도구 이름을 삭제하여 답변을 조정하고 싶지 않았습니다). 수준이 높은 "인간 상호 작용"구성 요소에 대한 전문가들. :)
Drew Dormann

3

이것은보다 과감한 접근입니다. 이 기술은 의미있는 네임 스페이스로 구성되지 않은 클래스가 많은 프로젝트에 유용 할 수 있습니다.

이 연습의 목표는 계급 관계를 발견하는 것입니다. 프로젝트의 끔찍한 복제본을 만든 다음 일부 클래스를 네임 스페이스에 넣으십시오. 반복 된 시도에서 시간을 절약하려면 일부 Regex 파일 처리 도구를 사용하여이 변경을 자동화하십시오.

이로 인해 많은 컴파일러 오류가 발생합니다. 이러한 오류를 수정하는 과정에서 이러한 클래스가 서로 어떻게 의존하는지 파악하고 동일한 네임 스페이스에 넣을 수있는 클래스를 결정합니다.

이 기법은 프로젝트의 코드 구성을 거의 이해하지 않아도 적용 할 수 있다는 점에서 유용합니다. 이로 인해 오해로 인해이 기술에 의해 일부 클래스가 잘못 배치 될 위험이 있습니다.


영리 해요 일반적으로 많은 수업에 대해 그렇게합니까, 아니면 분명하지 않은 특정 수업을 접할 때 저장합니까?
Drew Dormann

@DrewDormann 나는 그룹화되지 않은 100 개의 수업에 직면했을 때 동료 중 한 사람 으로부터이 기술을 배웠습니다. 리팩토링이 발생하기 전에 프로젝트 파일을 "정렬"하기위한 첫 번째 단계입니다. 즉, 모든 것이 여전히 엉망인 경우에 사용됩니다. 프로젝트 파일을 네임 스페이스로 정렬하면 Doxygen 클래스 페이지 생성 (네임 스페이스 트리 표시)을 촉진하고 프로그래머의 이해도를 높일 수 있습니다.
rwong
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.