문제

기존 소프트웨어 아키텍처 개선에 대한 리팩토링 제한에 대한 연구를하고 있으며 리팩토링이 충분하지 않거나 여전히 목표를 달성하기에 미숙 한 경험을 듣고 싶습니다.

도움이 되었습니까?

해결책

해당 세트의 단위 테스트 제품군이없는 리팩토링 코드는 위험 할 수 있습니다. 프로젝트에 이미 설립 된 단위 테스트 스위트가 있다면 TDD 접근 방식을 유지하면 우려 할 이유가 거의 없습니다.

다른 팁

리팩토링은 위험 할 수 있습니다

리팩토러는 종종 원래 디자이너와 같은 사람이 아니기 때문에 종종 어렵습니다. 따라서 시스템에서 동일한 배경과 원래 디자인의 배후에 대한 결정이 동일하지 않습니다. 원래 디자인에서 피하는 버그가 새로운 디자인에서 발생할 수있는 위험을 항상 실행합니다.

이 시스템에 대해 완전히 경험하지 않은 신입 사원 또는 젊은 팀원이 새로운 냉담한 기술이나 아이디어를 다른 안정적인 시스템에 주입하기로 결정했을 때 특히 그렇습니다. 종종 새로운 팀원이 팀에 잘 통합되지 않았고 충분한 지침이 주어지지 않으면 전체 팀이 의도하지 않은 방향으로 프로젝트를 강요하기 시작할 수 있습니다.

이것은 위험에 불과하지만, 팀이 잘못되었을 가능성도 있으며, 새로운 팀원이 책임을지고 자신의 일을 할 수 있다면 실제로 심각한 개선을 할 것입니다.

이러한 문제는 종종 레거시 시스템에서 일하는 팀 사이에서 발생합니다. 종종 세계적으로 바꾸는 개선 사항이 계획되지 않으므로 팀은 디자인에 보수적입니다. 그들의 목표는 새로운 버그가 주입되는 것을 방지하고 몇 가지 추가 기능으로 오래된 버그를 고치는 것입니다. 새로운 팀원이 와서 Apple 카트를 화나게 할 수 있습니다. 그는 코드의 특정 하위 시스템을 다시 작성할 수 있습니다. 새로운 버그가 생성되고 상당히 안정적인 제품의 사용자가 소프트웨어가 최악의 소프트웨어가 발생하기 때문에 화를냅니다.

따라서 목표가 주요 기능이 변경되지 않은 장기 안정성이라면 종종 주요 리팩토링이 원하는 것이 아닙니다.

그러나 Pike에 더 큰 기능 변경이있는 경우 제품이 아직 완전히 구워 질 것으로 기대하는 사용자 기반이있어 (예 : 어떤 종류의 베타에 있습니다) 심각한 리팩토링을 고려하는 것이 훨씬 더 나은 상황입니다. 우수한 디자인의 장기 이점은 돈을 지불 할 것이며 대규모 사용자 기반을 방해 할 가능성이 적습니다.

귀하의 질문이 유효하다고 확신하지 않습니다. 리팩토링의 한계에 대해 묻습니다. 그러나 리팩토링에는 코드 재 작성이 포함됩니다. 다시 쓰는 것에 제한이 어떻게 될 수 있습니까? 대규모 리팩토링 과정에서 이전 코드를 완전히 교체 할 수 있습니다. 효과적으로, 원래 코드의 단일 문자없이 리팩토링을 종료 할 수 있지만, 이것은 극단적으로 이루어졌습니다. 리팩토링의 가능성의 끝 부분을 감안할 때, 어떤 한계가있을 수 있다고 가정 할 수 있습니까? 모든 최종 코드가 완전히 새로운 경우 최종 코드를 처음부터 작성한 것보다 더 이상 제한 사항이 없습니다. 그러나 동일한 결과 코드를 처음부터 작성하는 데 덜 기초를두고 반복적 인 개발 기회가 줄어 듭니다. 따라서 반대 질문에 응답해야합니다. 재 작가가 재 작성보다 본질적으로 제한이 적지 않습니까?

모든 관리자가 리팩토링 아이디어를 좋아하는 것은 아닙니다. 그들의 눈에는 리팩터에 걸리는 시간은 새로운 기능을 추가하는 데 사용되지 않습니다. 따라서 관리자에게 필요한 것을 설득하거나 기능을 추가하는 동안 숨길 수 있습니다.

따라서 위험은 리팩터에 너무 많은 시간이 걸리는 것입니다.

리팩토링의 한 가지 문제는 클래스의 외부 인터페이스를 변경할 수 없을 때 발생합니다. 이 경우, 당신은 당신이 리팩터링 할 수있는 것에 대해 매우 제한적입니다.

Kev의 훌륭한 답변 - Michael Feathers의 "레거시 코드로 효과적으로 작업"하는 것은 소프트웨어 엔지니어링에서 일하는 사람들을 위해 읽어야합니다.

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