익숙하지 않은 코드를 수동으로 검사 (검토 또는 수정) 할 때 세 가지 옵션이있는 것 같습니다.
- 하향식 읽기 파일 이름이 보인다 방법을 기초로 다음의 각 소스 파일을 선택, 코드의. 나는 보통 거의 모든 것을 읽습니다. 일부 파일은 두 번입니다.
- 폭 우선 읽기 I 찾아 최소한의 이해를 호출하는 방법을 모두 읽고. 그런 다음 함수가 호출 한 모든 함수 등을 읽으십시오. 전화를 몇 번 깊게하면 내 정신 스택이 오버플로되는 경향이 있습니다.
- 깊이 우선 읽기 이 있는지 모르는 내가 디버거의 모든 코드를 단계별로, 8 분 또는 8 시간이 소요됩니다.
내가하는 일을 상당히 확실하게 이해하기에 충분한 코드를 읽은 후에 는 기본 코드가 20 % 이하인 반면 코드베이스의 80 % 이상을 읽었 음을 종종 반영합니다 . 나는 많은 시간을 낭비했다.
익숙하지 않은 코드를 빠르게 파악하는 데 유용한 도구는 무엇입니까? 중요한 코드 경로의 “큰 그림”을 제공하고 어떤 부분의 세부 사항까지 드릴 다운 할 수있는 도구가 있습니까?
답변
물론 가장 좋은 방법은 코드 기반을 아는 사람이 코드를 안내하는 것입니다. 이것이 옵션이 아닌 경우 도움이되는 몇 가지 도구가 있습니다.
- VisualStudio는 코드베이스의 UML 클래스 다이어그램을 자동으로 생성 할 수 있습니다. 최소한 클래스 계층 구조가 표시됩니다.
- Doxygen은 매우 도움이 될 수 있습니다. 코드에 doxygen 스타일 주석이없는 경우에도 doxygen은 여전히 읽을 수있는 문서, 클래스 다이어그램 및 호출 그래프를 생성 할 수 있으므로 익숙하지 않은 코드 기반을 둘러 보는 데 도움이 될 수 있습니다.
일반적으로 모든 기능을 갖춘 IDE를 사용하고 싶을 때 마우스 오른쪽 버튼을 클릭하고 “정의로 이동”할 수 있습니다. 이렇게하면 복잡한 디렉토리 구조에서 많은 파일에 grep을 사용하는 것과 비교하여 많은 시간을 절약 할 수 있습니다.
코드를 처리하는 데 걸리는 시간에 따른 또 다른 중요한 사항입니다. 단위 테스트가있는 경우 테스트를 살펴보십시오. 테스트가 없으면 작성을 시작하십시오. 특정 클래스 나 함수의 기능에 대한 가설을 세우고 테스트 할 테스트를 작성하십시오. 이것은 많은 훈련이 필요하지만, 코드에서 일어나는 일에 대한 답변을 얻는 좋은 방법입니다.
답변
이것은보다 과감한 접근입니다. 이 기술은 의미있는 네임 스페이스로 구성되지 않은 클래스가 많은 프로젝트에 유용 할 수 있습니다.
이 연습의 목표는 계급 관계를 발견하는 것입니다. 프로젝트의 끔찍한 복제본을 만든 다음 일부 클래스를 네임 스페이스에 넣으십시오. 반복 된 시도에서 시간을 절약하려면 일부 Regex 파일 처리 도구를 사용하여이 변경을 자동화하십시오.
이로 인해 많은 컴파일러 오류가 발생합니다. 이러한 오류를 수정하는 과정에서 이러한 클래스가 서로 어떻게 의존하는지 파악하고 동일한 네임 스페이스에 넣을 수있는 클래스를 결정합니다.
이 기법은 프로젝트의 코드 구성을 거의 이해하지 않아도 적용 할 수 있다는 점에서 유용합니다. 이로 인해 오해로 인해이 기술에 의해 일부 클래스가 잘못 배치 될 위험이 있습니다.