정보관리 기술사 공부

주요 토픽 정리 1~30 [소프트웨어공학]

장술사 2023. 7. 26. 22:31
반응형

 

토픽 키워드 두음신공 주요 내용
SWEBOK
(Software Engineering Body of Knowledge)
표준지식체계 요설개시유/형관프모품/전경컴수공 (정의) IEEE 컴퓨터분과에서 SW엔지니어가 갖추어야 할 지식 영역과 권고 Practice를 정의한 표준지식체계, ISO/IEC 24773
(특징) SWE 관련 일관성있는 정보 전달, 다른 영역(수학, PJT 관리 등)과의 명백한 차이 정의, Top-Down 접근, 교육과정의 기반 제공
(지식영역 : 2004 v2 → 2014 v3 15개)
. SW 개발 : SW요구사항(요구 프로세스, 명세), SW설계(설계 핵심이슈, 전략과 방법, 구조, 아키텍처), SW개발(개발 관리, 실무 고려사항, 기술), SW테스팅(시험, 프로세스, 테스트 레벨/기술), SW유지보수(유지보수 프로세스, 핵심이슈)
. SW 관리 : SW형상관리(프로세스, 식별/통제/보고/감사), SW공학관리(PJT 계획/수행/통제/평가), SW공학프로세스(생명주기, 정의/평가), SW모델/방법론(원칙/유형/분석, 방법론), SW품질관리(프로세스, 도구)
. SW 전문가 지식 : SW공학 전문가적 실천(전문성, 집단지성, 소통 기술), SW공학 경제학(경제분석 방법론), 컴퓨팅 기초(문제해결 기술, 추상화), 수학적 기초(Logic, 증명기술), 공학적 기초(경험적 방법론, 공학설계)
* SW 개발 시 공학적 관점의 SWEBOK 중심으로 관리적 관점의 PMBOK을 접목하여 품질 향상
* 어떻게 할지는 거의 없음, 각 영역은 무엇이고 어느 것을 참조하라는 정보만 제공
SDLC(Software Development Life Cycle)
  타요설개시유, 폭프나반RC (정의) 소프트웨어 개발 프로세스 가이드라인
(프로세스) 타당성 검토, 요구사항 분석, 설계, 개발, 테스트(시험), 설치/이행, 유지보수, 폐기
(SDLC 모델) 폭포수 모델, 프로토타이핑 모델, 나선형 모델, 반복 모델, ,RUP, 클린룸 모델
폭포수 모델 순차적   (정의) 순차적 단계적 개발 모델
(특징) 관리 쉬움, 풍부한 사례, 이해 용이, 요구 사항 변경 대응력 떨어짐, 문제점 발견 지연, 반복 어려움
프로토타이핑 모델 시제품 진실 (정의) 사용자 기본 요구사항에 따른 시제품(프로토타입)을 신속히 개발하여 사용자 의견 바탕으로 시스템을 개선, 보완해가는 모델
(유형) 진화적 프로토타이핑 모델(시제품을 지속 발전 시켜 최종 SW에 도달), 실험적 프로토타이핑 모델(의사소통 도구, 개발 타당성 검증)
나선형 모델 위험최소화 목적, 점진적 계위개고 (정의) SW 개발 위험 최소화를 위해 나선을 돌며 점진적으로 완벽한 SW를 개발하는 모델, 프로토타입을 지속 발전시켜 최종SW에 이름
(특징) 위험중심 접근, 대규모 장기간 사업 적합, 고수준 품질보증, 프로토타입 장점 수용
(절차) 계획 및 정의 → 위험분석 → 개발 → 고객 평가(반복)
반복적 모델
반복적, 증분형/진화형 모형
  (정의) 사용자 요구사항이나 제품의 일부를 반복적으로 개발하여 최종 시스템으로 완성하는 모델, 폭포/프로토타이핑/나선형 모형 혼합
(유형)
. 증분형(점증적) 모형 : 일부분을 반복적으로 개발, 폭포수 모형의 변형, 병행개발
. 진화형(점진적) 모형 : 핵심부분 개발 후 각 구성요소 지속 개발, 전체 진화과정 개요 필요
SW개발 방법론
  구정객컴, 절방산관기도 (정의) 소프트웨어 SDLC 기반으로 SW를 개발하기 위한 각 단계별 작업활동, 절차, 산출물, 수행 기법 등을 정의한 체계
(진화 과정) 구조적 방법론(기능 중심) → 정보공학 방법론(데이터 중심) → 객체지향 방법론(객체 중심) → CBD 방법론(컴포넌트 중심)
(구성요소) 작업 절차, 작업 방법, 산출물, 관리, 기법, 도구
구조적 방법론
기능 중심, 분할정복, 하향식, DFD, DD, Mini-Spec
  (정의) 시스템 기능에 따라 분할 개발하고 통합하는 분할과 정복 개념을 이용한 프로세스 중심의 하향식 방법론
(도구 : DFD, DD, Mini-Spec)
. 자료 흐름도(DFD, Data Flow Diagram) : 배경도를 기점으로 기능을 분할하여 버블로 표현한 구조도
. 자료 사전(DD, Data Dictionary) : DFD에 표현된 자료 저장소를 구체적으로 명시
. 소단위명세서(Mini-Specification) : DFD 최하위 단계의 일처리 로직을 개략적으로 기술
정보공학 방법론 데이터 중심, ISP/BAA/BSD/BSC IBASS (정의) 데이터 중심의 절차적 방법론
(단계 : ISP → BAA → BSD → BSC)
. ISP(Information Strategy Planning, 정보전략 계획, 기업 청사진), BAA(Business Area Analysis, 업무영역 분석, 사용자 요구 정의)
. BSD(Business System Design, 업무시스템 설계, 데이터/시스템 구조 설계), BSC(Business System Construction, 업무시스템 구현, DB/Code 생성기)
객체지향 방법론
  객동기시객구, 캡추다정상, SOLID (정의) 프로그램을 객체간 인터페이스 형태로 구성하기 위해 객체와 클래스, 이들간의 관계를 식별하여 설계모델로 변환하는 방법론
(절차) 객체지향 분석(객체(객체다이어그램)/동적(상태다이어그램)/기능(DFD) 모델링) → 객체지향 설계 및 구현(시스템/객체 설계 → 구현)
(객체지향 기본 원칙) 캡슐화(메시지), 추상화(간단히, 명확히), 다형성, 정보은닉(내부구조/실체 분리), 상속성(서브클래스)
(객체지향 설계 원칙 : SOLID)
. SRP(Single Reponsibility, 단일 책임 원칙) : 객체는 단일 책임만 수행, OCP(Open Closed, 개방 폐쇄 원칙) : 변화 확장 가능, 변경 어려운 구조
. LSP(Liskov Substitution, 리스코프 치환 원칙) : 자식은 부모 대체 가능, ISP(Interface Segregation, I/F 분리 원칙) : 객체 기능과 I/F 구체적 분리
. DIP(Dependency Inversion, 의존 역전 원칙) : 참조 대상은 파생클래스가 아닌 추상클래스
CBD 방법론
재사용성, CD, CBD
  (정의) 개발 생산성, 재사용성, 시스템 유지보수성 향상을 위해 컴포넌트 개발, 조합을 통해 SW를 개발하는 방법론
(개발 프로세스 요소)
. CD(Component Development) : 도메인 분석/설계 → 컴포넌트 추출/설계/구현 → 컴포넌트 인증/배포
. CBD(Component Based Development) : 요구사항 정의 → 컴포넌트 기반 분석/설계 → 컴포넌트 조립 → 컴포넌트 테스트
테일러링 방법론 최적화   (정의) 기존 개발 방법론 기반으로 프로젝트에 적합한 방법론으로 최적화하는 활동
(절차) 프로젝트 특성 정의 → Base 방법론 선정/검증 → 상위수준(생명주기, WBS)/하위수준 커스터마이징(세부 WBS, Activity, 일정계획) → 테일러링 문서화
(고려사항)
. 프로젝트 특성 측면 : 프로젝트 범위, 규모, 기간, 투입인력, 사용자 / 프로젝트 관리 측면 : 조직 규모, 조직원, 프로젝트 위험, 발주사 특성
Agile(애자일) 사람 중심, 유연, 신속, 반복적 상동협변 (정의) 절차보다는 사람이 중심이되어 변화에 유연/신속하게 적응하면서 고객과 상호작용하여 반복적으로 SW개발하는 방법론
(4가지 핵심가치)
. 도구보다 개인의 상호 협력을 중시, 문서보다 동작하는 소프트웨어를 중시, 계약보다 고객과의 협력을 중시, 계획준수보다 변화 대응을 중시
(생산성 척도 : Velocity)
. 한 팀이 단위 스프린트 기간 내 완료시킨 스토리 포인트 총합
. 생산성 추정, 의사소통 도구, 위험관리에 효율적, Burn down Chart(Iteration 소명 차트) 활용
XP(extreme Programming) 프로그래밍 중심 방법론, 핵심기능 우선 구현 용단커피 (정의) 짦은 개발주기 반복을 통해 핵심기능을 우선 구현하는 프로그래밍 중심의 SW 개발 방법론
(핵심가치 4가지) 용기(변화 능동 대처), 단순성(부가기능, 미사용 구조 배제), 커뮤니케이션(개발자/관리자/고객), 피드백(지속적 테스트/통합)
(단계별 실천 항목)
. 계획(빠른 계획 수립), 분석/설계(고객 상주, 간략한 디자인), 구현(중복/복잡성 제거, Pair 프로그래밍, 지속 테스트/통합)
. 테스트(단위 테스트, 자동화), 배포(Small Release), 환경(주 40시간, 코드 표준화, 소스코드 공동책임)
TDD(Test Driven Development) Test Case 먼저 개발 니테리코 (정의) Test Case를 먼저 개발하고, 이 테스트를 통과하는 실제 코드를 나중에 개발하는 Agile 방법론
(절차) 요구사항(Needs) → 테스트 → 설계(코드) → 재구조화(Refactoring) 과정 반복
CI(Continuous Integration)
버전관리 저장소, 지속 통합서버, 빌드 스크립트
  (정의) 여러 팀원이 작업한 것을 자동화된 빌드와 테스트를 통해 지속 통합하는 것을 가리키는 SW 개발 Practice
(특징) 소스코드 자동빌드, 자동테스트, 일일 체크아웃과 빌드 통한 코드 무결성 유지
(구성요소) 버전관리 저장소, 지속 통합서버(CI 시스템, 컴파일, 테스트, 배포, 결과보고 등), 빌드 스크립트(자동화된 절차)
(주요 흐름)
. 개발자 : 출근, 최신 코드 Checkout, 개발/테스트 작성, 로컬에서 빌드/테스트(커버리지 분석, 코드 점검), 소스관리 시스템에 저장/커밋
. CI 시스템 : Checkout, 컴파일, 테스트 서버에 배포, 테스트, 소스 태깅(정상이면 안정적 버전으로 판단, 소스관리 시스템에 Tagging 수행), 결과 분석
* Daily Build : SW 통합의 혼란 최소화를 위해 매일 컴파일, 테스트, 패키징, 결과 통보하는 활동, CI = Daily Build + DB 통합 + 검사
SCRUM
Backlog, Sprint, 역할 강조, 시간 조건(15분, 1달)
  (정의) 작은 팀 단위의 Sprint(짧은 주기)를 통해 실행 가능한 제품을 구현하는 대표적인 Agile 개발 방법론
(특징) 역할 강조(Product Owner : 요구사항 관리, SCRUM Master : 스크럼 팀 코칭, SCRUM TEAM : 실질 업무 수행), 시간적 조건(Time Boxing, 15분 Daily 스크럼, 30일 개발 주기), 팀 중심
제품 백로그(Product Backlog) 우선순위화된 제품 기능 목록 IT담S난S우 (정의) SW 제품의 모든 요구사항에 대한 우선 순위화된 목록으로, 우선순위가 정의된 제품의 기능 목록
(작성 절차)
. 사용자 스토리 작성→예측(스토리 점수 이용, 일정/크기 예측), Planning Poker)→우선순위 지정(의사결정트리, 가정 분석)→ 스프린트 계획(스프린트 백로그 선정)
(구성요소) ID, Task Name, 담당자, Subject, 난이도(Priority), Status, 우선순위(Story Rank)
Kanban
작업의 가시화, Workflow
  (정의) 작업(Workflow)의 가시화 중심 Agile 방법론
(규칙, 적은 규칙) Workflow 가시화, 작업 중인 일 제한(WIP, Work In Process), 작업 소요시간 측정 및 최적화
AOP(Aspect Oriented Programming) 핵심/횡단관심 분리, Weaving 핵횡JAPAW, 핵관결모이 (정의) 시스템 기능을 핵심관심/횡단관심으로 분할 개발하고 통합하는 모듈성을 증가시킨 프로그래밍 기법, 부가기능 모듈화(로깅, 보안 등)
(구성요소) 핵심관심, 횡단관심, JointPoint, Aspect, PointCut, Advice, Weaving(위빙)
. 핵심관심 : 비지니스 로직 구현 부분 / 횡단관심 : 시스템 전반에 산재되어 있는 부가기능
. Aspect : 핵심기능에 부가되어 의미를 갖는 독립적 모듈, with Advice & PointCut
. Advice : 실제 부가기능을 담은 구현체(코드, 주로 메소드 단위로 구성)
. JointPoint : Advice가 적용될 수 있는 위치 / PointCut : Advice가 적용될 JointPoint를 결정하는 방법
. Weaving : PointCut에 의해 결정된 JointPoint에 지정된 Advice를 삽입하는 과정
(절차) 핵심 시스템 설계 → 관점 식별/설계 → 결합설계 → 모순분석/설계(상이한 관점의 PointCut 출동 분석/해결) → 이름 설계(명명 표준 정의)
SPL(SW Product Line)
Core Asset, CD/PD/Mgmt
  (정의) SW 재사용성 극대화를 위해 도메인 기반의 핵심자산(Core Asset, 제품간 공통성)을 미리 개발하여 여러 Product 생산 시 재사용하는 방법
(구성) Core Asset Development(핵심자산 개발, 수정), Product Development(핵심자산 조립, Plug&Play), Management(프로세스 관리)
데브옵스 개발+운영   (정의) Development + Operation, 개발과 운영 간의 상호 작용을 원활하게 하는 모든 것을 의미하는 포괄적 의미
(필요성) 운영과 개발의 관점 차이, 책임 회피로 인한 IT 효율성 저하
(특징) 지속 피드백, 지속 출시, 릴리즈와 배포 분리, 완료시점 범위 확장(=운영서버 정상동작시점)
요구공학(Requirement Engineering)
  추분정검관
(정의) 제품 개발의 매 단계마다 요구사항들이 제대로 지켜지고 있는지 검증하는 프로세스
(구조 : 요구사항 개발 + 관리) 요구사항 추출(인터뷰, 설문지, 워크샵 등) → 분석(구조적 분석 : DFD, DD, MiniSpec, 객체 분석 : Usecase 분석, UML, 모델링) → 정의(명세화) → 검증(Verification : 요구에 적합한지 입증, 과정 / Validation : 요구 충족 여부 판단, 결과) → 요구사항 관리
(요구사항 분류) 올바른/잘못된, 기능적/비기능적(자원, 성능, 보안, 품질), 지속적/휘발성(변화하는)
정형기법(Formal Method) 수학적, 논리적 명세/개발/검증 언규의검 (정의) 시스템 요구사항이나 특성을 수학적, 논리적으로 명세/개발/검증하는 기법
(특징) 자연어 명세의 모호성에 의해 등장, 명세서의 명확성/정확성 향상, 오류 발견 가능성 높음
(정형명세 요소) 언어(수학적으로 표현), 규칙(추론 규칙), 의미부여(특정 문자의 의미 부여), 검증(언어로 표현된 의미의 정확성 검증)
SW 테스트   결완초집살정에, 단통시인설
(정의) 시스템의 동작, 성능, 안정성이 사용자 요구에 만족하는지 확인하기 위해 결함을 발견하는 활동
(원리) 결함 존재 밝힘, 완벽한 테스팅 불가능, 초기 테스팅 시작, 결함 집중(20% 모듈에서 80% 결함), 살충제 패러독스(동일 케이스 반복은 결함 발견 가능성 낮음), 정황 의존성(SW 성격에 따라 상이한 테스트 방법), 에러 부재의 오류(요구사항 미충족 시 에러가 없어도 고품질 아님)
(SW 테스트 레벨) 단위/통합/시스템/인수/설치 테스트
(절차) 계획 → 분석/설계 → 구현/실행 → 완료/리포팅 → 종료(테스트웨어 보관, 평가)
테스트 케이스   식항입출환특의 (정의) SW의 동작, 성능, 요구사항 만족 여부 등을 테스트하기 위한 입력값/실행 조건/예상 결과값으로 구성된 케이스
(구성요소 : IEEE829)
. 식별자, 테스트 항목(모듈 또는 기능), 입력명세(입력값, 조건), 출력명세(예상 출력값), 환경설정(H/W, S/W 환경), 특수절차요구(특별히 요구되는 절차), 의존성 기술(케이스 간 의존성)
테스트 오라클 테스트 결과 참/거짓 판단 참샘휴일 (정의) 테스트 수행 결과의 참/거짓 판단을 위해 미리 정의된 참값과 비교하는 기법 및 활동
(특징) 정상/비정상 판단 기준, 테스트 케이스 설계 기초 제공, SW 품질 판단 기준, 테스트 활동 적정성 판단 기준
(유형 : 뭐랑 비교해서 참/거짓 판단 할지에 따라)
. 참 오라클(정상 테스트 결과 재사용, Mission Critical 업무, 임베디드 SW), 샘플링 오라클(경계값, 구간별 예상값 결과)
. 휴리스틱 오라클(확률이나 직관에 의한 예상결과), 일관성 검사 오라클(회귀 테스트, 수정 전후 실행결과 확인)
테스트 설계 기법 명세/구조/경험 기반 명구경, 동경의상페, 구결쪼변다, 탐분오특
(정의) 테스트 케이스와 테스트 데이터를 설계하고 명세화하는 기법
(명세기반 : Block Box 테스트 특징, 요구 명세서 기반, 사용자 중심, 기능 위주 설계)
. 동등분할(유사 특징 그룹 분리, 대표값 선정), 경계값 분석(경계값에서 에러 발생 높음), 의사결정 테이블(요소들간 결합, 상태/케이스ID/테스트 조건/기대 결과), 상태 전이(상태-이벤트 기반, 임베디드SW), 페어와이즈(대부분 결함이 2개 요소의 상호 작용에 기인, 최소 한번씩 조합, 케이스 수 감소)
(구조기반 : White Box 테스트 특징, 프로그램 로직 고려, 개발자 중심, 알고리즘 위주)
. 구문 커버리지(SC, 모든 문장들이 최소한 한번 실행)
. 결정 커버리지(DC, 전체 조건식 최소 한번 참/거짓), 조건 커버리지(CC, 개별 조건식 참/거짓 한번씩)
. 조건/결정 커버리지(C/DC, 전체/개별 조건식 모두 참/거짓 한번씩)
. 변경조건/결정 커버리지(MC/DC, 각 개별 조건식이 전체 조건식 결과에 독립적 영향)
. 다중조건 커버리지(MCC, 모든 개별 조건식의 모든 가능한 논리 조합 보장)
(경험기반) 탐색적(동시 진행), 분류 트리(시각화), 오류 추정(가능한 결함 리스트업), 특성 테스팅(품질특성 기반 케이스 도출)
경험기반 탐색적 테스팅 동시 진행, 휴리스틱 차박노디 (정의) 테스트 설계, 수행, 계획, 기록, 학습을 동시에 진행하는 휴리스틱한(발견적인) 테스팅 기법, 경험기반, 실행 중시
(구성요소) 테스트 차터(각 세션의 명확한 임무 설정), 시간 제한(Time Boxing, 세션당 시간 제한, 1~2시간), 테스트 노트(테스트 실행하면서 작성), 요약보고(Debriefing, 세션 종료 후 팀원간 요약보고)
V&V(Verification & Validation) 검사, 검증   . Verification : 검사, 제품을 제대로 만들고 있나(과정), 디자인과 코드 검사, 정적, Inspection/Walkthrough/동료 검토
. Validation : 검증, 제품을 제대로 만들었나(결과), 실제 제품 검사, 동적, 단/통/시/인/설
반응형