2010-12-28 2 views
4

현재 저는 매우 큰 레거시 프로젝트를 시작했고 항상 Reading and Understanding Other People's code을 두려워하는 상황에 있는데, 이것이 필수이지만 아직 개발되지 않은 필수 기술이라는 것을 알고 있습니다 이 날짜까지로 필요하지 않은 지금은 그 같은 필요성이 기술보다는 취미를 개발하고 그래서 SO에서 알고 싶습니다에 대한 독자 :다른 사람들의 코드를 읽는 데 필요한 기술 또는 필수 기술

당신이 다른 사람의 코드를 읽기의 장애물을 극복하는 방법
  1. ?
  2. 다른 사람들의 코드를 읽고 이해하는 데있어 당신의 기술을 연마하기 위해 어떤 기술이나 기술을 개발 했습니까?
  3. 당신이 언급했거나 일반적으로 다른 사람들의 코드를 읽고 이해하는 기술을 어떻게 개발 했습니까?

이 질문에 대한 유용한 답변을 얻었으니 이제는 내 코드를 이해하는 동안 어떻게 느끼는지 이해할 수 있습니다.

+0

스파게티 코드가 잘못 작성되었거나 "매우 큰"프로젝트의 모든 다른 부분에 머리를 쓰고있는 것입니까? – thirtydot

+1

나는 그 100 % * 스파게티 *를 말하지 않을 것이다. 그러나 둥글게 지나가는 약간의 조각이있다. – Rachel

답변

4

연습. 연습. 연습.

저는 오픈 소스 프로젝트에서 사람들과 상호 작용하여 장애물을 극복했습니다. 다른 사람들과 나의 공헌에 대해 토론하고, 제안을보고 자신의 눈을 뜨게 한 것들을 보는 방법.

당신에게 맞는 프로젝트를 찾고, 소스를 확인하고 가능한 한 기여하십시오 (시작과는 상관없이). 시간이 지남에 따라 코드 읽기 기능은 자연스럽게 나옵니다. 일부 프로젝트는 새로운 기여자를 돕기 위해 특별히 멘토를 제공합니다.

+0

좋은 오프닝 라인 : P – Dlongnecker

+0

위대한 마음은 비슷하게 생각합니다 :) – MattJ

2

Michael Feathers의 Working Effectively with Legacy Code은 이전 코드로 작업하기위한 많은 기술을 포함하고있는 훌륭한 리소스입니다.

+0

+1 연습은 당신이 방법을 알지 못하면 도움이되지 않습니다 -이 책은 어떻게하는지 알려줍니다. 그것을 읽은 다음 특성 분석 테스트를 작성하면 조언을 따릅니다. – orangepips

2

연습, 연습, 연습.

가능한 경우 코드를 작성했거나 아이디어를 갖고있는 사람과 이야기하십시오. 많은 그림을 그리고 댓글을 쓰는 동안 큰 것들을 설명하게하십시오.

길을 찾는 가장 빠른 방법은 길을 잃는 것입니다. 코드로 들어가서 물건을 부러 뜨리십시오. int를 문자열이나 다른 것으로 변경할 수 있는지 확인하십시오.

+0

나쁜 부분은 코드를 작성한 사람이 일을 떠났고 코드를 알고있는 기술자가 없으며 팀이 3 명의 새로운 개발자를 고용하고 코드를 이해하고 필요한 요구 사항 문서가 거의 없다는 것입니다. – Rachel

+0

그런 다음 놀고 그것을 깰. 반복. 코드를 깨뜨릴 때 코드에 대해 얼마나 빨리 배울 수 있는지는 놀랍습니다. – Dlongnecker

0

나는 그것을 할 수있는 방법을 모르지만, 나는 여러 가지 proyects에 참여했다. 여기서 나는 내 자신에 의해 저해해야한다. 어떻게 생각하고 그 해결책을 달성 할 수 있는가? 그래서 나는 또한 그것을 저지 할 수있다.

그 이유는 개발자 인 경우 추천 할 수있는 때마다 코드를 주석으로 작성하는 것이 좋습니다. 다른 사람이 유용하다고 생각하는지 알 수 없기 때문입니다. (필자는 제 생각으로 생각합니다)

개발자가 아닌 경우 나를 도와 줄 사람을 찾아야합니다.

0

다른 사람들의 글을 어떻게 배울 수 있습니까? 당신은 정말로 자신을 잘 작성하고 그 사람이 가능한 한 좋은 작가인지 확인하려고 노력합니다. (그들이 더 잘할 수있는 일들을 제안합니다.) 슬프게도 코드는 거의 항상 저자가 아닌 다른 사람이 읽습니다. 연습, 그리고 그 사람의 다른 코드에 익숙하면 도움이됩니다. 그러나 특정 라인이 무엇을 의미하는지 알아내는 데 5 분 이상을 할애 할 때마다 어떻게하면 더 잘 할 수 있었는지 유의하고 동일한 실수를하지 않도록하십시오.

행운을 비네.: D

0

익숙하지 않은 코드 기반에 접근 할 때 나는 처음부터 시작하고 싶습니다. main()을 찾고, main()이하는 일에 대한 요약을 써라. main()에서 호출 된 함수/메소드 목록을 작성하십시오. 시각적이라면 main()의 순서도를 만드십시오.

main()에서 직접 호출 된 메소드 목록을 찾으면 해당 메소드를 찾아 프로세스를 반복하십시오. 각각의 메소드가 무엇을하는지 알아 내면 JavaDoc 형식으로 작성하고 순서도의 해당 상자에 붙여 넣으십시오. API 호출 인 경우 사용중인 API를 기록하고 관련 API 설명서에 대한 링크를 넣으십시오.

반복적으로 작업하면 응용 프로그램의지도를 만들고 프로그램이 실제로 무엇을하는지 파악할 수 있습니다. 그것이 실제로 무엇을하는지 알게되면, 그것이하는 일과해야 할 일 사이의 불일치를 발견 할 수 있습니다.

0

사용 가능한 도구 및 설명서에 따라 대답이 달라집니다. 설명서가 있으면 사용할 수있는 모듈, 인터페이스 및 하위 시스템 상호 작용의 상위 수준 개요를 이해하려고합니다. 이렇게하면 코드를 읽고 따라 가면서 코드를 여러 부분으로 나누고 정복하는 데 도움이됩니다. 코드 전체에 공통적으로 사용되는 디자인 패턴이 있다면 그에 대한 지식을 축적하십시오. 또한 사용할 수있는 도구에 따라 인기있는 소스 코드 브라우저 (소스 탐색기/소스 인사이트)를 사용하여 종속성 (클래스 계층 구조 등)을 빠르게 볼 수 있습니다. 이렇게하면 코드 이해가 빨라집니다. 또한 몇 가지 유용한 단위 테스트 프레임 워크 코드 - 다른 입력 및 예상 된 출력으로 재생 해보십시오. 또한 디버거를 사용하여 선택한 복잡한 함수를 단계별로 실행하여 코드 흐름을 파악하는 것이 좋습니다.

1

인내 :Understand that reading code is more difficult than writing new code. 그렇다면 코드를 이해할 필요가 있습니다. 읽기 쉽지는 않지만 코드가 잘 작동하고 많은 경우 꽤 효율적입니다. 코드를 이해하려면 시간과 노력이 필요합니다.

아키텍처 이해 :이 문서가 있으면 가장 좋습니다. 가능한 경우 자세한 내용을 알고있는 사람들과 이야기 해보십시오.

테스트 할 곳 : 코드를 테스트하고 디버깅하는 데 시간을 할애해야합니다. 이해할 수있는 부분에 대해서는 가능하면 나중에 사용할 수 있도록 일부 단위 테스트를 작성하십시오.

짐작하지 말라 : 패턴의 이름을 여러 번 잘못 사용합니다. 수업에는 목적을 나타내지 않는 이름이 있습니다. 그래서 그들에 대해 아무 것도 생각하지 마십시오.

Learn Refactoring :이 주제에서 가장 좋은 책은 Refactoring: Improving the Design of Existing Code - Martin Fowler 저입니다. Working Effectively with Legacy Code은 또 다른 멋진 도구입니다.