본문 바로가기

책 리뷰

개발자는 어떻게 소프트웨어를 완성하는가

Great Code Vol.3 

개발자는 어떻게 소프트웨어를 완성하는가

 

 

[리뷰]

소프트웨어 개발시 개발 방법론과 개발 후 산추물에 대한 기본적인 내용이다.

개발자라면 기본적으로 알고 있어야 하는 내용이기 때문에,

개발 협업을 하기 위해서 뿐만 아니라, 개인 개발자라도 알고 있어야 할 내용이다.

 

나는 최근 업무상 12장 내용이 필요해서 이 책을 샀고, 열심히 11장 까지 왔다.

다 알고 있는 내용인데 다른책을 살걸 그랬다.

 

 

[참고]

목차

1부 퍼스널 소프트웨어 엔지니어링

1장 소프트웨어 개발에 대한 은유법
1.1 소프트웨어란 무엇인가?
1.1.1 소프트웨어는 대량 생산되는 공산품이 아니다
1.1.2 소프트웨어는 아무리 써도 닳지 않는다
1.1.3 대부분의 소프트웨어는 커스텀 제품이다
1.1.4 소프트웨어는 쉽게 업그레이드할 수 있어야 한다
1.1.5 소프트웨어는 독립적으로 존재하지 않는다
1.2 다른 전문 영역과의 비교
1.2.1 예술가의 프로그래머
1.2.2 건축가로서의 프로그래머
1.2.3 엔지니어로서의 프로그래머
1.2.4 기술 장인으로서의 프로그래머
1.2.5 여러분은 예술가, 건축가, 엔지니어, 기술 장인 중 어느 쪽에 가까운가?
1.3 소프트웨어 엔지니어링
1.3.1 소프트웨어 엔지니어링에 대한 공식적 정의
1.3.2 프로젝트의 크기
1.3.3 소프트웨어 엔지니어링은 어떻게 실패하는가?
1.4 소프트웨어 장인 정신
1.4.1 교육
1.4.2 도제식 훈련
1.4.3 소프트웨어 방랑객
1.4.4 고수의 경지에 오른 기술 장인
1.4.5 소프트웨어 장인 정신은 어떻게 실패하는가?
1.5 위대한 코드를 작성하기 위한 방법
1.6 참고 자료

2장생산성
2.1 생산성이란 무엇인가?
2.2 프로그래머의 생산성과 팀의 생산성 비교
2.3 인시와 실제 작업 시간
2.4 프로젝트의 개념적 복잡성과 실질적 복잡성
2.5 생산성 예측
2.6 생산성 측정 지표와 그 필요성
2.6.1 실행 파일 크기 측정 지표
2.6.2 머신 인스트럭션 측정 지표
2.6.3 코드 라인 측정 지표
2.6.4 명령문 수 측정 지표
2.6.5 기능 점수 분석법
2.6.6 McCabe 순환 복잡성 측정 지표
2.6.7 기타 측정 지표
2.6.8 측정 지표가 지닌 문제점
2.7 프로그래머가 하루에 열 줄의 코드를 작성한다는 조사 결과에 대해
2.8 개발 기간 예측
2.8.1 소규모 프로젝트 개발 기간 예측
2.8.2 중규모 및 대규모 프로젝트 개발 기간 예측
2.8.3 개발 기간 예측에 따른 문제점
2.9 위기 상황에서의 프로젝트 관리
2.10 생산성 향상의 비법
2.10.1 소프트웨어 개발 도구의 신중한 선정
2.10.2 오버헤드 관리
2.10.3 명확한 목표와 마일스톤 설정
2.10.4 스스로 동기 부여하기
2.10.5 집중력 유지와 방해 요소 제거
2.10.6 지겨움을 느낄 때는 다른 일을 해보자
2.10.7 스스로 발전할 수 있는 분위기를 조성하라
2.10.8 도움이 필요할 때는 요청하라
2.10.9 느슨해진 팀 분위기 되살리기
2.11 참고 자료

3장 소프트웨어 개발 모델
3.1 소프트웨어 개발 수명주기
3.2 소프트웨어 개발 모델
3.2.1 약식 모델
3.2.2 워터폴 모델
3.2.3 V 모델
3.2.4 반복형 모델
3.2.5 나선형 모델
3.2.6 신속 애플리케이션 개발 모델
3.2.7 점증형 모델
3.3 소프트웨어 개발 방법론
3.3.1 전통적 (예측적) 방법론
3.3.2 적응형 방법론
3.3.3 애자일 방법론
3.3.4 익스트림 프로그래밍
간소한 디자인을 위한 가이드
3.3.5 스크럼
3.3.6 목표 기능 주도형 개발
3.4 위대한 프로그래머를 위한 소프트웨어 개발 모델 및 방법론
3.5 참고 자료

2부 UML

4장 UML의 개요와 유스 케이스
4.1 UML 표준
4.2 UML 유스 케이스 모델
4.2.1 유스 케이스 다이어그램 요소
4.2.2 유스 케이스 패키지
4.2.3 유스 케이스 인클루전
4.2.4 유스 케이스 일반화
4.2.5 유스 케이스 익스텐션
4.2.6 유스 케이스 내러티브
4.2.7 유스 케이스 시나리오
4.3 UML 시스템 경계 다이어그램
4.4 유스 케이스 이외의 영역
4.5 참고 자료

5장 UML 액티비티 다이어그램
5.1 UML 액티비티 상태 기호
5.1.1 시작 상태와 종료 상태
5.1.2 액티비티
5.1.3 상태
5.1.4 전환
5.1.5 조건식
5.1.6 합병 지점
5.1.7 이벤트와 트리거
5.1.8 포크 및 조인 동기화
5.1.9 호출 기호
5.1.10 파티션
5.1.11 주석과 주해
5.1.12 커넥터
5.1.13 기타 액티비티 다이어그램 기호
5.2 UML 액티비티 다이어그램의 확장
5.3 참고 자료

6장 UML 클래스 다이어그램
6.1 UML에서의 객체지향 분석 및 디자인
6.2 클래스 다이어그램에서의 가시성
6.2.1 퍼블릭 클래스의 가시성
6.2.2 프라이빗 클래스의 가시성
6.2.3 프로텍티드 클래스의 가시성
6.2.4 패키지 클래스의 가시성
6.2.5 가시성 타입 추가하기
6.3 클래스 속성 요소
6.3.1 속성의 가시성
6.3.2 속성에서 파생된 값
6.3.3 속성 이름
6.3.4 속성의 데이터 타입
6.3.5 연산 데이터 타입(반환값)
6.3.6 속성의 다수성 표현
6.3.7 기본 속성값
6.3.8 프로퍼티 문자열
6.3.9 속성 문법
6.4 클래스 연산 요소
6.5 UML 클래스의 관련성
6.5.1 클래스 의존 관계
6.5.2 클래스 연관 관계
6.5.3 클래스 집합 관계
6.5.4 클래스 구성 관계
6.5.5 클래스 관련성의 특징
6.5.6 클래스 상속 관계
6.6 객체
6.7 참고 자료

7장 UML 인터랙션 다이어그램
7.1 시퀀스 다이어그램
7.1.1 라이프라인
7.1.2 메시지 타입
7.1.3 메시지 라벨
7.1.4 메시지 번호
7.1.5 보호 조건
7.1.6 반복 시행
7.1.7 롱 딜레이 및 시간 제약 조건
7.1.8 외부 객체
7.1.9 액티베이션 바
7.1.10 브랜칭
7.1.11 대체 흐름
7.1.12 객체 생성 및 제거
7.1.13 시퀀스 프래그먼트
7.2 커뮤니케이션 다이어그램
7.3 참고 자료

8장 그 외 다양한 UML 다이어그램
8.1 컴포넌트 다이어그램
8.2 패키지 다이어그램
8.3 배포 다이어그램
8.4 결합 구조 다이어그램
8.5 스테이트차트 다이어그램
8.6 UML에 대한 관심의 확장
8.7 참고 자료

3부 문서화

9장 시스템 문서화
9.1 시스템 문서화 유형
9.2 변경 이력 추적 기능
9.2.1 개발자 문서에 추적 기능 적용하기
9.2.2 태그 형식
9.2.3 요구 사항 이력 추적 매트릭스
9.3 검증, 검토, 확인
9.4 문서화를 통한 개발 비용 절감
9.4.1 사용자 니즈 검증을 통한 비용 절감
9.4.2 요구 사항 부합 여부 검토를 통한 비용 절감
9.5 참고 자료

10장 요구 사항 문서화
10.1 요구 사항의 근원과 추적 가능성
10.1.1 요구 사항 형식 권장안
10.1.2 우수한 요구 사항의 특징
10.2 디자인 목표
10.3 시스템 요구 사항 명세서
10.4 소프트웨어 요구 사항 명세서
10.4.1 서론
10.4.2 전반적 설명
10.4.3 세부적 요구 사항
10.4.4 각종 지원 정보
10.4.5 소프트웨어 요구 사항 명세서 예시
10.5 요구 사항 작성하기
10.6 유스 케이스
10.6.1 디버그 모드 활성화/비활성화
10.6.2 Ethernet 활성화/비활성화
10.6.3 RS-232 활성화/비활성화
10.6.4 테스트 모드 활성화/비활성화
10.6.5 USB 활성화/비활성화
10.6.6 DIP 스위치 읽기
10.7 유스 케이스를 DAQ 소프트웨어 요구 사항으로 작성하기
10.8 SRS에 기초한 DAQ 소프트웨어 요구 사항 작성
10.9 요구 사항 정보를 이용한 RTM 업데이트
10.9.1 리뷰에 의한 요구 사항 검증
10.9.2 테스트에 의한 요구 사항 검증
10.10 참고 자료

11장 소프트웨어 디자인 명세서 문서화
11.1 IEEE Std 1016-1998 vs IEEE Std 1016-2009
11.2 IEEE 1016-2009 개념 모델
11.2.1 디자인 고려 사항과 디자인 업무 참여자
11.2.2 디자인 뷰포인트와 디자인 요소
11.2.3 디자인 뷰, 디자인 오버레이, 디자인 래셔널
11.2.4 IEEE Std 1016-2009 개념 모델
11.3 SDD 필수 콘텐츠
11.3.1 SDD 식별 정보
11.3.2 디자인 작업 참여자와 디자인 고려 사항
11.3.3 디자인 뷰, 뷰포인트, 오버레이, 래셔널
11.4 SDD 추적 가능성 및 태그
11.5 SDD 개요 제안
11.6 SDD 작성 예시
11.7 디자인 정보를 이용한 RTM 업데이트
11.8 소프트웨어 디자인 문서의 작성
11.9 참고 자료

12장 소프트웨어 테스트 문서화
12.1 Std 829 표준안의 소프트웨어 테스트 문서
12.1.1 테스트 프로세스 지원
12.1.2 중요도 레벨과 위험도 평가
12.1.3 소프트웨어 개발 테스트 레벨
12.2 테스트 계획
12.2.1 마스터 테스트 계획
12.2.2 레벨 테스트 계획
12.2.3 레벨 테스트 디자인 문서화
12.3 소프트웨어 리뷰 리스트 문서화
12.3.1 SRL 문서 개요 작성 예시
12.3.2 SRL 작성 예시
12.3.3 RTM에 SRL 아이템 추가하기
12.4 소프트웨어 테스트 케이스 문서화
12.4.1 STC 문서의 서론부
12.4.2 세부 사항
12.4.3 범례
12.4.4 소프트웨어 테스트 케이스 작성 예시
12.4.5 STC 정보를 이용한 RTM 업데이트
12.5 소프트웨어 테스트 프로시저 문서화
12.5.1 IEEE Std 829-2009 소프트웨어 테스트 프로시저
12.5.2 STP 문서 개요의 확장
12.5.3 STP 문서의 서론부
12.5.4 테스트 프로시저
12.5.5 범례
12.5.6 색인
12.5.7 STP 작성 예시
12.5.8 STP 정보로 RTM 업데이트하기
12.6 레벨 테스트 로그
12.6.1 레벨 테스트 로그 문서의 서론부
12.6.2 세부 사항
12.6.3 용어 설명
12.6.4 테스트 로그에 대한 몇 가지 의견
12.7 문제점 보고서
12.7.1 문제점 보고서의 서론부
12.7.2 세부 사항
12.7.3 문제점 보고서에 대한 몇 가지 의견
12.8 테스트 보고서
12.8.1 마스터 테스트 보고서 개요
12.8.2 레벨 테스트 보고서
12.9 여러분에게 정말로 필요한 개발자 문서는 무엇인가?
12.10 참고 자료

후기: 위대한 코드 설계하기

 

 

 

반응형