몇 달 안에 한 동료가 새로운 프로젝트로 넘어갈 것이며 그의 프로젝트 중 하나를 물려받을 것입니다. 준비하기 위해 이미 Michael Feathers의 효과적인 레거시 코드 작업을 명령했습니다 .
그러나이 책과 지금까지 찾은 레거시 코드에 대한 대부분의 질문은 코드를 그대로 상속하는 경우와 관련이 있습니다. 그러나이 경우 실제로 원래 개발자에게 액세스 할 수 있으며 순서대로 인계 할 시간이 있습니다.
코드 조각에 대한 몇 가지 배경은 상속받을 것입니다.
- 작동 중 : 알려진 버그는 없지만 성능 요구 사항이 계속 증가함에 따라 먼 미래에 일부 최적화가 필요할 것입니다.
- 문서화되지 않음 : 메소드 및 클래스 레벨에 문서가 거의 없습니다. 그러나 코드가 더 높은 수준에서 수행되어야하는 것은 수년 동안 API에 대해 블랙 박스로 작성했기 때문에 잘 이해되고 있습니다.
- 더 높은 수준의 통합 테스트 만 해당 : API를 통해 다른 구성 요소와의 적절한 상호 작용을 테스트하는 통합 테스트 만 있습니다 (다시 블랙 박스).
- 매우 낮은 수준, 속도에 최적화 : 이 코드는 전체 응용 프로그램 시스템의 중심이기 때문에 많은 코드가 수년에 걸쳐 여러 번 최적화되었으며 매우 낮은 수준입니다 (일부 구조에는 특정 구조에 대한 자체 메모리 관리자가 있음) / 레코드).
- 동시 및 잠금없는 : 동시 및 잠금없는 프로그래밍에 대해 잘 알고 있으며 실제로이 코드에 몇 가지 부분을 기여했지만 복잡성이 더해집니다.
- 큰 코드베이스 : 이 특정 프로젝트는 1 만 줄 이상의 코드이므로 모든 것을 설명 할 수있는 방법은 없습니다.
- 델파이에서 작성 : 나는이 유형의 문제가 언어에 구애받지 않는다고 믿기 때문에 언어가 질문과 관련이 있다고 생각하지는 않지만 이것을 여기에 넣을 것입니다.
나는 그의 출발까지의 시간이 어떻게 가장 잘 소비 될지 궁금했다. 다음은 몇 가지 아이디어입니다.
- 내 컴퓨터에 모든 것을 구축하십시오 : 모든 것이 소스 코드 제어로 체크인되어야하지만 파일을 한 번에 한 번 체크인하지 않은 사람은 비즈니스의 첫 번째 순서 일 것입니다.
- 더 많은 테스트 : 더 많은 클래스 수준의 단위 테스트를 원하지만 변경 할 때 소개하는 모든 버그를 조기에 발견 할 수 있습니다. 현재 코드를 테스트 할 수 없습니다 (거대한 클래스, 긴 메소드, 너무 많은 상호 의존성).
- 문서화 할 내용 : 우선 저수준 / 고도로 최적화 된 특성으로 인해 이해하기 어려운 코드 영역에 문서화하는 것이 가장 좋습니다. 나는 추악하고 리팩토링 / 다시 쓰기가 필요할 수있는 몇 가지가 있지만 실제로 내가 놓칠 수있는 좋은 이유 때문에 거기에 있었던 최적화입니다 (참조, Joel Spolsky, 당신이해야 할 것들) 절대 안함, 파트 I )
- 문서화 방법 : 아키텍처의 클래스 다이어그램과 중요한 기능의 시퀀스 다이어그램이 가장 좋을 것이라고 생각합니다.
- 누구를 문서화 할 것인가 : 나는 무엇이 더 좋을지 궁금해했다. 문서를 쓰거나 나에게 설명하도록해서 문서를 쓸 수 있었다. 나는 그에게 명백하지만 나에게 그렇지 않은 것들이 제대로 덮이지 않을까 두려워한다.
- 페어 프로그래밍을 사용한 리팩토링 : 시간 제약으로 인해 불가능할 수도 있지만, 코드의 일부를 리팩토링하여 유지 보수가 용이 한 이유는 무엇인지에 대한 정보를 제공 할 수 있습니다.
댓글을 달고 추가하십시오. 이 모든 작업을 수행 할 시간이 충분하지 않기 때문에 우선 순위를 매기는 방법에 특히 관심이 있습니다.
업데이트 : 인계 프로젝트가 끝나면 아래 답변 에서 자신의 경험 으로이 목록을 확장했습니다 .