软件工程实用案例教程(梁洁、金兰)参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题一参考答案
1. 选择题
DDBBA DBD
2. 简答题
(1) 通用软件产品开发和定制软件开发之间有什么不同?这在实际应用中对通用软件产品用户意味着什么?
答:这两类产品的一个重要区别在于:在通用软件产品中,软件描述由开发人员自己完成,而在定制软件产品中,软件描述通常是由客户给出,开发人员必须按客户要求进行开发。
在实际应用中通用软件满足的是绝大部分用户的共同需求,而对于特殊的个人需求无法涉及到。
(2) 什么是软件危机?产生的原因有哪些?它和软件工程有什么关系?
答:在软件开发中经常会出现时间延迟、预算超支、质量得不到保证、移植性差等问题,甚至有的项目在耗费了大量人力、财力后,由于离目标相差甚远而宣布失败。
这种现象称为“软件危机”。
产生的原因有:(1) 软件独有的特点给开发和维护带来困难。
(2) 软件人员的错误认识。
忽视软件需求分析的重要性,轻视文档的作用,轻视软件维护等。
(3) 软件开发工具自动化程度低。
此外,软件生产工程化管理程度低,致使软件项目管理混乱,难以保障软件项目成本、开发进度按计划执行。
由于软件危机的出现,人们一直在努力探索克服软件危机的途径。
因此提出“软件工程”的概念,试图用工程的方法和管理手段,将软件开发纳入工程化的轨道,以便开发出成本低、功能强、可靠性高的软件产品。
(3) 简述软件工程的定义和软件工程的目标?
答:在NATO会议上,Fritz Bauer对于软件工程的定义是:“为了经济地获得可靠的、能在实际机器上高效运行的软件,而建立和使用的健全的工程原则。
”
对于软件工程,美国电气与电子工程师学会(IEEE)给出了如下定义。
软件工程是:①将系统化的、规范化的、可量化的方法应用于软件的开发、运行和维护中,即将工程化方法应用于软件;②对于①中所述方法的研究。
软件工程的目标:①软件开发成本较低。
②软件功能能够满足用户的需求。
③软件性能较好。
④软件可靠性高。
⑤软件易于使用、维护和意志。
⑥能够按时完成开发任务,并及时交付使用。
(4)软件工程过程活动主要有哪些?解释每个活动的必要性。
答:①沟通。
在技术工作开始之前,和客户及其他利益相关者的沟通与协作是极其重要的,其目的是理解利益相关者的项目目标,并收集需求及定义软件特性和功能。
②策划。
如果有地图,任何复杂的旅程都可以变得简单。
软件项目好比一个复杂的旅程,策划活动就像是创建一个地图,以指导团队的项目旅程,这个地图称为软件项目计划,它定义和描述了软件工程工作,包括需要执行的技术任务、可能的风险、资源需求、工作产品和
工作进度计划。
③建模。
无论你是庭院设计师、桥梁建造师、航空工程师、工匠还是建筑师,每天的工作都离不开模型。
你会画一张草图来辅助理解整个项目大的构想——体系结构、不同的构件如何结合,以及其他一些特性。
如果需要,可以把草图不断细化,以便更好地理解问题并找到解决方案。
软件工程师也是如此,需要利用模型来更好地理解软件需求,并完成符合这些需求的软件设计。
④构建。
必须要对所做的设计进行构建,包括编码(手写的或者自动生成的)和测试,后者用于发现编码中的错误。
⑤部署。
软件(全部或者部分增量)交付给用户,用户对其进行评测并给出反馈意见。
⑥进化。
软件随不同的客户和变化的市场需求而进行修改。
(5)解释Web的普遍使用是如何改变软件系统的?
(6) 解释为什么软件工程的基本原则适用于所有的软件系统?
(7) 对ACM/IEEE职业道德准则中的某项条款,举出一个恰当的例子加以说明。
(8) 分别列举一两个失败或成功的软件项目实例,试说明其失败或成功的原因。
习题二参考答案
1. 选择题
BCDBA BC
2. 简答题
(1) 说明为什么在需求工程过程中区分用户需求开发和系统需求开发是重要的?
答:用户需求是从客户和最终用户角度对系统需求的抽象描述,是开发者和客户之间达成统一需求的定义;系统需求是对系统要提供的功能、性能、操作、数据等多方面的详尽描述,为系统开发者提供依据。
(2) 简述软件设计过程中的主要活动及这些活动的输出,并说明这些活动的输出之间可能存在的关系?
答:软件设计过程中的主要活动有体系结构设计、接口设计、构件设计、数据库设计。
体系结构设计划分了系统的总体结构,系统由那些构件组成,如何分布,哪些构件可以复用,然后设计构件间的接口,定义好接口后,详细设计构件内容部的细节,以及数据库的设计
(3) 说明原型模型的两种实现方案各有什么特点?各适用于那些情况?
答:①抛弃式原型模型:快速建立一个反映用户主要需求的原型系统,反复修改获取用户真正需求后,原型将被抛弃,后再按线性流程进行实际项目的开发。
适用于小型、简单、处理过程比较明确、没有大量运算和逻辑处理过程的系统。
②进化式原型模型:针对有待开发的软件系统,先开发一个原型系统让用户使用,然后根据用户使用情况的意见反馈,对原型系统不断修改,使它逐步接近并最终达到开发目标。
特别适合于用户急需的软件产品开发。
它能够快速地向用户交付可以投入实际运行的软件成果,并能够很好地适应软件用户对需求规格的变更。
(4) 为什么说构件复用模型是一种有利于软件按工业流程生产的过程模型?
答:由于构件具有一定的通用性,因此可以在不同的软件系统中被复用,在基于构件复用的软件开发中,软件由构件装配而成,这就如同标准零件装配汽车一样。
构件复用技术能带来更好的复用效果,并且具有工程特性,更能适应软件按照工业流程生产的需要。
(5) 解释为什么Boehm的螺旋模型是一个适应性模型,可以同时支持更新避免和变更容忍活动。
说明为什么在实践中这个模型还没有被广泛应用?
答:但使用该模型需要丰富的风险评估经验和专门知识,对软件项目进行风险分析
也需要费用,假如项目风险分析费用过高,甚至超过了项目的开发费用,显然就不合适了。
一般大型项目才有较高的风险,才有进行详细风险分析的必要。
因此,这种模型比较适合大型的软件项目。
(6) Rational统一过程和螺旋模型比较,优势有哪些?
答:①RUP每次迭代包含9个核心工作流程,而螺旋模型只包含4方面的活动
②RUP对每个阶段内若干次迭代过程完成后所交付增量的具体要求,而螺旋模型没有规定。
③RUP详细描述了不同阶段不同迭代过程在经历9个核心工作流程时活动内容的重点和强度,而螺旋模型没有规定。
RUP的二维迭代生命周期结构对“迭代”开发方式的体现比螺旋模型更深刻、具体、详尽和全面,用于指导需求不明确、不稳定的项目开发,具有更强的可操作性。
(7) 敏捷方法的价值观和原则与传统方法有哪些区别与联系?说明什么情况下不建议使用敏捷方法来开发软件?
答:敏捷的价值观:个体和交互胜过过程和工具;可以工作的软件胜过面面俱到的文档;客户合作胜过合同谈判;响应变化胜过遵循计划。
而传统软件工程方法更注重计划与过程管理(文档管理),但也非常重视软件质量和对需求变更的及时反应。
从产品角度看,敏捷方法适用于需求萌动并且快速改变的情况,如果系统有比较高的可靠性、安全性方面的要求,则可能不完全适合。
3. 应用题
(1) 某企业计划开发一个“综合信息管理系统”,该系统涉及销售、供应、财务、生产、人力资源等多个部门的信息管理。
该企业的设想是按部门的优先级别逐个实现,边开发边应用。
对此需要采用一种比较合适的软件过程模型。
请对这个过程模型做出符合应用需求的选择,并说明选择理由。
答:选择RUP模型或螺旋模型。
①该系统是一个比较大型的项目,意味着风险较大。
②需求并不是固定的,因此需要迭代。
具有风险防范和迭代特征的模型只有RUP和螺旋模型,相比较而言,
RUP模型比螺旋模型更深刻、具体、详尽和全面,用于指导需求不明确、不稳定
的项目开发,具有更强的可操作性。
(2) 假设你要开发一个软件,它的功能是把73624.9385这个数开平方,所得到的结果应该精确到小数点后4位。
一旦实现并测试完之后,该产品将被抛弃。
你打算采用哪种软件过程模型?为什么?
答:选择瀑布模型,因为该软件需求稳定,可以经过算法分析、设计、编码、调试,然
后得到结果,便可以抛弃掉,用瀑布模型这种线性的开发过程比较合适。
(3) 假设你被任命为一家软件公司的负责人,你的工作是管理该公司已被广泛应用的文字处理软件的新版本开发。
由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。
你打算采用哪种软件过程模型?为什么?
答:选择增量模型或者构件复用模型,因为需求稳定、开发时间有限,采用增量模型和构件复用模型都属于非整体性开发,可以提高开发效率。
(4) 公司计划采用新技术开发一款新的手机软件产品,希望尽快占领市场,假设你是项目经理,你会选择哪种软件过程模型?为什么?
答:选择进化式原型,因为这种模型特别适合于用户急需的软件产品开发。
它能够快速地向用户交付可以投入实际运行的软件成果,并能够很好地适应软件用户对需求规格的变更。
习题三参考答案
1. 选择题
CDADB
2. 简答题
(1) 软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统?
答:在早期阶段即判断系统是否“可行”,既避免了不必要的风险,又对系统的内部结构、功能、数据及所采用技术有了一个初步的把握。
可行性研究首先要弄清项目规模和目标,对现有系统或工作流程进行研究,导出目
标系统的高层逻辑模型,然后分析目标系统的技术、经济、社会三方面领域是否可行。
(2) 软件可行性研究的工作步骤是哪些?简要地叙述各步骤的主要工作内容?
答:①确定项目规模和目标,项目的规模和目标进行定义和确认,清晰地描述项目的一切限制和约束,确保系统分析员正在分析的问题确实是要解决的问题。
②研究目前正在使用的系统,需要研究现有系统的基本功能,存在什么问题,运行现有系统需要多少费用,对新系统有什么新的功能要求,新系统运行时能否减少使用费用等。
③建立新系统的高层逻辑模型,明确新系统的功能、处理流程,以及所受的约束,然后使用建立逻辑模型的工具——数据流图和数据字典来描述数据在系统中的流动和处理情况。
④导出和评价供选择的解法,
⑤推荐行动方针,根据技术可行性、经济可行性和社会可行性对各种选择方案进行评估,去掉行不通的解法,即可得到可行的解法
⑥草拟开发计划:制定工程进度表、估计对各类开发人员和各种资源的需要情况,指明什么时候使用及使用多长时间、估计系统生命周期每个阶段的成本,最后给出下一个阶段(需求分析)的详细进度表和成本估计。
⑦编写可行性研究报告,将可行性研究各个步骤的工作结果写成清晰的文档,请用户、客户组织的负责人及评审组审查,以决定是否继续这项工程及是否接受分析员推荐的方案。
(3) 度量经济效益的方式有哪几种?
答:软件开发成本的计算,以及经济效益的计算,经济效益的计算需要考虑到货币的时间价值,通过成本/效益方法计算系统的投资回收期、纯收入、投资回报率,从而在经济效益方面度量该系统是否值得投资开发的结论。
3. 应用题
(1) 为方便储户,某银行拟开发计算机储蓄系统。
储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利息等信息,并印出存款单给储户;如果是取款,系统计算利息并打印出利息清单给储户。
写出问题定义并分析此系统的可行性。
(2) 目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还可能会延误抢救时机。
某医院打算开发一个以计算机为中心的患者监护系统,写出问题定义并分析该项目的可行性。
医生对患者监护系统的基本要求是随时接收每个病人的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况及形成患者日志,当病人的生理信号超出医院规定的安全范围时,向值班护士发出告警信息,此外,护士在需要时还可以要求打印出某个指定病人的病情报告。
(3) 为了反恐,很多国家正计划开发或正在开发一种对大量公民及其行动跟踪的计算机系统。
写出问题定义并分析该项目的可行性。
习题四参考答案
1. 选择题
DCABC ADDDB
2. 应用题
1、
E1:考试委员会;E2:教师;E3:学生;E4:教务处。
D1:学生信息文件;D2:课程信息文件;D3:班级信息文件;D4:课程成绩文件;D5:无
2、
①上下文图
②0层数据流图
3、
(1)这里有两个条件:
旅游时间t:t1{7-9,12};t2{1-6,10,11}
订票量a:a1{≤20};a2{>20}
(3)根据旅游时间、订票量和折扣率画出判定树。
旅游优惠
旅游时间t1
旅游时间t2订票量a1
订票量a2
折扣率=5%
折扣率=15%
折扣率=20%
折扣率=30%订票量a1
订票量a2
4、
电话号码 = [ 校内电话号码 | 校外电话号码 ] 校内电话号码 = 非零数字 + 3位数字 校外电话号码 = [ 本市号码 | 外地号码 ] 本市号码 = 0+ 8位数字
外地号码 = 0 + 3位数字 + 8位数字 非零数字 = [1|2|3|4|5|6|7|8|9] (1分) 3位数字 = 3{数字}3
8位数字 = 非零数字 + 7位数字 7位数字 = 7{数字}7 5、
习题五参考答案
1. 选择题 AAACB DCDBA
2. 应用题 1、
工程项目
零件
供应商项目名称
项目编号
开工日期
供应商名称
供应商编号
地址
供应量
定购量
零件编号
零件名称
颜色
重量
向...供应
向...定购
M M
N
N 主模块
输入模块变换模块输出模块
B
A
C D E F G
H
2、
(1)第1级分解(2)第2级分解
(3)优化接受工资
数据
计算工资取数据
更新人事
数据
收集事务
数据
审核事务
数据
印表格
分发工资
明细表
更新分类
账计算正常
工资
计算超额
工资
更新年度
数据
计算教职工
工资
印出计算
结果
计算工资
取数据
更新人事数据收集事务
数据
审核事务
数据
印表格
分发工资
明细表
更新分类
账
计算正常
工资
计算超额
工资
更新年度
数据
计算教职工
工资
3、(1)进行第一级分解
(2)进行第二级分级
(3)优化
①将“输入成绩清单”、“检查成绩清单”、“打印成绩单出错信息”合并成“输入并检查成绩清单”。
将“输入合格标准”与“审定合格者”合并,取名为“审定合格者”。
将“制作考生通知单”与“打印考生通知单”合并成“制作并打印考生通知单”。
②“打印难度分析表”模块和“打印分类统计表”模块分别作为“分析试题难度”模块和“分类统计成绩”模块的下属模块,可降低模块间的耦合度。
③“统计成绩输出模块”可删去,“统计成绩输入模块”和“统计成绩处理模块”为“管道”模块,也可删除。
4、(1)第一级分解
(2)第二级分解
5、改进后的结构图。
6、(1)方法1:
主任(编号,姓名,年龄,学历)
系(系编号,系名,编号,任职时间)管理(系编号,任职时间)
(2)方法2:
主任(编号,姓名,年龄,学历)
系(系编号,系名,编号,任职时间)
7、(1)方法1:
仓库(仓库号,地点,面积) 商品(商品号,商品名,价格) 存放(商品号,仓库号,数量) (2)方法2:
仓库(仓库号,地点,面积)
商品(商品号,商品名,价格,仓库号,数量)
8、教师(教师号,教师名,职称) 课程(课程号,课程名,学分)
讲授(教师号,课程号,质量,上课时间)
9、N-S 图和PAD 图如下。
习题六参考答案
1. 选择题
CBDAD AABCB
2. 简答题
(1) 简述对象与类之间的联系与区别。
答:类是对象的抽象,而对象是类的实例,类在现实世界中是不存在的,类被具体化后得到对象,对象是具体存在于客观世界中类的实例。
(2) 试描述继承性与多态性的作用。
答:继承简化了人们对现实世界的认识和描述,在定义子类时不必重复定义那些已在父类中定义的属性和服务,只要说明它是某个父类的子类,并定义自己特有的属性和服务即可。
类的继承是软件重用的一种形式,通过继承的属性和行为扩充原有类的功能,节省了程序开发时间
while P
A B until !Q
A
while P
B
until !Q
多态性的作用在于它允许我们开发灵活的系统,我们只要指定什么应该发生,而不是它应该怎样发生,以便获得一个易修改、易变更的系统。
(3) 解释为正在开发的系统的上下文建立模型的重要性,并给出两个由于软件工程师不理解系统的上下文而可能产生的错误。
答:建立上下文模型对于在分析阶段早期确定系统边界,以及了解系统与其他外部系统的关系犹为重要,为后期接口的设计提供基础。
3. 应用题
(1) 请为“医院门诊系统”中的医生建立用例模型,医生的主要职责为查看病人并未病人提供治疗、开处方,明确问题域后,识别实体类,建立静态结构类图。
图6-1 医院门诊系统用例图
病人及挂号信息查询病历撰写开处方开检查
医生
提供治疗
图6-2 医院门诊系统静态结构类图
(2) 请建立一个时序图表示大学生选课时所涉及的交互。
因为课程选择是有限制人数的,所以选课过程必须包括对空间有效性的检测。
图6-3 “学生选课”用例时序图
(3) 基于你使用银行ATM机的经历,请画一个活动图,当客户从机器中提取现金时,为可能涉及的数据处理过程建模。
student findcourse:GUI:course:SelectCourse
find course
select course
insert()
return
return
find()
return
return
图6-4 “ATM取款”活动图
(4) 画出自动洗衣机(具有不同衣物的洗衣程序)的控制软件的状态图。
习题七参考答案
1. 选择题
CCABA CABDC
2. 简答题
(1)假如一个不同技术的管理者要我们准备并且提交一份报告来证明一个新项目雇佣一个系统架构师是有道理的。
在我们的报告中必须解释什么是体系结构,并用简要文字列出要点。
答:软件系统架构是关于软件系统的结构、行为和属性的高级抽象。
它不仅指定了软件系统的组织结构和拓扑结构,而且显示了系统需求和构成组件之间的对应关系,包括设计决策的基本方法和基本原理。
系统架构师是系统或产品线的设计负责人,是一个复杂理解和管理并最终确认和评估非功能性系统需求,给出开发规范,搭建系统实现的核心构架,对整个系统软件架构、关键构件、接口进行总体设计并澄清关键技术细节的高级技术人员。
(2)简要分析分层体系结构、三层体系架构、基于MVC的Web体系结构三者的区别?
答:这三种体系架构都是为了实现层与层之间的分离性与独立性,但是分层的方式有所不同:
①分层体系架构主要是按功能来划分,体现一种增量开发的结构,分层比较随意。
②而三层体系架构主要是按类来划分,将同种职能的类划分为一层,分为表示层、业务逻辑层和数据访问层,在不改变接口定义的前提下,每一层的改变对其他层都没有影响,但是表示层仍然会具有一些业务逻辑层的代码。
③而MVC在视图层下面有增加了控制层,将视图层和业务层完全分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。
因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
(3)举例具体分析体现系统逻辑结构的包图和体现系统物理结构的构件图两者的区别与联系?
答案略
(4)简要叙述构件详细设计的过程,即如何从分析类到设计类?
答:①以某种设计模式(例如MVC模式)分析“构件”内涉及全部用例(场景)的时序图。
②在时序图中将对象映射为类、消息映射为方法,收集全部的类与方法。
③建立构件详细类图,建立类之间依赖关系,补充接口定义。
3. 应用题
请为上一章中“医院门诊系统”中的医生部分建立包图、构件图、部署图,并详细设计其中的某一个构件例如“处方”构件,画出该构件的设计类图。
答:包图、构件图参见教材图7-1和图7-11
图7-1 医院门诊系统构件图
检查添加
病历添加
图7-2 “处方”构件详细类图
习题八参考答案
1.选择题
ABDD
2.简答题
(1)举例分析MVC模式下的Web构件开发中,jsp页面、Servlet、DAO层之间的协作关系。
答:例如“用户登录”用例中,用户在login.jsp页面上发起登录请求,请
求交给UserServlet,UserServlet执行doPost方法,首先获得登录页面上的用户名和密码,实例化User类(Javabean),将用户登录信息封装到user对象中,将该对象“传递”给下一层UserDAO,由它的实例化对象执行findLogin(user)查询方法,最后将查询结果返回给UserServlet,UserSerlet决定跳转到哪个页面(登录成功页面/登录失败页面),并将结果动态显示在页面上。
(2)说明IEmpDAO.java这个接口类在雇员管理构件的作用?可以省略吗?
答:接口IEmpDAO,实现接口的类IEmpDAO Impl,IEmpDAO Impl类需要实现接口IEmpDAO中所定义的全部方法。
接口的定义体系了面向对象多态性的特点,可以帮助软件设计师实现更加多样化的系统,如“同一接口,多种不同的实现”方法。
不能省略。
3.应用题
(1)请根据“医院门诊系统”中的“处方”构件的详细设计类图,编码实现该构件。
答案略
(2)请编写代码实现“购物车构件”,购物车构件设计类图见图7-18。
答案略
习题九参考答案
1选择题
DACDDA
2简答题
(1)软件测试的首要目的是确保被测系统满足要求。
(2)黑盒测试即功能测试,它把测试对象看成一个黑盒子,看不到它内部的实现原理,不了解内部的运行机制。
黑盒测试的主要方法包括边界值分析法、等价类划分法、因果图、场景法等。
(3)白盒测试又称结构测试。
白盒测试清楚地了解了程序结构和处理过程,检查程序结构及路径的正确性,检查软件内部动作是否按照设计说明的规定正常进行。
白盒测试主要包括逻辑覆盖测试、基本路径法等。
(4)按照软件开发的阶段划分,软件测试可以分为单元测试、集成测试、确认测试、系统测试和验收测试。
(5)驱动模块,用于模拟被测模块的上级模块。
桩模块,用于模拟被测模块在工作过程中所需要调用的模块。
根据实际的调用与被调用的关系来选择设计桩模块和驱动模块。
(6)回归测试是指修改了旧代码后,重新进行测试活动。
在进行回归测试时,一般会遵循以下步骤。
Ⅰ识别出软件中被修改的部分。
Ⅱ在原本的测试用例库中排除不适用的测试用例,建立一个新的测试用例库。
Ⅲ根据合适的选择策略,从新的测试用例库中选出测试用例包,测试被修改的软件。
重复执行以上步骤,验证修改是否对现有功能造成了破坏。
3.应用题
(1)该程序能够处理单价为2元的饮料。
若投入2元,并选择“绿茶”“矿泉水”“可乐”按钮,相应的饮品就会送出。
若投入的钱大于2元,则在送出饮品的同时退出多余的钱。
若投入的钱不够,则直接退款,不送出饮品。
请用黑盒测试方法对该软件进行测试,设计测试用例。
答:根据题目要求,可采用场景法进行黑盒测试。
根据投币时的不同选择,产生不同的场景,并设计相应的测试用例。
(2)
publicvoidsort(intiRecordNum,intiType)
{
intx=0;
int y=0;
while(iRecordNum>0){
if(iType==0)
x=x+2;
else{
if(iType==1)
x=y+5;
else
x=y+10;
}
}
}
根据代码画出程序流程图,并改写出控制流图,然后根据基路径测试方法设计测试用例。