문제

컴퓨터 프로그램이 a로 바꾸는 원인 진흙의 큰 공? 이 패턴에서 회복 할 수 있습니까? 적용 할 수있는 입증 된 리팩토링 방법이 있습니까?

도움이 되었습니까?

해결책

큰 진흙 공은 일반적으로 다음 중 하나 때문에 발생합니다.

  • 요구 사항 변경S- 시간이 지남에 따라 한 세트의 요구 사항이있는 솔루션을 설계합니다. 이는 시간이 지남에 따라 약간 다른 요구 사항을 사용하여 동일한 제품을 사용하려는 다른 잠재 고객을 수용하고있을 것입니다. 이러한 요구 사항을 동일한 제품으로 구워 BBOM으로 끝납니다.

  • 개발자의 변화 - 원래 제품은 특정 설계 및 건축 가정을 가진 한 세트의 개발자에 의해 만들어졌으며, 이는 유지 관리 또는 추가 개발을 위해 제품을 '인수'하는 완전히 새로운 개발자들에게는 전적으로 명백하지 않습니다. 새로운 개발자들은 자체 가정을 만들고 시간이 지남에 따라 제품은 인재 할 수없는 쓰레기 더미로 저하됩니다.

  • 무능력 - 개발자 (패턴 방지를 알지 못함), 관리 (너무 까다로운, 제품에 대한 지식 부족) 또는 사용자 (실제로 필요한 것을 알지 못함). 이것은 해결하기 어렵습니다.

때로는 최상의 솔루션은 단순히 새로운 요구 사항에 맞는 응용 프로그램을 다시 작성하는 것입니다. 그러나 이것은 일반적으로 최악의 시나리오입니다. 번거로운 해결책은 모든 새로운 개발을 중지하고 일련의 테스트를 작성한 다음 전체 솔루션을 재 설계하고 다시 검색하는 것입니다. 그러나 제품의 크기에 따라 몇 년이 걸릴 수 있습니다.

다른 팁

내가 만난 BBOM은 일반적으로 다윈의 과정에서 유기적으로 만들어졌습니다. 그것은 다음과 같이 간다 :

  1. 초기에는 시스템이 생성 (설계되지 않음)이 제대로 문서화되지 않았습니다.

  2. 독창적 인 자원은 계속해서 다른 곳에서 더 많은 혼란을 일으키기 때문에이 "레거시"시스템에 대한 구전 이력조차 없습니다.

  3. 신선한 혈액이 들어옵니다.이 개발자들은 다양한 시스템 부품의 작업을 밝히려고 노력하지만, 꼬리, 다리, 하나는 트렁크를 잡았을 때 코끼리를 이해하려고하는 몇몇 맹인과 같습니다. 그들은 변화를 일으키지 만 결코 그들에 대해 자신감을 느끼지 않습니다.

  4. 이런 식으로, 시스템은 맹목적인 자연 선택에 의해 "진화"되지만, 이와 평행은 이와 평행을 이루는 것은 물론 고객이 설치할 때까지 레이더 스크린 아래에 남아 있기 때문에 정확하게 지속되는 가장 다루기 힘든 생산할 수없는 버그의 진화입니다.

나는 항상 "모든 것이 모든 것에 의존하는 것"이라는 용어 (BBOM)가 코드베이스로 귀속되었으며 변경하려는 코드를 찾기가 어렵고 변경할 때는 모든 것을 변경해야합니다. 다시 작동하게하는 곳. 단일 변경 클래스/파일을 테스트하려면 전체 코드 기반이 필요합니다. 밥 삼촌은 이것을 증후군 후 아침에 전화합니다 (여기 acyclic 종속성에 따라).

코드 기반이 (ahem)이라는 것은 거의 불가피합니다. Devolve 기본 의존성 컨트롤이없는 경우 BBOM으로 현재 편집중인 코드 이상을 보지 못하는 개발자는 수행 할 수 없기 때문입니다.

필자의 경우, 내 소프트웨어의 한 요소는이 패턴에 빠지고 있으며, 약 2 년 전 약 2 년 전 "임시 솔루션"이었으며, 이는 다시 쓰기를 희생하여 새로운 기능을 지속적으로 추가했습니다.

그것이 관리 통증을 유발하지 않으면, 그것을 바꿀 인센티브가 없습니다. "예, 다음 달에 시간이 걸리면 다시 쓸 수 있지만 지금은이 사건에서 작동하기 만하면됩니다." 새로운 기능이 들어 오자마자 다시 쓰기가 잊혀집니다.

나는 2 년 동안 그것이 열악한 코드라고 설명해 왔습니다 (보이지 않는 버그가 있다는 의미).

"BBOM"시나리오를 다루어야 할 유일한 시간은 기본적으로 사용자와 요구 사항을 다시 방문하고 끔찍한 코드에서 할 수있는 것을 추론해야했습니다. 모든 BBOM과 마찬가지로 유지 보수/향상이 필요한 경우에 문제가 일반적으로 분명하지 않습니다. (이 상점에서 코드 리뷰의 사치가 없어서, 그 기준은 슬프게도 "원하는 것을 하는가?")와 "저자"는 오래 전에 사라졌습니다.

이 경우 리팩토링은 불가능했습니다.

Wikipedia 기사의 관련 인용문은 다음과 같습니다.

큰 진흙 프로젝트를 통제하는 프로그래머들은 그것을 연구하고 그것이 달성 한 것을 이해하고이를 대체 할 수있는 잘 설계된 시스템에 대한 공식적인 요구 사항 세트의 느슨한 기초로 사용하도록 강력히 권장됩니다.

이것은 원래의 질문에 약간의 빛을 비출 수 있습니다.

http://en.wikipedia.org/wiki/big_ball_of_mud

큰 진흙 공은 인식 할 수있는 아키텍처가없는 소프트웨어 시스템입니다. 엔지니어링 관점에서 바람직하지 않지만 이러한 시스템은 비즈니스 압력과 개발자 회전율로 인해 실제로 일반적입니다. 따라서 그들은 디자인 방지로 선언되었습니다.

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