软件工程学(清华大学出版社)习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三、名词解释
1. 软件工程
是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前最好的技术方法结合起来,这就是软件工程。
2.软件危机
在计算机硬件技术得以发展后,软件开发技术的进步未能满足发展的需要,在软件开发中遇到的问题找不到解决的办法,使问题越积越多,形成了尖锐的矛盾,因而导致了软件危机。
软件危机指的是软件开发和维护过程中遇到的一系列严重问题。
概括地说,软件危机包含下述两方面的问题:如何开发软件,怎样满足对软件的日益增长的需求;如何维护数量不断膨胀的已有软件。
3. 软件生存周期模型
描述软件开发过程中各种活动如何执行的模型
是软件工程思想的具体化,是实施于过程模型中的软件开发方法和工具,是软件开发实践中总结出来的软件开发方法和步骤。
总的来说,它是跨越整个软件生命周期的系统开发、运作、维护所实施的全部工作和任务的结构框架。
P13
4. 信息隐蔽
是在设计和确定模块时,使一个模块内包海宁的信息(过程和数据)对于不需要这些信息的构件来所是不能访问的。
它通过定义一组独立的模块来实现有效的模块化。
P71
5. 抽象
是人类在认识复杂现象的过程中使用的强有力的思维工具。
在现实世界中一定事物、状态或过程之间总是存在某些共性,把这些共性集中和概括起来,暂时忽略它们之间的差异,这就是抽象。
抽象就是抽出事物的本质特性而暂时不考虑它们的物理细节。
6、数据流图P55
解:简称DFD,是SA(结构化分析)方法中用于表示系统逻辑模型的一种工具.是一种功能模型
7. 数据字典
数据字典是关于数据信息的集合,对数据流图中的各个元素作完整的定义与说明,是数据流图的补充工具。
它以一种准确的、无二义性的说明方式为系统的分析、设计及维护提供了有关元素的一致的定义和详细的描述。
8、模块 P69
在软件系统设计中,模块指这样一组程序语句集合,包括输入输出和逻辑处理功能、内部信息及其运行计划。
模块指可独立命名且可通过名字访问的过程、函数、子程序或宏调用。
通常说的模块就是构建的一种具体形式。
模块式一个拥有明确定义的输入输出和特性的程序实体。
9. 模块化P70
模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。
是将软件系统划分成若干个独立命名又可独立访问的模块的过程,其中每个模块完成一个特定子功能,每个模块既是相对独立的,又是相互联系的,它们共同完成系统指定的各项功能。
10. 耦合、内聚 P72
耦合又称块间联系,是软件系统结构中各模块间相互联系紧密程度的一种度量。
模块间联系越紧密,其耦合性越高,模块的独立性越差。
模块间耦合高低取决于模块间接口的复杂性、调用的方法和传递的信息。
内聚性是模块独立性的衡量标准之一,它是指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量
耦合:指各模块之间相对独立性的度量,即一个模块与其他模块之间的联系紧密度的度量。
也称块间联系。
内聚:指模块功能强度的度量,即模块内部各个成分之间彼此结合的紧密程度的度量,也称快内联系。
11、完善性维护、适应性维护、改正性维护、预防性维护
在软件正常使用过程中,用户还会不断地提出新的需求,为了满足用户新的需求而增加软件功能的活动称为完善性维护
12.结构化程序设计
.结构化程序设计基本要求要点是什么?
a.采用自顶向下、逐步求精的程序设计方法
b.使用三种基本程序控制结构构造程序
1).用顺序方式对过程分解,确定各部分的执行顺序。
2).用选择方式对过程分解,确定某个部分的执行条件。
3).用循环方式对过程分解,确定某个部分重复的开始和结束的条件。
c.主程序员组的组织形式。
13. 类、子类、父类、超类
在面向对象的软件技术中,类就是对具有相同数据和相同操作的一组相似对象的定义,也就是说,类是对具有相同属性和行为的一个或多个对象的描述,通常在这种描述中也包括对怎样创建该类的新对象的说明。
14. 多态性、封装性、继承性
指相同的操作或函数、过程可作用于多种类型的对象上并获得不同结果。
或(不同的对象,收到同一消息可以产生不同的结果。
)
15.调试
调试的目的是发现错误的位置并改正错误。
简单调试、演绎调试、递归调试、回溯调试。
16.软件质量
软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的隐含特征的程度。
17.软件维护P287
软件维护有哪些内容?
a、校正性维护
b、适应性维护
c、完善性维护
d、预防性维护
18.软件可维护性P293
软件的可维护性:软件能够被理解、校正、适应及增强功能的容易程度。
可维护性的度量的特性是:可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。
19. 对象、消息、方法
对象P146
在面向对象的方法中把面向对象发出的服务请求称作消息。
消息用来请求对象处理或回答某些信息的要求。
消息应含有下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。
20.E-R图P62
E-R图也称实体-联系图,提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
21. 黑盒测试、白盒测试P253 P258
黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。
黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息的完整性。
黑盒测试又称为功能测试。
白盒测试法的前提是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。
这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作,白盒测试又称为结构测试。
22、集成测试
将模块组合起来成为一个完整的系统对其进行测试。
23、投资回收期
解:投资回收期就是使累计的经济效益等于最初的投资费用所需的时间。
四、简答
1. 简述软件工程过程。
软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。
软件工程过程主要包括开发过程、运作过程、维护过程。
它们覆盖了需求、设计、实现、确认以及维护等活动。
需求活动包括问题分析和需求分析。
问
题分析获取需求定义,又称软件需求规约。
需求分析生成功能规约。
设计活动一般包括概要设计和详细设计。
概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。
详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。
实现活动把设计结果转换为可执行的程序代码。
确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。
维护活动包括使用过程中的扩充、修改与完善。
伴随以上过程,还有管理过程、支持过程、培训过程等。
2.简述模块独立性的原则。
模块独立性是指软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中其他的模块接口是简单的。
模块独立性的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果,由耦合和内聚两个标准度量。
3.简述详细设计的基本任务。
(1) 为每个模块进行详细的算法设计。
用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。
(2) 为模块内的进行设计。
对于需求分析、概要设计确定的概念性的数据类型进行确切的定义。
(3) 对数据结构进行物理设计,即确定数据库的物理结构。
物理结构主要指数据库的记录格式、存储记录安排和存储方法,这些都依赖于具体所使用的数据库系统。
(4) 其他设计:根据软件系统的类型,还可能要进行以下设计:
①代码设计。
为了提高数据的输入、分类、存储、检索等操作,节约内存空间,对数据库中的某些数据项的值要进行代码设计。
②输入/输出格式设计。
③人机对话设计。
对于一个实时系统,用户与计算机频繁对话,因此要进行对话方式、内容、格式的具体设计。
(5) 编写详细设计说明书。
(6) 评审。
对处理过程的算法和数据库的物理结构都要评审。
4.简述如何降低模块间的偶合度技术。
(1)如模块必须存在耦合,选择适当的耦合类型
原则:a、尽量使用数据耦合 b、少用控制耦合 c、限制公共耦合的范围 d、坚决避免使用内容耦合
(2)降低模块间接口的复杂性。
5.什么是软件生存周期模型?请至少列举四种主要模型?
软件生命周期模型是跨越整个软件生命周期的系统开发、运作、维护所实施的全部工作和任务的结构框架。
常用的软件生命周期模型包括瀑布模型、原型模型、螺旋模型、基于四代技术模型、喷泉模型和增量模型。
6.衡量模块独立的两个标准是什么?它们各表示什么含义?
(1)模块之间的耦合性(块间联系)(2)模块自身的聚合性(块内联系)
耦合度是模块间的联结关系,衡量不同模块间的相互依赖的紧密程度,耦合的强弱取决于模块间借口的复杂程度;进入或访问一个模块的入口点;以及通过借口的数据。
耦合度越高,模块独立性越弱。
聚合度是衡量一个模块内部各成分之间彼此结合的紧密程度。
功能聚合、顺序聚合、通信聚合、过程聚合、时间聚合、逻辑聚合、偶然聚合(由高到低)。
7.简述可行性研究的目的和内容。
目的:
内容
8.简述改进软件设计提高软件质量的几条启发式规则。
1.改进软件结构提高模块独立性
2.模块规模应该适中
4.模块的作用域应该在控制域内
5.力争降低模块接口的复杂程度
6.设计单入口单出口的模块
7、模块功能应该可以预测
9.软件危机的表现有哪些?
(1)产品不符合用户的实际需要(2)软件开发生产率提高的速度远远不能满足客观需要,软件的生产率远远低于硬件生产率和计算机应用的增长速度,使人们不能充分利用现代计算机硬件提供的巨大潜力(3)软件产品的质量差(4)对软件开发成本和进度的估计常常不准确(5)软件的可维护性差(6)软件文档资料通常既不完整也不合格(7)软件的价格昂贵,软件成本在计算机系统总成本中所占的比例逐年上升。
10.分析软件危机产生的主要原因有哪些?
(1)软件日益复杂和庞大(2)软件开发管理困难和复杂(3)软件开发技术落后(4)生产方式落后(5)开发工具落后(6)软件开发费用不断增加
11.简述需求分析。
答:开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式主义功能规约(需求规格说明)的过程。
12.耦合性和内聚性有几种类型? 其耦合度、内聚强度的顺序如何?
耦合性:低耦合(非直接耦合、数据耦合、标记耦合)、中耦合(控制耦合)、较强耦合(公共耦合)、强耦合(内容耦合)。
(模块独立性由强到弱)
内聚性:偶然聚合、逻辑聚合、时间聚合、过程聚合、通信聚合、顺序聚合、功能聚合(内聚性由低到高,模块独立性由弱到强)
13.为什么软件需要维护?软件维护有哪几种类型?
所谓软件维护是指软件系统交付使用后为了改正软件运行错误或者因满足新的需求而加入新功能的修改软件的过程。
这个阶段是软件生命周期的最后一个阶段,其基本任务是保证软件在一个比较长的时期内能够正常运行。
类型:纠错性维护、适应性维护、完善性维护、预防性维护
14.什么是模块、模块化、模块独立性?
模块化:把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集总起来组成一个整体,可以完成指定的功能,满足问题的功能。
模块:一个拥有明确定义的输入、输入和特性的程序实体。
模块独立性:模块完成独立的功能,符合信息隐蔽和信息局部化原则,模块间关连和依赖程度尽量小。
15.软件生存周期可以分为几个阶段,每个阶段的提交物是什么?
七个方面活动:1可行性分析和项目开发计划(项目开发计划和可行性分析报告)2需求分析(软件需求说明书)3概要设计(概要设计说明书)4详细设计(详细设计说明书)5编码(源程序清单)6测试(测试报告)7维护(维护报告)
16.结构化分析的描述工具有哪些?简述结构化分析的步骤。
结构化分析方法:是面向数据流进行需求分析的方法。
描述工具:a、数据流图b、数据字典c、描述加工逻辑的结构化语言、判定表、判定树。
结构化分析方法步骤:
a.了解当前系统的工作流程,获得当前系统的物理模型.
b.抽象出当前系统的逻辑模型.
c.建立上标系统的逻辑模型.
d.作进一步补充和优化.
36.简述软件危机形成的原因及其表现。
答:1,形成的原因:
A.软件的规模越来越大,结构越来越复杂。
B软件开发管理困难而复杂。
C软件开发费用不断增加。
D软件开发技术落
后。
E生产方式落后。
F开发工具落后,生产率提高缓慢。
2.表现:
A.经费预算经常突破,完成时间一拖再拖。
B.开发的软件不能满足客户的需要。
C.开发的软件可维护性差。
D.开发的软件可靠性差。
37.简述数据流图工具及其四种基本图形符号的含义。
答:数据流图,简称DFD,是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描述数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。
四种基本图形符号的含义:
→:箭头,表示数据流。
□:方框,表示数据的源点和终点。
○:圆或椭圆,表示加工。
= :双杠,表示数据存储。
38.简述衡量模块独立性的两个标准及其含义。
答:衡量模块独立性的两个标准是:耦合性和内聚性。
对于耦合性,模块间联系越紧密,其耦合性越高,模块的独立性越差。
模块间耦合高低取决于模块间接口的复杂性、调用的方法和传递的信息。
耦合性从低到高可分为:无直接耦合,数据耦合,标记耦合,控制耦合,公共耦合,内容耦合。
对于内聚性,模块内部各个元素彼此结合的紧密程度的衡量。
模块内各元素联系越紧密,她的内聚性越高,内举行从低到高有以下几种:偶然内聚,逻辑内聚,时间内聚,通信内聚,顺序内聚,功能内聚。
39.简述数据流图的分类及每一类的特点。
答:在各类软件中,不论DFD如何庞大与复杂,一般可分为:变换型和事务型两类。
变换型的DFD是有输入、变换、和输出三部分组成,变换是系统的主加工,变换输入端地数据流为系统的逻辑输入,变化输出端为逻辑输出。
因此变换型的DFD是一个顺序结构。
事务性的DFD 是把系统中的某个加工将它的输入流分离成许多发散的数据流,形成许多加工路径,并根据输入的值选择其中一个路径来执行,这个加工中心称之为事务处理中心。
事务性的是选择结构。
可行性研究报告的主要内容有哪些?
解:一个可行性研究报告的主要内容如下:
(1)引言:说明编写本文档的目的;项目的名称、背景;本文档用到的专门术语和参考资料。
(2)可行性研究前提:说明开发项目的功能、性能和基本要求;达到的目标;各种限制条件;可行性研究方法和决定可行性的主要因素。
(3)对现有系统的分析:说明现有系统的处理流程和数据流程;工作负荷;各项费用支出;所需要各类专业技术人员的数量;所需要各种设备;现有系统存在什么问题。
(4)所建议系统的技术可行性分析:所建议系统的简要说明;处理流程和数据流程;与现有的系统比较的优越性;采用所建议系统对用户的影响;对各种设备、现有软件、开发环境、运行环境的影响;对经费支出的影响;对技术可行性的评价。
(5)所建议系统的经济可行性分析:说明所建议系统的各种支出,各种效益;收益投资比;投资回收周期。
(6)社会因素可行性分析:说明法律因素,对合同责任、侵犯专利权、侵犯版权等问题的分析;说明用户使用可行性,是否满足用户行政管理、工作制度、人员素质的要求。
(7)其他可供选择方案:逐一说明其他可供选择的方案,并说明未被推荐的理由。
(8)结论意见:说明项目是否能开发;还需要什么条件才能开发;对项目目标有什么变动等。
37.系统设计的内容是什么?
解:系统设计阶段先从高层入手,然后细化。
系统设计要决定整个结构及风格,这种结构为后面设计阶段的更详细策略的设计提供了基础。
(1)系统分解。
系统中主要的组成部分称为子系统,子系统既不是一个对象也不是一个功能,而是类、关联、操作、时间和约束的集合。
每次分解的各子系统数目不能太多,最底层子系统称为模块。
(2)确定并发性。
分析模型、现实世界及硬件中不少对象均是并发的。
系统设计的一个重要目标就是确定哪些是必须同时动作的对象,哪些不是同时动作的对象。
后者可以放在一起,而综合成单个控制线或任务。
(3)处理器及任务分配。
各并发子系统必须分配给单个硬件单元,要么是一个一般的处理器,要么是一个具体的功能单元,必须完成下面的工作:估计性能要求和资源需求,选择实现子系统的硬软件,将软件子系统分配给各处理器以满足性能要求和极小化处理器之间的通信,决定实现各子系统的各物理单元的连接。
(4)数据存储管理。
系统中的内部数据和外部数据的存储管理是一项重要的任务。
通常各数据存储可以将数据结构、文件、数据库组合在一起,不同数据存储要在费用、访问时间、容量以及可靠性之间做折中考虑。
(5)全局资源的处理。
必须确定全局资源,并且制定访问全局资源的策略。
全局资源包括:物理资源,如处理器、驱动器等;空间,如盘空间、工作站屏等;逻辑名字,如对象标识符、类名、文件名等。
如果资源是物理对象,则可以通过建立协议实现对并发系统的访问,以达到自身控制;如果资源是逻辑实体,如对象标识符,那么在共享环境中有冲突访问的可能,如独立的事务可能同时使用同一个对象标识符,则各个全局资源都必须有一个保护对象,由保护对象来控制对该资源的访问。
(6)选择软件控制机制。
分析模型中所有交互行为都表示为对象之间的事件。
系统设计必须从多种方法中选择某种方法来实现软件的控制。
(7)人机交互接口设计。
设计中的大部分工作都与稳定的状态行为有关,但必须考虑用户使用系统的交互接口。
38.什么是软件危机?软件危机的表现是什么?其产生的原因是什么?
解:软件发展第二阶段的末期,由于计算机硬件技术的进步,计算机运行速度、容量、可靠性有显著的提高,生产成本显著下降,这为计算机的广泛应用创造了条件。
一些复杂的、大型的软件开发项目提出来了,但是,软件开发技术的进步一直未能满足发展的需要。
在软件开发中遇到的问题找不到解决办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。
软件危机表现在以下四个方面:
(1)经费预算经常突破,完成时间一再拖延。
由于缺乏软件开发的经验和软件开发数据的积累,使得开发工作的计划很难制定。
主观盲目制定计划,执行起来与实际情况有很大差距,使得开发经费一再突破。
由于对工作量估计不足,对开发难度估计不足,进度计划无法按时完成,开发时间一再拖延。
(2)开发的软件不能满足用户要求。
开发初期对用户的要求了解不够明确,未能得到明确的表达。
开发工作开始后,软件人员和用户又未能及时交换意见,使得一些问题不能及时解决,导致开发的软件不能满足用户的要求,因而导致开发失败。
(3)开发的软件可维护性差。
开发过程中没有同意的、公认的规范,软件开发人员按各自的风格工作,各行其是,开发过程无完整、规范的文档,发现问题后进行杂乱无章的修改。
程序结构不好,运行时发现错误也很难修改,导致维护性差。
(4)开发的软件可靠性差。
由于在开发过程中,没有确保软件质量的体系和措施,在软件测试时,又没有严格的、充分的、完全的测试,提交给用户的软件质量差,在运行中暴露出大量的问题。
造成软件危机的原因是:
(1)软件的规模越来越大,结构越来越复杂。
(2)软件开发管理困难而复杂。
(3)软件开发费用不断增加。
(4)软件开发技术落后。
(5)生产方式落后。
6)开发工具落后,生产率提高缓慢。
9.银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存款存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。
请用描绘出本系统的系统结构图,并用实体-联系图描绘系统中的数据对象。
10所谓分层体系结构是按层组织软件的一种软件体系结构,其中每层软件建立在低一层的软件层上,下图显示了一种分层体系结构。
请选择正确的答案,将其对应的序号填入图中的( )。
(6分)
供选择的答案:
① 高效性 ② 通用性 ③ 保密性 ④ 专用性 ⑤ 系统软件
⑥ 中间件 ⑦ 应用软件 ⑧ 支撑软件 ⑨ 特定业务 ⑩ 子系统 ④ ② ⑦
⑨
⑥
⑤。