요구사항 확인
- 소프트웨어 생명 주기(Software Life Cycle)
- 소프트웨어를 개발하기 위한 각 단계별 과정
- 소프트웨어 개발 단계
- 생명 주기 모형
- 나선형 모형(Spiral Model)
- 여러 번의 개발 과정을 거쳐 점진적으로 개발
- 보헴(Bohem) 제안
- 계획-분석-개발-평가
- 애자일 모형
- 유연한 대응, 소통, 상호작용, 협업, 변화
- 스크럼, XP, 칸반, Lean, FD(기능 중심 개발)
- 스크럼: 팀이 중심이 되어 효율성을 높이는 기법
- 스프린트 계획 회의-스프린트-데일리 스크럼 회의-검토-회고
- 제품 백로그, 소멸 차트, 스크럼 마스터
- XP(eXtrem Programming): 짧고 반복적, 수시로 유연하게 대응
- 5대 핵심 가치: 피드백, 존중, 용기, 단순성, 소통
- 12가지 기본원리: 짝프로그래밍, 지속적인통합(CI), 메타포어, 테스트주도개발(Test Driven Develop) 등
- 현행 시스템 파악
- 시스템 구성, 기능, 인터페이스 > 아키텍처, 구성 > 하드웨어, 네트워크 구성 파악
- 개발 기술 환경 파악
- 운영체제(OS), 데이터베이스(DBMS), 미들웨어(WAS) 등 파악하여 고려
요구사항 정의
- 요구사항 유형: 기능/비기능, 사용자, 시스템 요구사항
- 기능 요구사항
- 시스템이 무엇을 하고, 어떤 기능을 하는지 기능 및 수행 관련된 사항
- 입력/출력, 데이터 저장/연산 등
- 비기능 요구사항
- 품질이나 제약사항 관련된 요구사항
- 시스템 장비 구성, 성능, 인터페이스, 테스트, 보안, 품질 등
- 요구사항 개발 프로세스
- 요구사항 개발은 요구공학의 한 요소
- 요구공학: 요구사항을 정의하고 분석 및 관리하는 프로세스 연구
- 도출-분석-명세-확인
- 도출 주요 기법
- 청취, 인터뷰, 설문, 브레인스토밍, 프로토타이핑, 유스케이스 등
- 분석 도구
- 자료 흐름도(DFD), 자료 사전(DD), 개체 관계도(ERD), 상태 전이도(STD), 소단위 명세서(Mini-Spec)
- 자료 흐름도(DFD): 프로세스(원형), 자료 흐름(화살표), 자료 저장소(두줄), 단말(사각형)
- 자료 사전(DD): =, +, (생략), [or], {반복}, **
- 명세: 정형/비정형 명세 기법
- 확인: 형상 관리(SCM)
요구사항 분석
- 요구사항 분석 도구
- CASE(Computer Aided Software Engineering)
- 요구사항 자동 분석 및 명세 자동화 도구
- 상위 CASE
- 계획수립, 요구분석, 기본 설계 단계를 다이어그램으로 표현
- 모순 검사 및 오류, 일관성 검증
- 자료 흐름도 프로토타이핑 작성 및 UI 설계 지원
- 하위 CASE
- 구문 중심 편집 및 정적/동적 테스트 지원
- 시스템 명세서 및 소스 코드 생성 지원
- HIPO(Hierarchy Input Process Output)
- 시스템 입/출력, 처리 기능을 표현하는 하향식 문서화 도구
- 가시적 도표: 시스템의 전체적인 기능과 흐름을 보여주는 계층 구조도
- 총체적 도표: 프로그램을 구성하는 기능을 기술, 입력/처리/출력에 대한 전반적인 정보
- 세부적 도표: 총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술
- UML(Unified Modeling Language)
- 시스템 개발 과정에서 의사소통이 원활하게 이루어지도록 표준화한 객체지향 모델링 언어
- 구성 요소
- 사물(Things), 관계(Relationships), 다이어그램(Diagram)
- 럼바우(Rumbaugh) 모델
- 객체 다이어그램 > 동적 상태 > 기능(DFD) 모델링
- 사물(Things)
- 다이어그램 안에서 관계가 형성될 수 있는 대상들
- 구조 사물: 시스템의 개념적, 물리적 요소를 표현(클래스, 유스케이스, 컴포넌트, 노드 등)
- 행동 사물: 시간과 공간에 따른 요소들의 행위를 표현(상호작용, 상태 머신 등)
- 그룹 사물: 요소들을 그룹으로 묶어서 표현(패키지)
- 주해 사물: 부가적인 설명이나 제약 조건 등을 표현(노트)
- 관계(Relationship)
- 사물과 사물 사이의 연관성 표현
- 연관 관계(Association) : 실선 화살표, 서로 관련된 관계
- 집합 관계(Aggregation) : 빈 마름모, 하나의 사물이 다른 사물에 포함되는 관계
- 복합/포함 관계(Composition) : 채워진 마름모, 집합의 특수한 형태로 서로 영향을 미치는 관계
- 일반화/상속 관계(Generalization) : 빈 화살표, 더 일반적이거나 구체적인 관계
- 의존 관계(Dependency) : 점선 화살표, 짧은 시간 동안만 연관을 유지하는 관계
- 실체화 관계(Realization) : 빈 점선 화살표, 할 수 있거나 해야할 기능으로 그룹화 관계
- 다이어그램(Diagram)
- 사물과 관계를 도형으로 표현
- 정적(구조적 다이어그램)
- 클래스: 클래스와 클래스의 속성, 클래스 사이의 관계를 표현
- 객체(객체와 객체 사이 관계), 컴포넌트, 배치(종속성, 위치표현), 패키지(폴더,점선)
- 동적(행위 다이어그램)
- 유스케이스: 개발될 기능을 사용자의 관점에서 표현
- 활동: 시스템이 수행하는 기능을 처리 흐름에 따라 순서대로 표현
- 시퀀스: 상태 변화 과정과 발생하는 상호작용 메시지 표현
- 커뮤니케이션: 시퀀스 + 상호 작용하는 과정과 객체들 간의 연관 표현
- 상태: 객체들 사이에 발생하는 이벤트에 의한 상태 변화
소프트웨어 개발 방법론
- 소프트웨어 개발, 유지보수 등에 필요한 여러 가지 수행 방법
- 주요 개발 방법론
- 구조적, 정보공학, 객체지향, 컴포넌트, 애자일방법론 등
- 구조적 방법론
- 정형화 된 분석 절차, 문서화
- 분할과 정복(Divide and Conquer)
- 정보공학 방법론
- 정형화된 기법들을 통합 및 적용하는 자료 중심 방법론
- 객체지향 방법론
- 개체(Entity)를 하나의 객체(Object)로 만들어 조립하여 구현하는 방법론
- 구성 요소: 객체, 클래스, 메시지
- 기본 원칙: 캡슐화, 정보 은닉, 추상화, 상속성, 다형성
- 컴포넌트 기반 방법론(CBD)
- 기존의 컴포넌트를 조합하여 만드는 방법론
- 재사용을 통한 효율성, 확장성, 품질 향상
소프트웨어 3R
- 재사용(Reuse)
- 재공학(Reengineering)
- 역공학(Reserve)
- 기존 시스템 및 소프트웨어를 분석하여 개발을 반대로 수행하는 것
소프트웨어 비용 산정
- 비용 산정 기법
- 하향식 / 상향식
- 시스템 크기가 크고 기간이 짧고 신뢰도가 높을수록 많이 들고, 후기로 갈수록 적게 든다
- 하향식 비용 산정 기법
- 상향식 비용 산정 기법
- LoC(Lines of Code, 원시 코드 라인 수) 기법
- 각 기능의 원시 코드 라인 수의 낙관치, 중간치, 비관치 측정하여 예측치, 비용 산정
- COCOMO 모형(COnstructive COst MOdel)
- 프로그램 규모(LOC)를 예측하여 소프트웨어 종류에 따라 비용 산정
- 조직형(Organic): 5만 이하, 소규모 소프트웨어 과학기술 계산용
- 반분리형(Semi-Detached): 30만 이하, 중간형 소프트웨어
- 임베디드형(Embedded): 30만 이상, 초대형 규모의 소프트웨어
- 푸트남(Putnam) 모형
- 소프트웨어 생명 주기의 단계별로 사용될 인력의 분포도 가정
- 생명 주기 예측 모델
- Rayleigh-Norden 곡선의 노력 분포도
- 기능점수(FP, Function Point)
- 소프트웨어 기능을 증대시키는 요인별로 가중치 부여하여 기능 점수 산출
- 알브레히트(Albrecht) 제안
- 비용 산정 자동화 추정 도구
프로젝트 일정 계획
- 주 공정법 (CPM, Critical Path Method)
- 여러 작업의 수행 순서가 얽혀 있는 프로젝트의 일정을 계산하는 액티비티 표기법
- 임계 경로 기법
- PERT(Program Evaluation and Review Technique)
- 프로그램 평가 및 검토 기술
- 프로젝트에 필요한 전체 작업의 상호 관계 표시
- 노드와 간선으로 구성, 낙관치/기대치/비관치 표시
- 중요 연쇄 프로젝트 관리(CCPM)
- 주 공정 연쇄법으로 자원제약사항을 고려하여 일정 관리
- 간트 차트
- 프로그램의 각 작업들이 언제 시작하고 종료되는 지에 대한 작업 일정표
- 시간선 차트
소프트웨어 개발 표준
- ISO/IEC 12207
- ISO(국제표준화기구)에서 만든 표준 소프트웨어 생명주기 프로세스
- 기본 생명 주기, 지원 생명 주기, 조직 생명 주기 프로세스
- CMMI(Capability Maturity Model Intergration)
- 소프트웨어 개발 조직의 업무 능력 및 성숙도를 평가하는 모델
- SPICE
소프트웨어 개발 프레임워크
- 소프트웨어 개발 프레임워크 특성
- 모듈화
- 재사용성
- 확장성: 다형성을 통한 인터페이스 확장 가능
- 제어의 역흐름: 객체들의 제어를 프레임워크에 넘겨 생산성 향상