Skip to main content

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 - 통신 설계의 관점

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

  • 개선 방안 연구
  • 스프린트 결과에 대한 기획 수정/보완

참고자료들