郑人杰 《软件工程概论》(第2版)第一部分 软件工程概述(二) 课后习题题解
第二章 软件生存期模型
1、瀑布模型、快速原型模型、增量模型及螺旋模型都是传统的软件设计过程模型,请给出各个模型的特点。每种模型的优点和缺点是什么?适合于哪些场合?
瀑布模型:
特点:
- 阶段间具有顺序性和依赖性;
- 具有推迟实现的观点;
- 具有质量保证的观点。
优点:- 符合软件开发的思维过程,并容易理解和运用;
- 通过设置里程碑,可以明确每个阶段的任务和目标;
- 支持结构化软件开发,可为各阶段制定开发计划,进行成本预算。
- 通过阶段审核,将开发过程纳入正轨;
- 严格的计划性保证软件产品的按时交付。
缺点:- 缺乏灵活性,不能适应用户需求的变化;
- 开始阶段的小错误会被逐级放大,可能最终导致软件产品报废;
- 缺乏演化性,返回上一级的开发需要十分昂贵的代价;
- 随着软件规模和复杂性的增加,软件产品成功的几率大幅下降。
适用场合:- 用户的需求非常清楚全面,且在开发过程中没有或很少变化;
- 规模较小的软件开发。
快速原型模型:
特点:
- 不要求需求预先完备定义;
- 支持需求的渐进式完善和确认;
- 支持用户参与,能够适应用户需求的变化。
优点:- 用户参与软件系统的所有阶段,可以得到比较良好的需求定义,容易适应需求的变化;
- 用户较早的接触和使用未来的系统,有利于系统后期的使用和维护;
- 开发费用低、开发周期短且对用户更友好。
缺点:- 客户与开发者对原型理解不同;
- 准确的原型设计比较困难;
- 不利于开发人员的创新。
适用场合:- 对所开发的领域比较熟悉而且有快速的原型开发工具;
- 项目招投标时,可以以原型模型作为软件的开发模型;
- 进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。
增量模型:
特点:
- 软件产品是被增量式地一块块开发的;
- 允许开发活动并行和重叠。
- 采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源;
- 如果核心产品很受欢迎,则可增加人力实现下一个增量;
- 可先发布部分功能给客户,对客户起到镇静剂的作用。
缺点:- 并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构;
- 增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
适用场合:- 进行已有产品升级或新版本开发,增量模型是非常适合的;
- 对完成期限严格要求的产品,可以使用增量模型;
- 对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的。
螺旋模型:
特点:结合瀑布模型、快速原型模型和迭代模型的思想,并引进了风险分析活动。
优点:
- 设计上的灵活性,可以在项目的各个阶段进行变更;
- 以小的分段来构建大型系统,使成本计算变得简单容易;
- 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;
- 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
缺点:- 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;
- 过多的迭代次数会增加开发成本,延迟提交时间。
适用场合:螺旋模型只适合于大规模的软件项目。
2、如果在要求的期限内软件产品的所有功能都能够开发完成,上述四种模型中应选择哪种模型?如果只能完成一部分功能,又应该选择哪种模型?
瀑布模型。严格的计划性保证软件产品的按时交付。
快速原型模型。用户参与软件系统的所有阶段,可以得到比较良好的需求定义,容易适应需求的变化。
3、可以合用几种模型吗?如果可以,举例说明。
过程模型可以合用,每个模型都有个有点不同的处理流程,但都执行相同的通用框架活动集:沟通,规划,建模,施工和交付/反馈。例如线性顺序模型可以作为一个有用的过程模型,沟通,规划,建模,施工和交付/反馈。例如线性顺序模型可以作为一个有用的过程模型,在被固定的情况下,要求工作以线性的方式继续进行,直至完成。在这情况下,开发者可能无法确定一种算法的效率,一个操作系统的适应性或应采取的人机交互的形式。在这之中,以及许多其他场合原型模型可以提供最好的办法。在其他情况下,以渐进的方式可能是有意义的和螺旋模型的流动可能是有效率,特殊过程模型具有许多的一个或多个传统的特性。
4、解释喷泉模型的特点及其适用的场合。
特点:
- 各阶段相互重叠,它反映了软件过程并行性的特点;
- 体现认识事物的往返过程;
- 强调增量开发,整个过程是一个迭代的逐步提炼的过程;
- 开发活动之间的无间隙性和循环迭代性;
- 适用于面向对象的开发过程。
- 强调无明显的活动阶段划分。
适用场景:
主要用于面向对象技术的软件开发项目,它克服了瀑布模型不支持软件重用和多项目开发活动集成的局限性,喷泉模型使开发过程具有迭代性和无间隙性。
5、统一过程与UML是同一概念吗?请给出解释。
统一过程与UML不是同一概念。
UML是一种语言,统一过程是用UML进行面向对象软件工程对的框架。
6、统一过程的6个核心过程工作流是什么?
- 业务建模工作流;
- 需求工作流;
- 分析与设计工作流;
- 实现工作流;
- 测试工作流;
- 部署工作流。
7、给出两个核心支持工作流。
- 配置与变更管理;
- 项目管理。
8、统一过程的4个阶段是什么?
- 初始阶段;
- 细化阶段;
- 构造阶段;
- 移交阶段。
9、请解释为什么基于构件的软件开发能够极大地提高软件开发的生产率和软件质量。
软件的复用是提高软件生产效率及软件质量的最有效途径,而基于构件的软件开发比面向对象的软件开发实现了更大粒度的软件复用,能够最大限度地减少重复劳动、缩短开发周期、降低开发成本,从而使软件生存率得到提高。由于已有的构件大都经过了很长时间的运行和测试,在质量方面比新开发的软件更有保证,同事软件架构技术有助于软件设计的标准化和设计风格的改进和统一,进而提高系统间的互操作性,软件可靠性和可维护性可以得到增强。
10、敏捷软件开发的特点是什么?
- 迭代式开发。整个开发过程被分为几个迭代周期,每个迭代期是一个定长或不定长的时间块,每个迭代周期持续的时间一般较短,通常为1~6周。
- 增量交付。产品在每个迭代周期结束时被逐步交付使用,而不是在整个开发过程结束时一次性交付。每次交付的都是可被部署到用户应用环境中的、能给用户带来即时效益和价值的产品。
- 开发团队和用户反馈推动产品开发。敏捷开发方法主张用户能够全程参与整个开发过程。这使需求变化和用户反馈能动态管理并及时集成到产品中。同时,团队也能及时对用户的需求提供反馈意见。
- 持续集成。新的功能或需求变化总是尽可能频繁地被整合到产品中。一些项目是在每个迭代周期结束的时候集成,有些项目则每天都在集成。
- 开发团队自我管理。拥有一个积极的、自我管理的、具备自由交流风格的开发团队,是每个敏捷项目的必要条件。敏捷开发总是以人为中心建立开发的过程和机制,而非把过程和机制强加给人。
11、简述敏捷软件开发的原则。
- 持续、尽早交付有价值的软件以满足用户,是我们优先要做的首要任务。
- 拥抱需求变更,甚至是在开发的后期。敏捷过程利用变更为客户带来竞争优势。
- 频繁交付可执行的软件,从几周到几个月,交付时间越短越好。
- 在整个项目过程中,业务人员和开发人员必须每天一起工作。
- 激发每个团队成员的积极性来打造项目。为他们提供环境与支持,并且信任他们可以完成工作。
- 在一个开发团队内部最有效的传递信息的方式是面对面交流。
- 可执行的软件是进度的首要检验对象。
- 敏捷过程倡导可持续发展。赞助商、开发人员和用户用该尽可能保持一致的步伐。
- 不断地关注优秀技能和好的设计会增强敏捷能力。
- 尽量用艺术化来简单阐述未完成的工作是很有必要的。
- 最好的架构、需求和设计出自于自我组织管理的团队。
- 每隔一段时间,回顾反思如何让团队变得更高效,并相应地调整其行为。
12、用自己的语言描述XP的重构和结对编程的概念。
重构是以不改变代码外部行为而改进其内部结构的方式来修改软件系统的过程。这是一种净化代码以尽可能减少引入错误的严格方法。实质上,重构就是在编码完成之后改进代码设计。
结对编程是这样一种程序设计实践:两名程序员并肩同坐在同一台计算机前,共同探讨设计方案、共同设计算法、共同编写程序代码、共同完成各种测试。
13、你认为本书所讲的哪种过程模型适合互联网软件的开发及维护?还是都不合适?
学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。
才疏学浅,若有错误或不当之处,可批评指正,还请见谅!