때때로 다른 사람의 코드를 파헤쳐 이해해야하며 리팩터링하거나 수정해야 할 수도 있습니다. 그래서 나는 당신이 그것을하기 위해 어떤 도구/관습을 사용하는지 궁금합니다. 특정 언어 나 플랫폼에 관한 것이 아니라 일반적인 조언입니다.
나 자신이 디버거에서 문제의 코드를 실행하는 것이 매우 유용하다는 것을 알았습니다 (물론 가능하다면). 중단 점을 설정하고 코드를 단계별로 실행하십시오.
또한 리버스 엔지니어링 기능이있는 몇 가지 UML 도구를 사용하여 큰 그림을 보았습니다. 시각화는 나를 위해 꽤 잘 작동합니다.
꽤 많이 사용한 적이있는 도구가 하나 있는데, Understand입니다. UML 도구는 아니지만 코드를 시각화 한 것입니다. 예를 들어, UML의 일부가 아닌 함수에 대한 제어 흐름 다이어그램이 있지만 때로는 매우 유용합니다.
가끔은 사람들이 배우고 싶은 코드에 대한 테스트를 작성한다고 들었지만, 저에게는 효과가 없었습니다. 때로는 이해하고자하는 코드를 테스트 할 수없는 경우가 있습니다.
프로파일 러, 의존성 검사기, 로거 (logger) 등과 같은 다른 도구가 있습니다. 그리고 어떻게?
처음 사용하는 것은 무엇부터 시작합니까? 다음은 무엇입니까?
다른 사람의 코드를 이해하는 데 필요한 도구와 모범 사례
답변
나는 이런 상황에 처해있었습니다 ...별로 재미 있지 않습니다. 내가 찾은 최선의 방법은 변경하려는 영역을 포괄하는 단위 테스트를 작성하는 것입니다. 테스트가 이미 존재하더라도 리팩터링하려는 코드의 API와 동작에 대한 경험을 제공합니다. 또한 대체 구현을 확인하기 위해 더 많은 테스트를 얻게됩니다.
모듈, 네임 스페이스 및 클래스 디자인과 같은 고급 구조를 찾고 계십니까? 아니면 수업의 내부를 이해하려고하십니까? 특정 코드 행이 어떻게 작동합니까? 그것들은 두 종류의 분석 도구입니다.
일반적으로, 나는이 개 캠프에 요청 이러한 종류의 분할 :
- 는 버그가 아니라 전체 코드를 수정합니다. 이 경우 코드를 읽고 경향을 크게 변경하지 않고도 쉽게 수정할 수 있는지 확인합니다. 5 줄의 코드를 추가합니다. 이것은 원하는 결과를 얻기 위해 최소한의 충격을주는 외과 적 파업과 같은 변경 사항이있는 곳입니다.
코드를 찢어 내고 훨씬 더 좋은 것을 넣으십시오. 이 경우에는 변경을 수행 할 수있는 좋은 방법이 없거나 모든 코드를 소화해야하는 미니 프로젝트에 번들로 제공하려는 작은 변경 사항이 많이 있습니다. 이는 사소한 변경 사항이 아닙니다. . ASP 사이트를 가져 와서 최신 .Net 프레임 워크에 넣는 것이 여기에 그 예가 될 것입니다. 이다 변경 뭔가 어떤 종류의 결정
다른 사람이 호출 할 수 있습니다 무엇을 이해하는 연습과 경험의 비트가 필요 "한 가지 더 당신이 수 있다면 ..."큰 거래를 할 수 있지만하지 않는 수 그런 식으로 보자. 우리는 오류를 기록하는 작은 모듈을 추가 할 수 있고 나쁜 일이 생길 때 나에게 전자 메일을 보냅니다. 그러면 다른 모든 요구 사항이 해결 된 후에 코드가 메일 메시지를 보낼 수 없다면 어떻게 되겠습니까? 해야 할 것.
플랫폼별로 분류되지만 ReSharper는 .NET 코드의 숨겨진 의미를 알아내는 데 유용합니다. 나는 당신이 세트, 도착, 구현 등을 찾을 수있는 "Find Usages Advanced"기능을 좋아합니다 ...
체크 아웃 nWire을 수행하십시오.이클립스 플러그인은 현재 Java & PHP 용이며 코드를 분석하고 코드 탐색, 시각화 및 검색 도구를 제공합니다. 이 도구는 코드에서 클래스 계층 구조, 호출, 인스턴스화 및 거의 모든 다른 것들을 연관 짓는 것에 대한 것입니다.
코드 뭉치 (BTW, 나를 위해, 심지어 내 자신의 코드조차 그것을 만지지 않고 두 달 후에 소외된다)로 파고에 매우 유용합니다.
둘 다. 나를 위해 큰 그림을보고 낮은 수준으로 갈 때 코드를 이해하는 것이 더 쉽습니다. – Max