软件工程实用教程2版第2345章习题与参考答案人民邮电大学出版社 郭宁主编.docx
《软件工程实用教程2版第2345章习题与参考答案人民邮电大学出版社 郭宁主编.docx》由会员分享,可在线阅读,更多相关《软件工程实用教程2版第2345章习题与参考答案人民邮电大学出版社 郭宁主编.docx(17页珍藏版)》请在冰豆网上搜索。
软件工程实用教程2版第2345章习题与参考答案人民邮电大学出版社郭宁主编
《软件工程实用教程》第2、3、4、5章习题与参考答案
第2章软件生存周期及开发模型
1.简述什么是软件生存周期?
根据国家标准《计算机软件开发规范》,软件生存周期主要包括哪几个阶段?
答案要点:
软件生存周期是指软件产品从功能确定、设计、开发成功、投入使用,并在使用中不断修改、完善,直至被新的软件所替代,而停止该软件使用的全过程。
国家标准GB8566-1988《计算机软件开发规范》将软件生命周期划分为几个阶段:
可行性研究、项目计划、需求分析、总体设计、详细设计、编码实现(包括单元测试)、集成测试、确认测试、系统运行和维护。
这几个阶段又可以归纳为3个大的阶段,即软件定义阶段,软件开发阶段和软件运行维护阶段。
2.瀑布模型有哪些特点?
对于里程碑,你有哪些认识?
答案要点:
瀑布模型是一种基于里程碑的阶段过程模型,它所提供的里程碑式的工作流程,为软件项目按规程管理提供了便利。
例如,按阶段制定项目计划,分阶段进行成本核算,进行阶段性的评审等。
这为提高软件产品质量提供了有效保证。
瀑布模型的特点:
阶段性:
前一阶段工作完成以后,后一阶段工作才能开始,前一阶段的输出文档是后一阶段的输入文档。
阶段评审:
在每一阶段工作完成后都要进行评审,以便尽早发现问题,避免后期的返工,如果评审不合格,则不开始下一阶段的工作。
文档管理:
在每阶段都规定了要完成的文档,没有完成文档,就认为没有完成该阶段的任务。
3.试说明原型模型的两种实现方案各有什么特点?
各适用于什么情况?
答案要点:
原型模型在软件分析、设计阶段的应用,用来解决用户对软件系统在需求分析上的模糊认识。
将模拟的手段引入需求分析的初期阶段,通过建立原型缩短用户与分析人员之间的距离。
快速原型方法具有以下一些特点。
快速原型是用来获取用户需求的,或是用来试探某种设计是否有效。
一旦需求或设计确定下来,原型就将被抛弃。
因此快速原型要求快速构建、容易修改,以节约原型创建成本,加速开发速度。
快速原型往往采用软件生成工具来创建,例如,4GL语言。
快速原型是暂时使用的,因此并不要求完整。
它往往针对某个局部问题建立专门原型,如界面原型、工作流原型、查询原型等。
快速原型不能贯穿软件的整个生命周期,它需要和其他的过程模型相结合才能产生作用。
例如,前面我们提到的在瀑布模型中应用快速原型,可以解决瀑布模型在需求分析时期存在的不足。
对于一个大型复杂的系统,如果不经过分析来进行整体性划分,想直接用屏幕来一个一个地模拟是很困难的;对于大量运算、逻辑性较强的程序模块,快速原型方法很难构造出模型来供人评价。
因此,原型方法只适用于小型、简单、处理过程比较明确、没有大量运算和逻辑处理过程的系统。
原型进化模型对开发过程的考虑是,针对有待开发的软件系统,先开发一个原型系统让用户使用,然后根据用户使用情况的意见反馈,对原型系统不断修改,使它逐步接近并最终达到开发目标。
跟快速原型不同的是,快速原型在完成需求定义后将被抛弃,而原型进化所要创建的原型则是一个今后要投入应用的系统,只是所创建的原型系统在功能、性能等方面还有许多不足,还没有达到最终的开发目标,需要不断改进。
·原型进化模型将软件的需求细节定义、产品开发和有效性验证放在同一个工作进程中交替或并行运作。
因此,在获得了软件需求框架以后,例如,软件的基本功能被确定以后,就可以直接进入到对软件的开发中。
·原型进化模型是通过不断发布新的软件版本而使软件逐步完善的,因此,这种开发模式特别适合于那些用户急需的软件产品开发。
它能够快速地向用户交付可以投入实际运行的软件成果,并能够很好地适应软件用户对需求规格的变更。
4.一般认为,只有大型项目才采用螺旋模型,其原因是什么?
答案要点:
螺旋模型增加了软件项目的风险分析,因为项目规模越大、问题越复杂,资源、成本、进度等因素的不确定性就越大,承担项目所冒的风险也越大。
人们进行风险分析与管理的目的就是在造成危害之前及时对风险进行识别、分析、采取对策,从而消除或减少风险所造成的损失。
该模型适合于指导大型软件项目的开发,它将软件项目开发划分为制定计划、风险分析、实施开发以及客户评估4类活动。
在对风险进行识别和分析时,如果开发风险过大,开发者和用户无法承受,项目有可能因此而终止。
螺旋模型的优越性在于它吸收了“进化”的概念,使得开发人员和用户对每一个演化层出现的风险均有所了解,并对此做出反应。
但使用该模型需要丰富的风险评估经验和专门知识,如果项目风险较大又未及时发现,势必造成重大损失。
实际上,对软件项目进行风险分析也需要费用,假如项目风险分析费用过高,甚至超过了项目的开发费用,显然就不合适了。
一般大型项目才有较高的风险,才有进行详细风险分析的必要。
因此这种模型比较适合大型的软件项目。
5.为什么说构件复用模型是一种有利于软件按工业流程生产的过程模型?
答案要点:
构件复用模型最明显的优势是减少了需要开发的软件数量,缩短了软件交付周期,提高了软件的质量,降低了开发风险。
由于构件具有一定的通用性,可以在不同的软件系统中被复用。
在基于构件复用的软件开发中,软件由构件装配而成,这就如同用标准零件装配汽车一样。
构件复用技术,它能带来更好的复用效果,并且具有工程特性,更能适应软件按工业流程生产的需要。
6.敏捷方法的价值观和原则与传统的方法有哪些联系和区别?
答案要点:
敏捷软件开发过程是一类过程的统称,敏捷方法的价值观和原则:
.个体和交互胜过过程和工具;
.可以工作的软件胜过面面俱到的文档;
.客户合作胜过合同谈判;
.响应变化胜过遵循计划。
传统软件开发开发过程是顺序和进化的软件过程模型,如:
顺序软件过程模型有:
瀑布模型,快速原型模型。
进化的软件过程模型有:
增量模型、螺旋模型。
传统软件开发模型主要采用了系列化、结构化开发技术,所以软件过程具有“线性”特征,开发活动比较有序、清楚、规范,但开发出的软件产品的稳定性、可复用性、可维护性都比较差。
敏捷软件开发过程可用于任何软件过程,将软件过程设计为:
允许项目团队调整并合理安排任务,理解敏捷开发方法的易变性并制定计划,精简并维持最基本的工作,强调增量交付策略,快速向客户提供适应产品类型和运行环境的软件。
7.
8.具有原型化的瀑布模型具有什么特点?
它与瀑布模型最大的不同是什么?
答案要点:
特点:
·原型进化模型将软件的需求细节定义、产品开发和有效性验证放在同一个工作进程中交替或并行运作。
因此.在获得了软件需求框架以后,如软件的基本功能被确定以后,就可以直接进入到对软件的开发中。
·原型进化模型是通过不断发布新的软件版本而使软件逐步完善的,因此.这种开发模式特别适合于那些用户急需的软件产品开发。
它能够快速地向用户交付可以投入实际运行的软件成果,并能够很好地适应软件用户对需求规格的变更。
不同是:
传统的瀑布模型很难适应需求变化、模糊不定的软件系统的开发,而且在开发过程中,用户很难参与进去,只有到开发结束才能看到整个软件系统。
这种线性的开发过程,缺乏灵活性。
原型模型的提出,可以较好的解决瀑布模型的局限性。
通过建立原型,可以更好的和客户进行沟通,解决对一些模糊需求的澄清,并且对需求的变化有较强的适应能力。
原型模型可以减少技术、应用的风险,缩短开发时间,减少费用,提高生产率,通过实际运行原型,提供了用户直接评价系统的方法,促使用户主动参与开发活动,加强了信息的反馈,促进了各类人员的协调交流,减少误解,能够适应需求的变化,最终有效提高软件系统的质量。
9.某企业计划开发一个“综合信息管理系统”,该系统涉及销售、供应、财务、生产、人力资源等多个部门的信息管理。
该企业的设想是按部门的优先级别逐个实现,边开发边应用。
对此需要采用一种比较合适的过程模型,请对这个过程模型做出符合应用需求的选择,并说明选择理由。
答案要点:
可以采用增量模型。
它是瀑布模型与原型进化模型的综合,它对软件过程的考虑是:
在整体上按照瀑布模型的流程实施项目开发,以方便对项目的管理;但在软件的实际创建中,则把软件系统按功能分解为许多增量构件,并以构件为单位逐个地创建与交付,直到全部增量构架创建完毕,并都被集成到系统之中交付用户使用。
第3章结构化需求分析
1.如何理解需求分析的任务是确定软件系统“做什么”,而不是“怎么做”?
答案要点:
需求分析的任务是借助当前系统的逻辑模型导出目标系统的逻辑模型。
在理解当前系统“怎么做”的基础上,抽取其“做什么”的本质,从而从当前系统的物理模型抽象出当前系统的逻辑模型。
在去掉非本质的因素后,根据用户提出的对目标系统的需求,分析当前系统与目标系统的差别,明确目标系统的范围、功能、处理步骤和数据结构,建立目标系统的逻辑模型。
需求分析阶段研究的对象是软件项目的用户要求,正确地理解需求和准确地表达需求是需求分析的关键,只有经过确切描述的软件需求才能成为软件设计的基础。
2.什么是用户需求?
什么是系统需求?
答案要点:
用户需求是关于软件的一系列想法的集中体现,涉及软件的功能、操作方式、界面风格、用户机构的业务范围、工作流程和用户对软件应用的展望等。
因此,用户需求也就是关于软件的外界特征的规格表述。
系统需求是比用户需求更具有技术特性的需求陈述。
它是提供给开发者或用户方技术人员阅读的,并将作为软件开发人员设计系统的起点与基本依据。
系统需求需要对系统的功能、性能、数据等方面进行规格定义。
3.
4.用户需求调查主要有哪些方法?
答案要点:
用户需求调查主要有研究资料法、问卷调查法、用户访谈和实地观察法等。
5.为什么一个系统的数据流程图一般是一套分层的数据流图?
答案要点:
分层的数据流图体现了分解和抽象的原则,它使人们不至于一下子陷入细节,而是有控制地逐步地了解更多的细节,这有助于理解问题。
图中顶层抽象地描述了整个系统,底层具体地画出了软件的每一个细部,中间层则是从抽象到具体的逐步过渡。
按照这样的方法,无论问题多么复杂,分析工作都可以有计划、有步骤、有条不紊地进行。
6.数据字典的作用是什么?
它有哪些基本条目?
答案要点:
数据字典是结构化分析的另一个有力的工具。
它是为数据流程图中的每个数据流、数据存储、加工以及组成数据流或文件的数据项做出说明,没有数据字典,数据流程图就不严格。
数据字典的重要用途是作为分析阶段的工具。
在数据字典中建立严密一致的定义有助于改进分析人员和用户之间的通信,避免许多误解的发生。
数据字典也有助于改进不同的开发人员或不同的开发小组之间的通信。
同样,将数据流程图中的每个元素的精确定义放在一起,就构成了系统的、完整的需求规格说明的主体。
数据字典还作为连接软件设计、实现和进化阶段的开发机构的信息存储。
在软件设计阶段,数据字典是存储文件或数据库设计的基础。
在实施阶段,还可参照数据字典描述数据。
随着系统的改进,字典中的信息也会发生变化,新的信息会随时加入进来。
7.需求规格说明书的主要内容是什么?
它的作用是什么?
答案要点:
需求规格说明书是需求分析阶段的最终“产品”。
它相当于用户和开发商之间的一项合同。
它精确地描述软件产品做什么,以及产品的约束条件等。
它还给软件设计提供了一个蓝图,给系统验收提供了一个验收标准集。
主要内容:
1)引言:
编写目的、背景、定义、参考资料
2)任务概述:
目标、用户特点、假设与约束
3)需求规定:
对功能的规定、对性能的规定、输入输出要求、数据管理能力要求、故障处理要求
4)运行环境规定:
设备、支持软件、接口、控制
5)需求分析等
8.什么是结构化分析方法?
结构化分析方法的结果是什么?
答案要点:
结构化分析方法要求软件系统的开发工作按照规定步骤,使用一定的图表工具,在结构化和模块化的基础上进行。
结构化是把软件系统功能当作一个大模块,根据分析与设计的不同要求,进行模块分解或者组合。
结构化系统分析的结果是建立系统的逻辑模型。
9.题(P54)
顶图:
中图:
底图:
E-R图:
10.题(P54)
第4章结构化软件设计
1.概要设计的任务和步骤是什么?
答案要点:
概要设计的任务就是根据需求分析阶段所产生的软件需求规格说明书,建立目标系统的总体结构。
1)建立目标系统的总体架构2)给出每个功能模块的功能描述、数据接口描述和调用关系,规定设计限制、外部文件及全局数据定义。
3)设计数据库及数据结构。
4)编写文档。
概要设计过程主要包括:
1)制定规范2)系统架构设计3)软件结构设计4)公共数据结构设计5)安全性设计6)故障处理设计7)编写文档8)概要设计评审
2.如何理解模块的独立性?
用什么指标来衡量模块的独立性?
答案要点:
模块的独立性是指不同模块之间的相互联系应尽可能的少,应尽可能减少公共的变量和数据结构;一个模块应尽可能在逻辑上独立,有完整单一的功能。
具有良好独立性的模块,可使模块功能完整、数据接口简单、程序易于理解和维护。
独立性限制了错误的作用范围,使错误易于排除,因而可使软件开发速度快,质量高。
通过模块的耦合度、模块的内聚性来衡量模块的独立性
3.从数据流程图导出的初试模块结构图是不完美的,应从哪些方面考虑改进?
答案要点:
1)做到模块的高内聚性,并且能够辨别出低内聚性的模块,加以修改使之提高内聚性;
2)降低模块间的耦合度:
控制使用全局数据、模块间尽量传递数据型信息;
3)作用(影响)范围在控制范围之内;
4)模块的扇入、扇出要适当等。
4.什么是软件体系结构?
什么是软件体系结构风格?
答案要点:
软件体系结构表示了一个软件系统的逻辑结构,描述包含系统基础构成单元、它们之间的作用关系、在构成系统时它们的集成方法以及对集成约束的描述等方面。
在设计软件体系结构时,必须考虑系统的动态行为,考虑与现有系统的兼容性、安全性、可靠性、扩展性和伸缩性。
模式是针对特定问题的成功解决方案,是指形成了一种趋于固定的结构形式。
人们可以无数次地使用这种完善的、成功的解决方案,无须再做重复的探索和开发工作。
在软件系统中常见的模式有结构模式、设计模式。
风格是带有一种倾向性的模式。
同一个问题可以有不同的解决方案和模式,但人们根据经验通常会强烈倾向于采用特定的模式,这就是风格。
软件风格是在模式中带有明显指向性的、对软件构成具有整体性、普遍性、一般性的结构和结构关系的方法,因此,软件风格是一种特定的基本结构,表达了部件之问的特定关系和应用约束。
5.为每一种模块内聚举一个具体例子;为每一种模块耦合举一个具体例子。
1.答案要点:
偶然内聚:
计算学生总成绩与统计学生出勤人数放在一个模块中;
逻辑内聚:
打印会计报表与打印学生成绩表在一个模块中;
时间内聚:
系统初始化模块;
过程内聚:
根据考试成绩分别进行奖学金处理、留级、退学处理等
通信内聚:
输入入库单、据此登记库存帐并开具发票等
顺序内聚:
计算学生平均成绩、求出最高分、最低分与达到优秀的学生等。
功能内聚:
计算工资
2.答案要点:
答案要点:
内容耦合:
A模块中功能要完成需要调用B模块中的代码来实现;
公共耦合:
多个模块共享一个数据变量;
控制耦合:
根据医护人员的信息,调用医生的评价模块、或护士的考核模块;
数据耦合:
输入考勤信息,并据此计算当月实发工资。
6.简述变换分析、事务分析的基本步骤。
答案要点:
变换流分析设计步骤:
1)确定变换流、输入流和输出流部分
2)设计模块结构的顶层和第一层
3)设计中下各层
事务分析的步骤:
·根据事务功能设计一个顶层总控模块;
·将事务中心的输入数据流对应为一个第一层的接收模块及该模块的下层模块;
·将事务中心对应为一个第一层的调度模块;
·对每一种类型的事务处理,在调度模块下设计一个事务处理模块,然后为每个事务处理模块设计下面的操作模块及操作模块的细节模块。
7.试用面向数据流的方法设计银行储蓄系统的软件结构,并用E-R图描述本系统中的数据对象。
答案要点:
1.软件结构图
2.E-R图
8.画出火车票订票系统的HIPO图。
答案要点:
9.详细设计有哪些主要工具?
答案要点:
程序流程图、PAD图和盒图是详细设计时所使用的主要工具。
10.从1000以内将能够被7整除的数查出来,并计算出这些数的和。
试分别使用程序流程图、N-S盒图、PAD图设计该问题的算法。
答案要点:
publicclassA{
publicstaticvoidmain(Stringargs[]){
intn=1;
intsum=0;
while(n<=1000){
n=n+1;
if((n%7==0)){
sum=sum+n;
}
}
System.out.println("在1000以内能被7整除的所有数的和是:
"+sum);
}
}
12.试述界面设计中需要考虑哪些因素。
答案要点:
1)用户工作环境与工作习惯
2)界面的风格的“一致性”与“个性化”
3)界面信息反馈
4)界面的合适性
5)容错性
6)审美性和可用性
《软件工程实用教程》习题与参考答案
第5章面向对象的需求分析
1.简述对象与类之间的联系与区别。
答案要点:
对象是指问题域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用,它是由数据(属性)及其上的操作(也称为服务、方法或行为)组成的封装体。
类是指具有相同属性和操作的对象的集合,它代表一种抽象,作为具有类似特性与共同行为的对象的模板,可用来产生对象。
类是具有相同属性和行为的一组相似对象的抽象,类在现实世界中并不能真正存在。
类是建立对象时使用的“样板”,按照这个样板所建立起来的一个个具体的对象,就是类的实例。
对象是类的属性数据具体化的结果,因而可称为是类的实例。
3.与传统结构化方法比较,面向对象方法具有哪些方面的优越性?
答案要点:
面向对象方法的优越性:
1)与人们习惯的思维方法一致2)可使软件系统结构更加稳定3)软件具有更好的可复用性4)软件更加便于维护与扩充
4.试描述面向对象的分析建模过程。
答案要点:
面向对象的分析建模过:
用例模型、对象(概念)模型、设计模型、配置模型
、实现模型和测试模型等。
使用用例驱动的开发方法是通过首先建立使用用例模型,再以用例模型为核心构造一系列的模型。
6.题,答案要点:
1.根据用户的职能建立的用例图。
2.通过对系统需求中的形容词和动词进行分析,确定了每个对象的属性和服务,把每个对象的属性和服务填到相应的类符号中,构成了类图的特征层。
见图3所示。
3.动态模型
(1)添加借阅者
“添加借阅者”的过程是,图书管理员选择菜单项“添加借阅者”,对话框弹出,图书管理员输入借阅者信息,然后提交,系统根据借阅者的ID号查询数据库,看数据库中是否存在该借阅者,若不存在,创建借阅者账户,并存储借阅者信息。
“添加借阅者”的顺序图如上所示。
图书管理员选择菜单项“添加借阅者”,边界类Mainwindow的方法addborrower()被调用,然后通过调用边界类BorrowerDialog的方法createDialog()创建对话框。
图书管理员输入借阅者信息后,提交信息,类BorrowerDialog的方法addBorrower()被调用,通过调用实体类Borrower的方法findBorrower(id:
string)来确定该借阅者的账户是否已经存在,若不存在,则调用类Borrower的方法newBorrowe()为借阅者创建账户,并调用Borrower的方法store()存储该借阅者的信息。
(2)添加书种
图书管理员选择菜单项“添加书种”,对话框弹出,图书管理员输入书刊名、ISBN/ISSN、作者等信息,提交,系统根据ISBN/ISSN号查询书种信息是否已存在,若不存在,创建书种,并存储书种信息。
“添加书种”的时序图如上所示。
图书管理员选择菜单项“添加书种”,类MainWindow的方法addTitle()被调用,然后通过调用类TitleDialog的方法creatDialog()创建对话框,图书管理员输入书刊信息后,提交,类TitleDialog的方法addTitle()被调用。
通过调用类Title的方法findTitle()来确定该书刊种类是否存在,若不存在,则调用类Title的方法newTitle()创建Title对象,并调用类Book的方法newBook()创建物理书刊对象,以及调用方法store()将Book对象存储到数据库中,然后调用类Title的方法addBook()将物理书刊添加到Title中,最后将Title对象存储到数据库中;反之,若书刊种类存在,则显示提示信息,终止操作。