『소프트웨어 공학의 모든 것』은 한 마디로 프로그래머를 소프트웨어 엔지니어 되게 하는 모든 것을 담고 있다. 프로그래머는 단순히 코딩에 머무르지만 소프트웨어 엔지니어는 개발 모든 과정을 이해하고 수행할 능력을 갖추고 있다. 만질 수 없고 복잡하며 변경이 많은 소프트웨어를 여러 사람이 협력하여 만드는 것은 빌딩을 건축하는 것과 같이 엔지니어링이 필요하다. 엔지니어링이란 절차와 방법, 설계, 테스트, 품질 등의 원리를 잘 이해하고 적용하여 실패 없이 작업할 수 있는 능력을 의미한다. 소프트웨어 시스템은 개인의 코딩 역량만으로는 만들기 어렵다. 이 책은 대학 3, 4학년을 대상으로 소프트웨어 설계, 개발, 운영에 관한 기초 지식을 배울 수 있도록 설명하고 있다. 소프트웨어 공학 지식체계(SWEBOK)에서 제시하는 다음과 같은 기본 사항을 모두 포함한다.
Contents
CHAPTER 01 소개
01 소프트웨어
1 소프트웨어의 특징
2 프로그래밍
02 소프트웨어 개발
1 기본 활동
2 개발 작업의 특징
03 소프트웨어 공학의 접근법
1 소프트웨어 공학의 정의
2 소프트웨어 공학의 목표
04 소프트웨어 공학의 주제
1 단계적 프로세스
2 품질 보증
3 프로젝트 관리
05 소프트웨어 공학의 발전
연습문제
CHAPTER 02 프로세스와 방법론
01 소프트웨어 생명주기
02 프로세스
1 프로세스 정의
2 프로세스와 품질
03 전통적인 모델
1 폭포수 모델
2 프로토타이핑 모델
3 점증적 모델과 진화적 모델
4 나선형 모델
5 컴포넌트 기반 모델
6 Unified Process
04 애자일 모델
1 애자일 모델의 특징
2 익스트임 프로그래밍
3 크리스탈
4 스크럼
05 방법론
1 구조적 방법론
2 정보공학 방법론
3 객체지향 방법론
연습문제
CHAPTER 03 프로젝트 계획과 관리
01 프로젝트 시작
1 프로젝트 가치
2 프로젝트 리스크
3 타당성 분석
02 프로젝트 계획과 스케줄링
1 목표 설정
2 프로젝트 범위
3 WBS
4 스케줄링
03 비용 예측 기법
1 COCOMO-81
2 COCOMO II
3 기능점수
4 COSMIC 기능점수
04 프로젝트 팀 조직
1 팀 역할
2 직능별 조직
3 프로젝트별 조직
4 매트릭스 조직
5 애자일 조직
05 실행과 모니터링
1 프로젝트 실행
2 프로젝트 모니터링
3 번다운 차트
06 리스크 관리
1 리스크 파악
2 리스크 평가
3 리스크 관리
연습문제
CHAPTER 04 요구 분석
01 요구
1 기능 요구
2 비기능 요구
3 요구 대상에 의한 분류
02 요구 사항 추출
1 요구 정보 출처
2 고객의 발표
3 문헌 양식 조사
4 인터뷰
5 설문
6 브레인스토밍
7 프로토타이핑
03 요구 분석
1 요구 품질
2 도메인 분석
3 시나리오 기반 분석
04 유스케이스 173
1 유스케이스 다이어그램
2 유스케이스 명세
3 유스케이스 사이의 관계
05 요구 명세
1 작성 방법
06 요구 검증
연습문제
CHAPTER 05 요구 모델링
01 모델링
1 관점과 추상화 수준
2 소프트웨어와 모델링
3 모델 사이의 관계
02 UML
1 UML 다이어그램
2 모델링 과정
03 정적 모델링
1 객체지향 개념
2 클래스 다이어그램
04 동적 모델링
1 시퀀스 다이어그램
2 커뮤니케이션 다이어그램
3 상태 다이어그램
05 제어 모델링
06 모델 검증
연습문제
CHAPTER 06 설계 원리
01 설계 기본 개념
1 서브시스템, 모듈
2 설계 관점
3 설계 작업 과정
02 품질 목표
03 전통적인 설계 원리
1 추상화
2 캡슐화
3 모듈화
4 결합
5 응집
04 객체지향 설계 원리
1 단일 책임의 원리
2 개방 폐쇄의 원리
3 리스코프 교체의 원리
4 인터페이스 분리의 원리
5 의존 관계 역전의 원리
05 컴포넌트 구성 원리
1 제어 역전
2 패키지 설계 원리
연습문제
CHAPTER 07 아키텍처 설계와 패턴
01 아키텍처 기초
1 아키텍처란?
2 아키텍처의 역할
3 아키텍처의 표현
02 아키텍처 스타일
1 클라이언트 서버형
2 계층형
3 이벤트 기반 아키텍처
4 MVC
5 파이프 필터
6 데이터 중심 아키텍처
7 Peer-to-Peer 스타일
8 마이크로커널 스타일
03 디자인 패턴
1 디자인 패턴의 혜택
2 디자인 패턴의 형식
3 싱글톤 패턴
4 반복자 패턴
5 어댑터 패턴
6 데코레이터 패턴
7 팩토리 메서드 패턴
8 추상 팩토리 패턴
9 상태 패턴
10 옵서버 패턴
04 아키텍처 평가
연습문제
CHAPTER 08 UI 설계
01 UI 기본 개념
1 사용성
2 멘탈 모델
3 피드백
4 제약
02 UI 설계 원리
03 UI 설계 과정
1 사용자 분석
2 태스크 분석
3 UI 설계와 구현
4 사용성 테스트
04 UI 요소
05 화면 및 출력 설계
1 화면 설계
2 출력 설계
연습문제
CHAPTER 09 코딩
01 코딩 작업
1 작업 과정
2 자주 발생하는 오류
02 코딩 표준
1 명명 규칙
2 형식
3 문장과 수식
4 오류처리
5 주석
03 설계에서 코드 생성
1 연관의 코딩
2 시퀀스 다이어그램의 코딩
3 상태 다이어그램의 코딩
04 리팩토링
1 리팩토링 개념
2 리팩토링 과정
3 코드 스멜
4 리팩토링 사례
05 코드 품질 향상 기법
1 코드 인스펙션
2 정적 분석
3 테스트 중심 개발
4 페어 프로그래밍
연습문제
CHAPTER 10 테스트
01 테스트 기초
1 버그, 오류, 결함, 고장
2 테스트 원리
3 테스트 작업 과정
4 테스트 단계
5 테스트 케이스
02 블랙박스 테스트
1 동등 분할 기법
2 경곗값 분석
3 원인 결과 그래프
03 화이트박스 테스트
1 논리 흐름의 표현
2 검증 기준
04 상태 기반 테스트
1 상태 머신
2 테스트 케이스 선택
05 통합 테스트
1 빅뱅 통합
2 하향식 통합
3 상향식 통합
4 연쇄식 통합
06 시스템 및 인수 테스트
1 기능 테스트
2 성능 테스트
3 보안 테스트
4 UI 테스트
5 인수 테스트
연습문제
CHAPTER 11 유지보수
01 유지보수 소개
1 변경의 이유와 유지보수 유형
2 Lehman의 법칙
02 유지보수 작업 과정
1 유지보수 작업
2 유지보수 프로세스 모델
3 프로그램의 이해
4 변경 파악과 분석
03 형상 관리
1 형상 관리의 목적
2 형상 관리 절차
04 역공학과 리엔지니어링
1 역공학
2 리엔지니어링
05 지속적 통합과 배포
1 CI/CD
2 CI/CD 파이프라인
연습문제
CHAPTER 12 품질
01 소개
1 품질 활동 수준
2 품질 개념
3 소프트웨어 품질
02 품질 모델
03 품질 관리
1 품질 관리 조직
2 프로세스와 표준의 정의
3 품질 관리 활동
4 인스펙션
04 품질 측정
1 측정 기본 개념
2 품질 메트릭
05 프로세스 개선
1 CMMI
2 SPICE
연습문제
Author
최은만
현재 동국대학교 컴퓨터공학과 교수로 재직 중이며 S/W 공학, 객체지향 설계, S/W 품질 및 테스팅, 관점지향 프로그래밍 등을 연구하며 가르치고 있다. 저서로 『새로 쓴 소프트웨어 공학』(정익사, 2014), 『객체지향 소프트웨어공학』(한빛출판사, 2017)이 있다.
약력
KAIST 전산학과(전산학 석사)
미국 일리노이공과대학 컴퓨터과학과(컴퓨터과학 박사)
한국표준과학연구소 연구원
충남대, 목원대, 한밭대 강사
DACOM 주임연구원
시카고주립대 강사
카네기멜론대학교 소프트웨어공학 단기연수
콜로라도주립대 컴퓨터과학과 방문교수
베일러대 컴퓨터과학과 방문교수
현재 동국대학교 컴퓨터공학과 교수
현재 동국대학교 컴퓨터공학과 교수로 재직 중이며 S/W 공학, 객체지향 설계, S/W 품질 및 테스팅, 관점지향 프로그래밍 등을 연구하며 가르치고 있다. 저서로 『새로 쓴 소프트웨어 공학』(정익사, 2014), 『객체지향 소프트웨어공학』(한빛출판사, 2017)이 있다.
약력
KAIST 전산학과(전산학 석사)
미국 일리노이공과대학 컴퓨터과학과(컴퓨터과학 박사)
한국표준과학연구소 연구원
충남대, 목원대, 한밭대 강사
DACOM 주임연구원
시카고주립대 강사
카네기멜론대학교 소프트웨어공학 단기연수
콜로라도주립대 컴퓨터과학과 방문교수
베일러대 컴퓨터과학과 방문교수
현재 동국대학교 컴퓨터공학과 교수