软件工程导论第五版复习重点(必考题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(最后部分为每年必考题)
第一章
1. .软件工程的定义:软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。
它借鉴传统工程的原则、方法,以提高质量,降低成本为目的.
2. 软件危机的概念:软件危机是指计算机软件的开发和维护过程中所遇到的一系列严重的问题。
3. 产生软件危机的原因:(1) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。
造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。
(2) 软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。
(3) 尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。
4. 面向对象方法学的四个要点:1.把对象作为融合了数据及在数据上的操作行为的统一的软件构件2.把所有对象都划分成类3.按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。
4.对象彼此间仅能通过发送消息互相联系。
5. 软件生命周期:软件定义(问题定义,可行性研究,需求分析)、软件开发(总体设计,详细设计,编码,单元测试,总体测试)、运行维护(持久地满足用户的需要)
6. 瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型,概念.方法.优缺点.区别。
7. 微软过程把软件生命周期划分为成5个阶段:规划阶段,设计阶段,开发阶段,稳定阶段,发布阶段。
第二章
1.可行性包括:技术可行性,经济可行性,操作可行性。
2. 系统流程图是概括地描绘物理系统的传统工具。
它的基本思想是用图形符号以黑盒子形势描绘组成系统的每个部件(程序,文档,数据库,人工过程等)。
系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流程图。
4. 书库流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
在数据流图中没有任何具体的物理部件,它只描绘数据在软件中流动和被处理的逻辑过程。
数据流图是系统逻辑功能的图形表示。
5. 用系统流程图描绘一个系统时,系统的功能和实现每个功能的具体方案是混在一起的。
有数据元素组成的数据的方式只有下述3种基本类型:顺序(即以确定次序连接两个或多个分量)。
选择即从两个或多个可能的元素中选取一个重复即把指定的分量重复零次或多次
第三章
1.访谈有两种基本形式,分别是正式的和非正式的访谈
2.所谓情景分析就是对用户将来使用目标系统解决某个具体问题的方法和结果进行分析
3.结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法。
4.使用简易的应用规格说明技术分析需求的典型过程:(总结出来)
5.快速原型就是快速建立起来的旨在演示目标系统主要功能的可运行的程序。
6.所谓模型就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
7.需求分析过程应该建立3种模型,它们分别是数据模型,功能模型,行为模型.
8.概念性数据模型是一种面向问题的数据模型,是按照用户的观点对数据建立的模型
9.数据对象是对软件必须理解的符合信息的抽象。
10.数据对象彼此之间相互连接的方式称为联系,也称为关系。
联系可分为3种类型:一对一联系,一对多联系,多对多联系。
11.状态时任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。
12.事件就是引起系统做动作或(和)转换状态的控制信息。
13.IPO图是输入,处理,输出图的简称。
14.软件的验证:一致性,完整性,现实性,有效性
第四章
1.所谓形式化方法,是描述系统性质的基于数学的技术,也就是说,如果一种方法有件事的数学基础,那么它就是形式化的。
2.用于确定系统中隐含的定时问题的一种有效技术是Petri网
3.用Z语言描述的、最简单的形式化规格说明含有下述4个部分:给定的集合、数据类型及常数。
状态定义初始状态操作
第五章
1.总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构。
2.模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列。
3.抽象就是抽出事物的本质特性而暂时不考虑它们的细节。
4.逐步求精定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
5.抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表
示。
6.信息隐藏,信息隐藏的原理,
1.局部化就是把一些关系密切的软件元素物理的放得彼此靠近。
2.耦合是对一个软件结构内不同模块之间互连程度的度量。
3.数据耦合是低耦合,控制耦合式中等程度的耦合,最高程度的耦合式内容耦合。
4.如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。
5.中内聚主要有两类:如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。
6.高内聚也有两类:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,则称为顺序内聚。
深度表示软件结构中控制的层数,它往往能粗略的标志一个系统的大小和复杂程度。
7.宽度是软件结构内同一个层次上的模块总数的最大值。
8.扇出事一个模块直接控制(调用)的模块数目。
9.一个模块的扇入表明有多少个上级模块直接调用它。
10.设计的很好的软件结构通常顶层扇出比较高,中层扇出比较少,底层扇入到公共的实用模块中去(底层模块有高扇出)
11.模块的作用域应该在控制域之内(2种方法)?????
12.面向数据流的设计方法把信息流映射成软件成结构,信息流的类型决定了映射的方法。
信息流有两种类型:变换流,事务流。
13.总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案。
并且进而确定组成系统的每个程序的结构。
14.在进行软件结构设计时应该遵循的最主要的原理是模块独立原理。
第六章
1.结构程序设计的经典定义:如果一个程序的代码仅仅通过顺序,选择和循环这3种基本结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
2.系统响应时间指从用户完成某个控制动作(例如,按回车键或单击鼠标),到软件给出预期的响应(输出信息或动作)之间的这段时间。
3.系统响应时间有两个重要的属性:长度和易变性。
4.易变性指系统响应时间相对于平均响应时间的偏差。
5.一般交互指南涉及信息显示,数据输入和系统整体控制。
6.过程涉及的工具:程序流程图,盒图,PAD图,判定表,判定树
7.PDL作为一种设计工具有如下一些特点(要求看懂伪码)
第七章
1.通常把编码和测试统称为实现。
2.编码和单元测试属于软件生命周期的同一个阶段。
3.编码的标准:1.系统用户的要求2.可以使用的编译程序3.可以得到的软件工具
4.工程规模
4.程序员的知识6.软件可移植性要求7.软件的应用领域
5.所谓程序内部的文档包括恰当的标识符、适当的注释和程序的视觉组织等。
6.当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。
7.效率主要指处理机时间和存储器容量两个方面。
8.在大型计算机中必须考虑操作系统页式调度的特点,一般说来,使用能保持功能域的结构化控制结构,是提高效率的好方法。
9.二级存储器的输入输出应该以信息组为单位进行。
10.测试阶段的根本目标是尽可能地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。
11.软件测试的目标:1.测试是为了发现程序中的错误而执行程序的过程2.好的测试方案是发现了至今为止发现的错误的测试 3.成功的测试是发现了至今为止尚未发现的错误的测试。
12.测试的正确定义是“为了发现程序中的错误而执行程序的过程”。
第九章面向对象方法学引论
1.使描述问题的’问题空间’(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。
2.人们把计算机中的实体称为解空间对象。
3.对对象施加的操作就是该对象的行为。
4.面向对象方法学的优点:1.与人类习惯的思维方法一致2.稳定性好3.可重用性好4.轻易开发大型软件软件产品
5.可维护性好
5.面向对象方法学的基本原则是按照人类习惯的思维方法建立问题域的模型,开发出尽可能直观、自然地表现求解的软件系统。
6.传统的软件重用技术是利用标准函数库。
对象的概念:在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是认为的概念,或者是任何有明确边界和意义的东西。
7通常把对象的操作称为服务或方法。
8.对象的定义:定义1.对象是具有相同状态的一组操作的集合定义2.对象是对问题域中某9个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或它交互的能力,也就是说,10对象是对属性值和操作的封装。
11.对象是封装可数据结构及可以施加在这些数据结构上的操作的封装体
12.对象中的数据表示对象的状态,一个对象的状态只能由该对象的操作来改变。
13.对象的特点:1.以数据为中心2.对象是主动的3.实现了数据封装4.本质上具有并行性
简述软件测试的任务、目的与类型。
答:软件测试是一个为了寻找软件错误而运行程序的过程。
目的就是为了发现软件中的错误。
一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例。
一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。
软件测试主要分为白盒测试和黑盒测试两大类。
简述软件工程目标和面临的主要问题。
答:软件工程的目标是应用计算机科学、数学及管理科学等原理开发软件的工程。
它采用经过实践验证的工程的原则、方法,以提高质量,降低成本。
但是目前的软件开发面临着许多问题:(1)对软件开发成本和进度的估计常常很不准确。
(2)用户常对“已完成的”软件系统不满意。
(3)软件产品的质量往往靠不住。
(4)软件常常很难维护。
(5)软件常常缺乏适当的文档资料。
(6)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
(7)软件成本在计算机系统总成本中所占的比例逐年上升。
简述软件开发过程、每个里程碑的提交物。
答:软件开发的基本过程:(1)可行性研究,做初步的需求分析工作,决定项目可行与否(2)软件需求分析,软件工程师必须了解软件的信息领域,以及需求的功能、行为、性能和接口。
系统需求和软件需求均需文档化,并与用户一起复审。
并提交需求分析报告。
(3)设计,包括总体设计和详细设计,软件设计是一个多步骤的过程,主要是对软件的数据结构、软件体系结构、界面表示及过程细节进行设计。
设计过程将需求转换为软件表示,在编码之前可以评估其质量,所有设计均要文档化,它是软件配置的重要组成部分,经复审后提交相应的概要设计和详细设计报告。
(4)编码,把设计转化为机器可执行的程序。
提交源程序清单。
(5)测试,提交测试报告。
(6)维护,提交维护报告。
软件生命周期模型?瀑布模型?快速原型模型?
答;概括的说,软件生命周期模型由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。
软件生命周期模型有问题定义,可行性研究,需求分析,总体详细设计,总体编码和单元测试,综合测试,软件维护组
瀑布模型是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,如果有信息未被覆盖或者发现了问题,那么最好“返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段。
快速原型模型是在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。
软件?软件产品具有哪些特性?
答:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
软件产品具有以下特性:1、非常复杂;2、成本高;3、风险大;4、维护困难;
可行性分析的目的和主要任务是什么?
答:可行性分析的目的不是解决问题,而是确定问题是否值得去解决。
主要任务是从下面几方面研究每种解法的可行性:技术可行性,经济可行性,操作可行性,社会可行性,抉择可行性。
需求分析的目的和主要任务是什么?
答:进行需求分析是为了准确地回答“系统必须做什么”这个问题,决定可以做什么不做什么。
需求分析的主要任务是描述系统的功能需求、性能需求、数据需求、可靠性/可用性需求、出错处理需求、接口需求、约束条件、其他需求。
总体设计的目的和主要任务是什么?
答:总体设计的目的是用比较抽象的方法确定系统概要地是如何实现的(How to do generally !)。
从初步的数据流图导出(设计出)软件结构;根据数据需求设计数据结构(数据库结构、文件结构设计)。
主要任务是概括地说,如何解决这些问题,系统怎样实现?
划分系统的构成成分(黑盒子),如程序、文件、数据库、人工
操作等。
设计系统的软件结构,即构成模块。
详细设计的目的和主要任务是什么?
答:在总体设计的基础上,进一步确定软件怎样具体实现,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
主要任务包括人机界面设计、模块过程设计。
编码的目的和主要任务是什么?
答:把软件设计结果翻译成用某种程序设计语言书写的程序
软件测试的目的和主要任务是什么(G.J.Myers的观点)?
答:发现程序中的错误
软件维护的目的和主要任务是什么?维护的类型有哪些?
答:软件维护是软件生命周期中最后一个、持续时间最长的阶段。
主要任务是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件,目的是提高软件的可靠性、可用性,延长软件的寿命。
维护的类型有:改正性(错误)、适应性(环境)、完善性(功能)、预防性(新产品)什么是耦合?模块的耦合包括哪些类型?
答:耦合是对一个软件结构内不同模块之间互连程度的度量。
模块的耦合包括以下几种类型:数据耦合,控制耦合,特征耦合,公共环境耦合,内容耦合,标记耦合,无耦合/非直接耦合
什么是内聚?模块的内聚包括哪些类型?
答:内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展
模块的内聚包括以下几种类型:低内聚—偶然内聚,逻辑内聚,时间内聚
中内聚—过程内聚,通信内聚;高内聚—顺序内聚,功能内聚
如何选择程序设计语言的工程特性
答:1.系统用户的要求2.可以使用的编译程序
3.可以得到的软件工具
4.工程规模
5.程序员的知识
6.软件可移植性的要求
7.软件的应用领域
什么是编码风格?为什么要强调编码风格?
答:编码风格包括以下内容:程序内部良好的文档(注释)、数据说明、语句构造、输入输出和效率保障等。
因为编码风格对软件的可读性、可维护性、可靠性、可用性很重要,所以要强调编码风格。
可行性研究报告的主要内容有哪些?
解:一个可行性研究报告的主要内容如下:
(1)引言:说明编写本文档的目的;项目的名称、背景;本文档用到的专门术语和参考资料。
(2)可行性研究前提:说明开发项目的功能、性能和基本要求;达到的目标;各种限制条件;可行性研究方法和决定可行性的主要因素。
(3)对现有系统的分析:说明现有系统的处理流程和数据流程;工作负荷;各项费用支出;所需要各类专业技术人员的数量;所需要各种设备;现有系统存在什么问题。
(4)所建议系统的技术可行性分析:所建议系统的简要说明;处理流程和数据流程;与现有的系统比较的优越性;采用所建议系统对用户的影响;对各种设备、现有软件、开发环境、运行环境的影响;对经费支出的影响;对技术可行性的评价。
(5)所建议系统的经济可行性分析:说明所建议系统的各种支出,各种效益;收益投资比;投资回收周期。
(6)社会因素可行性分析:说明法律因素,对合同责任、侵犯专利权、侵犯版权等问题的分析;说明用户使用可行性,是否满足用户行政管理、工作制度、人员素质的要求。
(7)其他可供选择方案:逐一说明其他可供选择的方案,并说明未被推荐的理由。
(8)结论意见:说明项目是否能开发;还需要什么条件才能开发;对项目目标有什么变动等。
[解析]做软件的可行性研究的目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发,其中的问题能否解决,报告共分为八个基本内容。
系统设计的内容是什么?
解:系统设计阶段先从高层入手,然后细化。
系统设计要决定整个结构及风格,这种结构为后面设计阶段的更详细策略的设计提供了基础。
(1)系统分解。
系统中主要的组成部分称为子系统,子系统既不是一个对象也不是一个功能,而是类、关联、操作、时间和约束的集合。
每次分解的各子系统数目不能太多,最底层子系统称为模块。
(2)确定并发性。
分析模型、现实世界及硬件中不少对象均是并发的。
系统设计的一个重要目标就是确定哪些是必须同时动作的对象,哪些不是同时动作的对象。
后者可以放在一起,而综合成单个控制线或任务。
(3)处理器及任务分配。
各并发子系统必须分配给单个硬件单元,要么是一个一般的处理器,要么是一个具体的功能单元,必须完成下面的工作:估计性能要求和资源需求,选择实现子系统的硬软件,将软件子系统分配给各处理器以满足性能要求和极小化处理器之间的通信,决定实现各子系统的各物理单元的连接。
(4)数据存储管理。
系统中的内部数据和外部数据的存储管理是一项重要的任务。
通常各数据存储可以将数据结构、文件、数据库组合在一起,不同数据存储要在费用、访问时间、容量以及可靠性之间做折中考虑。
(5)全局资源的处理。
必须确定全局资源,并且制定访问全局资源的策略。
全局资源包括:物理资源,如处理器、驱动器等;空间,如盘空间、工作站屏等;逻辑名字,如对象标识符、类名、文件名等。
如果资源是物理对象,则可以通过建立协议实现对并发系统的访问,以达到自身控制;如果资源是逻辑实体,如对象标识符,那么在共享环境中有冲突访问的可能,如独立的事务可能同时使用同一个对象标识符,则各个全局资源都必须有一个保护对象,由保护对象来控制对该资源的访问。
(6)选择软件控制机制。
分析模型中所有交互行为都表示为对象之间的事件。
系统设计必须从多种方法中选择某种方法来实现软件的控制。
(7)人机交互接口设计。
设计中的大部分工作都与稳定的状态行为有关,但必须考虑用户使用系统的交互接口。
什么是软件危机?软件危机的表现是什么?其产生的原因是什么?
解:软件发展第二阶段的末期,由于计算机硬件技术的进步,计算机运行速度、容量、可靠性有显著的提高,生产成本显著下降,这为计算机的广泛应用创造了条件。
一些复杂的、大型的软件开发项目提出来了,但是,软件开发技术的进步一直未能满足发展的需要。
在软件开发中遇到的问题找不到解决办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。
软件危机表现在以下四个方面:
(1)经费预算经常突破,完成时间一再拖延。
由于缺乏软件开发的经验和软件开发数据的积累,使得开发工作的计划很难制定。
主观盲目制定计划,执行起来与实际情况有很大差距,使得开发经费一再突破。
由于对工作量估计不足,对开发难度估计不足,进度计划无法按时完成,开发时间一再拖延。
(2)开发的软件不能满足用户要求。
开发初期对用户的要求了解不够明确,未能得到明确的表达。
开发工作开始后,软件人员和用户又未能及时交换意见,使得一些问题不能及时解决,导致开发的软件不能满足用户的要求,因而导致开发失败。
(3)开发的软件可维护性差。
开发过程中没有同意的、公认的规范,软件开发人员按各自的风格工作,各行其是,开发过程无完整、规范的文档,发现问题后进行杂乱无章的修改。
程序结构不好,运行时发现错误也很难修改,导致维护性差。
(4)开发的软件可靠性差。
由于在开发过程中,没有确保软件质量的体系和措施,在软件测试时,又没有严格的、充分的、完全的测试,提交给用户的软件质量差,在运行中暴露出大量的问题。
造成软件危机的原因是:
(1)软件的规模越来越大,结构越来越复杂。
(2)软件开发管理困难而复杂。
(3)软件开发费用不断增加。
(4)软件开发技术落后。
(5)生产方式落后。
6)开发工具落后,生产率提高缓慢。
软件质量保证应做好哪几方面的工作?
解:软件质量保证是软件工程管理的重要内容,软件质量保证应做好以下几方面的工作:
(1)采用技术手段和工具。
质量保证活动要贯彻开发过程始终,必须采用技术手段和工具,尤其是使用软件开发环境来进行软件开发。
(2)组织正式技术评审。
在软件开发的每一个阶段结束时,都要组织正式的技术评审。
国家标准要求单位必须采用审查、文档评审、设计评审、审计和测试等具体手段来保证质量。
(3)加强软件测试。
软件测试是质量保证的重要手段,因为测试可发现软件中大多数潜在错误。
(4)推行软件工程规范(标准)。
用户可以自己制定软件工程规范(标准),但标准一旦确认就应贯彻执行。
(5)对软件的变更进行控制。
软件的修改和变更常常会引起潜伏的错误,因此必须严格控制软件的修改和变更。