Part 3 이론
- 언제 소프트웨어 설계 결정을 시작해야 하는가?
- 언제 소프트웨어 걸계 결정을 중단하고 시스템의 동작을 변경해야 하는가?
- 다음 결정은 어떻게 내릴것인가?
Chapter 22 요소들을 유익하게 관계 맺는 일
- 소프트웨어 설계는 인간관계 속에서 벌어지는 활동
- 요소
- 요소에는 경계가 있다
- 계층 구조
- 관계 맺기
- 호출하고/호출받는 관계
- 호출
- 발행
- 대기
- 참조
- 유익하게
- 시스템에는 필요하지만 기계를 위한 명령어가 아닌 일종의 중간 요소를 만들면 그 중간 요소들이 서로에게 도움이 되기 시작
- 요소들을 유익하게 관계 맺는 일
- 설계란? 구성하는 요소들과 그들의 관계 그리고 그 관계에서 파생되는 이점이 바로 설계
- 시스템 구조
- 요소 계층 구조
- 요소 사이의 관계
- 이러한 관계가 만들어내는 이점
Chapter 23 구조와 동작
- 소프트웨어의 가치를 만드는 두가지 방식
- 현재 소프트웨어가 하는 일
- 미래에 새로운 일을 시킬수 있는 가능성
- 동작을 규정하는 방식
- 입출력 쌍
- 불변 조건
- 동작은 가치를 만든다
- 더나은 기계에 도달하는 방법
- 선택 가능성 (옵션)
- 옵션의 멋진점
- 환경의 변동성이 클수록 옵션의 가치가 더 커진다
- 선택 가능성을 앗아가는 요소?
- 핵심 직원의 퇴사
- 고객과 거리가 멀어진다
- 변경에 따른 비용이 치솟는다
- 구조 변경과 동작 변경은 모두 가치를 만들어낸다
- 동작의 문제는 바로 드러나지만 구조의 문제는 잘 드러나지 않는다
- 동작 변경과 구조 변경의 차이점 가역성
Chapter 24 경제 이론: 시간 가치와 선택 가능성
돈의 본성
- 오늘의 1달러가 내일의 1달러보다 더 가치가 있기 때문에 버는 것은 빨리하고 쓰는 것은 가능한 뒤로 미룬다
- 혼란스러운 상황에서는 어떤 물건에 대한 옵션이 물건 자체보다 낫기 때문에 불확실성에 맞서는 옵션을 만든다
순현재 가치(Net present value)
옵션 그릭스(option greeks)
Chapter 25 오늘의 1달러가 내일의 1달러보다 크다
- 많고 적음의 의미? 돈에 대해선 아래의 두가지에 달림
- 시점
- 확실성
- 돈의 시간 가치는 코드 정리를 먼저 하기보다는 나중에 하는것을 권장
Chapter 26 옵션
- 옵션은 선택 가능성을 뜻한다
- 가치에 대한 예측이 불확실할수록 바로 구현하는 것보다 옵션이 지닌 가치가 더 커진다
Chapter 27 옵션과 현금흐름 비교
- 비용(코드정리) + 비용(코드 정리 후 동작 변경) < 비용(바로 동작 변경)
- 자기 관리로서의 코드 정리는 어느정도 정당화 될수 있다
Chapter 28 되돌릴 수 있는 구조 변경
- 구조 변경은 대체로 되돌리수 있다
- 동작 변경은 되돌리기 어렵다
- 결정을 되돌릴수 있게 만드는것이 중요하다
Chapter 29 결합도
- 변경 감염 특성을 결합도라고 한다
- 한 요소를 변경하면 다른 요소도 함께 변경해야 하는 경우 두 요소는 특정 변경과 관련하여 서로 결합되어 있는것
- 결합도 분석은 단순히 소스코드를 보는것만으로 부족
- 하나의 커밋에서 어떤 파일이 쌍으로 나타나는 경향확인
- 경합도(종속성)의 두가지 성질
- 일대다
- 연쇄작용
- 결합도는 소프트웨어 비용을 좌우한다
Chapter 30 콘스탄틴의 등가성
- 소프트웨어 개발 비용의 70%가 유지보수에 들어간다
- 시스템의 가치는 어제의 추측이 아닌 오늘의 현실에서 드러난다
- 콘스탄틴의 등가성
Chapter 31 결합도와 결합도 제거
- 결합도는 잘 보이지 않는다
- 동작 변경하려다가 알아차린다
- 결합도가 있어야 하는 이유
- 방금전 까지 문제가 되지 않았다
- 한 종류의 코드 변경에 대한 결합도를 줄일수록 다른 종류의 코드 변경에 대한 결합도가 커진다
Chapter 32 응집도
- 결합된 요소들은 둘을 포함하는 같은 요소의 하위 요소여야 한다
- 결합되지 않은 요소는 이 더미가 아닌 다른 곳으로 이동해야 된다
Chapter 33 결론
- 비용
- 수익
- 결합도
- 응집도