Software Engineering Flashcards
SW공학 개념
⦿ 특징 (비복유 무장복) - 비가시성, 복잡성, 유연성, 무형, 장수, 복제가능 ⦿ 위기 (신고생 일품) - 신뢰도 저하, 고비용, 생산성 저하, 일정지연, 품질저하 ⦿ SW공학정의 - 품질확보, 생산성향상을 위한 학문 ⦿ 목표 (고사효프생) - 고품질 소프트웨어 : IEEE 730 - 사용자 만족 향상 : 요구공학 - 효율적 프로젝트 관리 : PMO - SW 프로세스 개선 : CMMi - 생산성 향상 : Case Tool ⦿ 구성요소 (언기원도) - 언어, 기법, 원리, 도구 ⦿ SW위기 해결방안 (공표자품) - 공학적 접근 - 표준화 - 자동화 도구 활용 - 품질보증체계
소프트웨어 공학 언어
- DFD(Data Flow Diagram)
- ERD(Entity Relationship Diagram)
- UML(Unified Modeling Language)
소프트웨어 공학 기법
(요설구데객)
- 요구분석방법
- 설계방법
- 구조적 분석기법
- 데이터 흐름 중심
- 객체지향 분석기법
소프트웨어 공학 원리
(단추정모일분)
- 단계적 상세화
- 추상화
- 정보은닉
- 모듈화
- 일바화
- 분할과 정복
소프트웨어 공학 도구
- 통합 Case Tool
- 요구사항 자동화
- 테스트 자동화
소프트웨어 위기 해결방안
(공표자품)
- 공학적 접근 : 구조적, 정보공학, 객체지향, CBD, 프로젝트 관리
- 표준화 : 역공학, 재공학, 데이터표준화, 재사용성 체계화
- 자동화 도구 활용 : CASE, Repository, 형상관리 도구
- 품질보증체계 : ISO품질보증체계, CMMi/SPICE, 정보시스템 감리
모듈화
⦿ 정의 - 기능 단위의 루틴으로 분해 및 추상화를 통한 설계 기법 ⦿ 원리(정자독분비) - 정보은닉 - 자료추상화 - 독립성 - 분할과 정복 - 비용과 모듈의 관계 ⦿ 특성 - 비즈니스 확장성 : 민첩한 대응 - 관리 효율성 : 유지보수 기간 단축 - 기술적 재사용 : 모듈의 컴포넌트화 ⦿ 장점 - 유지보수 편리 - 생산성 향상 - 가독성 향상 - 오류 최소화 ⦿ 기법의 종류 - 설계기법 : 모듈, 컴포넌트, 서비스 - 구현기법 : Macro, Function, inLine ⦿ 응집도 - 우연, 논리, 일시, 절차, 통신, 순차, 기능 ⦿ 결합도 - 내용, 공통, 외부, 제어, 스템프, 자료
응집도 (기능)
- 하나의 모듈이 하나의 기능만 수행
응집도 (순차)
- 모듈내의 동일한 요소에 값을 출력하고 다시 입력 값으로 사용
A = update();
Delete(A);
응집도 (통신)
- 모듈 내 요소들이 동일한 자료를 이용하여 서로 다른 기능을 수행
DB에 저장된 name
print(name);
select(name);
응집도 (절차)
- 모듈 내 요소간에 실행되어야 하는 순서 존재
Init();
Listen()
Request()
응집도 (일시)
- 변수 초기화 처럼 1회 실행되는 요소. 요소들 동시 수행
Init();
Memset();
응집도 (논리)
- 논리적으로 유사기능을 수행 하나 밀접한 관련은 없음 Switch(1); Case : 1 Case : 2 Case : 3
응집도 (우연)
- 모듈내 요소들의 연관관계가 거의 없음
결합도 (내용)
- 다른 모듈의 내부 데이터를 직접 수정하는 경우 void main() { Go To LOCAL; } void local(int x, int y) { LOCAL; }
결합도 (공통)
- 전역변수 등 모듈간 동일자료영역 공통조회 Static in A; void main() { A = i; } void local() { A = 2; }
결합도 (외부)
- config 등 모듈간 공통적인 SW외부 환경과 정의 공유 void main() { #include config.dat; } void local() { #include config.dat; }
결합도 (제어)
- 제어문을 이용 타 모듈의 내부 제어 void main() { local(1); } void local(int isExec) { if(isExec) { } else { } }
결합도 (스템프)
- 모듈 간 매개변수로 구조체를 지정 Struct 좌표 (int x, int y); void main() { local(좌표 xy); }
결합도 (자료)
- 모듈간 매개변수로 통신 void main() { Local(int x, int y); }
객체지향 설계 원리
⦿ 객체의 구성요소 : 객체, 클래스, 메소드, 메시지
⦿ 객체지향 설계 원리 : 캡슐화, 추상화, 다형성, 정보은닉, 상속성
객체지향 설계 5원칙
- SRP(Single Responsiliity Principle) : 단일 책임의 원칙
- OCP(Open-Closed Principle) : 개방-폐쇄 원칙
- LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
- ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
- DIP(Dependency Inversion Principle) : 의존관계 역전 원칙
SRP (Single Responsibility Principle)
⦿ 정의 - 클래스는 하나의 기능만 가짐 ⦿ 특징 - 클래스 변경 이유는 오직 하나, 변경 연쇄작용에서 자유, 가독성/유지보수성 향상 ⦿ SRP원칙 적용 기법 - Extract Class, Move Method, Move Field ⦿ 사례 - 비즈니스 로직과 DB처리 메소드 분리
OCP (Open Close Principle)
⦿ 정의 - 확장에는 열려있고, 변경에는 닫혀 있어야 함 ⦿ 메커니즘 - 추상화(공통), 캡슐화 ⦿ 적용절차 - 1단계(Class구분) - 2단계(I/F정의) - 3단계(코드작성) ⦿ 사례 - 인터페이스 추가
LSP (Liskov Substitution Principle)
⦿ 정의 - 자식 타입들은 부모 들이 사용되는 곳에 대체 가능 ⦿ 메커니즘 - OCP, 다형성, 상속성 ⦿ 사례 - Storage 인터페이스를 구현한 하위 클래스 FileStorage와 DBStorage 클래스는 Client의 write()인자인 Storage를 대체 가능
ISP (Interface Segregation Principle)
⦿ 정의 : 자신과 관련 없는 interface의 변화로 인해 영향받지 않는 원칙
⦿ 특징 : 여러개의 구체적 인터페이스 구현, 인터페이스 단일 책임
⦿ 적용방법 : 클래스 인터페이스를 통한 분리(상속), 객체 인터페이스를 통한 분리(위임)
⦿ 사례
- Animal interface를 bird interface와 reptile interface, fish interface로 나누어서 각각의 움직임을 나타내도록 분리
- frog class는 자신에게 맞는 reptile 과 fish를 implements하여 run()과 swim()만 구현
DIP (Dependency Inversion Principle)
⦿ 정의 : 구상 클래스에 의존하지 않도록 하는 원칙
⦿ 원리 : 구성(레이어), 의존(추상레벨), 추상화(공통부분)
추상 클래스
⦿ 개념 : 하나 이상의 추상 메소드와 일반 필드 및 일반 메소드를 포함하는 클래스 ⦿ 키워드 : abstract class ⦿ 템플릿 : 일부 구현된 내용을 포함하는 미완성 템플릿 ⦿ 목적 : 추상 메소드 기능 구현 및 재사용 ⦿ 하위클래스 : Extends, 다중상속 불가 ⦿ 추상화수준 : 클래스에 비해 높고, 인터페이스에 비해 낮음 ⦿ 디자인패턴 : Template Method ⦿ 공통 : New 연산자를 사용한 인스턴스 생성 불가(하위 클래스에 위임)
인터페이스
⦿ 개념 : 추상 메소드와 상수(static final 필드)만을 포함하는 추상 클래스 ⦿ 키워드 : interface ⦿ 템플릿 : 구현된 내용이 없이 밑그림만 그려지는 기본 템플릿 ⦿ 목적 : 기능을 공통 타입으로 그룹핑 ⦿ 하위클래스 : implements 후 추상 매소드 재정의, 다중상속 가능 ⦿ 추상화수준 : 가장높은수준 ⦿ 디자인패턴 : Strategy ⦿ 공통 : 유연한 설계
묵시적 형변환
⦿ 변환시점 : 하위타입을 상위타입으로 대체시 ⦿ 목적 : 범용성, 확장성 보장 ⦿ 연산자 : 불필요 ⦿ 용도 : 높은 추상화, 프레임워크 개발시 ⦿ 공통 : 상위, 하위 타입 관계가 아닌경우 Casting Exception 발생
명시적 형변환
⦿ 변환시점 : 상위타입을 하위타입으로 대체시 ⦿ 목적 : 기능성 측면 확장 ⦿ 연산자 : 필요 ⦿ 용도 : 구체적 기능 클래스 사용시 ⦿ 공통 : instanceof로 변환 가능 타입인지 확인 필요
SDLC
⦿ 필요성 : 체계적 접근, SW위기 극복
⦿ 정의 : SW개발 전 과정을 하나의 생명주기로 보고, 단계별로 체계화한 모델
⦿ 등장배경 : SW위기 극복, 고품질, 생산성 향상, 비 가시성 보완
⦿ 구성 : 타당성 검토, 분석, 설계, 개발, 테스트, 유지보수, 폐기
⦿ 종류 : 폭포수, Prototyping, 나선형, 반복/점증적, RAD/RUP, Clean Room
폭포수 모델
⦿ 개념도 : 개발계획, 요구분석, 기본설계, 상세설계, 코딩, 단위시험, 통합시험, 인수시험, 운영 및 유지보수
⦿ 장점 : 사례 풍부, 이해 용이, 관리 용이, 다양한 산출물
⦿ 단점 : 초기 요구 정의 어려움, 전 단계 종결 필수, 반복 불가능, 요구 변경 어려움
프로토타이핑 모델
⦿ 개념도 : 요구분석, Prototype개발/개선, Prototype 검토/평가, 상세개발, 설치
⦿ 장점 : 요구 도출 용이, 시스템 이해 및 품질 향상, 의사소통 원활, 타당성 검증
⦿ 단점 : 완제품 오인, 기대 심리 유발, 시제품 포기 시 비경제적, 중간 단계 산출물 문서화 어려움
나선형 모델
⦿ 개념도 : 계획 및 정의, 위험분석, 개발, 고객의 평가
⦿ 장점 : 정확한 사용자 요구 파악, 위험 최소화, 대규모 시스템에 적합, 완전성 부여, 단계적 평가 및 문서화 충실, 품질향상 및 유지보수성 향상
⦿ 단점 : 장기화, 관리 복잡, 원래 내용 왜곡 우려, 위험관리 해결책이 없으면 더 위험
반복적 모델
⦿ 증분형(incremental) : 제품 일부분 반복적 개발 대상 범위 확대(폭포수)
⦿ 진화형(Evolutional) : 핵심 부분 개발 후 개선 발전(프로토타이핑)
RAD 모델
⦿ 개념도 : JRP(비즈니스/데이터/프로세스 모델링), JAD(Prototype 개발/수정/보완 반복), Cutover
⦿ RAD기반 Agile 방법론 : XP, SCRUM, RUP, Crystal, DSDM, Lean
Clean Room 모델
⦿ 정의 : 통계적 품질관리 기법을 이용한 이론 및 팀 기반 SDLC ⦿ 특징 : 명세화, 증분, 제어, 정적점검, 통계 ⦿ 프로세스 1) 요구분석 2) 기능명세, 시나리오 기술 3) 순차적 기능 추가 (incremental) 계획서 작성 4) 점진적 개발 (기능, 설계 점증) 5) 테스트 케이스 작성 진행 ⦿ 점증방법 - 박스구조분석 : 설계명세 검증 - 함수등가성 : 상세화 검증 - 통계적테스트 : 입/출력 과정 ⦿ 박스구조 분석 - 블랙박스 : 추상적 블랙박스 - 상태박스 : 블랙박스에 내부상태 추가 - 클리어박스 : 상태박스에 제어흐름 추가 ⦿ 함수 등가성 - 원래의 명세와 등가임을 판정하는 기준 - 순차, 분기, 선택, 반복에 대한 함수적 등가성 설계자가 검토 및 검증
글로벌 소프트웨어 개발주기/테스트
- G11n(Globalization) : 제품 현지화 기반 구축 절차
- I18n(Internationalization) : 언어/문화권 구현 기술적 절차
- L10n(Localication) : 언어/문화권에 적합하도록 변형
- TVT(Translation Verification Test) : 번역 검증 테스트
- GVT(Globalization Verification Test) : 글로벌화 검증 테스트
반복수행평가서 목차
⦿ 반복 수행 계획서의 목차 1. 목적 및 범위 2. 반복 회차의 일정 3. 구축 범위 및 개발 계획 4. 테스트 및 평가 방안 5. 전개 방안 ⦿ 반복 수행 평가서의 목차 1. 평가 일정 2. 평가 대상 3. 평가 항목 4. 평가 기준 5. 평가 방법 6. 평가 결과
정보공학개발 방법론
⦿ 정의 : 데이터 중심 전사적 관점의 절차적 개발방법론 ⦿ 단계 - ISP(Information Strategy Planning) - BAA(Business Area Analysis) - BSD(Business System Design) - BSC(Business System Construction)
ISP 산출물
(경업벤핵시)
- 경영/정보 환경 분석
- 업무 프로세스/시스템 분석
- 벤치마킹/GAP 분석
- 핵심 비즈니스/아키텍처 개발
- 시스템 구축 계획 및 실행
BAA 산출물
(데분의매)
- 데이터 모델 다이어그램(ERD)
- 프로세스 분할 다이어그램(트리)
- 프로세스 의존 다이어그램(의존)
- 프로세스/데이터 매트릭스(CRUD)
BSD 산출물
(엔분액의데결대자)
- 엔티티-관계 다이어그램(함수적관계)
- 분할 다이어그램(기능, 프로세스, 프로시저 분할)
- 액션 다이어그램(CASE Tool)
- 의존 다이어그램(분할 다이어그램 약점 보완)
- 데이터 흐름도(프로시저 입출력)
- 결정 트리(로직 분기조건)
- 대화 구조(계층적, 수평적)
- 자료 구조(특정 DBMS)
BSC 산출물
(데물분)
- 데이터 사용 분석 (부하)
- 물리적 DB 설계 (성능)
- 분산 분석 (데이터 매트릭스)
객체지향 개발방법론
⦿ 정의 : 실세계의 개체(Entity)를 속성(Attribute)과 메소드(Method)가 결합된 형태의 객체(Object)로 표현하는 개념
⦿ 특성 : 재사용성, 이해성, 일관성, 추적성, 적합성, 유지보수성
⦿ 구성 : 상위 클래스, 클래스, 객체, 속성, 메소드
⦿ 원리 : 캡슐화(관련함수), 추상화(공통성질), 다형성(Overloading/Overriding), 정보은닉(private/protected), 상속성(단일/다중/반복)
⦿ 절차 (요 객동기 시객구 테패프)
- 요건정의(업무요건정의)
- 객체지향분석(객체모델링, 동적모델링, 기능모델링)
- 객체지향설계/구현(시스템설계, 객체설계, 구현)
- 테스트/배포(테스트, 패키지, 프로젝트 평가)
⦿ 종류 : OOSE(Usecase기반), OMT(객체, 시스템, 오브젝트, 구현의 4단계), OOD(설계 문서화 강조)
화이트박스 재사용, 블랙박스 재사용, 위임
⦿ 화이트박스 재사용 ○ 개념 : 클래스 상속에 의한 재사용 ○ 특징 : 컴파일 시점에 정의, 언어에서 직접 지원 ○ 패턴 : Factory Method, Adapter(Class), Interpreter, Template Method ⦿ 블랙박스 재사용 ○ 개념 : 객체 합성에 의한 재사용 ○ 특징 : 런타임에 동적 정의 ○ 패턴 : Abstract Factory, Builder, Prototype, Singleton, Adapter(Object), Composite, Decorator ⦿ 위임 ○ 개념 : 연산의 처리를 위임자에게 보냄 ○ 특징 : 런타임 행동 복합, 복합 방식 변경 ○ 패턴 : State, Strategy, Visitor, Mediator, Chain of Responsibility, Bridge
오버라이딩(Overriding)
⦿ 개념 : 하위 클래스에서 상위 클래스의 메소드 재정의 ⦿ 메소드 이름 : 같아야 함 ⦿ 파라미터 개수 자료형 : 같아야 함 ⦿ 리턴타임 : 같아야 함 ⦿ 상속 : 상위 클래스에 메소드 존재
오버로딩(Overloading)
⦿ 개념 : 같은 이름의 메소드 여러개 정의 ⦿ 메소드 이름 : 같아야함 ⦿ 파라미터 개수 자료형 : 달라야함, 같을 경우 자료형이 달라야함 ⦿ 리턴타임 : 상관없음 ⦿ 상속 : 상위 클래스에 같은 이름의 메소드 없어야 함
CBD(Component Based Development)
⦿ 정의 : 컴포넌트를 생성 후 조립하여 SW를 개발하는 개발방법론
⦿ 특징 : 유용성, 확장성, 유지보수성, 재사용성
⦿ 개발 프로세스(분설추설구인형검, 요영기조응)
- CD : 도메인 분석, 도메인 설계, 컴포넌트 추출, 컴포넌트 설계, 컴포넌트 구현, 컴포넌트 인증, 형상관리, 컴포넌트 검색
- CBD : 요구사항 정의, 영역 분석, 컴포넌트 기반설계, 컴포넌트 조립, 응용시스템
⦿ 종류 : RUP, 마르미3/4
CBD 단계별 산출물
⦿ 요구파악 - 요구사항 이해 : 요구사항 기술서, 용어사전, 개념모델 - 요구사항 정의 : 유스케이스 모델 ⦿ 분석 및 설계 - 요구사항 분석 : 객체모델, UI설계서 - 아키텍처 정의 : 아키텍처 기술서 - 컴포넌트 설계 : 인터페이스 명세서, 컴포넌트 명세서/설계서 - 데이터베이스 설계 : 데이터베이스 설계서 ⦿ 구현 - 개발표준 정의 : 명명규칙, 코딩지침 - 코드 구현 : 플랫폼 종속적 코드 ⦿ 테스트 - 테스트 계획 : 테스트 계획서 - 테스트 수행 및 보고 : 컴포넌트/통합/인수 테스트 보고서
CBD 컴포넌트 추출 방법
○ UseCase 시나리오 : include(반복), extend(조건)
○ 설계단계 UI : 공통 UI, 공통 UI컨트롤
○ 전문가 판단 : 전문가 경험