34개 실습과 13개 프로젝트로 배운다!
품질 좋은 소프트웨어를 개발하려면 실효성 있는 방법론과 우수한 도구도 필요하지만, 그보다 더 중요한 것은 지식과 기술을 겸비한 우수한 소프트웨어 엔지니어입니다.
이 책은 소프트웨어 개발 프로젝트를 성공으로 이끄는 소프트웨어 엔지니어가 될 수 있도록 소프트웨어 공학 핵심 이론과 실무 적용을 충실하게 담은 지침서입니다. 실습을 통해 핵심 개념을 확실히 다지고 프로젝트를 통해 소프트웨어 개발 라이프사이클에 따라 점진적으로 단계별 활동을 수행할 수 있도록 다음과 같이 구성하였습니다.
※ 본 도서는 대학 강의용 교재로 개발되었으므로 연습문제 해답은 제공하지 않습니다.
Chapter 01 소프트웨어 공학 개요
01 소프트웨어 고장 사례
02 소프트웨어 위기
03 소프트웨어 공학 기술의 적용
1 소프트웨어 공학적 기법의 종류
2 소프트웨어 공학의 정의와 원리
연습문제
[프로젝트 I] 프로젝트 정의서 작성하기
Chapter 02 소프트웨어 품질
01 소프트웨어 품질의 중요성
02 소프트웨어 품질 요소
1 외적 품질 요소
2 내적 품질 요소
3 프로세스 품질
03 인공지능 소프트웨어 품질
1 전통적인 소프트웨어와의 차이점
2 인공지능 소프트웨어의 품질 특성
3 시스템 관점별 품질 요소
04 소프트웨어 품질 모델 및 표준
1 McCall의 FCM 모델
2 HP의 FURPS 모델
3 ISO 9126 품질 모델
4 ISO 25010 품질 모델
05 소프트웨어 품질 관리
1 정량적 품질 개선
2 정보 저장소
3 예측적 품질 관리
연습문제
[실습 2-1] 스테이크홀더Stakeholder의 기대치 식별하기
[실습 2-2] 새로운 품질 요소 설계하기
[프로젝트 II] 대상 시스템 품질 요소 추정하기
Chapter 03 소프트웨어 개발 프로세스
01 실현 가능성 분석
02 전통적인 소프트웨어 프로세스
03 애자일 및 XP 프로세스
1 신속한 소프트웨어 개발
2 애자일: XP 프로세스
3 애자일: 스크럼 프로세스
4 Chaos와 DevOps
04 소프트웨어 프로세스 개선
1 CMM과 CMMI
2 SPICE & A-SPICE
3 식스 시그마
4 기타 프로세스 표준
연습문제
[실습 3-1] 스크럼 이해하기
[실습 3-2] A-SPICE 생각해보기
[프로젝트 III] 프로세스 모델 선정하기
Chapter 04 DevOps
01 DevOps 개요
02 DevOps 프로세스와 프랙티스
1 DevOps 성공 전략
2 DevOps 프로세스
3 DevOps Toolchain
4 DevOps와 클라우드
5 DevOps 측정 척도
03 DevOps 변형들
1 DevSecOps
2 DevDataOps
3 BizDevOps
4 DevOps와 기술 부채
연습문제
[실습 4-1] 린 원리 적용하기
[실습 4-2] DevOps 도구 설치해보기
[실습 4-3] 용어의 의미 이해하기: 마이크로서비스
Chapter 05 프로젝트 관리
01 프로젝트 관리 필요성
1 프로젝트 관리의 정의
2 프로젝트 관리 단계
3 프로젝트 관리의 실패 원인
02 프로젝트 관리 기법
1 일정 관리 기법
2 비용 관리 기법
3 위험 관리
03 프로젝트 조직
1 프로젝트 팀 구조
2 전사적 운영 조직
04 프로젝트 관리 계획서
05 프로젝트 지원 도구
1 프로젝트 관리 기능
2 PMO 도구
3 엔지니어링 도구
연습문제
[실습 5-1] 작업 분할도 작성해보기
[실습 5-2] 팀 구성 방법 생각해보기
[프로젝트 IV] 프로젝트 관리 계획서 작성하기
Chapter 06 소프트웨어 비용 산정
01 기능 점수 개요
1 소프트웨어 비용과 기능 점수
2 기능 점수 구성 요소
02 기능 점수 산정 절차
1 단계 1: 기능 점수 산정 유형Type 결정
2 단계 2: 범위 및 경계Boundary 선정
3 단계 3: 데이터 기능 산출 및 복잡도 식별
4 단계 4: 처리 기능 산출 및 복잡도 식별
5 단계 5: 예비 기능 점수 산정
6 단계 6: 조정 인자 값 산출
7 단계 7: 최종 기능 점수 산출
03 정규법과 간이법
1 간이법 산정 절차
2 간이법 단계별 산정
04 기능 점수 활용
1 기능 점수와 프로그래밍 언어
2 기능 점수와 품질 척도
연습문제
[실습 6-1] 데이터 기능 산정하기
[실습 6-2] 조정 인자 값 산출을 위한 시스템 특성 평가하기
[실습 6-3] 간이법에 의한 데이터 및 처리 기능 카운트하기
[프로젝트 V] 프로젝트의 기능 점수 산정해보기
Chapter 07 요구사항 도출
01 요구사항 개요
02 요구사항 수집 기법
1 대면 수집 방법
2 비대면 수집 방법
03 요구사항 정의서 작성
연습문제
[실습 7-1].문서 편집기의 요구사항 정의 품질 분석하기
[실습 7-2] 요구사항 수집을 위한 인터뷰 질문 작성하기
[실습 7-3] 요구사항 정리해보기
[프로젝트 VI] 요구사항 정의서 작성하기
Chapter 08 객체지향 분석
01 객체지향과 UML
02 기능 모델링
1 기능 모델링 개요
2 유스 케이스 다이어그램
3 유스 케이스 설명서
03 구조 모델링
1 객체 식별
2 클래스 명세
3 클래스 다이어그램 작성
04 행위 모델링
1 순차 다이어그램 구성 요소
2 순차 다이어그램 작성
3 상태기계 다이어그램 작성
05 분석 산출물 점검
연습문제
[실습 8-1] SysML 알아보기
[실습 8-2] 클래스 다이어그램 작성해보기
[실습 8-3] 산출물 간의 일관성 점검해보기
[프로젝트 VII] 대상 시스템의 요구사항 분석하기
Chapter 09 모듈화 설계
01 모듈화 설계 개요
02 결합력의 이해
1 메시지 결합력Message Coupling
2 데이터 결합력Data Coupling
3 스탬프 결합력Stamp Coupling
4 제어 결합력Control Coupling
5 외부 결합력External Coupling
6 공유 결합력Common Coupling
7 내용 결합력Content Coupling
03 응집력의 이해
1 기능 응집력Functional Cohesion
2 순차 응집력Sequential Cohesion
3 교환 응집력Communicational Cohesion
4 절차 응집력Procedural Cohesion
5 시간 응집력Temporal Cohesion
6 논리 응집력Logical Cohesion
7 우연 응집력Coincidental Cohesion
04 모듈화 응용 기술
1 모듈화와 소모 전력Software Energy Consumption
2 모듈화와 기술 부채Technical debt
연습문제
[실습 9-1] 코드 개선을 통한 결합력 높이기
[실습 9-2] 코드 개선을 통한 응집력 높이기
Chapter 10 설계 패턴
01 설계 패턴 개요
02 생성 패턴
1 Abstract Factory
2 Builder
3 Factory Method
4 Prototype
5 Singleton
03 구조 패턴
1 Adapter
2 Bridge
3 Composite
4 Decorator
5 Facade
6 Flyweight
7 Proxy
04 행위 패턴
1 Chain of Responsibility
2 Command
3 Interpreter
4 Iterator
5 Mediator
6 Memento
7 Observer
8 State
9 Strategy
10.Template Method
11.Visitor
연습문제
[실습 10-1] 설계 패턴 적용하기
[프로젝트 VIII] 산출물에 설계 패턴 적용하기
Chapter 11 객체지향 설계
01 설계 원리
02 패키지 다이어그램
1 패키지 다이어그램 생성
2 계층화된 아키텍처 생성
03 자료 구조 설계
04 사용자 인터페이스 설계
1 인터페이스 설계 절차
2 인터페이스 클래스 설계
05 물리 구조 설계
1 배치 다이어그램 작성
2 기술 환경 명세
연습문제
[실습 11-1] 클래스 다이어그램에서 데이터베이스 스키마 설계하기
[실습 11-2] 시스템의 물리적 아키텍처 이해하기
[프로젝트 IX] 대상 시스템 설계하기
Chapter 12 인스펙션
01 인스펙션의 중요성
02 인스펙션 참여자
03 인스펙션 절차
1 스텝 1: 계획 활동
2 스텝 2: 오버뷰 활동
3 스텝 3: 준비 활동
4 스텝 4: 인스펙션 미팅 활동
5 스텝 5: 제3의 시간 활동
6 스텝 6: 재작업 활동
7 스텝 7: 후속 활동
8 인스펙션에 대한 평가
04 소프트웨어 리뷰 활동
연습문제
[실습 12-1] 산출물 오류 타입 정의하기
[프로젝트 X] 프로젝트 산출물에 대한 인스펙션 수행하기
Chapter 13 코딩
01 프로그래밍 언어 유형
02 좋은 코딩 기법
1 좋은 소프트웨어 코드의 6가지 공통점
2 좋은 코드 작성을 위한 규칙
03 코딩 가이드라인
1 MISRA-C 코딩 표준
2 시큐어 코딩
04 오픈 소스 기반 개발
1 오픈 소스 기반 개발 프로세스
2 오픈 소스 활용 시 주의 사항
3 오픈 소스 활용 환경
연습문제
[실습 13-1] 프로그래밍 언어 조사하기
[실습 13-2] 좋은 소프트웨어 코드의 특징 살펴보기
[실습 13-3] 내 코딩 스타일 되돌아보기
[실습 13-4] 오픈 소스 검색 도구 설치해보기
[프로젝트 XI] 프로젝트 대상 시스템 코딩하기
Chapter 14 화이트박스 테스트
01 테스트 개요
02 코드 기반 테스트 케이스 생성 기법
1 제어 흐름 그래프
2 경로 기반 테스트 케이스 생성
03 오류 기반 테스트
04 동적 심볼릭 테스트
1 기호 실행
2 콘콜릭 실행
연습문제
[실습 14-1] 제어 흐름 그래프 작성해보기
[실습 14-2] 선택 정렬 알고리즘에 대한 분기 커버리지 찾기
[프로젝트 XII] 프로젝트 개발 코드에 대하여 화이트박스 테스트 실행하기
Chapter 15 블랙박스 테스트
01 블랙박스 테스트 개요
02 기능 기반 테스트 케이스 생성 기법
1 동치 분할 기법
2 경계치 커버리지 분석
3 특수치 커버리지 분석
4 원인 결과 커버리지 분석
5 블랙박스 테스트 케이스 생성 예제
03 시나리오 기반 테스트
1 테스트 시나리오 생성 방법
2 테스트 시나리오 생성 예제
3 아웃라인 방법에 의한 테스트 케이스 생성
4 유스 케이스 방법에 의한 테스트 케이스 생성
04 테스트 단계
1 단위 테스트
2 통합 테스트
3 시스템 테스트
4 인수 테스트
5 회귀 테스트
연습문제
[실습 15-1] 동치 분할하기
[실습 15-2] 의사결정 테이블 생성해보기
[프로젝트 XIII] 프로젝트 개발 코드에 대하여 블랙박스 테스트 실행하기
Chapter 16 소프트웨어 개발 적용 기술
01 형상 관리
1 형상 관리 정의
2 형상 관리 절차
02 코드 리팩토링
3 관점지향 프로그래밍
4 탐색기반 소프트웨어 공학
1 탐색기반 소프트웨어 공학의 의미
2 탐색기반 소프트웨어 공학의 적용
연습문제
[실습 16-1] 형상 관리를 위한 산출물 이름 체계 정하기
[실습 16-2] 코드 리팩토링이 필요 없는 클린 코드의 조건 알아보기
[실습 16-3] 관점지향 프로그래밍에서 어드바이스 이해하기
[실습 16-4] 솔루션 탐색을 위한 유전 알고리즘 이해하기
Appendix 문서 틀
자료명 | 등록일 | 다운로드 |
---|---|---|
예제소스 | 2022-06-20 | 다운로드 |