一. 基本概念
1. 什么是软件过程?软件过程包括哪三类过程?这三类过程分别承担什么任务?
答:软件过程(Software Procedure)是为获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动
软件过程规范了软件开发的活动集合和活动顺序,提供了构造高质量软件所需要完成的一系列相关活动及其活动顺序的框架。;
软件过程贯穿软件开发方法论;
软件过程可概括为三类:基本过程、支持过程、组织过程。这三个过程反映了软件开发的活动集合,
基本过程:软件开发的主干活动集。如同建筑工程的签合同、搞设计、现场施工、工程交付、使用维护,也就是进行投入产出的实质性活动集。软件开发的基本过程多数属于开发人员执行的活动集,它包括需求分析、软件设计、系统实现这些子活动;。
支持过程:软件开发的辅助活动集。如同建筑工程的资料管理、工程监理等。也可以说是软件质量保证的活动集。应该属于项目管理层执行的活动集。这个活动集在现代软件工程中逐渐被重视;
组织过程:软件开发的软、硬件环境建设。如同建筑工程的施工装备、人员协调、人员培训、后勤保障等综合配套管理活动。组织过程基本上属于企业管理层执行的活动集,体现了IT企业的可持续发展能力和竞争优势。
2. 软件过程与软件工程有什么区别和联系?
答:1)过程与工程是两个层面的问题,过程是加工高质量软件产品的活动集合和顺序,具体的投入产出过程,关注在技术层面;工程是对过程的投入进行资源协调,是向过程要效益的管理层面。
2)软件过程是软件工程的子集。在软件工程的过程、方法和工具三要素中,它是底层要素;在软件工程的目标、原则和过程三维全景图中,通过软件过程才能实现软件工程的目标。
3. 什么是软件生命周期?与软件过程有何区别和联系?
答:
(1)软件生存周期:软件产品从定义到开发、经过使用和维护,直到最终被弃用;
2)两者指同一个事情,只是表达问题的角度不同:
软件过程:关注产品加工的活动集合、顺序和方法论;
生命周期:关注软件产品从诞生到消亡的生命历程实质内容也就是软件过程;
因此软件过程=软件生存周期,“软件生存周期模型”也称为“软件过程模型”或“软件开发模型”。
4. 把生命周期划分为阶段有何作用?
答:把整个生命周期划分为若干较小的阶段,每个阶段有明确的任务界限,能够简化每一步的工作内容,使得因为软件规模增长而带来的软件开发复杂性增大变得容易控制和管理。这是遵循分阶段、实行阶段控制的基本原理。
5. 软件生命周期划分哪些阶段?每个阶段有哪些基本活动?
答:生存周期的基本划分:分成三个大的阶段也称三个时期,即计划时期、开发时期和运行时期。每个时期又由若干活动组成。
软件工程学什么计划时期:是软件项目的初始阶段。主要活动及顺序是问题定义和可行性研究;活动内容是搞清软件的开发目的、规模、约束条件和技术方案,属论证阶段;目标是获取软件开发项目。
开发时期:软件开发的第二阶段。包括的活动及顺序是分析、设计和实现;活动内容是逐步细化软件模型、经过编码和测试,最终得到可运行的软件。开发时期属实质性开发阶段;目标是构建高质量的软件。
运行时期:软件生存周期的最后阶段,软件处在运行中,往往也是最长阶段。主要活动就是维护;活动内容是和进化软件;目标是延长软件的寿命。
6. 介绍了哪四种传统开发模型?各有何特点?
答:瀑布、原型、增量、螺旋四个传统模型:
(1) 瀑布模型:主要体现了分阶段、有控制的思想。活动间强调按顺序、文档化;存在的问题是:过于理想化,每一步的工作必须完整准确,否则无法进行下一步工作。
(2) 原型模型:需求分析入手快速、表达直观、容易交流。重点解决瀑布模型需求分析入手难的问题。
(3) 增量模型:对于需求复杂的系统,采用分块开发,逐步集成的开发策略。增量体现了演进、迭代思想,每一块就是一个增量。每个增量是一次迭代。增量模型的新版本叫做“极限编程”(XP)。
(4) 螺旋模型:融合了上述三种模型,融进了循环往复、强化了演进迭代的思想,增加风险控制环节。但风险分析的正确性是左右软件演进的关键因素。
7. 当需求不能一次搞清,且系统要求比较复杂时应选用哪种开发模型较适合?
答:开发模型不是孤立或排斥的,相互借鉴和参考。在上述四种古典螺旋模型中,螺旋模型是一种综合性的模型,适应于较复杂的系统。
8. RUP模型有哪些优越性?为何得到如此广泛的应用?
答:RUP采用了时间与过程的二维表达方式,全面贯穿了软件开发分段、分层、细化、往复、循环、迭代、并发、重叠、演进、基线、里程碑、评审、控制等方法论。
(1) 生命周期模型分为初始、细化、构造和交付四个阶段,比三个时期的传统模型更为合理。因为各种活动不是随阶段的划分而戛然截止,每个阶段多种活动是重叠、并发、延续、主次分明;
(2) 阶段控制采用了基线与里程牌,工作有起点、有目标、有计划;
(3) 模型反映了软件开发需要团队合作,因此RUP是一个团队模型;
(4) 双重迭代,大迭代(周期迭代)完成一个新版本,小迭代(阶段内迭代)完成里程牌目标;
(5) RUP并不是不讲究维护,维护只是一个新的增量迭代(周期迭代)过程,在过程集合中有“配置和变更管理” 活动来管理软件的维护;
9. XP是一种什么样的模型?如何理解“隐喻”?
答:XP是现代版的增量模型:特点是客户参与、适应变化、测试驱动、以代码为核心。
(1) 实行XP的条件是:
企业具有较高的能力成熟度,具有团队开发环境和配套的测试工具
软件结构是开放的,增量可随意整合;
开发团队拥有“系统隐喻”;
(2) 对隐喻的理解
隐喻就是指不言而喻,它在IT企业内部有一套沉淀下来的简单易懂、具有象征意义的词语,所有成员可用这些词语来交流并能一致理解来完成工作。
隐喻是实施XP的基础。它能做到直接编码、编码标准、简化设计。
使用隐喻标志软件开发组织的能力成熟度达到一定高度。
10. 每个软件企业遵循的软件开发过程都是一样的吗?
答:任何软件过程只是给软件开发组织一个参考,并非清规戒律。企业规划软件过程要适合企业的实际情况,并且不是一成不变,要随着企业的发展、环境的变化,项目的性质要改进软件过程。RUP就是一个可裁剪的软件过程模板。
11. 软件过程有何作用?
答:软件过程就是软件产品的加工过程,其本质就是将“客观世界”,映射(虚拟)到“计算机世界”,即从抽象到具体的逐步细化过程。系统分析就是对客观世界的抽象,中间要经过分析模型、设计模型的逐步细化(具体化),最终的具体结果就是计算机世界里的代码。
12. CMM有何作用?
答:
CMM是评价软件组织开发能力(水平)的参考模型,是一种认证标准,认可软件工程达到的程度。(如同评定职称的条件)
CMM是软件组织提升自身能力、走向成熟的参照系。它提供走向成熟的阶梯目标,并不提供走向目标的方法。
CMM等级的提高依靠软件过程改进(SPI
二. 深入讨论
1. 辨析:软件产品最终靠分析、设计、实现这些技术得到,不用讲究什么开发过程,只要会这些技术,照样可以开发软件。
参考答案:错。软件分析、设计、实现等技术活动,是获得软件产品的实质性活动,在完整的软件过程中称为“基本过程”,是投入产出的主体过程,但不是软件过程的全部。软件过程还有对主体过程进行质量保证活动、文档配置活动、评审确认等“支持过程”,还有项目计划、资源协调、环境建设、人员培训等“组织过程”。
如果软件组织的软件过程只是注重在基本过程,说明它的能力成熟度只是处在“初级阶段”,组织内的所有活动都无法预测、无法控制的。
2. 辨析:瀑布模型是最原始、最初等的模型,因此没有什么用?
参考答案:错。尽管单纯的瀑布模型难以实施,但它是所有更为先进模型的基础,即使RU
P模型也是瀑布模型的扩展,RUP的生命周期四个阶段是基于瀑布模型三个时期的改进和补充,在每个阶段进行迭代也是遵循的瀑布模型。见书中图2-9和图2-10.
3. 讨论:RUPXP两者的核心理念有何不同?两者是对立的还是统一的?
参考答案:
1)核心理念的差别
RUP的核心理念是:贯彻软件开发遵循分阶段、有控制、逐步细化的思想;
XP的核心理念是:增量开发、快速响应、适应变化;
2)两者的统一
RUP为开发组织提供一个规划开发过程的参考模型,它的思想是根据生命周期(时间进程)对软件过程(活动集合)进行组织,它对项目规划、资源配置、目标管理起到重要的参考,是团队开发模型。
XP与RUP不矛盾,非对立的。两者是相辅相成、相互补充来解决软件开发的两个层面的问题,RUP面向管理层面,做好规划、做好控制;XP面向实施层面,它在RUP框架管理之下,在具体的迭代开发中发挥XP快速、灵活的作用。
以代码为核心的XP并不是倒退,是软件开发工具、架构技术、设计模式等整体进步到一定程度上的产物。
使用XP的软件开发组织并不是处在“混沌”的初级阶段,而是能力成熟度达到一定高度的标志。
XP并没有否定软件开发走分析、设计、编码、测试的总路线,只是采用的方式不同。XP直接编码也并不等于取消需求,现场客户讲故事改进了需求获取的方式。客户现场测试、现场验收缩短了需求分析的磨合期;
4. 讨论:RUP表示的软件生命周期与图2-2的生命周期模型有何进步?
参考答案:
2-2是基本的生命周期模型,分为计划、开发、维护三个时期,每个时期活动的安排是顺序、单一、非此即彼,属于早期的“个体模型”,它不能反映团队开发的真实状况;
RUP的生命周期模型,分为初始、细化、构造、交付四个阶段,每个阶段活动的安排是主次重叠、渐进展开、往复迭代,并且有基线和里程牌。因此,它能反映团队并行合作的工作状况,因此可以更好地做好时间和资源规划,更好地做好控制。
5. 讨论:张先生和几个大学的同学结成一个开发组织,并且完成了两个项目已交付使用,他们拿到的项目都是直接编程,你认为他们的做法就是XP吗?他们可持续吗?
参考答案:
XP不等于没有管理,XP不等于没有原则。快速上手编程不等于就是XP,不等于就满足XP13个实践的管理原则(见图2-12)。如果他们不是遵循XP的条件和原则,只是靠一时兴起完成的项目,即使个人的编程能力再强,必然会在进一步的开发、维护中遇到各种各样的麻烦,他们是不可持续的。
6. 讨论:你已经学会了面向对象的编程语言C++Java,并且使用它们开发了一些程序,
你认为这就是面向对象的开发吗?
参考答案:
通过2.5节可以了解到,软件开发的本质就是将客观世界映射到计算机世界的细化过程。学习编程只是达到掌握计算机世界的知识,面向对象的编程技术是开发人员的基本功。但这远远不够,在整个映射过程中编程只是一个环节,而且更重要的是应学会如何用面向对象的思维方式来抽象客观世界,用面向对象的工作方法来分析、设计,逐步细化来建立软件模型,为编程者提供计算模型。因此面向对象的开发是指从对客观问题的抽象、分析、设计、编码、测试的完整过程。学会面向对象编程只是对面向对象方法的初步体验,即使编程能力再强,并不等于掌握了面向对象的开发方法。