코드에서 자리를 지키기위한 좋은 기술은 무엇입니까?


21

코드에서 단일 지점을 기억하기 위해 책갈피 를 사용하는 것으로 알고 있습니다. 그러나 조사중인 코드 의 흐름 을 어떻게 추적 합니까? 예 : 여러 북마크 및 북마크 순서

예:

  1. 버그 보고서 : "충돌은 벽 모서리에서 작동하지 않습니다"

    1. 버그를 재생산하면 충돌하지 않는 특정 다각형으로 내려갑니다.
    2. 충돌 코드는 사용할 수없는 개발자가 작성했습니다. 따라서 조사는 다음과 같습니다.

흐름의 스키마

조사 중, 특히 Google과 같은 비 코드 항목을 검토 할 때 코드에서 해당 위치를 잃어 버릴 것으로 예상 될 수 있습니다 ( 이 코드 경로를 이미 보았습니까? 또는 조사중인 코드 경로는 무엇입니까? 이 기능 등). 피할 수없는 중단에 대해서도 마찬가지입니다 (Boss : [Lengthy Pointless Report] NOW 등).

코드에서 자신의 위치를 ​​추적 할 수있는 방법을 제공하는 기술 또는 도구를 보유하는 것이 유용합니다.


편집 : 위의 예는 대답이 필요한 실제 문제가 아니라 잠재적 인 설명을위한 것입니다.

이 질문을 표현하는 또 다른 방법은 다음과 같습니다.

새로운 시스템을 학습 할 때 코드를 학습 할 때의 현재 위치를 어떻게 추적합니까? 그것은 이해에 대한 아니에요 이유 코드 (코멘트가해야 무엇 인)은 무엇 않지만, 어떻게 그것을 않습니다 (이는 코드 만이 아니라 의견을 읽기를 통해 알게된다).

답변:


14

Bubbles 인터페이스 는 한 번에 많은 코드를 보여줌으로써이 문제를 해결하려고 시도합니다. (구글링 브라우저가 붙어 있습니다). 그것은 훌륭해 보이지만 나는 그것을 시도하지 않았습니다. 이 아이디어 버전은 Visual Studio Ultimate에 대한 Visual Studio 구현입니다.


이것이 문제에 대한 실용적이고 준비된 솔루션이므로 +1입니다. (그것은 또한 약간 굉장하다!)
Jess Telford

내가 몇 년 전에 머리에서 발명 한 것 중 하나는 이미 존재한다는 것을 알기 위해 : (+1
phresnel

Squeak 및 다른 스몰 토크에서 수행 할 수있는 작업과 유사 해 새 코드 탐색 창을 열고 원하는 메소드 / 클래스를 탐색 할 수 있습니다.
Rudolf Olah

꽤 굉장합니다 ... 나는 비슷한 방식으로 인터넷 브라우징을 시각화하는 작은 장난감 앱을 만들었습니다 (링크를 클릭하면 새로운 노드가 추가되고 원점으로 다시 연결됩니다). 코드 시각화에 적용하는 것을 생각하지 마십시오.
Michael Brown

12

언급 된 모든 위대한 기술 외에도 구식 A3 용지가 이러한 문제에 탁월한 도움이된다는 것을 알았습니다. 아이디어를 기록하고 마인드 맵 스타일로 구성하십시오.


ye 최고의 답변.
Patrick Hughes

10

내 편집기와 디버거는 함수의 정의로 건너 뛸 수 있으며 웹 브라우저와 같은 다단계 "뒤로"버튼을 사용하여 이전 위치로 돌아갈 수 있습니다. 일반적으로 복잡한 디버깅 흐름을 추적하기에 충분합니다. 또한 소스 커밋을 통해 커밋 을 많이 할 수 있습니다 . 그것은 내가 왜 무언가를 시도하고 있는지 설명하는 커밋 메시지와 그것이 효과가 없다면 변경 사항을 신속하게 철회하는 방법을 알려줍니다. 그 외에, 잠재적이고 탐색 된 리드를 나열하는 간단한 화이트 보드가 남아있는 공백을 채 웁니다.


1
매우 실용적입니다. 나는 이런 식으로 소스 컨트롤을 사용하려고 생각하지 않았습니다.
Jess Telford

어떤 편집기와 디버거?
John Gaines Jr.

Vim과 Green Hill의 MULTI 디버거.
Karl Bielefeldt

Visual Studio에서는 CTRL +-로 돌아가고 CTRL + =로갑니다.
VitalyB

Eclipse는 커서 아래에서 현재 기호의 정의를 별도의 패널에 표시 할 수 있습니다.

3

내가 추적하는 여러 가지 방법 :

  • 적어 두십시오 . 2 분 후에 회의가 있습니까? 무엇을하고 있었는지 어디에 적어 두십시오. 코딩 할 때 물건을 쓰려고 펜과 종이를 항상 내 옆에두고 있습니다.
  • 북마크 . 설정할 수있는 10 개의 북마크가 있습니다.
  • Stacktrace . 코드의 전체 계층을 쉽게 볼 수 있습니다. 내 편집기를 사용하면 스택 추적을 복사하여 저장할 수도 있습니다. 다음에 편집기를 열 때 빠른 탐색을 위해 스택 추적을로드 할 수 있습니다.
  • 에디터 네비게이션 . 기본 멤버로 이동, 상속자로 이동, 사용법 찾기, 참조로 이동 ...

1

나는 간단한 해결책을 사용합니다-작업이 끝날 때까지 아무것도 닫지 마십시오. 즉, 일반적으로 50 개 정도의 열린 창 / 탭 중 하나에는 다시 돌아 왔을 때 생각했던 것을 상기시키는 무언가가 있습니다.


이 접근 방식의 문제는 여러 동시 생각 / 연구 분야를 어떻게 추적합니까?
Jess Telford

1
나는 그것이 문제라고 생각하지 않습니다. 그것들은 모두 거의 같은 방식으로 열려 있으며, 내가 어느 지점으로 돌아 오는지는 중요하지 않습니다. 이것은 IDE보다 웹 브라우저에서 더 잘 작동하지만 현재 코드베이스가 실제로 개념적으로 구성되어 있지 않기 때문일 수 있습니다.
Tom Clarkson

1

실제 개발자 도구 / IDE를 얻으십시오. Vi, Emacs, Eclipse 또는 무엇이든 (선택은 가장 논쟁의 여지가 크지 만 다른 문제입니다) 그것을 올바르게 사용하는 법을 배우십시오 . 너무 많은 사람들과 마찬가지로 구문 고도가 높은 메모장처럼 사용하지 마십시오. 단축키 사용 방법을 배우고 일반적인 동작에 마우스를 사용하지 마십시오 (너무 느립니다). 큰 화면 (1920x1200 최소)은 유익합니다.

내 개발 도구의 이름이 (느리지 만 유용한 이름으로 유지됨) 및 이름이 지정되지 않은 (빠른 삽입 및 삭제) 책갈피, 앞뒤로 탐색 및 참조는 하나, 할 일 및 개발자 (개인 및 그룹 전체) 노트에 모두 표시됩니다. 특정 소스 코드 라인. 그것은 또 다른 플러그인을 설치할 필요없이 태양 아래 모든 언어를 수행합니다.

저는 십여 개 이상의 언어를 사용하여 십여 개 이상의 1 백만 + SLOC 모듈로 구성된 코드베이스에서 작업합니다. 분명히 나는 ​​한 번에 모든 작업을 수행하지 않고 오히려 1-2의 작은 부분에 중점을 두지 만, 내가하고있는 일과 관련된 코드의 특정 지점까지 몇 가지 작업으로 탐색 할 수 있습니다.


적절한 IDE가 가장 좋습니다. 나는 vim의 위대한 마크와 태그 점프 기능을 사용합니다. 그러나 둘 다 한계가 있습니다. 마크는 버퍼 로컬이며 태그 히스토리는 선형입니다. 복잡한 상황에서는 여전히 충분하지 않습니다 (따라서이 질문을하십시오).
Jess Telford

1
나는 Vi 아마추어이지만, 몇 가지 짧은 스크립트를 작성하거나, VIM을 실제로 사용하는 법을 배우거나, 기능이 설정된 도구로 변경하는 데 시간을 할애하는 고급 사용자의 손으로 무엇을 할 수 있는지 보았습니다. 당신을 위해 일하고 그것을 배우는 데 시간을 보냈습니다. 그게 내 요점입니다. 도구를 배우십시오. 좋은 상인은 자신의 도구를 비난하지 않으며, 니더는 좋은 프로그래머를 수행합니다.
mattnz

동의했다. 나는 vim을 가진 고급 초보자입니다 (대부분 생각하지 않고 사용할 수 있지만 표면을 거의 긁지 않았습니다). 알지 못하는 것이 있습니다. 그래도 vi (m)에서 psr의 답변 과 같은 것을 할 수 있다고는 생각하지 않습니다 (적어도 내 연구는 아닙니다).
Jess Telford

@Jess : 마크가 반드시 로컬 버퍼 일 필요는 없습니다. 대문자를 사용하는 마크는 글로벌입니다.
Dave Kirby

@DaveKirby 최고 - 나는 정력에 대해 새로운 것을 배우는 사랑 : D
제스 텔 포드

1

Visual Studio를 사용하면 디버그 세션에서 'Call Stack'창 ( Debug / Windows / Call Stack바로 사용 하거나 바로 가기로 활성화 Ctrl+Alt+c)을 사용하여 코드 흐름을 추적 할 수 있습니다 .


1
대부분의 디버거에서와 같이. 코드 기반 외부의 리서치를 포함하여 코드를 수동으로 탐색 할 때 문제가 더 많습니다.
Jess Telford

1

콜 그래프 플롯을 만들 수있는 많은 도구를 언급 한 사람이 아무도 없습니다. doxygen 이 큰 도움 이된다는 것을 알았습니다 . 프로그램 전체에서 doxygen을 사용하지 않아도 추적에 관심있는 기능에 태그를 지정할 수 있습니다 .


0

나는 uber-outlining 도구 인 emacs에 org 모드 를 사용 합니다 . 그것으로 코드의 호출 스택을 모방하고 소스 코드 자체에 대한 직접 링크를 포함하는 개요를 작성할 수 있습니다 (org-store-link를 통해). 설명 텍스트, 웹 페이지 링크 등을 포함 할 수 있습니다 (예 : 매직 번호를 Google에 검색 할 때)

완벽하지 않습니다. 예를 들어 아웃 라인 구조에는 레벨을 올리는 개념이 없으므로 스택과 달리 실행 경로를 추적하기가 어렵습니다. 그러나 내가 찾은 종이에 다이어그램으로 만드는 것이 다음으로 가장 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.