2011년 6월 3일 금요일

Lean Software Development - 3

3. 가능한 늦게 결정하라
  • 동시 소프트웨어 개발
    • 깊이 우선 접근법은 상위 수준의 의사결정을 하위 수준에 의존하게끔 만든다. 손실이 가장 실수는 시작할 중요한 부분을 고려하지 않아서 빚어진다. 실수는 구체적인 사항으로 너무 빨리 진행할 발생하기 쉽다. 일단 세부적인 경로를 정하고 나면, 되돌릴 없으며 사실을 깨닫지 못하는 경우가 많다. 실수가 발생할 가능성이 있을 가장 좋은 방법은 계획 전반을 둘러보고 구체적인 결정을 미루는 것이다.
    • 동시 개발 너비 우선 접근법을 채택하면 크고 비용이 많이 드는 문제를 너무 늦기 전에 발견할 있다. 순차 개발 방식(깊이 우선)에서 동시 개발로 이동한다는 것은 상위 단계의 개념적 설계가 결정되면 비록 구체적인 요구 조건들이 아직 조사 단계라 할지라도, 바로 가장 높은 가치가 있는 기능을 프로그래밍하기 시작하는 것이다. 이것은 직관에 반하는 것처럼 들릴지도 모른다. 하지만 방법을 중요한 기능들의 구현을 강요하는 방향으로 쫓아 가기 전에 , 여러 가지 다양한 선택을 시도하면서 배워 나갈 있게 해주는 탐색적 접근이다.
  • 비용상승

순차 개발은 모든 결정을 가능한 빨리 내릴 것을 강조한다. 그러면 모든 변경 비용은 동일하게 매우 높다. 동시 설계는 결정을 가능한 미룬다 이것은 가지 효과가 있다.
- 비용이 제약 조건의 수를 줄인다.
- 비용이 결정 사항을 너비 우선 방식으로 처리하면 좀더 바람직하게 결정할 있다.
- 대부분의 결정을 이뤄둔다. 특히 변화의 필요를 줄여준다.
- 대부분의 변화에서 비용 증가 요소를 급격하게 감소시킨다.
소프트웨어 개발은 모든 설계에 대한 확정을 가능한 지연시킨다. 아직 확정되지 않은 결정은 변화시키기 쉽기 때문이다. 소프트웨어 개발에서는 설계를 강건하고 변화에 유연하도록 개발하라고 강조한다. 설계방식은 불가피한 변화를 받아들이고 여러 종류의 변화에 손쉽게 적응할 있도록 시스템을 구성한다.
  • 책임이 따르는 마지막 순간

동시 개발은 결정을책임이 따르는 마지막 순간, 결정하지 모해 중요한 대안이 제거되기 직전까지 결정을 미루는 것을 가능하게 해준다. 마지막 순간으로 결정을 미루는 가지 팁이 있다.
    • 부분적으로 완료된 설계 정보를 공유하라.
    • 설계가 릴리즈되기 전에 완전해야 한다는 관념은 동시 개발의 가장 적이다.
    • 작업자들 직접 협력 체계를 구성하라
    • 구체적인 사항을 이해하는 사람들과 반드시 직접 의사소통 해야 한다.
    • 변화를 수용하는 방법에 대한 감각을 개발하라.
    • 객체지향 설계와 컴포넌트 기반 개발 기법을 사용하라.
      • 모듈을 사용하라 : 인터페이스에 대한 고객의 요구사항이 안정될 때까지 모듈의 내부 설계 결정을 미루어라.
      • 인터페이스를 사용하라 : 구현과 인터페이스를 분리하라, 구현은 변하더라도, 고객에게 제공되는 인터페이스는 동일하게 유지하라.
      • 매개변수를 사용하라.
      • 추상화 기법을 사용하라
      • 순차 프로그래밍을 피하라 : 절차적 프로그래밍이 아닌 선언적 프로그래밍을 사용하라.
      • 자신만의 관성화된 도구 구축에 주의하라 : 프레임워크와 다른 도구에 대한 투자는 흔히 구현의 상세한 부분을 너무 일찍 결정하도록 하는 경우가 많다.
      • 반복을 파하라.
      • 관심을 분리하라 : 모듈은 정의된 가지 책임만을 맡아야 한다.
      • 변화를 캡슐화 하라 : 변화하리라 예측되는 것을 캡슐 안쪽에 두어, 인터페이스가 안정되게 해야 한다.
      • 미래에 필요한 기능은 구현을 미루어라
      • 가외 기능을 피하라
    • 분야에서 특히 중요한 것이 무엇인지 느끼는 감각을 계발하라.
    • 결정을 언제 내려야 하는지 감각을 키워라
    • 빨리 반응하는 능력을 키워라

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...