软件工程课后习题简答题.docx
《软件工程课后习题简答题.docx》由会员分享,可在线阅读,更多相关《软件工程课后习题简答题.docx(37页珍藏版)》请在冰豆网上搜索。
软件工程课后习题简答题
第一章:
三、简答题
1.软件产品的特性是什么?
答:
●软件是一种逻辑产品,具有无形性;
●软件产品的生产主要是研制;主要是脑力劳动;
●软件不存在磨损和老化问题,但存在退化问题;
●软件产品的成本非常昂贵,其开发方式目前尚未完全摆脱手工生产方式;
●软件具有“复杂性”,其开发和运行常受到计算机系统的限制。
2.软件发展有几个阶段?
各有何特征?
答:
①程序设计阶段。
硬件特征:
价格贵、存储容量小、运行可靠性差。
软件特征:
只有程序、程序设计概念,不重视程序设计方法。
②程序系统阶段。
硬件特征:
速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长。
软件特征:
程序员数量猛增,开发人员素质低。
③软件工程阶段。
硬件特征:
向超高速、大容量、微型化及网络化方向发展。
软件特征:
开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。
3.什么是软件危机?
其产生的原因是什么?
答:
“软件危机”(SoftwareCrisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。
而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。
致使大量质量低劣的软件涌向市场,有的花费大量人力、财力,而在开发过程中就夭折。
软件危机主要表现在两个方面:
(1)软件产品质量低劣,甚至开发过程就夭折。
(2)软件生产率低,不能满足需要。
4.什么是软件过程?
有哪些主要的软件过程模型?
它们各有哪些特点?
答:
软件过程是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。
软件过程模型是对软件开发实际过程的抽象和简化,是描述软件开发过程中各种活动如何执行的模型,因此又称为软件开发模型。
主要的软件过程模型有:
瀑布模型、增量模型、螺旋模型、喷泉模型和基于知识的模型等。
⑴瀑布模型是经典的软件开发模型,将软件开发活动中的各项活动规定为依线性顺序连接的若干阶段,它简单易用,在消除非结构化软件、降低软件的复杂性、促进软件开发工程化方面起了很大的作用。
但在软件开发实践中也逐渐暴露出它的缺点。
它将一个充满回溯的软件开发过程硬性分割为几个阶段,无法解决软件需求不明确或者变动的问题。
⑵增量模型是一种非整体开发的模型。
根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。
该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。
⑶螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:
制定计划、风险分析、实施工程、客户评估。
⑷喷泉模型用于采用对象技术的软件开发项目。
它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。
喷泉模型使开发过程具有迭代性和无间隙性。
软件开发过程有4个阶段,即分析、系统设计、软件设计和实现。
各阶段相互重叠,以分析为基础,资源消耗成塔形,从高层返回低层无资源消耗。
强调增量开发,是对象驱动的过程,反映了对象的开发和重用过程。
⑸基于知识的模型也称为智能模型。
通过领域的专家系统,可使需求说明更加完整、准确和无二义性。
通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。
5.有哪些主要的软件开发方法?
答:
主要的软件开发方法有:
结构化开发方法、原型化开发方法和面向对象的开发方法。
6.软件生存周期各阶段的主要任务是什么?
答:
软件生存周期按瀑布模型分为6个阶段:
●可行性研究与计划(确定系统的目标和规模,分析项目的可行性);
●需求分析与规格说明(明确系统的规格和要求);
●设计(包括概要设计和详细设计,将系统分解为模块);
●编程(用程序语言实现每个模块,简单容易);
●测试(发现并改正错误,分为模块测试、集成测试和系统联调三级);
●运行维护(扩充功能、纠错等)。
7.原型化方法的核心是什么?
它具有哪些特点?
答:
原型化方法的核心是,花费少量代价建立一个可运行的系统,使用户及早获得学习的机会。
强调软件开发人员与用户的不断交互,通过原型的演进不断适应用户任务改变的需求。
它是一个循环的模型。
速成原型法按以下步骤循环执行:
快速分析。
②构造原型。
③运行和评价原型。
④修改与改进。
第二章:
三、简答题
1.需求工程包括哪些基本活动?
各项基本活动的主要任务是什么?
答:
需求工程过程包括如下主要活动:
⑴获取需求。
深入实际,在充分理解用户需求的基础上,获取足够多的问题领域的知识,积极与用户交流,捕捉、分析和修订用户对目标系统的需求,并提炼出符合解决领域问题的用户需求。
需求获取的方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等。
⑵需求分析与建模。
对已获取的需求进行分析和提炼,进行抽象描述,建立目标系统的概念模型,需求概念模型的要求包括实现的独立性:
不模拟数据的表示和内部组织等;需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。
进一步对所建立的模型(原型)进行分析。
需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。
⑶需求规格说明。
对需求模型进行精确的、形式化的描述,为计算机系统的实现提供基础。
⑷确认需求。
以需求规格说明为基础输入,通过符号执行、模拟或快速原型等方法,分析和验证需求规格说明的正确性和可行性,确保需求说明准确、完整地表达系统的主要特性,就是对需求规格说明与用户达成一致。
其主要任务是冲突求解,包括定义冲突和冲突求解两方面。
常用的冲突求解方法有:
协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。
⑸需求管理。
在整个需求工程过程中,贯穿了需求管理活动。
需求管理主要包括跟踪和管理需求变化,支持系统的需求演进。
由于客户的需要总是不断(连续)增长的,但一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件管理的首要问题。
对于传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。
当前的发展是软件家族法,即产品线方法。
多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性,并进行关于变化的推理。
进化需求是十分必要的。
2.简述抽取需求的主要方法,并比较它们的特点。
⑴面谈法。
这是一种重要而直接简单,随时可使用的发现和获取需求的方法。
面谈的对象主要有用户和领域专家:
与用户面谈主要了解和提取需求,与领域专家面谈,是一个对领域知识的学习和转换过程。
使用该方法时应注意面谈前要充分准备,面谈后认真分析总结,同时注意掌握面谈的人际交流技巧,才能取得好的效果。
⑵问卷法调查法。
通过采用向用户发问卷调查表的方式,达到彻底弄清项目需求的一种需求获取方法。
这是一种从多个用户处收集需求信息的有效方式,是对面谈法的补充。
⑶会议讨论法。
所谓会议讨论法,是指开发方和用户方召开若干次需求讨论会议,达到彻底弄清项目需求的一种需求获取方法。
这种方法适合于开发方不清楚项目需求的情况。
⑷原型法。
对于某些试验性、探索性的项目,更是难于得到一个准确、无二义性的需求。
而原型化方法(PrototypingMethod)是获取这一类项目需求的有效方法。
⑸面向用例的方法。
分析建立“用例”的过程,也就是提取需求的过程。
在实际应用中,常常将以上方法进行综合应用。
3.客户的需要总是不断地增长,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化就成为软件进化的首要问题。
请说明需求变更的管理过程。
答:
需求变更的管理是需求管理的核心内容。
其主要任务是对系统需求变更进行跟踪和控制。
对传统的变化管理过程来说,其基本内容包括软件配置、软件基线和变更审查等。
目前推出的新的管理方法有软件家族法,即软件产品线方法及多视点方法等。
下图描述了需求变更的管理过程。
识别出
的问题
问题分析和
变更描述
变更分析和
成本计算
变更实现
修正后
的需求
4.M公司的软件产品以实验型的新软件为主。
用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。
若你作为一名管理人员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由。
切记:
副总裁不喜欢报告长度超过一页。
参考答案提示:
应先简述瀑布模型的缺点,它已不适宜开发实验型的软件。
根据快速原型法的特点,说明它特别适合于开发探索型、实验型的软件。
5.如何画分层数据流图?
有哪些基本原则?
答:
总的原则是:
至顶而下,逐层分解(画分层数据流图)。
逐层分解的画法可以控制每一层的复杂度。
顶层:
将整个系统作为一个加工,描述系统边界(输入与输出)。
中间层:
将某个加工分解为一组子加工,其中的子加工还需进一步分解。
底层:
由不再进行分解的基本加工组成。
画分层数据流图的基本原则有:
①数据守恒与数据封闭原则。
②加工分解的原则。
③子图与父图“平衡”的原则。
④合理使用文件的原则。
6.加工小说明有哪些描述方法?
它们各有何优缺点?
为什么不采用自然语言进行描述?
答:
主要的描述方法有三种;结构化语言、判定表和判定树。
● 结构化语言:
介于自然语言和形式语言(如谓词逻辑)之间的的一种半形式语言,它是自然语言的一个受限制的子集。
是在自然语言的基础上加上一些约束,一般分为两层结构:
外层语法较具体,为控制结构(顺序、选择、循环);内层较灵活,表达“做什么”。
常用结构化英语或结构化汉语表示,精确、简明扼要、文体灵活。
结构化语言特点:
简单,易学,少二义性,但不好处理组合条件。
● 判定表:
适用于表述比较复杂的加工逻辑,如具有多项选择条件的操作。
判定表是一种二维的表格,常用于较复杂的组合条件。
通常由四部分组成,如教材表2-2所示。
对用结构化语言不易处理的较复杂的组合条件问题,可使用判定表。
● 判定树:
本质上与判定表相同,图形表示更易于理解。
描述一般组合条件较清晰,但不易输入计算机。
7.考察下图中子图、父图的平衡关系。
图1
图2
参考答案:
⑴显然,图1中子图与父图不平衡。
⑵图2中,如果有如下数据条目:
订货单=客户+账号+数量
则子、父图平衡。
8.画出银行取款过程的用例图。
问题描述为:
储户用存折取款,首先填写取款单,根据“银行卡”中的信息检验取款单与存折,如有问题,将问题反馈给储户,否则,登录“储户存款数据库”,修改相应数据,并更新“银行卡”,同时发出付款通知,出纳向储户付款。
参考答案:
分析所给出的需求,确定角色为:
储户、存款数据库、存折、出纳。
用例为:
填写取款单、验证取款单与存折、银行卡管理、数据库管理、付款。
银行取款系统的高层用例图
储户
存折
出纳
存款数据库
付款
数据库管理
填写取款单
银行卡管理
管理
验证取款单与存折
<>
<>
<>
<>
第三章:
三、简答题
1.请解释为什么需要体系结构设计。
答:
软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、元素间的相互作用、指导元素集成的模式以及这些模式的约束组成。
软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
良好的体系结构是普遍适用的,它可以高效地处理各种各样的个体需求。
2.集中式模型和分布式模型相比各有什么优缺点?
答:
以集中式的仓库模型为例。
其主要优点:
(1)数据由某个子系统产生,并且被存储到仓库中,以便为另外一些子系统共享;
(2)由于中央集中控制的缘故,共享数据能得到有效的管理,各子系统之间不需要通过复杂的机制来传递共享数据;
(3)一个子系统不必关心其他的子系统是怎么使用它产生的数据;
(4)所有的子系统都拥有一致的基于中央数据仓库的数据视图。
如果新子系统也采用相同的规范,则将它集成于系统中是容易的。
但这种系统也有明显的缺陷:
(1)虽然共享数据得到了有效的管理,但随之而来的问题是各子系统必须有一致的数据视图以便能共享数据,换句话说,就是各子系统之间为了能共享数据必须走一条折中的路线,这不可避免地会影响整个系统的性能。
(2)一个子系统发生了改变,它产生的数据也可能发生结构上的改变。
问题随之而来,其他的子系统如何能正确解析这些数据呢?
所以为了达到共享的目的,数据翻译系统会被引入到整个系统当中。
但这种翻译的代价是很高的,并且有时是不可能完成的。
(3)中央数据仓库和各子系统的私有数据库必须有相同的关于备份、安全、访问控制和恢复的策略,这可能会影响子系统的效率。
(4)集中式的控制使数据和子系统的分布变得非常困难甚至成为不可能。
这里分布指的是将数据或子系统分散到不同的机器上。
分布式结构有这样的一些优势:
(1)资源共享:
系统中每个服务节点上的资源都可以被系统中的其他节点访问;
(2)开放性高:
系统可以方便地增删不同软硬结构的节点;
(3)可伸缩性好:
系统可以方便地增删新的服务资源以满足需要;
(4)容错能力强:
分布式系统中的信息冗余可以容忍一定程度的软硬故障;
(5)透明性高:
系统中的节点一般只需知道服务的位置而不必清楚系统的结构。
但分布式结构也存在着一些不足:
(1)复杂性:
分布式系统比集中式系统要复杂得多。
集中式系统的性能主要依赖于主机的处理器能力,而分布式系统的性能则还会依赖于网络的带宽,这让情形变得更加复杂。
(2)安全性:
网络环境随时面临着各种威胁:
病毒、恶意代码、非法访问等。
如何保证安全性是一个让人头疼的问题。
(3)可管理性:
分布式系统的开放性造成了系统的异构性。
显而易见,管理异构的系统比管理主机系统要困难得多。
(5)不可预知性:
这主要指系统的响应时间。
网络环境本身的特点决定了网络负载会明显地影响整个系统的响应时间。
3.请举出一种集中式模型的实例,并图示它的结构。
答:
请参考
4.胖客户模型和瘦客户模型的区别是什么?
它们分别被应用在什么样的场合?
答:
在胖客户模型中,客户端应用负责用户界面和应用逻辑部分,因此它的工作比较繁重。
一般的数据库应用都是属于这种结构。
而与此相反,在瘦客户模型中,服务器负责了更多的工作,而客户端的工作就变得非常单纯。
浏览器/Web服务器结构就属于瘦客户结构,而且常被称为B/S(Browser/Server)结构。
5.请举出一种分布式模型的实例,并图示它的结构。
答:
请参考
6.请为一个公司的电子商务网站建设提出体系结构设计方案。
答:
略。
7.分布式对象模型与客户-服务器模型有什么异同?
答:
在C/S模型中,客户和服务器的“地位”是不“平等”的:
客户只能向服务器提出服务请求,而服务器不能向客户提出服务请求,同时服务器之间可以互相提供服务。
另外,客户一般要知道服务器在网络上的具体位置(服务器的域名或者IP地址),相反,服务器则不需要。
这种差别在一定程度上限制了系统的灵活性和可扩展性。
而在分布式对象结构中,服务的提供者是被称为“对象”(Object)的系统组件(SystemComponent)。
每个对象的地位在逻辑上是平等的,它们可以互相为对方提供所需的服务。
在这种情况下,提供服务的对象就是服务器,而提出服务请求的对象就是客户。
为了能够提供服务,每个对象都有一个服务接口。
8.请查阅相关的资料,写一篇对比CORBA和DCOM的报告。
答:
略。
9.模块分解的最终目的是什么?
答:
模块分解的目的是将系统“分而治之”,以降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。
10.模块分解应该遵循什么样的标准?
答:
按照“降低块间联系,提高块内联系”的设计总则对模块进行分解。
具体从以下方面考虑:
(1)尽可能建立功能模块;
(2)消除重复功能;
(3)模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间联系;
(4)模块的大小适当;
(5)模块的扇入/扇出数不宜太多。
也可以用软件独立性的两个定性指标来度量模块分解的标准:
一是耦合性。
用于描述模块之间联系的紧密程度。
从三个方面衡量块间联系大小:
①方式(直接或间接)②类型(数据型、控制型、混合型)③数量(数量越大,块间联系越紧密。
二是内聚性。
用于描述模块内部联系的紧密程度。
它是从功能的角度来度量模块内的联系。
显然,块内联系愈紧,即内聚性愈强,模块独立性愈好。
功能型模块独立性最好。
11~17题答案略。
第四章:
三、简答题
1.消息传递机制与传统程序设计模式中的过程调用相比,有何本质区别?
答:
(1)消息传递必须给出信道的信息,通常要指出明确的接收方。
(2)由于接收方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一接收方发送同样的信息,可因接收方的当前状态不同而得到不同的结果。
(3)消息传递可以是异步的,发送方可以不必等待接收方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。
2.比较面向对象方法与结构化方法的特点,说明为什么面向对象方法比结构化方法更加优越。
答:
结构化方法是以数据流和数据封闭性为基础的,由SA、SD和SP三部分构成。
该方法:
①无法实现从问题空间到解空间的直接映射。
开发方法求解过程是先对应用领域(问题空间)进行分析,建立起问题空间的逻辑模型,再通过一系列复杂的转换和算法,构造计算机系统,获得解空间。
②无法实现高效的软件复用。
结构化方法是面向过程的,将数据和处理过程(操作)分离,不仅增加了软件开发的难度,也难于支持软件复用。
③开发方法难以实现从分析到设计的直接过渡,从SA到SD要经过一系列复杂的变换。
而面向对象的方法以对象为核心,强调模拟现实世界中的概念而不是算法,尽量用符合人类认识世界的思维方式来渐进地分析、解决问题。
①使问题空间与解空间具有一致性,便于对软件开发过程所有阶段进行综合考虑,能有效地降低软件开发的复杂度,提高软件质量。
②软件开发各个阶段有机集成,有利于系统的稳定性。
③具有良好的重用性。
面向对象的技术在利用可重用的软件成分构造新软件系统上具有很大的灵活性,由于对象所具有的封装性和信息隐蔽,使得对象的内部实现与外界隔离,具有较强的独立性。
继承性本身就是一种重用机制。
综上,显然面向对象方法比结构化方法更加优越。
3.Coad/Yourdon方法主要有面向对象分析(OOA)和面向对象设计(OOD)。
OOA概念模型由5个层次组成,请简述这5个层次。
答:
OOA概念模型的5个层次分别是:
(1)发现类及对象。
描述如何发现类及对象。
从应用领域开始识别类及对象,形成整个应用的基础,然后,据此分析系统的责任。
(2)识别结构。
该阶段分为两个步骤。
第一,识别“一般-特殊”结构,该结构捕获了识别出的类的层次结构;第二,识别“整体-部分”结构,该结构用来表示一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象。
(3)定义属性。
其中包括定义类的实例(对象)之间的实例连接。
(4)定义服务。
其中包括定义对象之间的消息连接。
(5)定义主题。
主题由一组类及对象组成,用于将类及对象模型划分为更大的单位,以便于理解。
4.面向对象的分析包括哪些主要活动?
所建立的分析模型包括哪些类型的模型?
答:
面向对象的分析过程分为论域分析和应用分析。
论域分析过程是抽取和整理用户需求并建立问题域精确模型的过程。
应用分析是将论域分析建立起来的问题论域模型,用某种基于计算机系统的语言来描述。
面向对象的分析具体包括以下活动:
①获取用户基本需求。
通常使用用例(UserCase)来收集和描述。
②标识类和对象。
包括标识类及对象的属性和操作。
③定义类的结构和层次。
通常有一般与特殊(Generalization—Specialization)结构,整体与部分(Whole—Part)结构。
④建立类(对象)之间的关系,用“对象-关系模型”描述系统的静态结构。
⑤建立对象—行为模型,描述系统的动态行为。
所建立的分析模型包括:
①基本模型。
是一个类图(classdiagram),是以直观的方式表达系统最重要的信息。
OOA基本模型的三个层次分别描述了:
系统中应设哪几类对象,每类对象的内部构成,对象与外部的关系。
②主题图(subject)。
又称为子系统(subsystem),是将一些联系密切的类组织在一起的类的集合。
按照粒度控制原则,将系统组成几个主题,便于理解。
③交互图(interactiondiagram)是用例与系统成分之间的对照图。
主题图和交互图又称为补充模型。
5.面向对象设计的主要任务是什么?
答:
面向对象的设计(Object-OrientedDesign,OOD)是面向对象开发方法(OOSD)的核心阶段。
是在OOA的基础上解决系统“如何做”的问题。
主要任务包括:
⑴系统设计
系统设计的任务包括:
将分析模型中紧密相关的类划分为若干子系统(也称为主题),子系统应该具有良好的接口,子系统中的类相互协作;标识问题本身的并发性,将各子系统分配给处理器,建立子系统之间的通信。
⑵对象设计
通过对象的认定和对象层次结构的组织,确定解空间中应存在的对象和对象层次结构,并确定外部接口和主要的数据结构。
⑶设计优化
对设计进行优化,主要涉及提高效率的技术和建立良好的继承结构的方法。
6.为什么面向对象的方法能够有效地解决软件需求中存在的问题?
需求过程中存在两大难题,一是需求的确定是困难的,二是需求是不断变动的。
尤其是对于一些大型软件系统,开发周期长,系统规模大,复杂性高。
面向对象的方法中,由于对象所具有的封装性和信息隐蔽,使得对象的内部实现与外界隔离,具有较强的独立性。
而且面向对象的方法是以对象为中心构造软件系统,而不是基于对系统功能进行分解来构造系统,当系统功能需求改变时不会引起系统结构的变化,使软件系统具有良好的稳定性和可适应性。
软件生存期各阶段所使用的方法、技术具有高度的连续性,对软件开发过程所有阶段进行综合考虑,能有效地降低软件开发的复杂度,提高软件质量,也便于需求的确定。
7.OMT方法明确提出了建模的概念,为什么在软件开发过程中需要进行建模?
答:
OMT方法从不同而又相关的角度建立三类模型:
对象模型、动态模型和函数模型,并为每一类模型提供了图形表示。
软件模型一般包括数学模型、描述模型和图形模型。
在软件开发过程中进行建模,一是由于软件系统的复杂性和规模的不断增大,需要建立不同的模型对系统的各个层次更好地进行描述。
模型具有的直观性及丰富的信息描述,便于开发人员与用户的交流。
建立的模型为以后的系统维护和升级提供了文档。
鉴于上述原因,在软件开发过程中建模,能够提高软件开发的效率和质量。
8.为什么说面向对象的方法为软件复用提供了良好的环境?
答:
软件复用是将已有的软件成分用于构造新的软件系统,以达到提高软件系统的开发质量与效率,降低开发成本的目的。
复用的软件成分也称为可复用构件(ReusableComponent)。
对可复用组件一般有以下的要求:
具有功能上的独立性与完整性;具有较高的通用性;具有较高的灵活性;具有严格的质量保证;具有较高的标准化程度。
面向对象的方法对复用的支持主要反映在:
⑴面向对象方法可以保护在整个软件生存周期概念、原则、术语及表示法达到高度一致。
这使面向对象方法不但能在各个级别支持软件复用,而且能对各个级别的复用形成统一、高效的支持,达到良好的全局效果。
⑵OOA基本模型体现了更高的抽象,更容易成为一个