软件工程总复习资料

一、单选题
1.用McCabe方法度量所示程序图的环行复杂度为()。
A.4
B.5
C.6
D.7
答案:B
2.软件维护是保证软件正常、有效运行的重要手段,而软件的下述特性()有利于软件的维护。Ⅰ可测试性,Ⅱ可理解性,Ⅲ可修改性,Ⅳ可移植性。
A.只有Ⅰ
B.Ⅱ和Ⅲ
C.Ⅰ、Ⅱ和Ⅲ
D.都有利
答案:D
3.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符组成。下列图符名标识的图符不属于数据流图合法图符的是()。
A.控制流
B.加工
C.数据存储
D.源点和终点
答案:A
4.以下判断正确的是()。
A.所谓软件开发就是编写程序。
B.利用软件工程的思想,已成功的解决了软件危机。
C.完成软件测试工作以后,为了缩短程序的长度应删除程序中的注释。
D.一般来说,程序中存在错误的概率与在该段程序中已发现的错误数成正比。
答案:D
5.软件设计中,可应用于详细设计的工具有()。
A.程序流程图、PAD、方框图和伪码
B.数据流程图、PAD、结构图和伪码
C.业务流程图、N-S图和伪码
D.数据流程图、PAD、N-S图和伪码
答案:A
6.软件是计算机系统中与硬件相互依存的另一部分,它的组成部分是()。
A.程序、数据
B.程序、文档
C.程序
D.程序、数据、文档
答案:D
7.产生软件危机的原因主要与两个方面的问题有关()。
A.软件在计算机中很难识别,存在磁盘中也看不到。
B.软件设计对人的智商要求很高,也要求很高的资金投入。
C.软件产品本身的特点与其它工业产品不一样,而且在软件的开发和维护过程中用的方法不正确。
D.软件很难理解,硬件也很复杂。
答案:C
8.在详细设计阶段所使用到的设计工具是()。
A.程序流程图,PAD图,N-S图,HIPO图,判定表,判定树。
B.数据流程图,Yourdon图,程序流程图,PAD图,N-S图,HIPO图。
C.判定表,判定树,数据流程图,系统流程图,程序流程图,PAD图,N-S图。
D.判定表,判定树,数据流程图,系统流程图,程序流程图,层次图。
答案:C
9.需求分析阶段产生的最重要的文档之一是()。
A.系统规格说明书
B.需求规格说明书
C.概要设计说明书
D.详细设计说明书
答案:B
10.下列选项与设计测试数据无关的是()。
A.该软件的设计人员
B.程序的复杂程度
C.源程序
D.项目开发计划
答案:D
11.下列关于模块化程序设计的叙述中正确的是()。
A.在主存储器能够容纳得下的前提下,应使模块尽可能大,以便减少模块的个数
B.模块之间的接口叫做数据文件
C.只要模块之间的接口关系不变,各模块内部实现细节的修改将不会影响别的模块
D.模块越大,模块化的优点越明显
答案:C
12.软件文档是软件工程实施中的重要成分它不仅是软件开发各阶段的重要依据,而且影响软件的()。
A.可理解性
B.可维护性
C.可扩展性
D.可移植性
答案:A
13.软件工程方法学的目的是:使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是()。
A.硬件环境
B.软件开发的环境
C.软件开发工具和软件开发的环境
D.开发人员的素质
答案:C
14.面向对象的开发方法中,()将是面向对象技术领域内占主导地位的标准建言。
A.Booch方法
B.Coad方法
C.UML语言
D.OMT方法
答案:C
15.数据流图是用于表示软件模型的一种图示方法,在下列可采用的绘制方法中,()不是常用的。
A.自顶向下
B.自底向上
C.分层绘制
D.逐步求精
答案:B
16.需求分析中开发人员要从用户那里了解()。
A.软件做什么
B.用户使用界面
C.输入的信息
D.软件的规模
答案:A
17.数据字典中组成数据流、数据存储的最小元素是()。
A.数据流
B.数据存储
C.数据处理
D.数据项
答案:D
18.数据字典是对数据定义信息的集合,它所定义的对象都包含于()。
A.数据流图
B.程序框图
C.软件结构
D.方框图
答案:A
19.因计算机硬件和软件环境的变化而作出的修改软件的过程称为()。
A.校正性维护
B.适应性维护
C.完善性维护
D.预防性维护
答案:C
20.软件的复杂性是(),它引起人员通信困难、开发费用超支、开发时间超时等问题。
A.固有的
B.人为的
C.可消除的
D.不可降低的
答案:A
二、填空题
1.成本效益分析的目的是从()角度评价开发一个项目是否可行。
答案:经济
2.详细设计的任务是确定每个模块的内部特性,即模块内部的()、使用的数据。
答案:算法
3.为了便于对照检查,测试用例应由输入数据和预期的()两部分组成。
答案:输出结果
4.软件系统结构图是以()为基础而组成的一种层次结构。
答案:模块
5.在结构化分析中,用于描述加工逻辑的主要工具有三种,即:结构化语言、判定表、()。
答案:判定树
6.若年利率为i,不计复利,n年后可得钱数为F,则现在的价值P=()。
答案:F/(1+i)n
7.可行性研究需要主要从以下三个方面分析研究每种解决方法的可行性:技术可行性、经济可行性、()。
答案:操作可行性
8.数据流图中的箭头表示数据流;系统结构图中的箭头表示()。
答案:调用
9.“软件”包含计算机程序、数据及其说明程序的各种()。
答案:文档
10.结构化方法有结构化分析、结构化设计、结构化程序设计构成,它是一种面向()的开发方法。
答案:数据流
11.()是指在软件开发和维护所遇到的一系列严重问题。
答案:软件危机
12.SA方法中描述工具是()与数据字典。
答案:DFD/数据流图
13.在软件维护的实施过程中,为了正确、有效地修改,需要经历以下3个步骤分析和理解程序、修改程序、()。
答案:重新验证程序
14.一般情况下,在软件生命周期中决定软件质量的阶段为需求分析,花费用最多的阶段是()。
答案:软件维护
15.白盒测试主要测试程序的()。
答案:内部逻辑结构
16.黑盒测试主要测试程序的()。
答案:功能
17.计算机软件的发展经历了三个阶段:程序设计、程序系统、()。
答案:软件工程
18.计算机软件的生存期可以分为六个步骤,它们是制定计划、需求分析、软件设计、()、软件测试和运行/维护。
答案:程序编写/编码
19.CMM模型,即软件的能力成熟度模型有五个成熟度级别,它们是初始级、可重复级、确定级、管理级和()。
答案:优化级
20.用户界面设计的类型主要有菜单、图标、对话框、()、问题描述语言、数据表格等。
答案:窗口
三、问答题
1.请解释:软件工程、多态性。
答案:软件工程是指导计算机软件开发和维护的工程学科,采用工程的概念、原理、技术和方法来开发和维护软件。
多态性指相同的操作或函数、过程可作用于多种类型的对象上并获得不同结果。或(不同的对象,收到同一消息可以产生不同的结果。)
2.什么是软件危机?其主要表现有哪些?(回答3个以上即可)
答案:软件危机是软件的开发和维护过程中存在的一系列问题。
软件危机的表现:软件失败、开发失败、开发周期严重推迟、用户对产品不满意、成本过高、软件质量不稳定、软件供不应求、软件寿命短等。
3.简述软件测试的原则(至少回答5个)。
答案:软件测试的原则:
①应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。
不应把软件测试仅仅看作是软件开发的一个独立阶段,而应当把它贯穿到软件开发的各个阶段中。坚持在软件开发的各个阶段的技术评审,这样才能在开发过程中尽早发现和预防错误,把出现的错误克服在早期,杜绝某些发生错误的隐患。
②测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成。
测试以前应当根据测试的要求选择测试用例(Test case),用来检验程序员编制的程序,因此不但需要测试的输入数据,而且需要针对这些输入数据的预期输出结果。
③程序员应避免检查自己的程序。
程序员应尽可能避免测试自己编写的程序,程序开发小组也应尽可能避免测试本小组开发的程序。如果条件允许,最好建立独立的软件测试小组或测试机构。这点不能与程序的调试(debuging)相混淆。调试由程序员自己来做可能更有效。
④在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
合理的输入条件是指能验证程序正确的输入条件,不合理的输入条件是指异常的,临界的,可能引起问题异变的输入条件。软件系统处理非法命令的能力必须在测试时受到检验。用不合理的输入条件测试程序时,往往比用合理的输入条件进行测试能发现更多的错误。
⑤充分注意测试中的群集现象。
在被测程序段中,若发现错误数目多,则残存错误数目也比较多。这种错误群集性现象,已为许多程序的测试实践所证实。根据这个规律,应当对错误群集的程序段进行重点测试,以提高测试投资的效益。
⑥严格执行测试计划,排除测试的随意性。
测试之前应仔细考虑测试的项目,对每一项测试做出周密的计划,包括被测程序的功能、输入和输出、测试内容、进度安排、资源要求、测试用例的选择、测试的控制方式和过程等,还要包括系统的组装方式、跟踪规程、调试规程,回归测试的规定,以及评价标准等。对于测试计划,要明确规定,不要随意解释。
⑦应当对每一个测试结果做全面检查。
有些错误的征兆在输出实测结果时已经明显地出现了,但是如果不仔细地全面地检查测试结果,就会使这些错误被遗漏掉。所以必须对预期的输出结果明确定义,对实测的结果仔细分析检查,抓住征侯,暴露错误。
⑧妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。
4.创建用例模型的工作包括:定义系统,寻找行为者和用例,描述用例,定义用例之间的关系,确认模型。其中,怎样确定行为者?(回答5条)
答案:(1)谁将使用系统的主要功能?(2)谁需要借助系统的支持来完成日常工作?(3)谁来维护和管理系统?(4)系统控制哪些硬件设备?(5)系统需要与哪些其他系统交互?(6)哪些人或系统对本系统产生的结果(值)感兴趣?
5.简述面向对象方法学。
答案:面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。
客观世界中的实体既具有静态的属性又具有动态的行为。面向对象方法是以数据或信息为主线,把数据和处理相结合的方法。
面向对象方法把对象作为由数据及可施加在这些数据上的操作所构成的统一体。对象不仅能被动地等待外界对它进行操作,而且也可以主动处理相关事件的请求。面向对象方法把程序看作是相互协作而又彼此独立的对象集合。
6.什么是软件工程?它的目标和内容是什么?
答案:软件工程:用科学知识和技术原理来定义、开发、维护软件的一门学科。
软件工程的目标是成功的建造一个大型软件系统,所谓成功是要达到以下几个目标:付出较低的开发成本;面到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。
软件工程的内容:①软件开发技术:软件开发方法、软件开发过程、软件开发工具和环境。②软件开发管理:软件管理学、软件经济学、软件心理学。
7.什么是软件维护?软件维护分为哪几类?
答案:在软件开发完成交付用户使用后,为了保证软件在一个相当长的时期能够正常运行,就需要对软件进行维护。
软件维护的类型有4种:改正性维护、适应性维护、完善性维护和预防性维护。其中,改正性维护是要改正在特定的使用条件下暴露出来的一些潜在程序错误或设计缺陷;适应性维护是要在软件使用过程中数据环境发生变化或处理环境发生变化时修改软件以适应这种变化;完善性维护是在用户和数据处理人员使用软件过程中提出改进现有功能,增加新的功能,以及改善总体性能的要求后,修改软件以把这些要求纳入到软件之中。
8.面向对象实现阶段,提高可扩充性的准则有哪些?
答案:①封装实现策略:实现类的封装,对外只提供公有的接口,将提高今后修改类的数据结构或算法的自由度。②不要用一个方法遍历多条关联链:违反这条准则将导致方法过分复杂,既不易理解,也不易修改扩充。③避免使用多分支语句:不要用来根据对象类型选择应有的行为,否则在增添新类时将不得不修改原有的代码。④精心确定公有方法:公有方法是向公众公布的接口。对这类方法的修改往往会涉及许多其他类,因此,修改公有方法的代价通常都比较高。
9.Coad与Yourdon在程序设计阶段中将系统划分为四个组成部分,这四个组成部分是什么?简述各部分涉及内容。
答案:(1)Coad与Yourdon在设计阶段把分析阶段划分为四个组成部分,这四个组成部分是:问题论域、用户界面、任务管理和数据管理。
(2)问题论域部分设计包括复用设计;把问题论域的专用类关联起来;建立公共操作集合建立一般类;整继承级别等内容。用户界面部分的设计包括用户分类;描述人及其任务的场景;设计命令层;设计详细的交互;设计HIC(人机交互)类;根据图形用户界面进行设计等内容。任务管理部分的设计包括识别事件驱动任务;识别时钟驱动任务;识别有限任务和关键任务;识别协调者;评审各个任务;定义各个任务等内容。数据管理部分的设计包括数据管理方法----文件管理、关系数据库管理、面向对象数据库管理;数据管理部分的设计----数据的管理方法和相应的操作等内容。
10.详细设计的基本任务是什么?有哪几种描述方法?
答案:基本任务有:为每个模块进行详细的算法设计;为模块内的数据结构进行设计;对数据库进行物理设计,即确定数据库的物理结构;其它设计,根据软件系统类型,还可能要进行代码设计、输入/输出格式设计、人机对话设计;编写详细设计说明书;评审。
详细描述处理过程常用三种工具:图形、表格和语言。如结构化程序流程图、盒图和问题分析图。IPO图也是详细设计的主要工具之一。表格工具如判定表可作为详细设计中描述逻辑条件复杂的算法。过程设计语言(PDL)是一种用于描述模块算法设计和处理细节的语言工具。
11.为了具有良好的程序设计风格,应注意哪些方面的问题?
答案:程序设计人员应具有良好的程序设计风格,源程序代码应该逻辑简明清晰、易读易懂。良好的程序设计风格应该注意以下几个方面的问题:(1)书写程序内部文档时,标识符应含义鲜明,见名知义,应有适当的注解,程序清单采用阶梯形式使程序的层次结构清晰明显。(2)对复杂数据结构,数据说明次序应该规范,使用多个变量时,按字母或按使用排序。(3)构造语句时,每条语句应当简单直接,不应当为追求运行效率而使代码复杂化。(4)对输入数据进行有效性检查,一般按表格方式输出。(5)编程时考虑程序运行时间,提高存储器效率和输入输出效率。(6)采用文件夹,合理高效的管理自己的程序、模块、不同版本等文档。
12.简述面向对象设计的启发规则。
答案:⑴设计结果清晰易懂,应做到:①用词一致,②使用已有的协议,③尽量减少message模式的数目,④避免模糊定义。
⑵一般-特殊结构的深度应适当。
⑶设计简单的类:类的定义要明确,避免包含过多的属性和服务。
⑷使用简单的协议。
⑸使用简单的服务。
⑹把设计变动减至最小。
13.自顶而下集成与自底而上集成各自的优缺点是什么?
答案:“自顶向下”法的主要优点:不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,而且能在早期发现上层模块的接口错误;“自顶向下”法的主要缺点:需要桩模块程序,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚,而且用这种方法在早期不能充分展开人力;“自底向上”法的优缺点与“自顶向下”法刚好相反。
14.为什么说软件测试是软件开发中不可缺少的重要一环,但不是软件质量保证的安全网?
答案:软件测试是软件开发中不可缺少的重要一环,原因是:
⑴测试的工作量约占整个项目开发工作量的40%左右,几乎一半。如果是关系到人的生命安全的软件,测试的工作量还要成倍增加。
⑵软件测试代表了需求分析、设计、编码的最终复审。软件测试不是软件质量保证的安全网,因为软件测试只能发现错误,不能保证没有错误。
15.请解释:调试、SA。
答案:软件调试是在进行了成功的测试之后才开始的工作。它与软件测试不同,调试的任务是进一步诊断和改正程序中潜在的错误。SA是结构化分析方法,以结构化的方式进行系统定义的分析方法。
16.软件工程的基本目标是什么?
答案:(1)达到要求的软件功能;(2)付出较低的开发成本;(3)取得较好的软件性能;(4)开发的软件易于移植;(5)需要较低的维护费用;(6)能够按时完成开发工作,及时交付使用。
17.什么是模块的独立性?如何度量模块独立性?
答案:模块独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。模块的独立性用模块的耦合和内聚来度量。模块间的耦合越强,模块之间的联系就越复杂,模块的独立性就越弱;而模块的内聚性越强则模块的独立性越强。
18.在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
答案:可行性研究的目的是,用最小的代价,在尽可能短的时间内确定问题是否能够解决、是否值得解决。可以从经济可行性、技术可行性、操作可行性等方面来研究。
19.典型的总体设计过程包括哪些步骤?
答案:①设想供选择的方案;②选取合理的方案;③推荐最佳方案;④功能分解;⑤设计软件结构;⑥设计数据库;⑦制定测试计划;⑧书写文档;⑨审查和复审。
20.简述面向对象方法学的优点。
答案:(1)与人类习惯的思维一致。(2)稳定性好。传统方法的结构依赖于功能,易变;面向对象方法以object模拟实体,而实体相对稳定。(3)可重用性好。传统方法的标准函数缺少必要的“柔性”;继承机制实现了重用,且易于修改和扩充。(4)可维护性好。
四、综合题
1.设计下列伪码程序的满足判定覆盖的测试用例。
START

INPUT (A,B)

IF A<5

THEN X=10

ELSE X=1

END IF

IF B<10

THEN Y=2

ELSE Y=20

END IF

PRINT(X,Y)

STOP

答案:画出流程图:

image.png

测试数据(A,B) 期望值(X,Y) 覆盖判定分枝
(6,9) (1,2) A>5,B<10
(3,11) (10,20) A<5,B>10
2.设有如下实体:
学生:学号,单位,姓名,性别,年龄,选修课程名
课程:课程名,编号,开课单位,任课教师号
教师:姓名,教师号,性别,职称,讲授课程编号
单位:单位名称,电话,教师号,教师名
上述实体之间存在如下联系:
一个学生可以选修多门课程,一门课程可为多个学生选修;
一个教师可以讲授多门课程,一门课程可为多名教师讲授;
一个单位可以有多个教师,一个教师只能属于一个单位;
一个单位可以有多个学生,一个学生只能属于一个单位。
请设计一个E-R图包含以上所有关系。
答案:


image.png

3.如图为被测程序流程图,试用语句覆盖和路径覆盖方法设计它的测试用例。


image.png

答案:语句覆盖测试用例
测试数据(X,Y,Z) 期望值(X,Y,Z) 覆盖路径
(2,20,200) (101,2000,2) aefghijk
路径覆盖测试用例
共有3个判定节点,圈复杂度为4,需要覆盖4条基本路径
测试数据(X,Y,Z) 期望值(X,Y,Z) 覆盖路径
(2,20,200) (101,2000,2) aefghijk
(0,20,200) (0,2000,2) abghijk
(0,0,200) (0,0,2) abcijk
(0,0,0) (0,0,0) abcdk

你可能感兴趣的:(软件工程总复习资料)