오래된 프로젝트를 정리하는 좋은 방법은 무엇입니까?


11

약 2 년 전에 작성한 일부 소프트웨어가 있으며 추가 된 기능이 필요합니다. 나는 그것이 끔찍한 혼란에 빠졌다는 것을 깨달았고 나는 모든 것을 움직이고 정리하는 등의 충동을 가지고있다. 나는 Joel on Software 기사를 다시 시작하지 않는 것에 대해 읽었 으므로 가장 좋은 방법은 무엇입니까?


그 당시 어떤 결정에 동의하지 않습니까?

답변:


21

세 가지 기본 옵션이 있습니다.

  1. 응용 프로그램 인 경우 매우 작은 하고 진짜 엉망 , 다시 시작하는 것은 실제로 사용 당신의 최선의 방법 일 수 있습니다.

  2. 리팩터링 .

  3. 엉망으로 살고 추가 기능을 해킹하십시오.

일반적으로 옵션 (2)가 가장 좋습니다.

실제로 얼마나 많은 리팩토링을 수행 하느냐는 투입 한 자원과 배출되는 가치에 따라 달라집니다. 물어볼 질문은 다음과 같습니다.

  1. 몇시 / 예산이 있습니까?
  2. 앞으로 얼마나 많은 수정을 기대하십니까?
  3. 누가 코드를 볼 수 있습니까? (즉, 지저분한 코드는 평판을 손상시킬 수 있습니까?)
  4. 다른 사람이 코드를 유지해야합니까?
  5. 어떤 리팩토링 도구를 사용할 수 있습니까?
  6. 리팩토링 경험은 무엇입니까?
  7. 리팩토링을 통해 어떤 경험을 얻을 수 있습니까?
  8. 어떤 종류의 리팩토링이 가장 큰 이점을 제공합니까?
  9. 어떤 자동 테스트가 이미 존재합니까? 작성해야합니까?
  10. 얼마나 많은 수동 테스트가 필요합니까?
  11. 코드를 그대로두면 어떤 느낌이 들까 요?

내 경험상 리팩토링 세션에서 적절한 머들에 들어가는 것은 매우 쉽습니다. 내가 배운 가장 중요한 교훈은 다음과 같습니다.

  1. 한 번에 한 가지 작업을 수행하십시오.
  2. 작은 조치를 취하십시오.
  3. 소스 컨트롤을 잘 활용하십시오 (자주 체크인 + 주석 포함).
  4. 자동 리팩토링 도구를 사용하십시오.
  5. IDE를 알고 있어야합니다.

6
또한 깨진 상태를 너무 오랫동안 피하기 위해 추가하고 싶습니다. 야심 찬 재 작성 / 재 설계 중에 많은 오픈 소스 프로젝트가 빠르게 죽어가는 것을 보았습니다. 작동하지 않는 프로젝트는 동기 부여를 빠르게 중단시킵니다.
LennyProgrammers

2
물론. 야심 찬 재 작성 / 디자인과 관련하여 나는 이것을 두 번 이상 파울했습니다. 이제는 작은 단계로 물건을 가져 가려고합니다. 나는이 제안을 내 대답에 추가했다.
Kramii

또한 테스트를하지 않은 것은 리팩토링해서는 안된다고 덧붙였다. 모든 것을 고치고 새로운 기능을 추가하기 위해 변경이 필요한 부분에만 집중해야한다는 충동에 저항하십시오. 일단 완료하면 나머지를 리팩토링하기 위해 얼마나 많은 노력을 기울일 것인지 결정하십시오.
TMN

1
@TMN : 이상적으로는 그렇습니다. 그러나 항상 자동 테스트 가 필요한 것은 아닙니다 . (1) 자동화 된 테스트없이 코드를 개발했다면 이미 리팩토링을 완료하기 전에는 단위 테스트를 개장하기가 쉽지 않을 수 있습니다. (3) 자동 리팩토링 도구 + IDE 기능은 리팩토링의 결과로 코드가 깨지는 것을 방지 할 수 있습니다.
Kramii

2
소스 제어에 모든 리팩토링을 별도의 브랜치에 추가하십시오. 이것은 큰 블록 비교뿐만 아니라 합리적인 단계적으로 수행하는 데 도움이됩니다. 사물이 커스터드로 바뀌면 귀중 할 수 있습니다 (WHICH THE WILL).
quick_now

5

새로운 기능을 안전하게 추가 할 수 있도록 최소한 리팩터링해야합니다. 즉, 더 악화시키지 않습니다. 나머지는 동기 부여, 예산 및 시간 제약에 따라 달라 지지만 혼란을 완전히 정리하는 데는 원래의 것보다 시간이 오래 걸릴 수 있습니다.


1
이것은 물론 유명한 보이 스카우트 규칙입니다. 항상 코드를 찾은 것보다 나은 상태로 두십시오.
Jörg W Mittag

2

이번에는 물건을 고정하면서 문서화해야합니다. 다음에 코드를 볼 때 사물을 훨씬 쉽게 기억할 수 있습니다.


1

그것은 엉망이기 때문에 유지 관리하는 데 더 많은 시간이 걸리거나 엉망이 아니므로 쉽게 유지 보수하는 데 달려 있습니다. 나는 개인적으로 이것을 지금 겪고 있습니다. 인트라넷 사이트를 ASP.Net MVC3으로 변환하고 있습니다. 오래된 코드는 처분 할 수 있어야 하기 때문에 쓰레기 더미 (필자가 쓴 것)이기 때문입니다 (예, 더 잘 알아야합니다) ). 오래된 쓰레기 더미는 여전히 여기 있으며 기능을 추가하고 버그를 수정하는 데 어려움이 있습니다. MVC는 아름답고 실제로 작업하는 것이 즐겁기 때문에 다시 작성하고 있습니다.

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