Method R
소프트웨어 개발의 본질은 무엇인가?
과학도 공학도 아닌 "예술"이다.
- 정답이 없다.
- 예측이 어렵다.
- 측정이 어렵다.
"일반인도 결과에 대해서 평가할 수 있다"
설계의 3 요소
- 기능 설계
- 개발 범위 예측, 일정 예측의 근거
- 구조 설계
- 효율적인 개발 (중복/의존성 제거, 캡슐화)
- 동적 설계
- 작은 비용으로 요구사항과 아이디어를 검증
기능 설계
- 기능목록 (PBS, WBS, IA 등)
PBS (Process Breakdown Structure)
PBS 잘게 자를 수록 좋습니다.
- 일정 예측 정확률 상승
- 개발 전에 충분한 고민을 하게도록 넛지
정확도가 떨어지는 일정 예측이 필요한 이유?
리소스 관리
: 프로젝트에 필요한 인력, 시간, 자원 등을 효율적으로 배분하기 위해 일정 예측이 필요합니다. 각 팀원의 작업 속도와 능력을 고려하여 일정을 조정하면, 자원을 최적화하고 과부하나 대기 상태가 발생하는 것을 방지할 수 있습니다.우선순위 설정
: 프로젝트의 여러 작업 중 어떤 것이 더 중요하고 시급한지를 결정하는 데 도움이 됩니다. 이를 통해 팀원들이 중요한 작업에 집중하고, 시간이 많이 걸리는 작업을 미리 시작할 수 있습니다.위험 관리
: 예측을 통 해 잠재적인 문제점을 미리 식별하고 대비할 수 있습니다. 예를 들어, 어떤 작업이 예상보다 오래 걸릴 경우, 이에 대한 대응 계획을 세울 수 있습니다.피드백을 통한 개선
: 정기적인 예측과 평가를 통해 프로젝트의 진행 상태를 확인하고, 필요한 조정을 할 수 있습니다. 이는 프로젝트의 성공 가능성을 높이고, 지속적인 개선을 촉진합니다.
구조 설계
- Screen Layout
- ERD
- Class Diagram
구조 설계의 목적
"시스템을 더욱 효율적으로 개선"
의존성 정리
프로세스 캡슐화
갭슐화는 두 가지를 감추는 것이 주된 목적이다.
- 복잡성
- 변화
추상화 레벨 불일치
인터페이스 중복
복잡한 시스템을 작은 조각으로 (Master/Slave 아키텍처)
동적 설계
- Job Flow
- Navigation Diagram
- State Diagram
- Sequence Diagram
Job Flow - 업무분석의 관점
Job Flow - 인터페이스 설계의 관점
Job Flow - 통신 설계의 관점
Navigation Diagram
State Diagram
"현재의 상태가 이전의 상태에 영향을 받거나 미래의 상태에 영향을 준다면 상태도를 고려"
class Scanner {
scan(input) {
switch (this.state) {
case 'WhiteSpace':
if (input === '/') this.state = 'SingleSlash';
break;
case 'SingleSlash':
if (input === '/') this.state = 'Comment';
else this.state = 'WhiteSpace';
break;
case 'Comment':
//
break;
}
}
}
소규모 스타트 조직을 위한 개발 방법론
Kickstart
- 사업(프로젝트) 기획서
- 요구사항 분석
- 아키텍처 설계
Planning
- PBS 작성
- 타겟 이슈 선정
Sprint
Review
- TDD보다는 Post Test Development
- xUnit, E2E (Cypress 등)
- 통합 테스트가 진행되는 동안
- 보고받은 오류 수정
- 회고
- 리팩토링
Study
- 개선 방안 연구
- 스프린트 결과에 대한 기획 수정/보완
참고자료들
- 추천서적
- Job Flow 그리 는 툴
- 각종 다이어그램 그리는 툴
- 본인이 외주로 제작하고 있는 프로그래밍 관련 동영상들
- 회사에 가끔 투고하는 블로그