문제

는 요구 사항이 있는 경우는 자주 변경하고 싶 제공하는 코드에서는 시간이 이렇게 무엇이 최고의 솔루션을 사용되는 방법론을 극복하는 것 스파게티?

도움이 되었습니까?

해결책

스파게티 코드의 정의는 무엇입니까? 저에게 Spaghetti 코드는 너무 길고 구조화되지 않은 혼란스러운 방법/기능입니다. 이것은 변화하는 요구 사항으로 인해 발생하지만 개발자의 게으름으로 인해 발생합니다. 일이 변경되었으므로 메소드를 다시 작성 해야하는 경우 많은 오버 헤드없이 직접 정리할 수도 있습니다.

대신 잘못 설계된 객체 구조를 의미한다면 옳을 수 있습니다. 요구 사항이 너무 빨리 변경되면 더 이상 의도 한 것을 수행하지 않는 클래스, 나쁜 객체 계층 등을 쉽게 끝내게됩니다.

이것을 피하기위한 약간의 tipp가 있습니다.

  • 처음에는 과다 디자인하지 마십시오. 방법, 클래스 및 클래스 계층 구조를 가능한 한 간단하게 유지하여 변경을 덜 어렵게 만듭니다.

  • 요구 사항이 변경된 후에는 바로 구현을 시작하지 말고 한 걸음 물러서 새로운 기능이 적합하기 전에 코드 구조를 변경 해야하는지 확인하십시오.

  • 변경에 시간이 필요하다는 고객에게 의사 소통하십시오. 요구 사항을 변경하면 코드 구조의 변화가 의미가 있음을 알고 있다면 코드를 기존 구조로 짜는 압력이 줄어 듭니다.

  • 코딩하는 동안 항상 리팩터를 리팩터링하십시오. 내 경험상, 여러 곳에서 중복 코드를 단일 방법이나 클래스로 이동하는 것과 같은 작은 리팩토링은 코드를 깨끗하게 유지하는 데 가장 효과적입니다. 코드 냄새를 항상 찾고 가능한 빨리 제거하여 작업을 더 쉽게 만들 수 있습니다. 이것은 약간의 경험이 필요하지만 지금은 다음과 같은 훈련을 시작하기에 적합한시기입니다 :-)

  • Krosenvold가 말했듯이, 큰 변화에 대한 두려움을 없애기 위해 테스트 케이스를 코드에 추가하여 안전하게 재생하십시오. 대규모 레거시 시스템을 직접 작업 한 후, 나는이 두려움과 안전망없이 일하는 느낌을 알고 있습니다. 안전망에서 먼저 작업하면 안정적인 변화를 일으키는 모험이 줄어 듭니다.

다른 팁

핵심 요점 중 하나는 쉽게 변할 수있는 코드를 작성하는 것입니다. 이것은 일반적으로 초록 대신 구체적인 것을 선호합니다. 코드를 통해 매우 큰 기둥을 구축하는 경향이있는 디자인 패턴도 있습니다. 이러한 기둥은 잘못된 장소에서 변화를 일으키는 경향이 있습니다.

테스트 커버리지는 두려움없는 리팩토링을 수행 할 수있는 정말 훌륭한 도우미입니다. 미친 테스트 비행기 조종사와 Sane Test Plane의 차이를 만드는 것은 낙하산입니다.

좋은 테스트 범위는 빈번한 변화에 대한 최상의 방어입니다.

  1. 가능한 경우/시기를 예상하고 가능한 경우 요구 사항을 일반화하십시오.
  2. 더 중요한 것은 변화 사이의 시간을 예상하는 것입니다
  3. 작업/기능/반복을 청크하여 변경 사이에 완료 할 수 있습니다.
  4. 짜잔! 당신은 이제 즉석에서 민첩한 일을하고 있으며 끊임없는 변화는 정상적인 8-p처럼 보입니다.
  5. 아스피린을 가져 가서 보스에서 우는 소리, #1로 돌아 가기 ;-)

기능 추가 또는 제거를 포함하여 프로젝트 요구 사항을 자주 변경하면 반드시 스파게티 코드로 이어 지지만 글을 쓰지 않으면 아마 모듈 식 소프트웨어 (보다 모듈 식 프로그래밍). 노력할 것들이 다음을 포함합니다.

  • 각 모듈 (함수, 클래스, 라이브러리 또는 전체 응용 프로그램이든)에 잘 정의 된 목적.
  • 각 모듈은 이상적입니다 필요한 것보다 크지 않습니다 정의 된 목적을 달성하기 위해.
  • 모듈입니다 느슨한 결합, 이는 소프트웨어가 분해되지 않고 다른 모듈로 대체 될 수 있음을 의미합니다.
  • 모듈이 될 수 있습니다 개별적으로 테스트되었습니다 그들이 오류없이 자신의 목적을 달성하는지 확인합니다.
  • 모듈입니다 조직 문제 영역을 다른 프로그래머에게 직관적으로 만드는 데 도움이되는 방식으로.

잘 정리 된 모듈 (다시, 이들은 느슨하게 커플 링하는 동안 함께 작동하는 기능, 클래스, 라이브러리 및 전체 응용 프로그램이 될 수 있음)이 주어지면 요구 사항의 변경 사항을 처리하는 방법은 새 모듈을 작성하고 기존 모듈을 확장하고 연결하는 것입니다. 새로운 방식으로 모듈.

처음 에이 멋진 소프트웨어 모듈을 갖는 상황에 도달하는 방법에 관해서는 리팩토링 핵심입니다. 다음과 같은 다른 관행 단위 테스트 및 개발 방법론 (예 : 스크럼)도 도움이되지만 리팩토링은 빵과 버터이며 많은 비즈니스 환경이 충분한 시간을 보내지 않는 것 중 하나입니다.

느슨하게 결합 된 코드 작성에 대한 좋은 조언은 의존성 주입.

모든 요구 사항에 대해서는 가능한 최대 변경 사항을 위해 코드를 설계하십시오. 변수 부분을 변수 부분과 분리하여 수행 할 수 있습니다. 이것은 개발 전에 많은 시간이 걸리지 않을 것입니다. 스파게티 코드는 요구 사항 변경으로 인해 대부분의 시간이 나타납니다. 디자인 및 프로그래밍은이를 견딜 수 있어야합니다.

http://www.dreamsongs.org/files/designbeyondhumanabilitiessimp.pdf 도움이 될 것입니다.

범위 크리프/나쁜 요구 사항 분석 (항상 변화) :

전염병이 품질 (코드 또는 기타)을 보장하기 위해 제공 할 수있는 최상의 조언 인 것처럼 피하십시오. 개발 프로젝트를 계획하려고하는 방법에 관계없이 항상 부정적인 영향을 미칩니다 (모든면에).

최상의 솔루션은 이정표를 설정하고 언제 표시 해야하는지 아는 것입니다. 이 링크 요구 사항을 계속 변경하는 사람에게.

당신은 당신의 접근 방식에서 Uber-Human이 될 수 있으며, 상자 밖으로 생각하고 코드를 가능한 한 쉽게 변경하기 쉽게 만들 수 있지만 프로젝트의 품질 시간에 어떤 영향을 미치는지 이해하지 않고 모든 기능에 예라고 말하면 여전히 끔찍하게 실패 할 것입니다. -스코프 피라미드.

자주 변화하는 요구 사항은 민첩한 방법이 처리하기 위해 개발 된 문제입니다. 요구 사항이있는 문제를 인식하여 적어도 부분적으로 만들어졌습니다. 하다 종종 아주 좋은 이유 때문에 변화.

아직 구현하지 않은 요구 사항이 변경되면 최첨단 설계에 많은 노력을 기울이지 않고 작은 반복, 지속적인 테스트 및 리팩토링으로 설계 진화를 관리하면 영향이 최소화되어야합니다.

이미 구현 된 요구 사항이 변경되었고 완료 날짜를 이동할 수없는 경우 세 가지 선택이 있습니다. 손실 시간을 복구하기 위해 더 긴 시간을 일하고, 추가 작업 비용을 줄이거나 품질을 줄이기 위해 요구 사항 (범위를 줄이기) 제품 중 ( "스파게티"옵션 일 수 있음 ").

는 경우에 당신은 떠나 하나의 조언: 리팩터링,리팩터링,리팩터링!자주!

다른 모든 것에 대한 정보를 만드는 refactoring 쉽습니다.

빈번한 요구 사항 변경 사항을위한 조용는 다음의 목적입니다.

  • 객체 지향 디자인 (비즈니스 도메인 추상화 및 관리 가능한 목적 지향 개념으로 나누기)
  • 설계 패턴 (확립 된 코딩 솔루션 재사용)
  • MVC 기반 개발 (데이터 분리, 비즈니스 로직 및 뷰/프레젠테이션)
  • 건축 프레임 워크 기반 개발 (프로젝트 별 설계 및 개발을 촉구하기 전에 건축 프레임 워크를 먼저 설계합니다)

따라서 스파게티를 피하려면 위에서 언급 한 개념을 배우고 적용하십시오.

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