01 소프트웨어 공학 개념
위기를 극복하고 품질 높은 소프트웨어를 효율적으로 개발하기 위한 학문
소프트웨어 공학의 3R
1. 역공학 : 이미 개발된 시스템 분석해 문서를 추출
2. 재공학 : 기존 소프트웨어를 기능 개선하고나 재활용하는 공법
분석 -> 재구성 -> 역공학 -> 이관
3. 재사용 : 이미 개발된 SW 일부 또는 전체 다시 사용
- 합성 중심 : 모듈을 만들어 조합해 SW 완성
- 생성 중심 : 추상화 형태 구체화해 프로그램 만들기
소프트웨어 개발단계
계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수
- 요구사항 분석 : 요구사항 분석서
- 설계 : 모델링, DFD, DD, Mini-spec, ERD, STD(상태전이도)
- 구현 : IDE, 형상, 배포, 협업
- 테스트 : 단위, 통합, 시스템, 인수 (단통시인)
- 유지보수 : 수정, 향상, 적응, 예방
소프트웨어 개발 방법론
- 구조적 방법론 : 절차지향적 (하향식) 소프트웨어 개발 방법론
데이터 흐름도(DFD), 자료사전(DD), 상태전이도(STD), 소단위명세서(Minispec)
- 정보공학 방법론
테이터 중심 접근 방식
- 객체지향 개발 방법론
캡슐화, 정보은닉, 상속, 다형성(오버로딩, 오버라이딩), 추상화
- CBD
합성 중심, 컴포넌트 개발 & 조합
- 애자일 방법론
빠르고 유연, 민첩, 효율성 강조
XP (의사소통, 피드백, 존중, 용기, 단순성) / SCRUM / FDD (기능중심 반복적 개발 방식) / Crystal 방법론
소프트웨어 개발모델
- 폭포수 모델
- 프로토타이핑 모델
- 나선형 모델 : 계획 및 요구분석 -> 위험분석 -> 개발 -> 사용자평가
- RAD : CASE 도구 활용 (상위 : UML, 알고리즘 / 하위 : 문서화 / 통합 : 형상관리)
- V 모형 : 검증과 테스트 중점적, 테스트 단계 존재
단(정적, 동적) -> 통(상향식:드라이버 / 하향식:스텁 / 빅뱅 / 백본) -> 시(기능, 비기능) -> 인(베타, 알파)
- 4세대 기법
애자일 방법론
빠르게 제공, 고객과의 협력
- XP 5가지 핵심가치 : 의존용피단
- 12가지 실천사항 : 짝프로그래밍 / 계획 세우기 / 테스트 기반개발(Test Driven Dev~) / 고객 상주(On-site Customer) / 지속적인 통합(Continuous Integration) / 코드 개선(refactoring) / 작은 릴리즈 / 코딩 표준 / 공동 코드 소유(Collective Code Ownership) / 간단한 디자인 / 시스템 메타포어 / 작업시간 준수(Sustainable Pace)
- 스크럼 : 매일 15분 정도의 회의
제품 백로그(제품 요구사항 목록) / 스프린트 / 스프린트 백로그(스프린트 목표 작업목록)
- 크리스털
- FDD / ASD / Lean (도요타-낭비요소제거)
IT 서비스 관리
1. SLM : 서비스 레벨 매니지먼트, 관리, SLA(명세서) 기준으로 품질 관리 개선
2. SLA : 서비스 레벨 Agreement, 명시문서
3. ITSM : 정책과 관행
4. ITIL : 가이드 or 프레임워크
02 프로젝트 계획 및 분석
한정된 기간, 예산, 자원 활용해 제품이나 서비스 개발하는 기술적, 관리적 활동
프로젝트 핵심 관리대상 (3P)
사람 (Peolple) / 문제 (Problem) / 프로세스 (Process)
- PMBOK : PMI에서 제작한 프로젝트 관리 프로세스, 지식체계
프로젝트 착수 -> 계획 -> 실행 -> 통제 -> 종료
개발비용산정
- 하향식 산정기법 : 사람이 하는 것 : 전문가 판단기법, 델파이 기법
- 상향식 산정기법 : 원시코드라인수(LOC), 개발단계별 노력기법
추정 LOC 계산법 = (낙관치 + (4 X 기대치) + 비관치) / 6
- 수학적 산정기법 :
COCOMO : 조직형 (오가닉) 5만 / 반분리형(SemiDetached) 30만 이하 / 내장형 (임베디드) 30만 이상
PUTNAM : 렐리노든곡선 / SLIM (자동화추정도구)
FP (기능점수) : 내부논리파일 (ILF) / 외부연계파일 (EIF) / 외부입력(EI) / 외부출력 (EO) / 외부조회 (EQ) / ESTIMACS (자동화추정도구)
개발일정산정
- 작업분해 (WBS)
- PERT : 미사일개발, 낙관치(최소시간), 기대치(가장 가능성 높은 시간), 비관치(최대시간) / CPM : 최소비용, 시간단축
임계경로 : 경로상 가장 오래 걸리는 시간을 임계 경로로 정함
- MM 계산
- 간트차트
요구사항 분석 / 현행시스템 분석
- CPND : Content / Platform / Network / Device
미들웨어 종류
1. 원격 프로시저 호출 (RPC) : 클라이언트, 원격 프로시저 호출
2. 메세지 지향 미들웨어 (MOM) : 실시간 처리불가, 메세지 모아두고 한가할 때 처리, 비동기식 미들웨어
3. ORB : 객체지향, 요청하고 전송하는 브로커 역할
4. DB 접속 미들웨어 : JDBC, ODBC, 애플리케이션과 DB 서버 연결해주는 미들웨어
5. TP 모니터 : 트랜잭션 관리
6. 웹 애플리케이션 서버 : 동적인 컨텐츠 만들때 사용 (게시판 등)
7. 엔터프라이즈 서비스 버스 (ESB) : 기업 안팎 모든 시스템 환경 연동하는 미들웨어
요구공학
도분명확 : 도출 -> 분석 -> 명세(문서화) -> 확인
- 요구사항 분석 : 도메인 분석
구조적 분석 도구 : DFD, DD, Mini-spec, ERD(개체관계도), STD
객체지향 분석 도구 : UML, 모델링
- 요구사항 명세 : 명세서 형태로 정리
정형 명세 기법 : 수학, 논리학
비정형 명세 기법 : 자연어, 그림중심 (문서화)
요구사항 분류 : 기능(어떤 기능 수행?) / 비기능(성능, 보안, 유지보수 등)
- 요구사항 확인, 검증
분석 기법 : 인터뷰, 브레인스토밍, 원인-효과(casue-effect) 다이어그램, 프로토타이핑, 사용사례(유스케이스), 요구사항검토
요구사항 분석 도구 (CASE 도구)
- 상위 CASE
계획과 요구분석, 설계, 분석 설계
- 하위 CASE
구현, 테스트, 코드의 작성과 테스트, 문서화
- 통합 CASE
소프트웨어 생명주기(SDLC) 포함되는 전체과정
- HIPO : 하향식 (구조적) 소프트웨어 개발, 문서화 도구
가시적 도표 : 입력, 처리, 출력 없음 ex) 사이트맵
총체적 도표 : 입력, 처리, 출력 정보제공
세부적 도표 : 기본 요소 상세히 기술
요구사항 분석 모델링
- 기능적 : 기능표현
유스케이스 다이어그램, 액티비티 다이어그램
- 정적 : 구조를 클래스 단위로 표현
클래스 다이어그램
- 동적 : 상호작용 및 동작 표현
순서, 상태, 커뮤니케이션 다이어그램
분석 모델 종류
- 구조적 분석(절차, 하향)
처리과정, 자료흐름, 자료저장소, 단말
자료사전, 소단위명세서, ERD, STD
- 객체지향 분석(객체, 상향)
럼바우의 객:객체/동:상태/기능:DFD
Booch 방법, Jacobson(유스케이스중심), Coad와 Yourdon, Wirfs-Brock(분석설계 구분없이)
- 정보공학 분석
- 정형화 분석
03 소프트웨어 설계
소프트웨어 설계 종류 : 분설구테
소프트웨어 아키텍처
4+1 View Model 구성요소
논리적관점, 구현관점, 프로세스 관점, 배치관점 + 유스케이스 관점
UML
가시화언어, 명세화 언어, 구축언어, 문서화언어
- 사물 : 구조사물, 행동사물, 그룹사물, 주해사물
- 관계 : 일반화, 연관, 의존, 실체화 , 집합-집약(부분객체는 독립적), 집합-합성(부분객체는 의존적)
- 다이어그램
구조 : 클래스, 객체, 컴포넌트, 배치(Deployment), 복합체구조, 패키지
행위 : 유스케이스, 순차(Sequence), 커뮤니케이션, 상태, 활동, 상호작용, 타이밍
04 화면 설계
UX : 사용자가 UI를 통해 경험하는 모든 것 포함
UI 유형 : CLI / GUI / NUI / OUI (현실 모든것이 입출력장치) / VUI (음성) / ARUI (증강현실)
UI 설계원칙 : 직유학유
- 직관성 (쉽게이해, 사용) / 유효성 (목적달성) / 학습성 (쉽게배움) / 유연성 (수용, 오류최소화)
감성공학
인간의 감성을 물리적 설계 요소로 번역하고 구현