문제

나는 가끔 불이 충분히 변화를 만들기 위해 아주 오래된, 문서화 설계 코드입니다.

그것은 종종 시간이 오래 걸리는 간단한 변화가 없기 때문에 구조로 기존 코드고 정말 많이 읽어야의 코드기 전에 느끼는 것이 될 것입니다.

내가 무엇을 생각하는,많은 도움이 될 것이 이 같은 경우 도구입니다 수있는 것 중 하나를 시각화의 개요를 코드,그리고 아마도 드릴 위해 아래로 더 많은 세부 사항입니다.심은 이러한 도구는 것이 매우 어려울 것이 바로 얻을 수 있도록,주어진 것을 찾기 위해 노력하고 구조가 거의 또는 제한 없음.

나는 생각이 문제이지만,오히려 생각만.나는 그것에게 질문으로- 무엇이 다른 사람을 돕기 위해서는 그들의 머리 주변의 다른 사람 코드,좋은 나쁜?

도움이 되었습니까?

해결책

강력하게 추천합니다 Bouml. 무료 UML 모델링 도구입니다.

  • 매우 빠릅니다 (지금까지 만든 가장 빠른 UML 도구, 확인하십시오. 벤치 마크),
  • 견고한 C ++ 수입 지원이 있으며
  • 예를 들어 Firefox에서 빠르게 스케일링하는 벡터 형식의 대형 그래프를보기가 매우 편리하기 때문에 SVG 내보내기 지원이 매우 중요합니다 ( "Birds Eye"보기와 클래스 세부 사항보기 사이에서 빠르게 전환 할 수 있음),
  • 등장하고 집중적으로 개발되었습니다 (봐 개발 역사, 너무 빠른 발전이 가능하다고 믿기가 어렵습니다).

따라서 : 코드를 Bouml로 가져 와서 거기에서 보거나 SVG로 내보내고 Firefox에서보십시오.

다른 팁

흠, 이것은 어려운 일이지만 너무 적은 시간을 말할 것입니다 ...

1) 코드를 실행할 수 있다면 Life Soooo를 훨씬 쉽게 만듭니다. 브레이크 포인트 (특히 조건부) 브레이크 포인트는 친구입니다.

2) 순수 주의자의 접근 방식은 알려진 기능에 대해 몇 가지 단위 테스트를 작성한 다음 코드와 이해를 향상시키기 위해 리팩터를 작성한 다음 다시 테스트하는 것입니다. 상황이 깨지면 더 많은 단위 테스트를 만들 - 지루/기존/새 프로젝트로 이동할 때까지 반복하십시오.

3) Resharper는 사물이 사용되는 위치, 예를 들어 방법이라고 부르는 내용을 보여주는 데 능숙합니다. 정적이지만 시작이 좋으며 리팩토링에 도움이됩니다.

4) 많은 .NET 이벤트는 공개로 코딩되며 이벤트는 최상의 시간에 디버깅하는 데 고통 스러울 수 있습니다. 그것들을 비공개로 기록하고 추가/제거와 함께 속성을 사용하십시오. 그런 다음 Break Point를 사용하여 이벤트에서 듣고있는 내용을 확인할 수 있습니다.

BTW- 저는 .NET 공간에서 플레이하고 있으며 Joel과 같이 이런 종류의 작업을 수행하는 데 도움이되는 도구를 좋아할 것입니다. 누구나 좋은 동적 코드 검토 도구를 알고 있습니까?

달라는 요청을 받았을 소유권의 일부를 불쾌한 코드를 과거에는 모두 작업 및"play".

대부분의 아마추어 나는 코드 단지 종류의 진화하는 코드를 무엇이 그들이 필요 여러 번 반복합니다.그것은 항상 거대한 근친상간의 엉망 라이브러리 호출 B 호출,다시 호출,C 을 호출,B,etc.많은 시간 그들이 스레드를 사용하고 중요한 부분을 볼 수 있습니다.

내가 찾는 최고의/을 얻을 수있는 유일한 방법에 처리 코드에서 시작 OS 항목이 포인트 main()]및를 호출 스택이 다이어그램을 보여주는 전화 나무입니다.당신은 정말 필요 없어를 구축하는 전체 나무에서 처음.그냥 추적 섹션을 통해(s)당신은 작업에서 각 단계에서 당신은 좋은 충분히 손잡이에서 일을 실행할 수 있습니다.

To top it all off,사용은 가장 큰 슬라이 죽은 나무의 찾을 수 있습니다 및 모니터링하고 있습니다.누워 그것은 모두 당신의 앞에 그래서 당신은 필요 없어로 다시 이동하고 앞으로 화면 또는 페이지를 만드는 삶을 훨씬 더 간단합니다.

편집:많은 이야기에 대한 코딩 표준...그들은 그냥 가난한 코드 모양과 일치 좋은 코드(그리고 일반적으로 더 열심히 자).코딩 표준하지 않은 항상 유지하는 코드는 쉽습니다.

나는 정기적으로 이것을한다. 그리고 몇 가지 도구와 트릭을 개발했습니다.

  • 일반적인 개요 (객체 다이어그램 또는 기타)를 얻으십시오.
  • 결과를 문서화하십시오.
  • 가정을 테스트하십시오 (특히 모호한 코드의 경우).

이것의 문제는 대부분의 회사에서 결과에 의해 감사한다는 것입니다. 그렇기 때문에 일부 프로그래머는 열악한 코드를 빠르게 작성하고 다른 프로젝트로 넘어갑니다. 그래서 당신은 쓰레기가 남아 있고, 상사는 빠르고 더러운 사람과 느린 진행 상황을 비교합니다. (운 좋게도 내 현재 고용주는 다릅니다).

나는 일반적으로 구성 요소를 사용하는 다양한 주요 방법의 UML 시퀀스 다이어그램을 사용합니다. 자동으로 생성 할 수있는 도구는 모르지만 Bouml 및 EA Sparx와 같은 많은 UML 도구는 소스 코드에서 클래스/작업을 생성하여 일부 타이핑을 저장할 수 있습니다.

이 상황에 대한 결정적인 텍스트는 Michael Feathers의 레거시 코드를 효과적으로 작업하는 것입니다. 처럼 S. 로트 Lagacy 코드의 동작을 설정하기 위해 일부 단위 테스트를 받으십시오. 일단 당신이 있으면 당신은 리팩터를 시작할 수 있습니다. 샘플 장이있는 것 같습니다 사용 가능 Object Mentor 웹 사이트에서.

보다 단위 테스트 레거시 ASP.NET WebForms 응용 프로그램 단위 테스트를 통해 레거시 앱에 대한 그립을 얻는 것에 대한 조언.

비슷한 질문과 답변이 많이 있습니다. 여기에 검색이 있습니다 https://stackoverflow.com/search?q=Unit+Test+Legacy

요점은 레거시에 대한 단위 테스트를 작성하는 경우 레거시 주위에 머리를 잡는 것이 가장 쉬운 일 것입니다.

나는 문서화되지 않은/실행 된 코드의 검토를 자동화 할 수있는 도구에 큰 운이 없었으며, 혼란스럽고 잘못 설계된 프로그램은 일반적으로 유용한 모델보다 덜 번역됩니다. 흥미롭지 않거나 즉시 보상하지는 않지만, 스팟을 선택하고 프로그램 실행 라인별로 프로그램 실행 라인을 따라 가면서 주석을 문서화하고 추가하고 해당되는 경우 리팩토링하는 데 가장 적합한 결과를 얻었습니다.

좋은 IDE (EMACS 또는 ECLIPSE)는 많은 경우에 도움이 될 수 있습니다. 또한 UNIX-PLATFORM에는 크로스 레퍼런스 (ETAGS, CTAGS) 또는 검사 (린트) 또는 GCC가 많은 많은 경고 옵션이 켜져있는 몇 가지 도구가 있습니다.

먼저, 함수/방법을 이해하기 전에 코딩 컨벤션 (공간, 브레이스, 들여 쓰기)에 맞게 약간의 리팩터링을하고 틀린 것처럼 보이는 경우 대부분의 의견을 제거합니다.

그런 다음 이해했던 부분을 리팩터하고 댓글을 달고 전체 소스 트리에서 해당 부분을 찾거나 grep하려고 시도하고 그곳에서 리팩토링하려고합니다.

시간이 지남에 따라, 당신은 더 좋은 코드를 얻습니다. 당신은 함께 일하는 것을 좋아합니다.

나는 개인적으로 다이어그램의 많은 그림을하고 구조물의 뼈를 알아내는 것입니다.

Fad de Jour (그리고 아마도 꽤 올바르게)는 내 주장을 테스트하기 위해 단위 테스트를 작성하고 시스템에 대한 변화에 대한 안전망을 구축하게되었습니다.

시스템이 무엇을하는지 알고 충분히 편안한 지점에 도달하면 가능한 가장 큰 방법으로 버그를 고정하는 데 찌르고 안전망이 거의 완료되기를 바랍니다.

그러나 그것은 단지 나입니다. ;)

가 actuaally 사이터베이스의 특징---끝---이력서 도 m 핸들을 얻을에 무리하는 프로젝트의 물려받았다.그래서,그 밖에 다른 프로그래머의 매우 저조한 구조화 문서화 코드,내가 실제로 시작하여 refactoring 니다.

청소하는 코드,이름 변경 방법을 수업과 네임스페이스를 올바로 추출하는 방법은 모든 구조적 변경 내용할 수 있는 빛에서 어떤 조각의 코드입니다.리 수명하게 들릴 리팩터 코드는"몰"하지만 트루트 나---끝---이력서 정말 이런 작업을 할 수 있습니다.예를 들어 문제의 훈제 청어 죽은 코드입니다.당신이 볼 수는 방법에서 클래스 또는 아마도 이상하게 라는 변수입니다.시작할 수 있습니다려고 노력하여 조회를 사용하거나,ungh,텍스트 검색을하지만,---끝---이력서 실제로 감지하는 코드와 색상 그것은 회색이다.한 빨리 파일을 열면 당신이 볼에는 그레이와 스크롤 바그는 것이 무엇이에 혼란 훈제 청어.

수십 개의 다른 트와 아마의 번호를 다른 도구를 할 수 있는 유사한 것들만 난---끝---이력서 쓰레기.

환호를 받았다.

사용자의 관점에서 소프트웨어를 친밀하게 알 수 있습니다. 사용자 인터페이스를 연구하고 상호 작용하여 기본 구조에 대해 많은 것을 배울 수 있습니다.

  • 인쇄물
  • 화이트 보드
  • 많은 음모
  • 많은 스타 벅스

가난한 일을 온통 낙서 할 수 있다는 것은 나에게 가장 유용한 방법입니다. 일반적으로 나는 "허, 그거 재밌습니다 ..."를 많이 켜고 있습니다. 기본 코드 구조 다이어그램을 만들려고 노력하면서 다이어그램보다 더 유용한 것으로 판명됩니다. 자동화 된 도구는 내가 신용을 제공하는 것보다 더 도움이 될 수 있지만, 그 재미있는 비트를 찾는 가치는 빠르게 생성 된 다이어그램의 가치를 초과합니다.

다이어그램의 경우 대부분 데이터가 진행되는 곳을 찾습니다. 어디에서 들어오고, 어디에서 끝나고, 길을 통과하는 것은 무엇입니까? 일반적으로 데이터에서 발생하는 것은 전체 레이아웃에 대한 좋은 인상을주고, 다시 쓰기를하면 일부 뼈가 다시 올 것 같습니다.

레거시 코드를 작업 할 때 전체 시스템을 이해하려고 시도하지 않습니다. 이로 인해 복잡성 과부하와 후속 뇌 폭발이 발생합니다.

오히려, 나는 시스템의 하나의 단일 기능을 취하고 끝에서 끝까지 어떻게 작동하는지 완전히 이해하려고 노력합니다. UI 코드의 지점에서 시작하여 특정 기능을 찾을 수있는 코드로 디버깅 할 것입니다 (일반적으로 처음에는 찾을 수있는 유일한 것이기 때문에). 그런 다음 GUI에서 약간의 작업을 수행하고 코드를 데이터베이스로 내려 놓은 다음 백업합니다. 이것은 일반적으로 시스템의 적어도 하나의 기능을 완전히 이해하게되며 때로는 시스템의 다른 부분에 대한 통찰력을 제공합니다.

어떤 기능을 호출하고 있는지, 어떤 절차, 테이블 및 뷰가 관련되어 있는지 이해하면 코드를 검색하여 응용 프로그램의 다른 부분이 동일한 기능/Procs에 어떤 의존하는지 알아냅니다. 이것이 제가 변경할 변화가 시스템의 다른 것을 깨뜨릴지 알아내는 방법입니다.

때로는 데이터베이스 및/또는 코드 구조의 다이어그램을 만드는 데 유용 할 수 있지만 때로는 시스템 전체를 무시하고 필요한 부품에 집중하는 것이 더 나쁘거나 매우 복잡하기도합니다. 변화.

내 큰 문제는 (현재) 상당히 짧은 시간 내에 이해할 수있는 매우 큰 시스템을 가지고 있다는 것입니다 (이 시점에서 계약 개발자가 동정하는 계약 개발자). 처음부터 디자인 한 사람.)

내가 사용하는 한 가지 방법은 변수, 방법, 클래스 등의 명명의 의미를 이해하려고 시도하는 것입니다. 이것은 원자 수준에서 사고 열차에 대한 높은 수준의 관점을 포함하기 때문에 유용합니다.

나는 일반적으로 개발자가 자신의 요소 (자신이 믿는 것과)를 의미있게 이름을 지정하고 의도 된 기능에 대한 통찰력을 제공하기 때문에 이것을 말합니다. 이것은 개발자가 프로그램, 용어 또는 (종종 경우, IMHO)에 대한 이해가 결함이있는 경우 결함이 있습니다. 키워드 나 클래스 이름을 보았고 처음으로 사전에서 용어를 찾아 보았던 개발자는 몇 명입니까?

회사가 사용하는 표준 및 코딩 규칙에 관한 모든 것입니다.

모든 사람이 다른 스타일로 코드를 코딩하면 다른 프로그래머 코드 등을 유지하기가 어렵습니다. 어떤 표준을 사용하는지 결정하면 모든 규칙이 괜찮을 것입니다. :) 참고 : 많은 것을 만들 필요가 없습니다. 규칙은 사람들이 좋아하는 스타일로 코딩 할 가능성이 있어야합니다. 그렇지 않으면 매우 놀랄 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top