답은 나중에 추가.
1장
1.1. 전문적인 소프트웨어가 단순히 사용자를 위해 개발된 프로그램이 아닌 이유를 설명하라.
1.2. 일반적인 소프트웨어 제품 개발과 맞춤형 소프트웨어 개발의 가장 큰 차이점은 무엇인가? 이것은 일반적인 소프트웨어 제품의 사용자에게 실질적으로 무엇을 의미하는가?
1.3. 모든 전문적인 소프트웨어가 가져야할 네가지 중요한 속성은 무엇인가? 경우에 따라 중요할 수 있는 네가지 다른 속성들도 제시해보라.
1.4. 혼재성, 업무와 사회의 변화, 신뢰성과 보안 문제를 떠나서 21세기를 맞이하여 소프트웨어 공학에 도전하는 다른 문제들을 찾아보라. (힌트 : 환경에 대해 생각하라)
1.5. 1.1.2장에서 논의한 타입들 중에 몇몇 어플리케이션에 대한 당신이 가진 지식에 기초하여 왜 상이한 어플리케이션 타입을 개발하고 디자인하려면 다른 종류의 소프트웨어 공학적 기법이 필요한지 예를 들어 설명해보라.
1.6. 모든 종류의 소프트웨어 시스템에 적용되는 기반 사상들이 존재하는 이유를 설명하라.
1.7. 전세계적인 웹의 사용이 소프트웨어 시스템을 어떻게 변화시켰는지 설명하라.
1.8. 전문적인 엔지니어가 의사나 변호사처럼 공인받아야 하는지 논하라.
1.9. 도표 1.3에 보여준 ACM/IEEE 윤리강령의 각 항목에 대해 적절한 예를 제시하라.
1.10. 테러에 대응하기 위해, 많은 나라에서 다수의 시민들과 그들의 행동을 추적할 수 있는 컴퓨터 시스템을 이미 개발했거나 그렇게 할 계획이다. 이것은 명백하게 사생활 침해이다. 이런 종류의 시스템 개발에 착수하는데 대한 윤리적 관점을 논하라.
2장
2.1. 다음과 같은 시스템의 개발을 관리하기 위한 기본으로서 사용될 수 있는 가장 일반적인 소프트웨어 프로세스 모델이 무엇인지 제시하고 그 이유를 설명하라.
- 자동차 ABS를 제어하기 위한 시스템
- 소프트웨어 유지보수를 지원하기 위한 가상현실 시스템
- 현존하는 시스템을 대체하는 대학 회계 시스템
- 사용자가 환경적 영향을 최소한으로 받도록 여행을 계획할 수 있게 도와주는 상호작용 시스템
2.2. 왜 점진적 개발이 비지니스 소프트웨어 시스템을 개발하는데 가장 효율적인 접근법인지 설명하라. 왜 이 모델이 실시간 시스템 공학에는 덜 적절한가?
2.3. 도표 2.3에서 보여준 재사용 기반 프로세스 모델을 고려해보라. 왜 프로세스에 분리된 두가지 요구공학적 활동이 필요한지 설명하라.
2.4. 요구공학적 프로세스에서 사용자 요구사항과 개발 시스템 요구사항을 구별하는 것이 왜 중요한지 제시하라.
2.5. 소프트웨어 디자인 프로세스의 주요 활동과 그러한 활동의 결과물들을 서술하라. 다이어그램을 이용하여 이러한 결과물들의 가능한 연관성들을 보여라.
2.6. 복잡한 시스템에서 왜 변화가 불가피한지 설명하고, 변화를 예측하고 변화에 보다 탄력적으로 소프트웨어를 개발하게 돕는 소프트웨어 프로세스 활동의 예를 들어라. (프로토타이핑과 점진적 제공을 제외하고)
2.7. 왜 일반적으로 생산 시스템에서 프로토타이핑이 사용되지 않는지 설명하라.
2.8. 왜 보엠의 소용돌이 모델이 변화 회피와 변화 용인 둘 다 뒷받침 할 수 있는 적응성있는 모델인지 설명하라. 실제로, 이 모델은 널리 사용되지 않는다. 왜 그러한지 제시하라.
2.9. 소프트웨어 프로세스의 동적 및 정적인 관점을 RUP(Rational Unified Process)로 제공하는 것의 장점은 무엇인가?
2.10. 역사적으로 볼 때, 새로운 기술의 도입은 노동시장에 근본적인 변화를 가져왔으며, 적어도 일시적으로 사람들에게 일자리를 빼앗았다. 대규모의 공정 자동화가 소프트웨어 엔지니어에게도 같은 결과를 불러올 수 있는지를 논하라. 만약 그렇지 않을 것이라 생각한다면, 그 이유를 설명하라. 만약 일자리가 줄어들 것이라 생각한다면, 이러한 기술의 도입을 수동적으로 혹은 적극적으로 저항하는 것이 윤리적인가?
3장
3.1. 새 시스템의 빠른 제공과 배치가 왜 때때로 이 시스템들의 세세한 기능보다 업무상 더 중요한지 설명하라.
3.2. 애자일 방법론의 근본적인 원리들이 어떻게 소프트웨어의 개발과 배치의 가속으로 이어지는지 설명하라.
3.3. 어떨 때 소프트웨어 시스템을 개발하면서 애자일 방법론을 사용하지 않도록 권하겠는가?
3.4. 익스트림 프로그래밍은 사용자 요구사항을 스토리로 표현하며, 각각의 스토리는 카드에 쓰여진다. 이러한 접근법이 요구사항 서술에 가지는 장점과 단점들을 토의하라.
3.5. 왜 테스트 우선적 개발이 프로그래머가 시스템 요구사항을 더 잘 이해하게 돕는지 설명하라. 테스트 우선적 개발의 잠재적인 어려움은 무엇인가?
3.6. 왜 페어로 일하는 프로그래머의 생산성 비율이 따로 일하는 프로그래머들의 그것의 절반을 넘는지 네가지 이유를 제시하라. ※(절반을 넘는다고 많은게 아닌거 같은데 이런 관용구 밖에 없네...본문을 자세히 봐야할 듯) 나중에 체크
3.7. 챕터 23에서 논의된 것처럼, 관습적인 계획 기반의 접근법과 스크럼 접근법을 비교하고 대조하라. 대조점은 각각의 접근법이 프로젝트에 인원을 배치하는 것을 계획하고, 프로젝트의 비용을 추정하고, 팀 화합을 유지하고, 프로젝트 팀원의 변경을 처리하는데 얼마나 효율적인지에 기초해야 한다.
3.8. 당신은 회사에서 비행기를 위한 중요한 제어 시스템을 개발하는 소프트웨어 매니저이다. 당신은 소프트웨어 요구사항을 공식적인 소프트웨어 사양서(챕터 13에 논의됨)로 만드는 소프트웨어 디자인 지원 시스템의 개발을 책임지고 있다. 뒤에 언급될 개발 전략의 장점과 단점을 논평하라.
a. 그 시스템에 필요한 요구사항들을 소프트웨어 엔지니어들과 외부의 이해당사자들(규제 인증 기관과 같은)로부터 수집하고 절차중심적 접근법을 사용해 시스템을 개발한다.
b. 루비나 파이썬 같은 스크립팅 언어를 사용해 프로토타입을 개발하고, 소프트웨어 엔지니어들과 다른 이해당사자들과 함께 이것을 평가하고, 그 다음 시스템 요구사항을 검토한다. 최종 시스템은 자바로 재개발한다.
c. 개발팀에 사용자를 참여시키고 애자일 접근법을 사용하여 자바로 시스템을 개발한다.
3.9. 소프트웨어 개발팀에 가깝게 참여하는 사용자를 가질 때의 문제점 중 하나로 제시된 것은 '원주민화', 즉 개발팀의 관점을 고스란히 받아들이고 동료 사용자들의 필요를 보는 시야를 잃게되는 것이다. 어떻게 이러한 문제들을 회피할 수 있을지 세가지 방법을 제시하고 각각의 접근법들의 장점과 단점을 논하라.
3.10. 비용과 통근의 환경적 영향을 감소시키기 위해 당신의 회사는 몇개의 사무실을 폐쇄하고 직원들이 집에서 일할 수 있게 지원하기로 결정하였다. 그러나, 이러한 정책을 진행한 경영진은 소프트웨어가 클로즈 팀 워킹과 페어 프로그래밍에 의지하는 애자일 방법론을 사용해서 개발되고 있었음을 간과하였다. 이 새로운 정책이 초래할 어려움들과, 당신이라면 어떻게 이 문제들을 회복시킬수 있을지 논의하라.