您的当前位置:首页软件工程 复习题

软件工程 复习题

2023-02-05 来源:乌哈旅游


软件工程复习题

一、 单选题(20分)

第一组:

1、在软件开发的各种资源中,()是最重要的资源。

A.开发工具 B.方法 C.硬件 D.人员

2、软件的复杂性是(),它引起人员通信困难、开发费用超支、开发时间超时等问题。

A.固有的 B.人为的 C.可消除的 D.不可降低的

3、原型化方法是用户和软件开发人员之间进行的一种交互过程,适用于()系统。

A.需求不确定的 B.需求确定的 C.管理信息 D.决策支持

4、单元测试的测试用例主要根据()的结果来设计。

A.需求分析 B.源程序 C.概要设计 D.详细设计

5、()是软件生存期中的一系列相关软件工程活动的集合,它由软件规格说明、软件设计与开发、软件确认、软件改进等活动组成。

A.软件过程 B.软件工具 C.软件生存周质量保证 D.软件工程

6、()意味着一个操作在不同的类中可以有不同的实现方式。

A.多态性 B.类的复用 C.封装 D.对象的复用

7、软件测试计划开始于需求分析阶段,完成于()阶段。

A.需求分析 B.软件设计 C.软件实现 D.软件测试

8、在软件生存周期的瀑布模型中一般包括计划、()、设计、编码、测试、维护等阶段。

A.可行性分析 B.需求采集 C.需求分析 D.问题定义

9.软件需求分析阶段的测试手段一般采用()。

A.总结 B.阶段性报告 C.需求分析评审 D.不测试

10.()是把对象的属性和操作结合在一起,构成一个独立的对象,其内部信息对外界是隐蔽的,外界只能通过有限的接口与对象发生联系。

A.多态性 B.继承 C.封装 D.消息

11.软件测试是为了()而执行程序的过程。

A.纠正错误 B.发现错误 C.避免错误 D.证明正确

12.在结构化分析方法中,()表达系统内部数据运动的图形化技术。

A.数据字典 B.实体关系图 C.数据流图 D.状态转换图

13.软件工程的基本要素包括方法、工具和()。

A.过程 B.软件系统 C.硬件环境 D.人员

14.TURBO PASCAL是()软件。

A.系统软件 B.人工智能 C.事务软件 D.应用软件

15、选择结构的复杂性比顺序结构的复杂性要()。

A.小 B.大 C.相等 D.无法比较

16、模块内聚度越高,说明模块内各成分彼此结合的程度越()。

A.松散 B.紧密 C.无法判断 D.相等

17、软件维护是软件生命周期中的固有阶段,一般认为,各种不同的软件维护中以()

所占的维护量最小。

A.纠错性维护 B.代码维护 C.预防性维护 D.文档维护

18、在下述哪一种测试中,测试人员必须接触到源程序()。

Ⅰ功能测试 Ⅱ结构测试

A.均不需 B.只有Ⅰ C.只有Ⅱ D.Ⅰ和Ⅱ

19、软件设计阶段的输出主要是()。

A.程序 B.模块 C.伪代码 D.设计规格说明书

20、软件测试方法中,黑盒、白盒测试法是常用的方法,其中白盒测试主要用于测试()。

A.结构合理性 B.软件外部功能 C.程序正确性 D.程序内部逻辑

21、下面哪个阶段不是软件的设计阶段()。

A.编码 B.可行性研究 C.测试 D.维护

22、数据字典是用来定义()中的各个成分的具体含义的。

A.流程图 B.功能结构图 C.系统结构图 D.数据流图

23、在面向对象设计中,()意味着在同一作用域内的若干个参数不同的函数可以使用

相同的函数名字。

A.重载 B.类的复用 C.封装 D.继承

第二组:

1.“软件工程的概念是为解决软件危机而提出的”这句话的意思是()

A.强调软件工程成功解决了软件危机的问题

B.说明软件危机的存在总是使软件开发不像传统工程项目那样容易管理

C.说明软件工程这门学科的形成是软件发展的需要

D.说明软件工程的概念,即:工程的原则、思想、方法可解决当时软件开发和维护存在的问题

2.瀑布模型的主要特点是()

A.将开发过程严格地划分为一系列有序的活动 B.将开发过程分解为阶段

C.提供了有效的管理模式 D.缺乏灵活性

3.在软件工程的需求分析阶段,不属于问题识别内容的是()

A.功能需求 B.性能需求 C.环境需求 D.输入/输出需求

4.画某系统的数据流图时,顶层图有()

A.0张 B.1张 C.2张 D.3张及其以上

5.软件模块内聚性最强的是()

A.功能内聚 B.通信内聚 C.偶然内聚 D.逻辑内聚

6.最早提出软件系统维护问题的阶段是()

A.可行性分析 B.需求分析 C.概要设计 D.详细设计

7.SD(结构化设计)方法设计的结果是()

A.模块 B.模块结构图 C.模块的算法 D.数据流图

8.在进行软件测试时,首先应当进行以下哪项测试,然后再进行组装测试,最后再进行有效性测试()

A.单元测试 B.系统测试 C.集成测试 D.确认测试

9.软件详细设计阶段的任务是( )

A.算法与数据结构设计 B.功能设计 C.调用关系设计 D.输入/输出设计

10.下列属于静态测试方法的是()

A.黑盒法 B.路径覆盖 C.白盒法 D.人工检测

11.Fortran语言主要作为以下哪个方面的语言()

A.科学工程计算 B.系统软件 C.事务处理 D.人工智能

12.用结构化语言来描述加工逻辑的外层结构时,以下不属于基本结构的是()

A.顺序结构 B.选择结构 C.嵌套结构 D.重复结构

l3.可维护软件的主要特性包括()

A.可理解性、可修改性、可移植性 B.可使用性

C.可维护性、可使用性、可靠性 D.可测试性

14.程序设计语言不具有的特性是()

A.心理特性 B.工程特性 C.应用特性 D.技术特性

15.下列不属于项目进度安排主要方法的是()

A.工程网络图 B.Gantt图 C.进度结构图 D.任务资源表

16.下列不属于通常冗余技术的是()

A.结构冗余 B.信息冗余 C.时间冗余 D.代码冗余

17.下列工具中,属于需求追踪工具的是()

A.在DBMS上的应用运行工具 B.追踪和状态报告

C.访问和版本控制机构 D.文件和修改管理

18.关于软件测试的目的,下面观点错误的是()

A.为了发现错误而执行程序的过程 B.一个好的测试用例能够发现至今尚未发现的错误

C.证明程序是正确、没有错误的 D.一个成功的测试用例是发现了至今尚未发现的错误的测试

19.在制定项目开发计划文档时,不包含的内容是()

A.项目概述 B.实施计划 C.测试计划 D.交付期限

20.面向对象的开发方法中,以下哪种方法原是面向Ada语言的,并处于面向对象开发方法的奠基性地位()

A.Booch方法 B.Coad方法 C.UML语言 D.OMT方法

二、 判断题(10分)

1.文档是软件产品的一部分,没有文档的软件就不称其为软件。()

2.在需求分析过程中,分析员要从用户那里解决的最重要的问题是给该软件提供哪些信息。()

3.需求规格说明书在软件开发中具有重要的作用,它也可以作为软件可行性分析的依据。()

4.数据流图建立系统的功能模型,它由数据流、加工和数据存贮组成。()

5.好的测试是用少量的测试用例运行程序,发现被测程序尽可能多的错误。()

6.面向对象的分析是面向计算机系统建立软件系统的对象模型。(

7.不完善的系统定义往往是导致软件项目失败的主要原因。()

8.一个成功的项目唯一提交的就是运行程序。()

9.只有质量差的软件产品才需要维护。()

10.一个好的测试用例在于能发现至今未发现的错误。()

11.软件工作的考虑范围主要是程序设计和实现。()

12.在项目计划发生延迟的情况下,增加更多的程序员一定会加快进度。()

13.软件错误可能出现在开发过程的早期,越早修改越好。()

14.在软件开发的过程中,若能推迟暴露其中的错误,则为修复和改正错误所花费的代价就

会降低。(W)

15.模型是对现实的简化,建模是为了更好地理解所开发的系统。()

16.好的测试用例应能证明软件是正确的。()

17.白盒测试仅与程序的内部结构有关,完全可以不考虑程序的功能要求。()

三、 填空题(10分)

1. 软件生命周期可划分为定义、开发和维护三个时期,通常把这三个时期再细分为8个阶段,它们是问题定义、可行性研究、需求分析、总体设计、编码和单元测试、综合测试和维护,其中维护阶段的工作量是8个中最大的。

2. 可行性研究的任务是从技术、经济和操作三个方面研究软件项目的可行性。

3. 至少应该从一致性、现实性、完整性和有效性四个方面验证软件需求的正确性,其中完整性和有效性这两个方面的正确性必须有用户的积极参与才能验证,而且为了验证这两个方面的正确性往往需要开发原型系统。

4. 软件总体设计时应该遵循模块化、抽象、逐步求精、信息隐藏、局部化和模块独立

6条基本原理。详细设计通常以结构程序设计为技术为逻辑基础,因为从软件工程观点看,可理解性是软件最重要的质量标准之一。

5. 软件测试的目的是发现错误,通常把测试方法分为黑盒测试和白盒测试两大类。因为通常不可能穷尽测试,所以精心设计测试方案是保证达到测试目的所必需的。

6. 面向对象方法用对象分解取代了传统方法的功能分解。

7. 在面向对象的软件中,类是对具有相同数据和相同操作的一组相似对象的定义;实例是某个特定的类所描述的一个具体对象。

8. 消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。通常一个消息有下述3部分组成:接收消息的对象、消息名、零个或多个变元。

9. 方法就是对象所能执行的操作,也就是类中所定义的服务。

10. 属性就是类中定义的数据,它是对客观世界实体所具有性质的抽象。类的每个实例都有自己特有的属性值。

11. 封装就是把某个事物包起来,使外界不知道该事物的具体内容。

12. 继承是指能够直接获得已有的性质和特征,而不必重复定义它们。

13. 一个用例是可以被行为者感受到的、系统的一个完整的功能。

14. 行为者是与系统交互的人或其他系统,它代表系统外部的实体。

15. 在建立动态模型中,脚本是指系统在某一执行期间内出现的一系列事件。

四、 简答题(50分)

1.什么是软件危机?它有哪些典型表现?

答:软件危机是指在计算机软件的开发和维护过程中所遇到的一些列严重问题。它包括两方面:一是如何开发软件,以满足对软件日益增长的需求;二是如何维护数量不断增长的已有软件。

软件危机的典型表现:(1)对软件开发成本和进度的估计常常很不准确。常常出现实际成本比估算成本高出一个数量级,实际进度比计划进度拖延几个月甚至几年的现象。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量。这些都降低了开发商的信誉,引起用户不满;(2)用户对已完成的软件不满意的现象时有发生;(3)软件产品的质量往往都是不可靠的;(4)软件常常是不可维护的;(5)软件通常没有适当的文档资料。文档资料不全或者不合格,必将给软件开发和维护工作带来许多难以想象的困难和难以解决的问题;(6)软件成本,软件维护费在计算机系统总成本中所占的比例逐年上升;(7)开发生产率提高的速度远跟不上计算机应用普及的需求。

2.什么是软件工程?它有哪些本质特征?

答:软件工程是指导计算机软件开发和维护的一门工程学科。主要特征有:1.软件工程关注于大型程序的构造;2.软件工程的中心课题是控制复杂性;3.软件是经常变化的,开发过程中必须考虑软件将来可能的变化;4.开发软件的效率非常重要;5.和谐的合作是开发软件的关键;6.软件必须有效的支持它的用户;7.在软件工程领域中是有由具有一种文化背景

的人替具有一种文化背景的人完成一些工作。

3.什么是软件过程?它与软件工程方法学有何关系?

答:软件过程是为了获得高质量软件所需要完成的一些列任务的框架,它规定了完成各项工作步骤。概括地说,软件过程描述为了开发出客户需要的软件,什么人、在什么时候、做什么事以及怎样做这些事以实现某一个特定的具体目标。而通常把在软件生命周期全过程中使用的一整套技术方法的集合称为工程方法学,也称范型。软件过程是软件工程方法学的三个要素(方法、工具和过程)之一。

4.在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?

答:开发一个软件时,需要判断原定的系统模型和目标是否现实,系统完成后能带来的效益是否大到值得投资开发这个系统的程度,如果做不到这些,那么花费在这些工程上的任何时间,人力,软硬件资源和经费,都是无谓的浪费。可行性研究的实质是要进行一次大大压缩简化了的系统分析和设计过程,就是在高层次上以较抽象的方式进行的系统分析和设计的过程。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。

技术上的可行性。对要开发项目的功能,性能和限制条件进行的分析,确定在现有的资源条件下进行分析,技术风险有多大,项目是否能实现,这些即为技术可行性的研究内容。

经济上的可行性。进行开发成本烦人估算以及了解取得效益的评估,确定要开发的项

目是否值得投资开发,这些即为经济可行性研究的内容。

操作可行性。有时还要研究社会可行性问题,研究开发的项目是否存在任何侵犯,妨碍等责任问题。社会可行性所涉及的范围也比较广,它包括合同,责任,侵权和其他一些技术人员常常不了解的陷阱等。必要时还应该从法律,社会效益等更为广泛的方面研究每种解法的可行性。

5.为什么要进行需求分析?通常对软件系统有哪些需求?

答:为了开发出真正满足用户需求的软件产品,准确定义未来系统的目标,确定为了满足用户的需求系统必须做什么,就必须进行准确的需求分析。通常对软件系统的需求有:功能需求;性能需求;可靠性和可用性需求;出错处理需求;接口需求;约束;逆向需求;文档需求,数据需求等等。

6.怎样与用户有效的沟通以获得用户的真实需求?

答:1.访谈:有两种基本形式,分别是正式的和非正式的访谈;2.面向数据流自顶向下求精:通常从数据流图的输出端着手分析,根据输出数据定义给出最基本的数据元素的定义;3.简易的应用规格说明技术:主要是面向团队的一种收集需求的方法,通过会议,大家提出的一致性意见;4.快速建立软件原型,快速建立一个能够演示目标系统主要功能的可运行的程序,让用户在使用中完善需求规格说明书。

7.什么是模块测试和集成测试?它们各有什么特点?

答:模块测试是对每个单独的模块,分别用黑盒和白盒测试技术,测试它的功能是否

正确,检查模块控制结构中的特定路径并发现最大数量的错误。其特点是:主要应用白盒测试的技术,对多个模块的测试可以并行地进行。

集成测试是把模块装配在一起形成完整的软件包,在装配的同时进行测试,主要目的是发现与接口有关的问题。特点是:可以发现模块间接口存在的问题。

8.软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?

答:软件的可维护性与可理解性、可测试性、可修改性、可移植性和可重用性有关。在每个阶段结束前的技术审查和管理复查工程中,应该着重对可维护性进行复审过程中,应该对将来要改进的部分和可能要改的部分加以注意指明,应该讨论软件的可移植性问题,考虑可能影响软件维护的系统界面。在设计和编码过程中应该尽量使用可重用的软件构件,每个测试步骤都可以暗示在软件正式交付使用之前,程序中可能需要做预防性维护的部分。在完成每项维护工作之后,都应该对软件维护本身仔细认真的复查。

9.什么是面向对象方法学?它有哪些优点?

答:面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现解法的解法空间在结构上尽可能一致。

优点:(1)与人类习惯的思维方法一致;(2)稳定性好;(3)可重用性好;(4)较易开发大型软件产品;(5)可维护性好;(6)比较容易修改;(7)比较容易理解;(8)易于测试和调试。

10.什么是对象模型?建立对象模型时主要使用哪些图形符号?这些符号的含义是什么?

答:对象模型表示静态的,结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间关系的映射,描述了系统的静态结构。在UML中,用类图来建立对象模型,表示一个类及属于该类的对象。

11.面向对象设计应该遵循哪些准则?简述每条准则的内容。

答:(1)模块化,面向对象软件开发模式,很自然地支持了把系统分解成模块的设计原理:对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合一起所构成的模块;(2)抽象,面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是一种抽象数据类型,它对外开放的公共接口构成了类的规格说明,这种接口规定了外界可以使用合法的操作符。利用这些操作符可以对类实例中包含的数据进行操作。使用者无须知道这些操作符的实现算法和类中数据元素的具体表示方法,就可以通过这些操作符使用类中定义的数据。通常把这类抽象称为规格说明抽象。(3)信息隐藏,在面向对象方法中,信息隐藏通过对象的封装性实现:类结构分离了接口与实现,从而支持了信息隐藏。对于用户来说,属性的表示方法和操作的实现算法都应该是隐藏的。(4)弱藕合,在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。主要有交互耦合和继承耦合两种。(5)强内聚,设计中使用的一个构件内的各个元素,对完成一个定义明确的目的所做出的贡献程度;(6)可重用,一是尽量使用已有的类,二是如果确实需要新建新类,则在设计这些新类时,应该考虑将来的可重复使用性。

12.为什么说类构件是目前比较理想的可重用构件?它有哪些重用方式?

答:(1)模块独立性强。具有单一,完整的功能,且经过反复测试被确认是正确的;(2)具有高度可塑性软构件的应用环境比集成电路更广阔,更复杂;(3)接口清晰,简明,可靠。

重用方式:实例重用;继承重用;多态重用。

13.面向对象实现应该选用哪种程序设计语言?为什么?

答:就目前面向对象实现可以选择的语言有:LISP、SIMULA、Modula_2、Smalltalk、Eiffel、C++和JAVA等。

因为这些面向对象的语言都具有支持面向对象实现的要求的特点:支持类和对象、具有聚集和泛化机制、实现属性和服务机制、类型检查机制、丰富的类库和高效率、持久保存对象、参数化类等特点。

14.面向对象程序设计语言主要有哪些技术优点?

答:(1)支持类与对象概念的机制;(2)实现聚集结构的机制;(3)实现泛化结构的机制;(4)实现属性和服务的机制;(5)类型检查机制;(6)类库;(7)效率;(8)持久保存对象的机制;(9)参数化类的机制;(10)开发环境。

15.良好的面向对象程序设计风格主要有哪些?

答:1.提高可重用性:提高方法的内聚、减小方法的规模、保持方法的一致性、把策略与实现分开、全面覆盖、尽量不使用全局信息、利用继承机制;2.提高可扩充性:封装实现策略、不要用一个方法遍历多条关联链、避免使用多分支语句、精心确定公有方法;3.提高

健壮性:预防用户的操作错误、检查参数的合法性、不要预先确定限制条件、先测试后优化。

16.测试面向对象软件时,主要有哪些设计确认测试用例的方法?

答:为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以确定最可能发现用户交互需求错误的背景。传统的黑盒测试方法也可用于测试用例,对于面向对象的软件来说,主要还是根据动态模型和描述系统行为的脚本来设计确认测试用例。

17.测试面向对象软件时,主要有哪些设计集成测试用例的方法?

答:(1)基于线程的测试。这种策略把响应系统的一个输入或一个事件所需要的那些类集成起来。分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用;(2)基于使用的测试。这种方法首先测试几乎不使用服务器类的那些类,把独立都测试完之后,再测试使用独立类的下一个层次的类。对依赖类的测试一个层次一个层次地持续进行下去,直至把整个软件系统构造完为止。

18.什么是软件质量?试叙述它与软件可靠性的关系。

答:概括地说,软件质量是“软件与明确地和隐含地定义的需求相一致的程度”。具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何开发的软件产品都应该具有的隐含特征一致的程度。

19.什么是基线?为什么要建立基线?

答:IEEE把基线定义为:已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。

建立基线的三大原因:重现性、可追踪性和报告。

重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生成开发环境的能力。可追踪性是建立项目工件之间的前后继承关系,其目的在于确保设计满足要求、代码实施设计以及用正确代码编译可执行文件。报告来源于一个基线内容同另一个基线内容的比较。基线比较有助于调试并生成发布说明。建立基线后,需要标注所有组成构件和基线,以便能够对其进行识别和重新建立。

五、 画图题(10分)

1.画出下列伪码程序的程序流程图:

START

IF p THEN

WHILE q DO

f

END DO

ELSE

BLOCK

g

h

END BLIOCK

END IF

STOP

2.画出P127行李托运例子的判定树(P129图6.7)

因篇幅问题不能全部显示,请点此查看更多更全内容