软件工程教材习题及答案123458章文档格式.docx
《软件工程教材习题及答案123458章文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程教材习题及答案123458章文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
C)软件结构图、加工说明
D)功能结构图、加工说明
12.画分层DFD图的基本原则有(ACD)。
A)数据守恒原则
B)分解的可靠性原则
C)子、父图平衡的原则
D)数据流封闭的原则
13.在E-R模型中,包含的基本成分是(C)))。
A)数据、对象、实体
B)控制、联系、对象
C)实体、联系、属性
D)实体、属性、联系
14.画DFD图的主要目的是(AD)。
A)作为需求分析阶段用户与开发者之间交流信息的工具
B)对系统的数据结构进行描述
C)对目标系统的层次结构进行描述
D)作为分析和设计的工具
15.数据字典是数据流图中所有元素的定义的集合,一般由(C)四类条目组成。
A)数据说明条目、控制流条目、加工条目、数据存储条目
B)数据流条目、数据项条目、文件条目、加工条目
C)数据源条目、数据流条目、数据处理条目、数据文件条目
D)数据流条目、数据文件条目、数据池条目、加工条目
16.在需求分析阶段主要采用图形工具来描述的原因是(BC)。
A)图形的信息量大,便于描述规模大的软件系统
B)图形工具能够极好地概括描述一个系统的信息,比文字叙述能够更好地表达重要的细节
C)图形能够更加直观地描述目标系统,便于用户理解和交流,有利于开发者与用户之间达成一致的需求
D)图形比文字描述简单、形象
17.模块的基本特征是(AC)。
A)外部特征(输入/输出、功能)B)内部特征(输入/输出、功能)
C)内部特征(局部数据、代码)D)外部特征(局部数据、代码)
18.SD方法的设计总则是(CD)。
A)程序简洁、操作方便B)结构清晰、合理
C)模块内聚性强D)模块之间耦合度低
19.软件设计的主要任务是(ABD)。
A)将分析阶段获得的需求说明转换为计算机中可实现的系统;
B)完成系统的数据结构和程序结构设计
C)完成模块的编码和测试
D)对模块内部的过程进行设计
20.设计阶段应达到的目标有(AD)。
A)提高可靠性和可维护性B)提高应用范围
C)结构清晰D)提高可理解性和效率
21.从工程管理的角度来看,软件设计分(D)两步完成。
A)系统分析、模块设计B)详细设计、总体设计
C)模块设计、详细设计D)总体设计、详细设计
22.模块独立性准则定性指标(BD)来衡量。
A)分解度B)耦合度C)屏蔽性D)内聚性
23.用户界面设计的任务包括(ABC)。
A)确定用户界面类型B)建立任务模型
C)建立用户模型D)建立功能模型
二、判断题
1.软件就是程序,编写软件就是编写程序。
(×
)
2.瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。
3.结构化方法的工作模型是使用螺旋模型进行开发。
4.结构化方法和OO方法都是一种面向过程的软件开发方法。
5.原型化开发方法包括生成原型和实现原型两个步骤。
6.面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。
(√)
7.软件危机的主要表现是软件的需求量迅速增加,软件价格上升。
8.软件工具的作用是为了延长软件产品的寿命。
9.软件工程过程应该以软件设计为中心,关键是编写程序。
10.在进行了可行性分析后,需求分析就只需要解决目标系统的设计方案。
(×
11.SA法是面向数据流,建立在数据封闭原则上的需求分析方法。
(√)
12.需求管理主要是对需求变化的管理,即如何有效控制和适应需求的变化。
13.在面向对象的需求分析方法中,建立动态模型是最主要的任务。
14.加工小说明是对系统流程图中的加工进行说明。
15.判定表的优点是容易转换为计算机实现,缺点是不能够描述组合条件。
16.需求分析的主要方法有SD法、OOA法及HIPO法等。
17.8.分层的DFD图可以用于可行性分析阶段,描述系统的物理结构。
18.信息建模方法是从数据的角度来建立信息模型的,最常用的描述信息模型的方法是E-R图。
19.(√)
20.用于需求分析的软件工具,应该能够保证需求的正确性,即验证需求的一致性、完整性、现实性和有效性。
21.划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。
22.在网状结构中任何两个模块都是平等的,没有从属关系,所以在软件开发过程中常常被使用。
23.信息隐蔽原则有利于提高模块的内聚性。
(√)
24.中心变换型的DFD图可看成是对输入数据进行转换而得到输出数据的处理,因此可以使用事务分析技术得到初始的模块结构图。
25.SD法是一种面向数据结构的设计方法,强调程序结构与问题结构相对应。
26.当模块的控制范围是其作用范围的子集时,模块之间的耦合度较低。
三、思考题
1.软件产品的特性是什么?
答:
●软件是一种逻辑产品,具有无形性;
●软件产品的生产主要是研制;
主要是脑力劳动;
●软件不存在磨损和老化问题,但存在退化问题;
●软件产品的成本非常昂贵,其开发方式目前尚未完全摆脱手工生产方式;
●软件具有“复杂性”,其开发和运行常受到计算机系统的限制。
2.软件发展有几个阶段?
各有何特征?
①程序设计阶段。
硬件特征:
价格贵、存储容量小、运行可靠性差。
软件特征:
只有程序、程序设计概念,不重视程序设计方法。
②程序系统阶段。
速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长。
程序员数量猛增,开发人员素质低。
③软件工程阶段。
硬件特征:
向超高速、大容量、微型化及网络化方向发展。
软件特征:
开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。
3.什么是软件危机?
其产生的原因是什么?
“软件危机”(SoftwareCrisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。
而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。
致使大量质量低劣的软件涌向市场,有的花费大量人力、财力,而在开发过程中就夭折。
软件危机主要表现在两个方面:
(1)软件产品质量低劣,甚至开发过程就夭折。
(2)软件生产率低,不能满足需要。
4.什么是软件过程?
有哪些主要的软件过程模型?
它们各有哪些特点?
软件过程是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。
软件过程模型是对软件开发实际过程的抽象和简化,是描述软件开发过程中各种活动如何执行的模型,因此又称为软件开发模型。
主要的软件过程模型有:
瀑布模型、增量模型、螺旋模型、喷泉模型和基于知识的模型等。
⑴瀑布模型是经典的软件开发模型,将软件开发活动中的各项活动规定为依线性顺序连接的若干阶段,它简单易用,在消除非结构化软件、降低软件的复杂性、促进软件开发工程化方面起了很大的作用。
但在软件开发实践中也逐渐暴露出它的缺点。
它将一个充满回溯的软件开发过程硬性分割为几个阶段,无法解决软件需求不明确或者变动的问题。
⑵增量模型是一种非整体开发的模型。
根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。
该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。
⑶螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:
制定计划、风险分析、实施工程、客户评估。
⑷喷泉模型用于采用对象技术的软件开发项目。
它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。
喷泉模型使开发过程具有迭代性和无间隙性。
软件开发过程有4个阶段,即分析、系统设计、软件设计和实现。
各阶段相互重叠,以分析为基础,资源消耗成塔形,从高层返回低层无资源消耗。
强调增量开发,是对象驱动的过程,反映了对象的开发和重用过程。
⑸基于知识的模型也称为智能模型。
通过领域的专家系统,可使需求说明更加完整、准确和无二义性。
通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。
5.有哪些主要的软件开发方法?
主要的软件开发方法有:
结构化开发方法、原型化开发方法和面向对象的开发方法。
6.软件生存周期各阶段的主要任务是什么?
软件生存周期按瀑布模型分为6个阶段:
●可行性研究与计划(确定系统的目标和规模,分析项目的可行性);
●需求分析与规格说明(明确系统的规格和要求);
●设计(包括概要设计和详细设计,将系统分解为模块);
●编程(用程序语言实现每个模块,简单容易);
●测试(发现并改正错误,分为模块测试、集成测试和系统联调三级);
●运行维护(扩充功能、纠错等)。
7.原型化方法的核心是什么?
它具有哪些特点?
原型化方法的核心是,花费少量代价建立一个可运行的系统,使用户及早获得学习的机会。
强调软件开发人员与用户的不断交互,通过原型的演进不断适应用户任务改变的需求。
它是一个循环的模型。
速成原型法按以下步骤循环执行:
①快速分析。
②构造原型。
③运行和评价原型。
④修改与改进。
1.需求工程包括哪些基本活动?
各项基本活动的主要任务是什么?
需求工程过程包括如下主要活动:
⑴获取需求。
深入实际,在充分理解用户需求的基础上,获取足够多的问题领域的知识,积极与用户交流,捕捉、分析和修订用户对目标系统的需求,并提炼出符合解决领域问题的用户需求。
需求获取的方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等。
⑵需求分析与建模。
对已获取的需求进行分析和提炼,进行抽象描述,建立目标系统的概念模型,需求概念模型的要求包括实现的独立性:
不模拟数据的表示和内部组织等;
需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。
进一步对所建立的模型(原型)进行分析。
需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。
⑶需求规格说明。
对需求模型进行精确的、形式化的描述,为计算机系统的实现提供基础。
⑷确认需求。
以需求规格说明为基础输入,通过符号执行、模拟或快速原型等方法,分析和验证需求规格说明的正确性和可行性,确保需求说明准确、完整地表达系统的主要特性,就是对需求规格说明与用户达成一致。
其主要任务是冲突求解,包括定义冲突和冲突求解两方面。
常用的冲突求解方法有:
协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。
⑸需求管理。
在整个需求工程过程中,贯穿了需求管理活动。
需求管理主要包括跟踪和管理需求变化,支持系统的需求演进。
由于客户的需要总是不断(连续)增长的,但一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件管理的首要问题。
对于传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。
当前的发展是软件家族法,即产品线方法。
多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性,并进行关于变化的推理。
进化需求是十分必要的。
2.简述抽取需求的主要方法,并比较它们的特点。
⑴面谈法。
这是一种重要而直接简单,随时可使用的发现和获取需求的方法。
面谈的对象主要有用户和领域专家:
与用户面谈主要了解和提取需求,与领域专家面谈,是一个对领域知识的学习和转换过程。
使用该方法时应注意面谈前要充分准备,面谈后认真分析总结,同时注意掌握面谈的人际交流技巧,才能取得好的效果。
⑵问卷法调查法。
通过采用向用户发问卷调查表的方式,达到彻底弄清项目需求的一种需求获取方法。
这是一种从多个用户处收集需求信息的有效方式,是对面谈法的补充。
⑶会议讨论法。
所谓会议讨论法,是指开发方和用户方召开若干次需求讨论会议,达到彻底弄清项目需求的一种需求获取方法。
这种方法适合于开发方不清楚项目需求的情况。
⑷原型法。
对于某些试验性、探索性的项目,更是难于得到一个准确、无二义性的需求。
而原型化方法(PrototypingMethod)是获取这一类项目需求的有效方法。
⑸面向用例的方法。
分析建立“用例”的过程,也就是提取需求的过程。
在实际应用中,常常将以上方法进行综合应用。
3.客户的需要总是不断地增长,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化就成为软件进化的首要问题。
请说明需求变更的管理过程。
需求变更的管理是需求管理的核心内容。
其主要任务是对系统需求变更进行跟踪和控制。
对传统的变化管理过程来说,其基本内容包括软件配置、软件基线和变更审查等。
目前推出的新的管理方法有软件家族法,即软件产品线方法及多视点方法等。
下图描述了需求变更的管理过程。
4.M公司的软件产品以实验型的新软件为主。
用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。
若你作为一名管理人员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由。
切记:
副总裁不喜欢报告长度超过一页。
参考答案提示:
应先简述瀑布模型的缺点,它已不适宜开发实验型的软件。
根据快速原型法的特点,说明它特别适合于开发探索型、实验型的软件。
5.如何画分层数据流图?
有哪些基本原则?
总的原则是:
至顶而下,逐层分解(画分层数据流图)。
逐层分解的画法可以控制每一层的复杂度。
顶层:
将整个系统作为一个加工,描述系统边界(输入与输出)。
中间层:
将某个加工分解为一组子加工,其中的子加工还需进一步分解。
底层:
由不再进行分解的基本加工组成。
画分层数据流图的基本原则有:
①数据守恒与数据封闭原则。
②加工分解的原则。
③子图与父图“平衡”的原则。
④合理使用文件的原则。
6.加工小说明有哪些描述方法?
它们各有何优缺点?
为什么不采用自然语言进行描述?
主要的描述方法有三种;
结构化语言、判定表和判定树。
● 结构化语言:
介于自然语言和形式语言(如谓词逻辑)之间的的一种半形式语言,它是自然语言的一个受限制的子集。
是在自然语言的基础上加上一些约束,一般分为两层结构:
外层语法较具体,为控制结构(顺序、选择、循环);
内层较灵活,表达“做什么”。
常用结构化英语或结构化汉语表示,精确、简明扼要、文体灵活。
结构化语言特点:
简单,易学,少二义性,但不好处理组合条件。
● 判定表:
适用于表述比较复杂的加工逻辑,如具有多项选择条件的操作。
判定表是一种二维的表格,常用于较复杂的组合条件。
通常由四部分组成,如教材表2-2所示。
对用结构化语言不易处理的较复杂的组合条件问题,可使用判定表。
● 判定树:
本质上与判定表相同,图形表示更易于理解。
描述一般组合条件较清晰,但不易输入计算机。
9.模块分解的最终目的是什么?
模块分解的目的是将系统“分而治之”,以降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。
10.模块分解应该遵循什么样的标准?
答:
按照“降低块间联系,提高块内联系”的设计总则对模块进行分解。
具体从以下方面考虑:
(1)尽可能建立功能模块;
(2)消除重复功能;
(3)模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间联系;
(4)模块的大小适当;
(5)模块的扇入/扇出数不宜太多。
也可以用软件独立性的两个定性指标来度量模块分解的标准:
一是耦合性。
用于描述模块之间联系的紧密程度。
从三个方面衡量块间联系大小:
①方式(直接或间接)②类型(数据型、控制型、混合型)③数量(数量越大,块间联系越紧密。
二是内聚性。
用于描述模块内部联系的紧密程度。
它是从功能的角度来度量模块内的联系。
显然,块内联系愈紧,即内聚性愈强,模块独立性愈好。
功能型模块独立性最好。
1.程序设计语言分为哪几类?
程序设计语言,按照语言级别可以分为两大类:
低级语言和高级语言。
低级语言包括机器语言和汇编语言。
低级语言依赖于特定的机器,其使用复杂、繁琐、费时、易出差错,因而程序编写也有一定的难度。
机器语言是表示成二进制形式的机器基本指令集,或者是操作码经过符号化的基本指令集,其存储由语言本身决定。
汇编语言比机器语言更直观,是机器语言中地址部分符号化的结果,或进一步包括宏构造。
即便是现在汇编语言有着生产效率低、维护困难、容易出错的缺点,但是在实现与硬件系统接口部分时,仍然采用它,因为它易于实现接口,实现效率高。
高级语言的表示方法要比低级语言更接近于待解的问题,其特点是在一定程度上与具体机器无关,易学、易用、易维护。
高级语言的实现极大地提高了软件的生产效率。
众多的高级语言根据不同的标准有不同的分类方式。
(1)按照应用范围分为:
通用语言与专用语言。
通用语言有:
Pascal、C、C++、Java等;
目标单一的语言称为专用语言,有:
APT等。
(2)按照用户的要求分为:
过程式语言和非过程式语言。
过程式语言的主要特征是,用户可以指明一系列可执行的顺序运算,以表示相应的计算过程,如Pascal、C等;
非过程式语言反之,较为著名的是Java。
(3)按照使用方式分为:
交互式语言和非交互式语言。
具有反映人机交互作用的语言成分的语言成为交互式语言,如BASIC等;
不反映人机交互作用的语言称为非交互式语言,如Pascal、C等都是非交互式语言。
(4)按照语言的内在特点分为:
系统实现语言、静态高级语言、动态高级语言和块结构高级语言;
系统实现语言例如:
C语言;
静态高级语言例如:
COBOL和FORTRAN语言;
动态高级语言的特点是动态完成所有的存储管理,如Java;
块结构高级语言,例如ALGOL和Pascal语言。
2.程序设计语言的成分有哪些?
程序设计语言基本的组成成分如下:
①数据成分,用于描述程序所涉及的数据
(1)程序名字声明:
首先声明这个程序设计对象在这个程序中的名字,这样避免编译时出现错误。
例如,设计一个电子时钟,那么对于主程序完全可以对其名字声明为:
clock,这样当后面进行编译的时候就能够识别这是已经声明了的对象,而不再报错。
(2)数据类型声明:
对程序实现时用到的各种数据的类型作一声明,如整型、浮点型、用户自定义类型等。
②运算成分,用以描述程序中所包含的运算
(1)初始化:
程序设计实现时最常出现的一种错误就是没有对于要运算的数据初始化,即没有赋予一个合适的初始数据,结果造成了编译或运行时出错。
(2)运算对象:
运算对象是程序执行时要运行的对象,包括一个算术表达式或者一个逻辑表达式,或者是一个完整的语言,例如:
赋值语句等。
③控制成分,用以描述程序中所包含的控制。
(1)顺序控制结构:
顺序执行的语句构成了顺序结构。
(2)循环控制结构:
常见的循环控制结构有for语句和while语句,至于它们的基本使用以及表达形式这里不再赘述。
(3)分支控制结构:
常见的分支控制结构有if语句和switch-case语句两种,另外if语句中又分为带else和不带else语句两种。
④传输成分,用以表达程序中数据的传输。
传输成分包括基本的输入和输出。
3.程序设计语言的选择对应用程序的开发有什么样的影响?
通常应根据软件系统的应用特点,程序设计语言的内在特性以及系统的性能要求等方面来进行选择。
程序设计语言的选择应该考虑以下因素:
●项目的应用领域。
应尽量选取适合某个应用领域的语言。
例如,选择VisualBasic来开发数据库应用就比选择VisualC++要容易一些。
●算法和计算复杂性。
要根据不同语言的特点来选取能够适应软件项目算法和计算复杂性的语言。
例如,对于科学计算较多的应用一般会考虑选择FORTRAN语言。
●软件的执行环境。
要选取机器上能运行且具有相应支持软件的语言。
例如,在嵌入式系统中(这类系统的硬件资源往往较少),软件开发语言多为C/C++、Java。
●性能因素。
应结合工程具体性能来考虑,例如实时系统对响应速度有特殊要求,就应选择汇编语言、C语言等。
●数据结构的复杂性。
要根据不同语言构造数据结构类型的能力选取合适的语言。
C++、Java这样的高级语言显然比汇编语言的表达能力要强。
●软件开发人员的知识水平以及心理因素。
知识水平包括开发人员的专业知识,程序设计能力;
心理因素是指开发人员对某种语言或工具的熟悉程度。
从技术的层面来讲,大多数的任务用任何一门高级语言都可以完成,所以选择开发者熟悉的语言是可以提高效率的。
为此,要尽量避免受外界的影响,盲目追求高、新的语言。
4.结构化程序设计的特点是什么?
为什么要采用结构化程序设计?
结构程序设计的概念最早是由E.W.Dijkstra提出来的,他指出:
“可以从高级语言中取消GOTO语句,程序质量与程序中所包含的GOTO语句的数量成反比”。
并指出结构程序设计并非简单的取消GOTO语句,而是创立一种新的程序设计思想、方法和风格,以显著提高软件生产率和质量。
提高程序可读性的关键是使程序结构简单清晰,结构化程序设计(SP)方法是达到这一目标的重要手段。
结构化程序设计是一种程序设计技术,它采用自顶向下,逐步求精的程序设计方法和单入口和单出口的控制结构。
具体来说,结构化程序设计技术主要具有以下特点:
(1)自顶而下,逐步求精
这种逐步求精的思想符合人类解决复杂问题的普遍规律,从而可以显著提高软件开发的效率。
而且这种思想还体现了“先全局,后局部”、“先抽象,后具体”的方法,使开发的程序层次结构清晰,