软件工程习题老师给的.docx
- 文档编号:5093710
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:9
- 大小:23.12KB
软件工程习题老师给的.docx
《软件工程习题老师给的.docx》由会员分享,可在线阅读,更多相关《软件工程习题老师给的.docx(9页珍藏版)》请在冰豆网上搜索。
软件工程习题老师给的
二、判断题
三、简答题
1.软件产品的特性是什么?
答:
● 软件是一种逻辑产品,具有无形性;
● 软件产品的生产主要是研制;
● 软件不存在磨损和老化问题,但存在退化问题;
● 软件产品的生产主要是脑力劳动;
● 软件产品的成本非常昂贵,其开发方式目前尚未完全摆脱手工生产方式;
●软件具有“复杂性”,其开发和运行常受到计算机系统的限制。
2.软件发展有几个阶段?
各有何特征?
答:
①程序设计阶段。
硬件特征:
价格贵、存储容量小、运行可靠性差。
软件特征:
只有程序、程序设计概念,不重视程序设计方法。
②程序系统阶段。
硬件特征:
速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长。
软件特征:
程序员数量猛增,开发人员素质低。
③软件工程阶段。
硬件特征:
向超高速、大容量、微型化及网络化方向发展。
软件特征:
开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。
3.什么是软件危机?
其产生的原因是什么?
答:
“软件危机”(SoftwareCrisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。
而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。
致使大量质量低劣的软件涌向市场,有的花费大量人力、财力,而在开发过程中就夭折。
软件危机主要表现在两个方面:
(1)软件产品质量低劣,甚至开发过程就夭折。
(2)软件生产率低,不能满足需要。
4.什么是软件生存周期模型?
它有哪些主要模型?
答:
软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。
主要模型包括:
瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。
5.有哪些主要的软件开发方法?
答:
主要的软件开发方法有:
结构化开发方法、Jackson(JSP、JSD)方法、原型化开发方法、维也纳开发方法(VDM)和面向对象的开发方法。
6.软件生命期各阶段的任务是什么?
答:
软件生命期瀑布模型分为六个阶段:
●可行性研究与计划(确定系统的目标和规模,分析项目的可行性);
●需求分析与规格说明(明确系统的规格和要求);
●设计(包括概要设计和详细设计,将系统分解为模块);
●编程(用程序语言实现每个模块,简单容易);
●测试(发现并改正错误,分为模块测试、集成测试和系统联调三级);
●运行维护(扩充功能、纠错等)。
习题二答案
三、问答题
1.什么是需求分析?
需求分析阶段的基本任务是什么?
答:
需求分析是当前软件工程中的关键问题,需求分析阶段的任务是:
在可行性分析的基础上,进一步了解、确定用户需求。
准确地回答“系统必须做什么?
”的问题。
获得需求规格说明书。
还涉及到软件系统的目标、软件系统提供的服务、软件系统的约束和软件系统运行的环境。
它还涉及到这些因素和系统的精确规格说明,以及系统进化之间的关系。
需求分析的基本任务包括:
(1)抽取需求分析现行系统存在需要解决的问题。
获取足够多的问题领域的知识,需求抽取的方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等;还有知识工程方法,例如,场记分析法、卡片分类法、分类表格技术和基于模型的知识获取等。
(2)模拟和分析需求需求分析和模拟又包含三个层次的工作。
首先是需求建模。
需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。
需求概念模型的要求包括实现的独立性:
不模拟数据的表示和内部组织等;需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。
(3)传递需求传递需求的主要任务是书写软件需求规格说明。
(4)认可需求就是对需求规格说明达成一致,其主要任务是冲突求解,包括定义冲突和冲突求解两方面。
常用的冲突求解方法有:
协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。
(5)进化需求客户的需要总是不断(连续)地增长,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件进化的首要问题。
对于传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。
当前的发展是软件家族法,即产品线方法。
多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性,并进行关于变化的推理。
2.M公司的软件产品以开发实验型的新软件为主。
用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。
若你作为一名管理员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由,切记:
副总裁不喜欢报告长度超过一页(B5)。
参考答案提示:
应先简述瀑布模型的缺点,它已不适宜开发实验型的软件。
根据快速原型法的特点,说明它特别适合于开发探索型、实验型的软件。
3.如何画分层数据流图?
答:
总的原则是:
至顶而下,逐层分解(画分层数据流图)。
比较复杂的系统不能画在一张纸上,逐层分解的画法可以控制每一层的复杂度。
顶层:
将整个系统作为一个加工,描述系统边界(输入与输出)。
中间层:
表示某个加工分解为一组子加工,其中的子加工还需进一步分解。
底层:
由不再进行分解的基本加工组成。
4.加工小说明有哪些描述方法?
答:
● 结构化语言:
介于自然语言和形式语言(如谓词逻辑)之间。
● 结构化英语:
通常由外层和内层结构组成。
● 汉语的情况:
精确、简明扼要、文体可以灵活。
● 判定表:
适用于表述比较复杂的加工逻辑,如具有多项选择条件的操作。
● 判定树:
本质上与判定表相同,图形表示更易于理解。
5.考察下图中子图、父图的平衡。
图1
图2
参考答案:
图1中子图与父图不平衡。
子图是父图中加工2的分解,加工2有输入数据流M和N,输出数据流T,而子图则只有一个输入数据N,却有两个输出数据流T与S。
图2中子图是父图中加工3的分解,虽然表面上加工3只有一个输入数据流“订货单”,而子图却有三个输入数据流,但是如果“订货单”是由“客户”、“账号”和“数量”三部分组成,即有如下数据条目,订货单=客户+账号+数量(2.2.5数据词典),则子、父图平衡。
6.画出银行取款过程的DFD图。
问题描述为:
储户用存折取款,首先填写取款单,根据“账卡”中的信息检验取款单与存折,如有问题,将问题反馈给储户,否则,登录“储户存款数据库”,修改相应数据,并更新“账卡”,同时发出付款通知,出纳向储户付款。
参考答案:
7.常用的软件需求分析方法有哪些?
答:
结构化分析方法(SA)、功能分解法、信息建模法、面向对象的分析方法(OOA)。
习题三答案
三、简答题
1.模块内联系和模块间联系有哪些种类?
答:
块间联系的各种类型的划分,从以下3方面考虑:
●按块间联系的方式(可分为直接引用与过程调用);
●按块间共用信息的作用(可分为数据型、控制型与混合型);
●按块间共用的信息数量多少(信息多联系紧密)。
(1)块间联系的类型,按照耦合度由大到小分为:
内容型:
直接引用另一模块的内部信息;
公共型:
两个模块引用共同的全程数据区;
控制型:
模块间传送的信息用于控制模块的内部逻辑;
复合型:
模块间传送复合的数据结构;
数据型:
模块间传送单个数据项。
(2)块内联系的类型,按照内聚性从小到大分为:
偶然型:
模块内部没有必然联系;
逻辑型:
逻辑上相似的功能放进一个模块;
瞬时型:
将同时执行的语句放在一个模块;
通信型:
模块中的各部分引用共同的数据;
顺序型:
模块中一部分的输出是另一部分的收入;
功能型:
模块中刚好包含了完成一个基本任务所必需的成分。
2.分析以下DFD图,说明属于哪种类型的DFD图,并按照相应的变换将其转换为初始的模块结构图。
参考答案:
(略)
3.下图是修改文件记录的DFD图,请确定其主加工。
解:
主加工为:
账号、修改、写记录。
4.按照“降低块间联系,提高块内联系”的设计总则对模块进行修改,具体从哪些方面进行改进?
解:
(1)尽可能建立功能模块;
(2)消除重复功能;
(3)模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间联系;
(4)模块的大小适当;
(5)模块的扇入扇出数不宜太多。
5.根据模块的作用范围与控制范围的原则,判定a、b两图的正确性。
解:
显然,图a不满足作用范围应与控制范围的原则,模块F的作用范围不在控制范围之内。
图b的模块设计合理。
6.图a中,模块G为判定,判断涉及到模块B、F、G,请指出设计中的错误,再根据改进模块图的基本原则,画出1~2个改进方案(不改变模块G的判断关系),并说明是按照哪条基本原则进行改进的。
解:
图b为一个改进方案,将模块G的位置提高,使其作用范围为控制范围的子集,减少模块之间的联系。
7.编码阶段的主要任务是什,应交付的结果是什么?
答:
编码阶段的主要任务是为每个模块编写程序。
即是:
将详细设计的结果转换为用某种计算机语言写的程序——源程序代码。
编码阶段应交付的结果是带有“程序内部文档”的、不再含有语法错误的程序。
8.SP法的自顶向下,逐步求精方法的优点有哪些?
答:
此法符合人们解决复杂问题的普遍规律,可提高软件开发的成功率和生产率;而且用先全局后局部、先整体后细节、先抽象后具体的逐步求精过程,开发出来的程序具有清晰的层次结构,因此程序容易阅读和理解。
这样,程序自顶向下,逐步细化,分解成一个树型结构。
因此,在同一层次的节点上做细化工作,相互之间没有联系,它们之间的细化工作相互独立;在任何一步发生错误,一般只影响它下层的节点,同一层其他节点不受影响;在以后的测试中,也可以先独立地一个节点一个节点地做,最后再集成。
这样,程序清晰和模块化,使得在修改和重新设计一个软件时,可复用的代码量最大。
9.为了使程序具有良好的设计风格,应注意哪些方面的问题?
答:
(1)标识符应按意取名。
标识符即符号名,包括:
模块名、常量名、标号名、子程序名、数据区名、缓冲区名等。
这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能够见名知意,有助于对程序功能的理解。
(2)程序应加注释,它分为两类:
序言性注释和功能性注释。
序言性注释应置于每个模块的起始部分,主要内容有:
①说明每个模块的用途,功能;②说明模块的接口即调用格式、参数描述及从属模块的清单;③数据描述;④开发历史。
功能性注释是嵌在源程序体中的,用于说明其后的程序段或语句的功能以及数据的状态;也就是解释下面要“做什么”,或是执行下面的语句会发生什么情况;而不是解释下面“怎么做”,因为怎么做常常是与程序重复的,且对读者理解程序没有什么帮助。
10.样评价程序的执行效率?
它与程序清晰性的关系是怎样的?
答:
许多程序员往往片面追求效率,其实程序系统的成本不仅包括运行所需的机时,同时还应把程序员及操作员所花费的人力考虑进去。
在编程时为追求效率而损害可读性或可靠性,会给以后的维护工作带来困难,所以从整体上看来是不值得的。
此外,还应该认识到,提高程序效率的根本途径在于:
选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句进行调整。
(1)追求建立在不损害程序可读性或可靠性基础上,要先使程序正确、清晰,再提高程序效率。
(2)不能因为贪图效率上的小利,而破坏程序的清晰性。
(3)让编译程序去作简单的优化。
(4)提高程序效率的根本途径在于:
选择良好的设计方法和良好的数据结构与算法,而不是靠编程时对程序语句做调整。
11.假定:
需要编一个求解一元二次方程根的子程序,加入到现有的子程序库中,供其他程序员使用。
要求:
(1)为该子程序写一个序言性注释;
(2)用PASCAL语言或其他语言写出这个子程序(要把根的性质,如:
实根、复根、降为一次方程等有区别地通知调用者),并加上描述性注释。
答案:
(略)
习题四答案
三、简答题
1.与传统程序设计模式中的过程调用相比,消息传递机制有何本质区别?
答:
(1)消息传递必须给出信道的信息,通常要指出明显的接受方。
(2)由于接受方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一接受方发送同样的信息,可因接受方的当前状态不同而得到不同的结果。
(3)消息传递可以是异步的,发送方可以不必等待接受方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。
2.阐述面向对象的特征,并做简要的解释。
答:
(1)对象惟一性。
每个对象都有自身惟一的标识,通过这种标识,可找到相应的对象。
(2)分类性。
是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。
(3)继承性。
是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。
(4)多态性。
是指相同的操作或函数,过程作用于多种类型的对象上,并获得不同的结果。
3.Coad方法主要由面向对象分析OOA和面向对象设计OOD。
OOA方法分析过程和构造OOA概念模型的顺序由5个层次组成,请简述这5个层次。
答:
(1)发现类及对象。
描述如何发现类及对象。
从应用领域开始识别类及对象,形成整个应用的基础,然后,据此分析系统的责任。
(2)识别结构。
该阶段分为两个步骤。
第一,识别“一般-特殊”结构,该结构捕获了识别出的类的层次结构;第二,识别“整体-部分”结构,该结构用来表示一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象。
(3)定义主题。
主题由一组类及对象组成,用于将类及对象模型划分为更大的单位,便于理解。
(4)定义属性。
其中包括定义类的实例(对象)之间的实例连接。
(5)定义服务。
其中包括定义对象之间的消息连接。
4.面向对象程序设计有哪些优点?
解:
开发时间短、效率高、可靠性高,所开发的程序更强壮。
由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短开发时间,这样程序更易于维护、更新和升级。
继承和封装使得应用程序的修改带来的影响更加局部化。
5.比较面向对象方法与结构化方法的特点。
解:
分析是问题抽象(做什么),设计是问题求解(怎么做),实现是问题的解(结果)。
任何方法学对客观世界的抽象和求解过程都是如此。
在问题抽象阶段,结构化方法面向过程,按照数据变换的过程寻找问题的结点,对问题进行分解。
因此,与面向对象方法强调的对象模型不同,描述数据变换的功能模型是结构化方法的重点。
如果问题世界的功能比数据更复杂或者更重要,那么结构化方法仍然应是首选的方法学。
如果数据结构复杂且变换不多,那么如果以过程主导分析和设计,一旦有系统变更就会给下游开发带来极大混乱。
由于对过程的理解不同,面向过程的功能细分所分割出的功能模块有时会因人而异。
而面向对象的对象细分,从同一问题领域的对象出发,不同人得出相同结论的比率较高。
在设计上,结构化方法学产生自顶向下、结构清晰的系统结构。
每个模块有可能保持较强的独立性,但它往往与数据库结构相独立,功能模块与数据库逻辑模式间没有映射关系,程序与数据结构很难封装在一起。
如果数据结构复杂,则模块独立性很难保证。
面向对象方法抽象的系统结构往往并不比结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现程序与数据结构的封装。
在软件工程基本原则中有一条“形式化原则”,即对问题世界的抽象结论应该以形式化语言(图形语言、伪码语言等)表述出来。
结构化方法可以用数据流图、系统结构图、数据辞典、状态转移图、实体关系图来进行系统逻辑模型的描述;而面向对象方法可以使用对象模型图、数据辞典、动态模型图、功能模型图。
其中对象模型图近似系统结构图与实体关系图的结合,动态模型图类似状态迁移图,功能模型图类似数据流图。
6.当重要的对象被发现后,通过一组互相关联的模型详细表示类之间的关系和对象的行为,这些模型从四个不同的侧面表示了软件的体系结构、静态逻辑、动态逻辑、静态物理和动态物理。
试描述一下这四种特性。
解:
静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)、和一般化(继承)等关系。
这被称为对象模型。
一般化关系表示属性和方法的继承关系。
定义对象模型的图形符号体系通常是从用于数据建模的实体关系图导出的。
对设计十分重要的约束,如基数(一对一、一对多、多对多),也在对象模型中表示。
动态逻辑模型描述对象之间的互相作用。
互相作用通过一组协同的对象,对象之间消息的有序的序列,参与对象的可见性定义,来定义系统运行时的行为。
静态物理模型通过模块描述代码的布局。
动态物理模型描述软件的进程和线程体系结构。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 习题 老师