软件系统分析与设计第三次作业

1. 简答题

1.1 简述瀑布模型、增量模型、螺旋模型(含原型方法),并分析优缺点 从项目特点、风险特征、人力资源利用角度思考
瀑布模型

优点:

  • 为项目提供了按阶段划分的检查点,当前一阶段完成后,您只需要去关注后续阶段
  • 它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导
  • 推迟软件实现,强调在软件实现前必须进行分析和设计工作

缺点:

  • 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险
  • 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量
  • 缺乏灵活性,尤其无法解决软件需求不明确或不准确的问题
增量模型

优点:

  • 将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展
  • 以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
  • 开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整

缺点:

  • 要求待开发的软件系统可以被模块化。如果待开发的软件系统很难被模块化,那么将会给增量开发带来很多麻烦。
  • 整个流程没有反馈,项目的需求必须是明确的
螺旋模型

优点:

  • 通过原型的建立,使软件开发在每个迭代的最初明确方向
  • 通过风险分析,最大程度地降低软件彻底失败造成损失的可能性
  • 整体过程具备很高的灵活性,在开发过程的任何阶段自由应对变化
  • 每个迭代阶段累计开发成本,使支出状况容易掌握

缺点:

  • 过分依赖风险分析经验与技术,一旦在风险分析过程中出现偏差将造成重大损失
  • 过于灵活的开发过程不利于已经签署合同的客户与开发者之间的协调
  • 由于只适用大型软件,过大的风险管理支出会影响客户的最终收益
1.2 简述统一过程三大特点,与面向对象的方法有什么关系?

三大特点:

  • 软件开发是一个迭代过程
  • 软件开发是由Use Case驱动的
  • 软件开发是以架构设计(Architectural Design)为中心的

与面向对象的方法的关系:

统一过程是一个面向对象的软件开发方法,它给出了有关软件开发过程组织及实施的指导。

1.3 简述统一过程四个阶段的划分准则是什么?每个阶段关键的里程碑是什么?
  • 初始阶段:

    大体上的构想,业务案例,范围,和模糊评估。定义系统的业务模型,确定系统的范围

    里程碑:构建了一个可行的系统概念
  • 细化阶段:
    已精化的构想、核心架构的迭代实现、高风险的解决、确定大多数需求和范围以及进行更为实际的评估。完成系统的体系结构设计,完成系统开发计划

    里程碑:评估在现有条件下构建系统的可行性以及风险
  • 构建阶段:
    对遗留下的风险较低和比较简单的元素进行迭代实现,准备部署。构造产品,并继续演进需求、体系结构和计划,直到产品完成

    里程碑:完成构建一个测试版本的系统
  • 移交阶段:
    进行系统部署,系统测试,最终移交给用户

    里程碑:交付给客户一个全功能的系统
1.4 软件企业为什么能按固定节奏生产、固定周期发布软件产品?它给企业项目管理带来哪些好处?

因为软件企业生产有成熟的统一过程模型,软件生产的各个阶段都有较为明确的目标和步骤,使得软件生产按固定节奏运行,能按固定周期发布软件产品

通过统一过程模型,企业能够更加方便地掌控开发的进度,在满足日程的前提下,尽可能地提高产品的质量,这种尽力而为的思想也使得软件开发的预算被控制在一个范围之内,极大地减少了项目的风险性。

作业03 结构型模式 1. 现Mouse类的定义如下: class Mouse { public: void Walk( int steps ) { cout<<"Implement for Walk() with Verson 1."} void AddMoney(int m) { cout<<"Implement for AddMoney() with Verson 1."} private: int posX; int posY; }; 若已知:在后续的版本中 a)可能会增加Mouse类的其他行为,如增加Drive(int steps)和Fly(int steps); b)可能需要改变Walk(int steps)的具体实现细节; c)可能会增加其它数据成员,如将2D位置信息改为3D位置信息等。 d)希望在新版本中,尽可能地通过扩展老版本,适应新需求。 请使用桥接模式重新设计Mouse类及相关类,并简要说明如何适应变化a-d。 2. 请设计并实现一个foo.dll,其中含有类如下: a) 若foo.dll直接导出了类Foo、类FooA、类FooB,请使用类适配器和对象适配器,实现 class User { public: int myProcess( ) { /*适配Foo.process(); */ } }; b) 若foo.dll没有导出类Foo、类FooA、类FooB,但导出函数shared_ptr createFooA();和shared_ptr createFooB();,请使用对象适配器使得User可以适配任意指定的Foo类族的子类对象的process。 3. 针对给出的场景、描述,请说出最适当的模式名字,并用文字或示例代码给出简要的使用说明或解释。 1) 开发了一个用于数值计算的大型程序库,它的功能是强大的,但需要使用者具备较高的数学专业知识。为方便“菜鸟”级用户的使用,需要提供一个简化版的,但同时又不希望影响专业人员的使用。使用哪种设计模式较好?如何设计? 2) 在2D游戏的开发中,需要绘制地图,地图是由大量的“一样的图块”拼接而成,而“图块”的种类有限,目前有草地、海洋、沙漠、山地等,未来肯定要增加种类,但不会太多太频繁。采用何种模式组织“图块”类比较好?如何设计? 3) 在开发一个办公自动化系统时,项目组在ElectricSignature类集中实现了电子签名的功能。但在使用中发现该类不能完全满足用户需求,由于财力和人员的限制,决定直接购买第三方电子签名软件,其中的FZ_ESignet类功能与ElectricSignature的功能一样,但是两个类中的函数名都是不一样的,而且购买的只是二进制代码,没有源代码。现希望使用第三方软件的功能,但又不希望修改ElectricSignature的接口。使用哪种设计模式改进较好?如何改进? 4) 某书店需要开发一套图书购销存软件。在设计图书类时发现:图书有单行本和成套的,又细分成教辅材料、科学知识、文学著作等。设计时,希望能够以一致的方式访问各种图书,不论是单本的、成套的、IT类的或古典名著。使用哪种设计模式较好?如
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值