기술영역
01. 소프트웨어 개발
- 성공적인 SW프로젝트의 핵심요소:
- Process(Procedures & Methods)
- People(Process & Organization)
- Technology(Tool & Equipments)
- 소프트웨어 공학의 4가지 중요요소:
- 방법, 도구, 절차, 사람
- 소프트웨어 개발 생명 주기:
- 타당성 검토 -> 개발 계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 운용 -> 유지보수
- 소프트웨어 개발 방법론의 필요성:
- 개발 경험의 축적 및 재활용을 통한 개발 생산성을 향상
- 효과적인 프로젝트 관리
- 공식 절차와 산출물을 제시하고 표준용어를 통일하여 의사소통 수단 제공
- 각 단계별 검증과 승인된 종료를 통해 일정 수준의 품질 보증
- XP 가치:
- 의사소통, 단순성, 피드백, 용기, 존중
- XP 기본 실천 방법:
- 개발 : 단순한 설계, 테스트 기반 개발, 리펙토링, 코딩 표준, 짝 프로그래밍, 코드 공유, 지속적인 통합
- 관리 : 계획 게임, 작은 릴리즈, 메타포
- 환경 : 주당 40시간 작업, 현장 고객
- 스크럼 프로세스 산출물:
- 제품 백로그, 스프린트 백로그, 소멸 차트
- 스크럼 특징:
- 투명성, 타임박싱, 커뮤니케이션, 경험주의 모델
- 응집도의 종류:
- 기능적 응집도: 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
- 순차적 응집도: 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력데이터로 사용할 경우의 응집도
- 교환(통신)적 응집도: 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도
- 절차적 응집도 : 모듈이 다수의 과련된 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도
- 시간적 응집도 : 특정 시간에 처리되는 몇개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도
- 논리적 응집도 : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도
- 우연적 응집도 : 모듈 내부의 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우의 응집도
- 결합도 종류:
- 자료 결합도, 스탬프 결합도, 제어 결합도, 외부 결합도, 공통 결합도, 내용 결합도
- 모델링의 3가지 관점:
- 기능 관점, 동적 관점, 정보 관점
- 디자인 패턴 분류:
- 생성패턴 : 객체의 생성과정에 관여하는 패턴
- Abstract Factory, Builder, Factory Method, Prototype, Singleton
- 구조패턴 : 클래스나 객체의 합성에 관한 패턴
- Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
- 행위패턴 : 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴
- Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template method, Visitor
- 클래스패턴: 클래스와 서브 클래스 간의 관련성을 다루는 패턴, 관련성은 주로 상송이며 컴파일 타임에 정적으로 결정한다.
- 객체패턴 : 객체 관련성을 다루는 패턴으로서 런타임에 변경할 수 있으며 동적인 성격을 갖는다.
- 생성패턴 : 객체의 생성과정에 관여하는 패턴
- 테스트 설계 기법:
- 명세 기반 기법:
- 동등 분할 : 동등하게 분할된 영역에서 대표값으로 수행하도록 테스트 케이스를 설계하는 기법
- 경계값 분석 : 동등 분할의 경계 부분에 해당되는 입력값에서 결함이 발견될 확률이 높기 떄문에 경계값까지 포함하여 테스트 케이스를 설계하는 기법
- 페어와이즈 조합 테스팅 : 테스트에 필요한 각 값들이 다른 값들과 최소한 한번씩은 조합을 이루게 테이블을 만ㄷ르고, 그에 따라 테스트를 수행하도록 설계하는 기법
- 결정테이블 테스팅 : 테스트 케이스가 결정 테이블에 표시된 입력값과 자극(원인)의 조합을 테스트하도록 설계하는 기법
- 상태전이 테스팅 : 상태 전이도를 기반으로 이벤트, 액션, 활동, 상태, 상태전이 사이의 관계를 설계하는 기법
- 유스케이스 테스팅 : 시스템이 유스케이스로 모델링 되어있을 때, 유스케이스에서 테스트 케이스를 도출하는 기법
- 구조 기반 기법:
- 제어흐름 테스팅 : 컴포넌트나 시스템을 통해 실행될 때 모든 가능한 이벤트 흐름(경로)구조를 테스트할 수 있게 설계하는 기법
- 커버리지 테스팅 : 시스템 또는 소프트웨어의 구조가 테스트 스위트에 의해 테스트된 정도인 커버리지를 달성하기 위해 테스트 케이스를 설계하는 기법
- 최소비교 테스팅 : 변형 조건/결정 개념을 사용하여 입력값의 조합을 테스트하도록 테스트 케이스를 도출하는 테스트 설계 기법
- 경험 기반 기법:
- 탐색적 테스팅 : 테스터가 테스트를 수행하면서 테스트 설계를 능동적으로 제어하고, 새롭고 보다 나은 테스트를 설계하기 위해 테스트를 수행하는 동안 얻은 정보를 활용하는 비공식적인 테스트를 설계하는 기법
- 분류 트리 기법 : 분류 트리로 표현된 테스트 케이스를 입력 및 출력 도메인의 대표값을 조합하여 수행하도록 설계하는 기법
- 명세 기반 기법: