软件工程基础知识(软件设计师)

软件工程基础知识

2.4 软件工程基础知识

2.4.1 主要知识点

软件工程是计算机软件的一个重要分支,主要应掌握软件工程的基本原理以及软件设计与测试方法。

2.4.1.1软件生存周期各阶段的任务

软件生存周期指出由软件定义、软件开发和软件维护等阶段组成的全过程。

(1)软件定义阶段

软件定义阶段主要解决软件要"做什么"的问题,也就是要确定软件的处理对象、软件与外界的接口、软件的功能、软件的性能、软件的界面以及有关的约束和限制。软件定义阶段通常可分成系统分析、软件项目计划和需求分析等阶段。系统分阶析的任务是确定待开发软件的总体要求和适用范围,以及与之有关的硬件和支撑软件的要求,该阶段所生产的文档可合并在软件项目计划阶段的文档(项目计划书)中。软件项目计划的任务是确定待开发软件的目标,对其进行可行性分析,并对资源分配、进度安排等做出合理的计划,该阶段所产生的文档有可行性分析报告和项目计划书。需求分析的任务是确定待开发软件的功能、性能、数据和界面等要求,从而确定系统的逻辑模型。该阶段产生的文档是需求规格说明书。

(2)软件开发阶段

软件开发阶段主要解决软件"怎么做"的问题,包括数据结构和软件结构的设计、算法设计、编写程序和测试,最后得到可交付使用的软件。软件开发阶段通常可分成软件设计、编码、软件测试等阶段。软件设计通常还可分成概要设计和详细设计。概要设计的任务是模块分解,确定软件结构、模块的功能和模块的接口,以全国数据结构的设计。详细设计的任务是设计每个模块的实现细节和局部数据结构。设计阶段产生的文档有设计说明书,它也可分为概要设计说明书和详细设计说明书。编码的任务是用某种程序语言为每个模块编写程序,产生的文档有程序清单。软件测试的任务是发现软件中的错误,并加以纠正,产生的文档有软件测试计划和软件测试报告。

(3)软件维护

软件维护任务就是为使软件适应外界环境的变化,进一步实现软件功能的扩充和质量的改善而修改软件。该阶段产生的文档有维护计划和维护报告。

2.4.1.2软件开发模型

用不同的方式将软件生存周期中所有开发活动组织起来,形成不同的软件开发模型。常见的软件开发模型有瀑布模型、螺旋模型和喷泉模型等。瀑布模型给出了软件生存周期各阶段的固定顺序,上一阶段完成后才能进入到下一阶段。各阶段结束后,都要进行严格的评审。

- 1 -

软件工程基础知识

2.4.1.3结构化分析和设计方法

(1)结构化分析(SA)方法

结构化分析(SA)方法是一种面向数据流的需求分析方法,它适用于分析大型数据处理系统。结构化分析方法的基本思想是自顶向下逐层分解,把一个问题分解成若干个小问题,每个小问题再分解成若干个更小的问题,经过多次逐层分解,每个最低层的问题都是足够简单、容易解决的,这个过程就是分解的过程。SA方法的分析结果由数据流图DFD、数据词典和加工逻辑说明几个部分组成。

(2)结构化设计(SD)方法

结构化设计(SD)方法是一各面向数据流的软件设计方法,它可以与SA方法衔接,SD方法采用结构图(SC)来描述程序的结构。结构图的基本成分由模块、调用和输入/输出数据组成。在需求分析阶段,用SA方法产生了数据流图。面向数据流的设计能方便地将DFD转换成程序结构图,DFD中从系统的输入数据到系统的输出数据流的一连串连续变换将形成一条信息流。DFD的信息流大体可分为两种类型,一种是变换流,另一种是事务流。

SD方法的设计步骤有:①复查并精化数据流图;②确定DFD的信息流类型;③根据信息流类型分别将变换流或事务流转换成程序结构图;④根据软件设计的原则对程序结构图作为改进。

(3)结构化程序设计(SP)

结构化程序设计(SP)采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。自顶向下逐步求精的设计方法符合抽象和分解的原则, 人们解决复杂问题时常用的方法。SA方法和SD方法也采用了自顶向下逐步求精的方法,在详细设计时也同样如此。在设计一个模块的实现算法时,先考虑整体后考虑局部,先抽象后具体,通地逐步细化,最后得到详细的实现算法。单入口单出口的控制结构,使程序的静态和动态结构执行过程一致,使程序具有良好的结构。

2.4.1.4面向数据结构的设计方法

这类方法以数据结构作为设计基础,根据输入/输出数据结构导出程序的结构。Jackson方法是一种典型的面向数据结构的设计方法。尽管程序中实际使用中的数据结构有许多种,但这些数据结构中数据元素间的逻辑关系只有顺序、选择和重复3类。Jackson方法的设计步骤为:

(1)分析并确定输入和输出数据的逻辑结构,并用Jackson图表示;

(2)找出输入数据结构与输出数据结构间有对应关系的数据单元;

(3)从描述数据结构的Jackson图导出描述程序结构的Jackson图。

- 2 -

软件工程基础知识

2.4.1.5软件设计的原则

(1)抽象的原则

软件工程中从软件定义到软件开发要发经历多个阶段,在这个过程中每前进一步都可看作是对软件设计的抽象层次的一次细化。抽象的最低层次就是实现该软件的源程序代码。在进行曲模块化设计时也可以有多个抽象层次,最高抽象层次的模块用概括的方式叙述题的解法,较低抽象层次的模块是对较高抽象层次模块问题解法描述的细化。过程抽象和数据抽象是常用的两种主要抽象手段。

(2)模块化的原则

模块化是指将一个待开发的软件分解或成若干个小的简单的部分模块,每个模块可独立地开发、测试,最后组装成完整的软件。

(3)信息隐蔽的原则

信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一人模块时尽可能少地显露其内部的处理。信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。

(4)模块独立的原则

模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系比较简单。衡量模块独立程度标准有两个:耦合和内聚,耦合是指模块之间联系的紧密程度,耦合度越高,则模块的独立性越差。内聚是指模块内部各元素之间联系的紧密程度,内聚度越低,模块的独立性越差。模块独立要求每个模块都是高内聚低耦合的。

2.4.16编码

编码阶段的任务就是根据详细的设计说明书编写程序。要编写高质量的程序,应注意选择合适的程序设计语言,明确源程序的质量要求,养成良好的程序设计格。

2.4.1.7 软件测试

软件测试的工作量约占软件开发总工作量的40%以上,其目的是尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。

测试的关键是测试用例的设计,设计方法可分成两类:白盒测试和黑盒测试。白盒测试把程序看成是装在一只透明的盒子里,测试者完全了解程序的结构和处理过程。白盒测试根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。黑盒测试把程序看成是装在一只不透明的盒子里,测试者完全不了解(或不考虑)程序的结构

- 3 -

软件工程基础知识

和处理过程。黑盒测试根据规格说明书规定的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。

软件测试的主要步骤有单元测试、集成测试和确认测试。单元测试也称模块测试,通常单元测试可放在编码阶段,主要用来发现编码和详细设计中产生的错误,一般采用白盒测试。集成测试也租组装测试,它是对由各模块组装而成的模块进行测试,主要检查模块间的接口和通信。集成测试主要用来发现设计阶段产生的错误,通常采用黑盒测试。确认测试的任务是检查软件的功能、性能和其他特征是否与用户的需求一致,它是以需求规格说明书作为依据的测试,通常采用黑盒测度。

大多数软件生产者使用一种Alpha 测试和Beta测试的过程,来揭露仅由最终用户才能发现的错误。 Alpha测试是在开发者的现场由客户来实施的,被测试的软件是在开发者从用户的角度进行常规设置的环境下运行的。Beta测试是在一个或多个客户的现场由该软件的最终用户实施的。与Alpaha测试不同的是,进行Beta测试时开发者通常是不在场的。

2.4.1. 8 面向对象方法的基本概念

面向对象(OO)方法成为软件开发的一种主要方法。它有几个基本概念。

(1)对象

在计算机系统中,对象是指一组属性以及这组属性上的专用操作的封装体。属性可以是一些数据,也可以是另一个对象。每个对象都有它自己的属性值,表示该对象的状态,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装目的是使对象的使用者和生产者分离,使对象的定义和实现分开。一个对象通常可由对象名、属性和操作这3个部分组成。

(2)类

类是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类的一个实例(Instance )。在分析和设计时,我们通常把注意力集中在类上,而不是具体的对象上。通常把一个类和这个类的所有对象称为类及对象或对象类。

(3) 继承

继承是在某个类的层次关联中不同的类共享属性和操作的一种机制。一个父类可以有多个子类,这些子类都是父类的特例。父类描述了这些子类的公共属性的操作,子类中还可以定义它自己的属性和操作。一个子类只有唯一的一个父类,这种继承称为单一继承。一个了类有多个父类,可以从多个父类中继承特性,这种继承称为重多继承。

(4)消息

- 4 -

软件工程基础知识

消息的对象间通信的手段、一个对象通过向另一对象发送消息来请求其服务。一个消息通常包括接收对象名、调用的操作名和适当的参数(如有必要)。消息只告诉接收对象需要完成什么操作,但并不能指示接收者息样完成操作。消息完全同接收者解释,接收者独立决定采用什么方法来完成所需的操作。

(5)多态性和动态绑定

多态性是指同一个操作作用不同的对象可以有不同的解释,产生不同的执行结果。

与多态性密切相关的一个概念就是动态绑定。传统的程序设计语言把过程调用与目标代码的连接放在程序运行前进行,称为静态绑定。而动态绑定则是把这种连接推迟支动行时才进行。在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法连接,即动态绑定。

2.4.1.9面向对象的分析与设计方法

(1)Peter Coad 和Edward Yourdon的OOA和OOD方法

OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。在这种方法中定义了两种对象类之间的结构,一种称为分类结构,一种称为组装结构。分类结构就是所谓的一般与特殊的关系。组装结构则反映了对象之间的整体与部分的关系。

OOA在定义属性的同时,要识别实例连接。实例连接是一个实例与另一个实例的映射关系。 OOA在定义服务的同时要识别消息连接。当一个对象需要向另一对象发送消息时,它们之间就存在消息连接。

OOA 中的5个层次和5个活动继续贯穿在OOD(画向对象的设计)过程中。OOD模型由4个部分组成。它们分别是设计问题域部分、设计人机交互部分、设计任务管理部分和设计数据管理部分。

(2)Booch的 OOD方法

Booch 认为软件开发是一个螺旋上升的过程。在螺旋上升的每个周期中,有4个步骤:标识类和对象、确定它们的含义、标识它们之间的关系、说明每一个类的界面和实现。

(3)OMT方法

对象建模技术OMT定义了3种模型,它们是对象模型、动态模型和功能模型,OMT用这3种模型来描述系统。OMT方法有4个步骤:分析、系统设计、对象设计和实现。OMT方法的每一个步骤都使用这3种模型,每一个步骤对这3种模型不断地进行细化和扩充。

- 5 -

软件工程基础知识

对象模型描述系统包括对象的静态结构、对象之间的关系、对象的属性和对象的操作。OMT的对象模型中除了对象、类和继承外,还有链、关联、泛化、聚合和模块等概念。

动态模型用来描述与值的变换有关的系统特征--功能、映射、约束和函数依赖。功能模型用数据流图来表示。

OMT主要步骤:

①分析是OMT方法的第一步,其目的是建立可理解现实世界模型。

②在系统设计阶段将确定整个系统的体系结构,以形成求解问题和建立解答的高层次策略。 ③对象设计。在分析的基础上,对象设计阶段将建立基于分析模型的设计模型,并考虑实现的细节。设计人员会根据系统设计期间建立的策略把实现细节加入到设计模型中。

④实现阶段将对象设计阶段开发的对象类及基关系转换成特定的程序设计语言、数据库或硬件实现。

2.4.1.10 软件质量保证

软件质量保证是指为保证软件系统或软件产品最大限度地满足用户要求而进行的有计划、有组织的活动,其目的是生产高质量的软件。有多种软件质量模型来描述软件质量特性,著名的有 ISO/IEC 9126软件质量模型和 Mc Call软件质量模型。

软件质量保证环节包括的主要工作有:应用技术方法、进行正规的技术评审、测试软件、标准的实施、控制变动、度量、记录保存和报告。

2.4.l.11 软件开发工具与环境

用来辅助软件开发、运行、维护、管理和支持等过程中的活动的软件称为软件工具,通常也称为 CASE工具。软件工具大都包含了检测机制,能及时发现一些错误,对提高软件的 质量起着重要的作用。

软件开发环境则把一组相关的工具集成在环境中,环境机制提供数据集成、控制集成和界面集成等机制。数据集成机制为工具提供统一的数据接日;控制集成机制实现工具间的通信和协同工作;界面集成机制使这些工具具有统一的界面风格,从而为软件开发、维护、管理等过程中的各项活动提供连续的、一致的全方位支持。

2.4.2 试题解析

对高级程序员级考试来说,软件工程的重要性非常突出,从历年试题统计(见表2-6)来看,在各大知识点中平均所占的比重最大,平均每年有2道题,这也说明对高级程序员的软件分析与设计能力的要求比较高。总的来说,软件设计方法、软件测试方法、软件模块划分、软

- 6 -

软件工程基础知识

件质量要求等是反复考查的重点内容。软件管理、软件工具、软件开发环境等从未考过的内容也应引起重视。

软件工程基础知识软件设计师

试题1 (20xx年试题5)

从供选择的答案中,选出应填人下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

在软件开发过程中常用图作为描述工具。如 DFD就是面向 A 分析方法的描述工具。在一套分层DFD中,如果某一张图中有N个加工(Process),则这张图允许有 B 张子图。在一张 DFD图中,任意两个加工之间 C。在画分层 DFD时,应注意保持 D 之间的平衡。DFD中从系统的输入流到系统的输出流的一连串连续交换形成一种信息流,这种信息流可分为 E 两类。 供选择的答案

A:①数据结构 ②数据流 ③对象 ④构件(ComPonent)

B:①0 ②1 ③1-N ④0-N

C:①有且仅有一条数据流

- 7 -

软件工程基础知识

②至少有一条数据流

③可以有0条或多条名宇互不相同的数据流

④可以有0或多条数据流,但允许其中有若干条名宇相同的数据流

D:①父图与其子图②同一父图的所有子图

③不同父图的所有子图④同一子图的所有直接父图

E:①控制流和变换流②变换流和事务流

③事务流和事件流④事件流和控制流

【解析】

本题考查数据流图(DFD)的基本知识。

在软件需求分析阶段,用SA方法产生了数据流图。数据流图是结构化分析方法的一种分析结果,用来描述数据流从输入到输出的变换过程。数据流图的基本成份有数据流、加工。文件和源/宿。

一个软件系统,其数据流图往往有多层。如果父图有N个加工,则该父图可以有0~N张子图,但是每张子图只能孙对应于一张父图。

在画数据流图时,应注意父图与子图的平衡,即父图中某加工的输入输出数据流必须与 其子图的输入输出流在数量和名字上相同。

DFD的信息流大体可分为两种类型,一种是变换流,另一种是事务流。

[答案]A:②B:④C:③D:①E:②

试题2 (20xx年试题6)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

软件的易维护性是指理解、改正、改进软件的难易程度。通常影响软件易维护性的因素有易理解性、易修改性和 A 。在软件的开发过程中往往采取各种措施来提高软件的易维护性。如采用 B 有助于提高软件的易理解性;C 有助于提高软件的易修改性。

在软件质量特性中,D 是指在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性;E 是指防止对程序及数据的非授权访问的能力。

供选择的答案

- 8 -

软件工程基础知识

A:①易使用性②易恢复性③易替换性④易测试性

B:①增强健壮性②信息隐蔽原则

③良好的编程风格④高效的算法

C:①高效的算法②信息隐蔽原则③增强健壮性④身份认证

D:①正确性②准确性③可靠性④易使用性

E:①安全性②适应性③灵活性④容错性

【解析】

本题考软件质量要求和软件质量特性。

对于源程序的质量要求,最基本的就是正确性和可靠性,除此之外,更要注重程序的易使用性、易维护性和易移植性。易使用性就是要对用户友好,便于用户使用,做到少培训甚至零培训;易维护性包括易理解性、易测试性和易修改性;移植性则指程序从某一环境移植到另一环境的能力。信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显露其内部的处理。信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。

一般使用 ISOflEC 9126软件质量模型来描述软件质量特性,它有 3个层次组成:第 1层是质量特性;第2层是质量于特性;第3层是度量指标。题中提到的可靠性位于第1层,安全性位于第2层。

[答案]A:④ B:③ C:② D:③ E:①

试题 3(19xx年试题 5)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

软件设计中划分模块的一个准则是 A 。两个模块之间的耦合方式中,B 耦合的耦合度最高,

C 耦合的耦合度最低。一个模块内部的内聚种类中 D 内聚的内聚度最高,E 内聚的内聚度最低。

供选择的答案

A:①低内聚低耦②低内聚高耦合③高内聚低耦合④高内聚高耦合

B:①数据②非直接③控制④内容

C:①数据②非直接③控制④内容

- 9 -

软件工程基础知识

D:①偶然②逻辑③功能④过程

E:①偶然②逻辑③功能④过程

【解析]

软件设计中划分模块的一个准则是追求更高的内聚度和更低的耦合度。耦合度是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接日的复杂程度、进入访问一个模块的点以及通过接口的数据。在软件设计中应该追求尽可能松散的耦合系统,在这样的系统中可以研究、测试或修改、维护任何一个模块,而不需要对系统的其他模块有很多了解或影响其他模块的实现。此外,当某处发生错误时,低耦合度系统的错误传播的范围相应小些。因此,模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。 如果两个模块中的每一个都能够独立地工作而不需要另一个模块的存在,那么他们之间就没有耦合关系;如果两个模块彼此通过参数交换数据,而交换的信息仅仅是数据,那么这种耦合称为数据耦合;如果传递的信息中也有控制信息,则这种耦合称为控制耦合。

当两个或多个模块通过公共数据环境相互作用时,它们之间的耦合称为公共耦合;如果两个模块之间有下列情况之一,则称两个模块之间的耦合关系为公共耦合。(1)一个模块访问另一个模块的内部数据;(2)一个模块没有通过正常人口而转到另一个模块内部;(3)两个模块有一部分程序代码重叠;(4)一个模块有多个入口。

数据耦合的耦合程度最低,控制耦合次之,适当分解模块可以用数据耦合代替控制耦合。公共耦合的复杂程度随耦合模块的个数和耦合模块对公共数据环境的操作而变化。内容耦合是程度最高的耦合,在程序中应该坚决避免内容耦合。

内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。简单地说,理想的内聚模块只做一件事情。

如果一个模块完成一组任务,这些任务彼此间即使有关系,也是松散的关系,就叫做偶然内聚;如果一个模块完成的任务在逻辑上属于相同或相似的操作,则称为逻辑内聚;如果一个模块包含的任务必须在同一段时间内执行,就叫做时间内聚。

如果一个模块内的处理元素是相关的。而且必须以特定次序执行,则称为过程内聚;如果模块中所有的元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。 如果一个模块内的处理元素和同一个功能密切相关,而B这些外排必须顺序执行.则称为顺序内聚;如果模块内所在处理元素属于一个整体,完成一个单一的功能,则称为功能内 聚。 内聚程度从低到高的排列是:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚。顺序内聚、功能内聚。

【答案】A:③B:④C:②D:③E:①

- 10 -

软件工程基础知识

试题4 (19xx年试题6)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

OMT是一种对象建模技术,它定义了3种模型,它们分别是 A 模型、B 模型和 C 模型。其中, A 模型描述了系统中对象的静态结构,以及对象之间的联系,B 模型描述系统中与时间和操作顺序有关的系统特征,表示瞬时的行为上的系统的“控制”特征,通常可用 D 来表示,

C 模型描述了与值的变换有关的系统特征,通常可用 E 来表示。

供选择的答案

A:①对象②功能③ER④静态

B:①控制②时序③动态④实时

C:①对象②功能③变换④计算

D:①类图②状态图③对象图④数据流图

E:①类图②状态图③对象图④数据流图

【解析】

OMT(对象建模技术)是一种围绕真实世界的概念来组织模型的软件开发方法。OMT从问题陈述开始,理解问题陈述中的客观世界,将其本质抽象成模型表示,建立系统的3种模型,即对象模型、动态模型和功能模型。

对象模型描述了系统中对象的静态结构以及对象间的联系,用对象模型图来表示。对象模型图是ER图的一种拓广形式。动态模型描述了与时间和操作次序有关的系统属性,动态模型由多张状态图组成。各个类的状态图通过共享事件组成系统的动态模型。功能模型描述系统内数据值的变化,它由数据流图组成。数据流图说明数据流是如何从外部输入、经过操作和内部存储而到外部输出的。OMT的3种模型相辅相成,组成系统的一个完整的正交视图。

OMT方法体现了面向对象的系统开发方法的基本特点,强调对系统结构的理解,而不是系统功能的分解。在OMT方法中,对象模型最重要,动态模型次之,最后是功能模型。

使用面向对象的基本思想构造的系统模型与客观系统的结构十分类似,可以使用该模型与用户通信。

在分析阶段产生系统模型后,系统设计的任务主要是细化模型。分析和设计可使用统一表示方法,省略了类似结构方法中从数据流图到模块调用层次的转换过程,而且这种模型用面向对象的程序设计语言来实现也显得十分自然。

- 11 -

软件工程基础知识

相对于传统的软件工程方模学,OMT的开发重心转移到了分析阶段,使得分析的结果比一般的软件开发方法更为可靠,减少了因分析不透彻引起的问题。OMT支持系统的无缝开发。在整个开发过程中使用统一的软件概念即对象,所有其他概念都是围绕对象组成的,在分析阶段开发的对象模型也适用于设计和实现阶段。这样,软件开发的阶段性就不那么明显了。由于各阶段是一致吻合的,很容易实现各阶段的反复,而且每一次反复都是对系统的进一步深化。

但 OMT方法还存在以下几个方面的不足:(1)对问题陈述论述得不足;(2)3种模型的一致性难以检测和维护,而且对系统约束的描述能力也不足:(3)建模过程描述得不很清晰,建模的结果即各种图形表示也不能体现建模的过程,从而增加了分析人员掌握该方法的 难度;(4)OMT方法使用的图形在分析大系统时显得条理不够清晰。

[答案]A:①B:③C:②D:②E:④

试题5(19xx年试题1)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

设计高质量的软件是软件设计追求的一个重要目标。可移植性、可维护性、可靠性、效率、可理解性和可使用性等都是评价软件质量的重要方面。

可移植性反映出把一个原先在某种硬件或软件环境下正常运行的软件移植到另一个硬件或软件环境下,使该软件也能正确地运行的难易程度。为了提高软件的可移植性,应注意 提高软件的 A 。

可维护性通常包括 B 。通常认为,软件维护工作包括改正性维护、C 维护和D 维护。其中 C 维护则是为了扩充软件的功能或提高原有软件的性能而进行的维护活动。E 是指当系统万一遇到未预料的情况时,能够按照预定的方式做合适的处理。

供选择的答案

A:①使用方便性②简洁性③可靠性④设备不依赖性

B:①可用性和可理解性②可修改性、数据独立性和数据一致性

③可测试性和稳定性④可理解性、可修改性和可测试性

C、D:①功能性②扩展性③合理性④完善性

⑤合法性③适应性

E:①可用性②正确性③稳定性④健壮性

【解析]

- 12 -

软件工程基础知识

软件的可移植性是指把程序从一种硬件配置或软件系统环境转移到另一种配置和环境时,需要的工作量的多少。提高软件可移植性的关键在于提高软件的设备无关性,即设备不依赖展性。

软件的可维护性通常包括叮理解性、可修改性和可测试性。按照每次维护的具体目标,软件维护工作可分为3类:改正性维护、完善性维护和适应性维护。

改正性维护的目的在于纠正开发期间未能发现的错误。由于软件测试的不彻底性,任何大型软件在交付使用后都会发现一些潜藏的错误,对它们进行的诊断和改正就称为改正性维 护,改正性维护约占总维护的20%。

完善性维护指的是任何软件,无论是应用软件还是系统软件,在使用期间都要不断改善,加强产品的功能和性能,以满足用户日益增长的需求,提高自己产品的市场竞争力。刚投入使用的是第1版,以后就可能不断升级为第2版、第3版等,在整个维护工作量中,完善性维护所占比重最大,约占50~60%。

适应性维护是指软件为适应运行环境的变化而进行的一种维护,如硬件或支撑软件(如操作系统升级)改变引起的变化,将软件移植到其他的运行平台上等,这类维护大约占总维量的25%。

软件的健壮性是指在硬件发生故障、输入的数据无效或操作错误等意外环境下,即系统遇到未预料的情况时,系统能够做出适当响应的程度。

[答案】A:④B:④C:④D:③E:④

试题6 (19xx年试题6)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

在设计测试用例时,A 是用得最多的一种黑盒测试方法。在黑盒测试方法中,等价类划分方法设计测试用例的步骤是:

1.根据输入条件把数目极多的输入数据划分成若干个有效等价类和若干个无效等价类;

2.设计一个测试用例,使其覆盖 B 尚未被覆盖的有效等价类,重复这一步,直至所有的有效等价类均被覆盖。

3.设计一个测试用例,使其覆盖 C 尚未被覆盖的无效等价类,重复这一步,直至所有的无效等价类均被覆盖。

因果图方法是根据 D 之间的因果关系来设计测试用例的。

- 13 -

软件工程基础知识

在实际应用中,一旦纠正了程序中的错误后,还应选择部分或全部原先已测试过的测试用例,对修改后的程序重新测试,这种测试称为 E 。

供选择的答案

A:①等价类划分②边值分析③因果图④判定表

B、C:①1个②7个左右③一半④尽可能少的

⑤尽可能多的③全部

D:①输入与输出②设计与实现③条件与结果④主程序与子程序

E:①验收测试②强度测试③系统测试④回归测试

[解析]

等价类划分是典型的黑盒测试方法,其方法是把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据当作测试用例。列举所有可能的测试数据进行测试工作量太大,通常选取一部分测试数据进行测试,因此如何选取数据就成为关键的一步。用这种方法设计测试用例需要经过划分等价类、选取测试用例两个步骤。

划分等价类时,首先把数目极多的输入分成若干个等价类。所谓等价类就是某个输入域的集合,对于一个等价共中的输入值来说,它们揭示程序中错误的作用是等效的。如果我们的测试用例全部从一个等价类中选取,测试工作将不能保证软件质量。

根据列出的等价类表,应该按照以下步骤确定测试用例:

(1)为每个等价类规定一个唯一的编号;

(2)设计一个等价类,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后 使得所有有效等价类都被测试用例所覆盖;

(3)设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步使所有无效等价 类都被覆盖。

应当注意到,(3)中规定一次只能覆盖一个无效等价类,因为一个测试用例中如果含有多个错误,有可能在测试中只发现其中的一个,另一些被忽视。

因果图法是根据输入与输出之间的因果关系来设计测试用例的,要检查输入条件的各种组合情况,在设计测试用例时,需分析规格说明中哪些是原因,哪些是结果,并指出原因和结果之间、原因和原因之间的对应关系。因果图法最终生成的是判定表;功能图方法利用功能图形式化地表示程序的功能说明,并机械地生成功能图的测试用例;回归测试是在纠正了程序中的错误后,选择部分或全部原先己测试过的测试用例,对修改后的程序重新测试,以 验证

- 14 -

软件工程基础知识

对软件修改后有没有引出新的错误;强度测试是检查在系统运行环境发生故障的情况下,系统可以运行到何种程度的测试;系统测试是将通过确认测试的软件作为整个基于计算机系统的一个元素,与计算机硬件、外设、支持软件、数据以及人员等其他系统元素结合在一起,在实际运行环境对计算机系统进行一系列的组装测试和确认测试;验收测试是在系统进行有效性测试及软件配置审查后,以用户为主进行的测试。

【答案]A:②B:⑤C:①D:①E:④

试题 7 (19xx年试题 2)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

在软件工程的设计阶段中,有3种常用的设计方法:结构化设计(SD)方法、Jackson方法和 Parnas方法。SD方法侧重于 A ;Jackson方法则是 B ;Pmas方法的主要思想 C 。从70年代中期到90年代早期,D 是最为常用的设计方法。E 法只提供了重要的设计准则,没有规定出具体的工作步骤。

供选择的答案

A~C:

①使用对象、类和继。②由数据结构导出模块结构。

③模块要相对独立,且功能单一,使块间联系弱,块内联系强。

④将可能引起变化的因素隐藏在某有关模块内部,使这些因素变化时的影响范围受到限制。 ⑤用数据流图表示系统的分解,且用数据词典和小说明分别表示数据和加工的含义。

⑥自顶向下、逐步细化,采用顺序、选择和循环3种基本结构,以及限制gotO语句的使用,设计出可靠的和易维护的软件。

D:①SD②Jackson③Parnas④面向对象

E:①SD②Jackson③Parnas④以上皆非。

【解析】

结构化设计(SD)方法、Jackson方法和 Parnas方法是软件工程设计阶段常用的设计方法。 结构化设计(SD)采用自项向下逐步求精、模块化的设计方法,单入日、单出日的控制结构,利用程序结构图表达模块之间的关系。可见结构化设计方法是以模块化设计为中心,在开始

- 15 -

软件工程基础知识

设计时就把待开发系统划分为若干个相互独立的模块,每一个模块的工作明确清晰,模块之间的耦合量低,可减少修改或重新设计时的工作量。结构化设计方法的关键是要恰到好处地划分模块,采用试探方法处理好模块内部以及模块之间的联系,从而达到逐步疏清条理的目的。所以问题A选择③。结构化设计方法是70年代中期到90年代早期最常用的设计方法,问题D选择①。

Jackson方法是一种面向数据结构的设计方法,设计目标是得出对程序处理过程的描述, 其设计过程是从描绘数据结构的Jackson图推导出描绘程序结构的Jackson图,该方法适用于比较简单的数据处理系统,所以问题B选择②。

Parnas方法强调在概要设计时应预先估计在未来生存周期中可能发生的情况,并采取相应措施来提高系统的可维护性和可靠性。信息隐藏是提高软件可维护性的重要措施,在分解模块时,就应采取措施,将一些将来可能发生变化的因素隐含在某模块内,使将来因修改造成的影响尽可能地局限在一个或少数几个模块中,这种方法只提供了重要的设计准则,而没有规定具体的工作步骤,所以问题C选择④,问题E选择③。

[答案] A:③ B:② C:④ D:① E:③

试题 8 (19xx年试题 7)

从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。

软件测试的目的是 A 。通常 B 是在代码编写阶段可进行的测试,它是整个测试工作的基础。 逻辑覆盖标准主要用于 C 。它主要包括条件覆盖、条件组合(多重条件)覆盖。判定覆盖、条件及判定覆盖、语旬覆盖和路径覆盖等几种,其中除路径覆盖外最弱的覆盖标准是 D ,最强的覆盖标准是 E 。

供选择的答案

A:①表明软件的正确性②评价软件质量

③尽可能发现软件中错误④判定软件是否合格

B:①系统测试②安装测试③验收测试④单元测试

C:①黑盒测试方法②白盒测试方法③灰盒测试方法④软件验证方法

D、E:①条件覆盖②条件组合覆盖③判定覆盖

④条件及判定覆盖⑤语句覆盖

【解析】

- 16 -

软件工程基础知识

软件测试在软件生存周期中占有重要地位,这不仅是因为测试阶段占用的时间、花费人力和成本占软件开发比重的40%以上,而且还因为它是保证软件质量的关键步骤。

由于人的主观因素或客观原因,在软件开发过程中不可避免的要产生一些错误。软件测 试的任务是在软件投入运行以前尽可能多地发现并改正软件中的错误,所以问题A应选择③。 一个软件产品在交付使用前要经历以下几种测试:

(1)模块测试。也称为单元测试,是针对每个模块单独进行的测试。模块测试一般和程序编写结合起来,在编码阶段由软件编写者进行测试,以保证每个模块作为一个单元能正确运行,所以问题B选择④。

(2)于系统测试。把已通过单元测试的模块连接成为子系统来测试,着重检验模块间的接口。

(3)系统测试。把经过测试的子系统连接成为一个完整的系统米测试,主要检查系统是 否实现说明书中指定的功能,系统的动态性能是否符合要求。

(4)验收测试。是为了确认已开发的软件能否满足标准,是否合格。与系统测试不同的是,它是在客户的积极参与下进行的。

(5)平行运行。一些十分重要的软件在经过验收之后,并不立即投入运行,而是再经过一段平行运行的测试,即新旧两个系统同时运行,比较结果有什么不同。

下面再对题目中涉及的一些概念进行解释。

黑盒测试方法又称功能测试,把程序看作一个黑盒子,在完全不考虑程序内部结构的情况下设计测试数据,主要测试程序的功能是否符合软件说明书的要求。

白盒测试方法又称结构测试,它是根据程序的内部结构设计测试数据,检查程序中的每条通路是否都能按要求正确运行。

逻辑覆盖主要用于白盒测试方法,所以问题C选择②。由于覆盖的详尽程度不同,又分为语句覆盖、判定覆盖、条件覆盖、条件组合覆盖、条件及判定覆盖和路径覆盖等。

语句覆盖:设计足够多的测试用例,使程序中的每个语句至少执行一次。语句覆盖是最弱的逻辑覆盖准则。

判定覆盖:设计足够多的测试用例,不仅每个语句至少执行一次,而且使得程序中每个判定的每个分支至少执行一次。

条件覆盖:设计足够多的测试用例.不仅每个语句至少执行一枚.而日体每个判定表达式中每个条件都取到可能的结果。

- 17 -

软件工程基础知识

条件组合覆盖:设计足够多的测试用例,使得每个判断的各种可能组合至少出现一次。 条件及判定覆盖:设计足够多的测试用例,使得判断中每个条件的每种可能至少出现一次,而

且每个判断的不同判定结果也至少出现一次。

路径覆盖:设计足够多的测试用例,要求程序中所有路径至少执行一次。

在上述几种逻辑覆盖中,除路径覆盖外,最弱的覆盖标准是语句覆盖,最强的覆盖标准是条件组合覆盖。

【答案】A:③ B:④ C:② D:⑤ E:②

试题9 (19xx年试题4)

从供选择的答案中,选出应填入下面叙述中{ }内的正确答案,把编号写在答卷的对应栏内。 软件维护工作越来越受到重视,因为它的花费常常要占软件生存周期全部花费的A%左右。其工作内容为B,为了减少维护工作的困难,可以考虑采取的措施是C。而软件的可维护性包D。所谓维护管理主要指的是E。

供选择的答案:

A:①10~20 ②20~40 ③60~80 ④90以上

B:①纠正与修改软件中含有的错误。

②因环境已发生变化,软件需作相应的变更。

③为扩充功能,提高性能而作的变更。

④包括上述各点内容。

C:①设法开发出的无错的软件

②增加维护人员数量。

③切实加强维护管理,并在开发过程中就采取有利于未来维护的措施。

④限制个性的范围。

D:①正确性、灵活性、可移植性。

- 18 -

软件工程基础知识

②可测试性、可理解性、可个性性。

③可靠性、可复用性、可用性。

④灵活性、可靠性、高效性。

E:①加强需求分析。 ②重新编码。

③判定修改的合理性并审查修改质量。 ④加强维护人员管理。

【解析】

软件的可维护性、可用性、可靠性构成了衡量软件技师的几个重要尺度。

软件维护是指已经完成发工作,对软件产品所进行的后续活动。一般来说软件维护活动贯穿了软件投入使用直到软件被淘汰的整伸过程,在这个过程中,维护工作需要解决开发阶段所遇到的各种问题和解决某些维护工作本身的特有问题。

软件维护工作包括3个方面:改正性维护、适应性维护和完善性维护。改正性维护是在软件运行中发生异常或故障时进行的,这种故障往往是由于软件开发过程中某个环节上的隐患构成的。适应性维护的目的是要使运行的软件能适应外部环境的变动,例如数据格式的变动、数据输入输出方式的变动等都会影响软件的正常工作。完善性维护则是为扩充软件的功能,提高软件的性能而开展的软件维护活动,如用户在使用了一段时间之后对提出了新的要求,这种情况下,就需要完善性维护。在整个软件维护活动中,完善性维护所占的比重最大,平均在50%左右。统计资料表明,维护阶段的花费占整个软件生存周期花费的67%,这是一个相当可观的数字。

正确的软件维护工作所应采取的措施是:切实加强维护管理,并在开发过程中就采取有利于软件未来维护的措施。软件的维护不仅是技术性的,而且还需要大量的管理工作与之配合。从原则上讲,维护工作从理解软件开始,在些基础上,如果有明确的维护任务,则针对些任务提出修改建议;在经过部门的审批之后,正确的维护建议被批准;按照修改方案进行的修改结束后,为保证修改的质量,应该进行严格的测试;经过管理部门再次审查后,教授可以对文档进行正式修改。这样,所谓维护管理主要是指判定个性的合理过性并审查修改质量。

【答案】A: ③ B: ④ C: ③ D: ② E: ③

试题10 (19xx年试题6)

从供选择的答案中,选出应填入下面叙述中{ }内的正确答案,把编号写在答卷的对应栏内。 软件测试是软件质量保证的主要手段之一,测试的费用已超过A的30%以上。因此提高测试的有效性非常重要。"高产"的测试是指B。根据国家标准GB8566-88计算机软件开发规范的规定,软件的开发和维护分为8个阶段,其中单元测试是在C阶段完成的;组装测试的计划内是在D阶段制定的;确认测试的计划是在E阶段制定的。

- 19 -

软件工程基础知识

供选择的答案

A:①软件开发费用。 ②软件维护费用。

③;软件开发和维护费用。 ④软件研制费用。

B:①用适量的测试用例,说明被测程序正确无误。

②用适量的测试用例,说明被测程序符合相应的要求。

③用少量的测试用例,发现被测程序尺可能多的错误。

④用少量的测试用例,纠正被测程序尺可能多的错误。

C~E:①可行性研究和计划。②需求分析。③概要设计。④详细设计。

⑤实现。 ⑥组装测试。⑦确认测试。⑧使用和维护。

【解析】

目前,在大中型软件开发项目中,测试都占据着重要地位,同时,测试也是在将软件交付给客户之前所必须完成的步骤。测试所花费用已超过软件开发费用的30%以上。如何组织好测试,特别是如何选择测试用例,对保障软件质量,降低测试费用有着重要的意义。

一个高效的测试,是指通过对所设计的少量测试用例进行测试,从而发现被测试程序中尺可能我的问题,并完成修改。测试按照被测试的内容可分为3种:单元测试(对程序单元或模块单独进行测试)、组装测试(把已通过单元测试的模块连接起来,测试模块间的接口及软件设计中的问题,常用功能测试办法)和确认测试(对软件技师作全面测试,以确认开发的软件是否符合验收标准)。

根据国家标准GB8566-88计算机软件开发规范的规定,软件开发和维护分为8个阶段,分别为可行性研究和计划、需求分析、概要设计、详细设计、实现、组装测试、确认测试和使用维护。GB8566-88规定单元测试在实现阶段完成;组装测试在组装测试阶段完成,但组装测试的计划应该在概要设计阶段制订,而确认测试的计划则在需求分析阶段就应该制订好。

【答案】A:① B:③ C:⑤ D:③ E:②

试题11 (19xx年试题5)

从供选择的答案中,选出应填入{ }内的正确答案,把编号写在答卷的对应栏内。

国家标准《计算机软件产品开发文件编制指南GB8567-88》中规定,在一项软件开发过程, 一般地说应该产生14种文件,其中管理人员主要使用的有A、B、C、开发进度月报、项目开发总结报告。开发人员主要使用的有A、B、D、数据要求说明书、概要设计说明书、详细设计说明书、数据库设计说明书、测试计划和E。维护人员主要使用的有设计说明书、E 和 C。

- 20 -

软件工程基础知识

A~E: ①软件需求说明书 ②项目开发计划 ③可行性研究报告

④模块开发卷宗 ⑤测试分析报告 ⑥操作手册 ⑦用户手册

【解析】

《计算机软件产品开发文件编制指击GB8567-88》是《计算机软件开发规范B8566-88》的配 套文件,由国家标准局在19xx年1月批准并发布,规范中详细规定了软件开发过程中各个阶段及每一阶段的任务、实施步骤、实施要求、完成标志及交付的文本。《计算软件产吕开发文件编制指击GB567-88》则为应交付的文本提供了编写指南,一般来说,规定在一项软件开 发过程中应该产生14种文件:

A 可行性研究报告

B 项目开发计划

C 软件需求说明书

D 数据要求说明书

E 概要设计说明书

F 详细设计说明书

G 数据库设计说明书

H 用户手册

I 操作手册

J 模块开发卷宗

K 测试计划

L 测试分析报告

M 开发进度月报

N 项目开发总结报告

其中管理人员主要使用的有项目开发计划、可行性研究报告、模块开发卷宗、开发进度月报 和项目开发总结报告;开发人员主要使用的有项目开发计划、可行性研究报告、软件需求说明书、数据要求说明书、概要设计说明书、详细设计说明书、数据库设计说明书、测试计划和测试分析报告;维护人员主要使用的有设计说明书、测试分析报告和模块开发卷宗。

- 21 -

软件工程基础知识

【答案】A:②B:③C:④D:①E:⑤

试题12 (19xx年试题6)

从供选择的答案中,选出应填入{ }内的正确答案,把编号写在答卷的对应内。

在结构测试用例设计中,有语名覆盖、条件覆盖、判定覆盖(即分枝覆盖)、路径覆盖等,其A是最强的覆盖准则。为了对图2-8所示的程序段进行覆盖测试,必须适当地选取测试数据组。若x和y是两个变量,可供选择的测试数据组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组(见表2-7),则实现判定覆盖至少应采用的测试数据组是B;实现条件覆盖至少采用的测试数据组是C,实现路径覆盖至少应采用的测试数据组是D或E。

软件工程基础知识软件设计师

软件工程基础知识软件设计师

供选择的答案

A:①语句覆盖 ②条件覆盖 ③判定覆盖 ④路径覆盖

B~E:①Ⅰ和Ⅱ组 ②Ⅱ和Ⅲ组 ③Ⅲ和Ⅳ组 ④Ⅰ和Ⅳ组⑤Ⅰ、Ⅱ和Ⅲ组 ⑥Ⅱ、Ⅲ和Ⅳ 组 ⑦Ⅰ、Ⅲ和Ⅳ组 Ⅰ、Ⅱ和Ⅳ组

- 22 -

软件工程基础知识

【解析】

测试阶段在软件生命周期中占有重要地位。一个软件产品在交付用户正式使用前主要经过3种测试:单元测试、集成测试和验收测试。测试的方法有黑盒法和白盒 黑盒方法主要用于动能测试或数据驱动测试:白盒方法主要用于结构测试或逻辑驱动测试。测试用的数据称为测试用例,正确选取测试用例对测试的最终结果有很大影响。白盒测试用例的设计方法有语句覆盖、条件覆盖、分支覆盖、路径覆盖等多种,其中语句覆盖是最弱的覆盖准则,路径覆盖则最强。

本题所给出的4组测试数据,要实现分支覆盖即判定覆盖,必须使程序中每个逻辑判断的取真分支和取假分支在行某组测试数据时至少历一次,应采用的测试数据组是第Ⅰ和第Ⅱ组数据;要实现条件覆盖,必须使程序中每个条件的可能取值至少满足一次,应采用的测试数据组是Ⅰ和 Ⅱ组数据;要实现路径覆盖,求程序中的所有路径至少经历一次,则应采用的测试数据组是第Ⅰ、Ⅱ、Ⅲ组或者第Ⅰ、Ⅱ、Ⅳ组。

【答案】A:④ B:① C:④ ⑤ E:⑧

试题13 (19xx年试题4)

从供选择的答案中,选出应填入下面关于软件设计方法叙述中{ }内的正确答案,把编号写在答卷的对应栏内。

结构化设计方法在软件开发中用于A,它是一种面向B的设计方法。该方法使用的图形工具是C,C中矩形表示D。如果两矩形之间有直线相连,表示它们存在E的关系。

供选择的答案

A:①测试用例设计 ②概要设计 ③程序设计 ④详细设计

B:①对象 ②数据结构 ③数据流 ④控制流

C:①程序结构图 ②数据流程图 ③程序流程图 ④实体联系图

D:①数据 ②加工 ③模块 ④存储

E:①链接 ②调用 ③并列 ④顺序执行

【解析】

软件设计工作分成概要设计和详细设计两步。结构化设计(Structured Design,简称SD)方法是结构化分析(SA)的后续阶段,用于软件的概要设计。SD是一种面向数据流的设计方法,从整个程序的结构出发,突出程序模块,利用程序结构图表达程序模块之间的关系,尤其适用于变化型结构和事务型结构的数据处理系统。

- 23 -

软件工程基础知识

程序结构图是采用结构化设计方法进行软件概要设计的描述手段,以图形的形式描述软件系统的模块组成及模块之间的调用关系,程序结构图可以精炼地表达模块化的设计思想,清晰地表达模块之间的联系。

构成程序结构图的主要成分有模块、调用和数据,结构图中的模块用矩形表示,在矩形框内可标上模块的名字。模块间如有箭头或直线相连,表明它们之间有调用关系。对于两个处在不同位置的模块,把上面的称为调用模块,下面的称为被调用模块。调用简头表示模块调用时模块间的数据传送,简头的方向指明了传送的方向,图中的数据也用适当的名称加以标识。

【答案】A:② B:③ C:① D:③E:②

试题14 (19xx年试题5)

从供选择的答案中,选出应填入{ }内的正确答案,把编号写在答卷的对应栏内。

按制定软件工程标准的不同层次和适用范围,软件工程标准可分为5级,A制定的是国际标准,B是行业标准。GB1256-89对程序流程图等作了明确、具体规定,这种标准程序流程图的特点有C、D和E。

供选择的答案

A、B:①IEEE,GJB ②IEEE,ANSI ③ISO,IEC

④ISO,IEEE ⑤IEC,GJB ⑥ANSI,ISO

C~E:①箭头表示数据的传递方向。

②允许自行定义多种特定的图形符号。

③对循环结构规定了一对特定的符号。

④它和ISO的有关规定有一些差别。

⑤允许有两个以上出口的判断。

⑥特定方向的流线才用箭头标明流向。

⑦不允许在图形符号外加注标识符和描述符。

【解析】

按制定软件工程标准(或规范)的不同层次和适用范围,软件工程标准可划分成国际标准、国家标准、行业标准、企业或地方规范、项目规范等5级。ISO(International Standards Organization,国际标准化组织)和IEC(International Electromechanical Commission,

- 24 -

软件工程基础知识

国际电工委员会)制定的是国际标准;IEEE是指美国电气和电子工程师学会,GJB是指中华人民共和国军用标准,后两者属于行业标准。

国家标准《GB 1256-89》是《信息处理-数据流程图:程序流程图、系统流程图、程序网络图和系统资源图的文件编符号集约定》,该标准对程序流程图作了明确具体的规定。在这种标准流程图中,对循环结构规定了一对特定的符号,即循环界限为去上角矩形表示的上界限和去下角矩形表示的下界限,分别表示循环的开始和循环的结束:判断用菱形表示,它只有一个入口,但可以有若干个可供选择的出口;控制流的流线用直线表示,流线的标准流向是从左到右和从上到下,沿标准流向的流线可以不用箭头指示流向,但对于沿非标准流向的流线方向,应该用箭头指示方向。

【答案】A:③ B:① C:③ D:⑤ E:⑥

试题15 (19xx年试题1)

从供选择的答案中选出应填入{ }的正确答案,把编号写在答卷的对应栏内。

软件质量包含多方面的内容,A、B、可移植性和可复用性等是较为重要的质量特征。在软件开发中,必须采取有力的措施,以确保软件的质量,这些措施至少应包括C、D和E 供选择答案

A、B ①稳定性 ②可靠性 ③数据一致性

④可维护性 ⑤可行性 ⑥数据独立性

C、D、E: ①在开发初期制定质量保证计划,并在开发中坚持实行。

②开发工作严格按阶段进行,文档工作应在开发完成后集中进行。

③严格执行阶段评审。

④要求用户参与全部开发过程,以监督开发质量。

⑤开发前选定或制定开发标准或开发规范,亲遵照实施。

⑥争取足够的开发经费和开发人力的支持。

【解析】

软件质量涉及多方面的内容,其中较为重要的质量特性有软件的可靠性、可维护性、可移植性和可复用性等。这些特性可为软件的安全使用、进一步扩充、修改、复制和移植打下良好的基础。稳定性、数据一致性、可行性和数据独立等都不是与软件质量直接相关的概念。

- 25 -

软件工程基础知识

在软件开发中,应采取有力的措施确保软件的质量。有些措施在实践证中已证明是行之有效的。如在开发初期制定质量保证计划,并在开发中坚持实行;严格执行阶段评审,以便及时发现问题;开发前选定或制定开发标准或开发规范,并遵照实施;软件生存期的各阶段都有完整的文档等。

【答案】A:② B:④ C:① D:③ E:⑤

试题16 (19xx年试题13)

从供选择的答案中选出应填入{ }的正确答案,把编号写在答卷的对应栏内。

Jackson结构化程序设计方法是英国M.Jackson提出的,它是一种面向A的设计方法,主要适用于规模适中的B系统的开发,其基本步骤依次是C、D、E。

供选择的答案

A:①对象 ②数据流 ③数据结构 ④控制结构

B:①数据处理 ②文字处理 ③实时控制 ④科学计算

C、D、E:①建立数据结构 ②列出基本操作 ③建立程序结构

④建立控制结构 ⑤建立对象

【解析】

Jackson方法由英国的M.Jackson提出,Jackson方法的基本思想同软件设计听SD方法是一致的,但它不是面向数据流,而是面向数据结构的。应用该方法的基本步骤依次是:建立系统的数据结构;以数据结构为基础,对应地建立程序结构;列出程序中要用到的各种基本操作,再将这些操作分配程序结构适当的模块中。

Jackson方法的设计原则是将程序结构和数据结构相对应,该方法特别适用于设计企事业信息管理一类的规模适中的数据处理系统。这些系统处理的数据大多具有层次结构,如文件由记录组成,记录又由数据项组成,所以可以以数据结构为基础,相应地建立模块的层次结构,如处理文件的模块调用处理记录的模块,处理记录的模块又调用处理数据项的模块。

【答案】A:③ B:① C:① D:③ E:②

试题17 (19xx年试题5)

从供选择的答案中选出应填入{ }内的正确答案,把编号写在答卷的对应栏内。

A在实验阶段进行,它所依据的模块功能描述和内部细节以及测试方案应在B阶段完成,目的是发现编程错误。

- 26 -

软件工程基础知识

C所依据的模块说明书和测试方案应在D阶段完成,它能发现设计错误。

E应在模拟的环境中进行强度测试的基础上进行,测试计划应在软件需求分析阶段完成。 供选择的答案

A:①用户界面测试 ②输入/输出测试 ③集成测试 ④单元测试

B:①需求分析 ②概要设计 ③详细设计 ④结构设计

C:①集成测试 ②可靠性测试 ③系统性能测试 ④强度测试

D:①编程 ②概要设计 ③维护 ④详细设计

E:①过程测试 ②函数测试 ③确认测试 ④逻辑路径测试

【解析】

一个软件在交付使用前,主要经历3种测试:单元测试、集成测试和验收测试。

单元测试也称为模块测试,是针对各个程序单元或模块单独进行的测试,通常称之为"分调"。单元测试在实验阶段进行,一般和程序编写结合起来,由程序员分工进行,并且多模块可以并行展开,单元测试着重发现和解决程序编写中的差错,比较重视对程序结构的检验,单元测试是整个测试阶段的基础。

集成测试把自己通过单元测试的模块连接起来,通常使用功能测试法,着重检验模块间的接口以及设计中的问题。集成测试所依据的模块说明书和测试方案应在概要设计阶段完成。集成测试的目的是发现设计错误。

确认测试也称验收测试,其目的是为了确认已开发的软件能否满足验收标准。确认测试是对软件质量的全面考核,验收测试以前应制定验收标准和验收测试工作。确认测试应在模拟的环境中在强度测试的基础上进行,测试计划应在软件需求分析阶段完成。

【答案】A:④ B:③ C:① D:② E:③

试题18 (19xx年试题1)

从供选择的答案中选出应填入下列叙述中的{ }内的正确答案,把编号写在答卷的对应栏内。

软件测试的目的是A。为了提高测试的效率,应该B。使用白盒测试方法时,确定测试数据应根据C和指定的覆盖标准。一般说来与设计测试数据无关的文档是D。软件的集成测试工作最好由E承担,以提高集成测试的效果。

- 27 -

软件工程基础知识

供选择的答案

A:①评价软件的质量 ②发现软件的错误

③找出软件中的所有错误 ④证明软件是正确的

B:①随机地选取测试数据 ②取一切可能的输入数据作为测试数据

③在完成编码以后制定软件的测试计划 ④选择发现错误的可能性大的数据作为测试数据 C:①程序的内部逻辑 ②程序的复杂程度

③使用说明书 ④程序的功能

D:①需求规格说明书 ②设计说明书

③源程序 ④项目开发计划

E:①该软件的设计人员 ②该软件开发组的负责人

③该软件的编程人员 ④不属于该软件开发组的软件设计人员

【解析】

软件测试的工作量约占软件开发期的一半,是软件开发过程的一个重要阶段,直接影响软件的质量,软件测试的目的是为了发现软件的错误,提高测试效率,因此应该选择容易发现错误的数量作为测试数据。

测试数据的方法有两种:黑盒方法和白盒方法。黑盒方法将程序看作不能打开的黑盒,根据程序的功能或程序的外部特性测试数据。白盒测试方法是设计测试用例的一类方法,使用白盒测试方法,允许测试者检查程序的内部结构,以程序的内部逻辑为依据,设计测试数据和指定覆盖标准,因此白盒测试方法又称为逻辑覆盖方法。

一般来说,与设计测试数据有关的文档是需求规格说明书、设计说明书和源程序等文档,与项目开发计划无关。软件集成测试工作最好由不属于该软件开发组的设计人员承担。这样可以使参加测试的人员避免认为自己开发的程序总是正确这种"先入为主"的意识和"当局者迷"的现象,能够用更加客观的态度投入软件集成测试工作,提高测试的效果。

【答案】A:② B:④ C:① D:④ E:④

试题19 (19xx年试题5)

从供选择的答案中选出应填入下列叙述中{ }内的正确答案,把编号写在答卷的对应栏内。 软件设计中划分程序模块通常遵循的原则是要使各模块间的耦合性尽可能A。3种可能的模块耦合是:

B.例如,一个模块直接引用另一模块中的数据。

- 28 -

软件工程基础知识

C.例如,一个模块把开关量作为参数传送给另一模块。

D.例如,一个模块把一个数值量做为参数传送给另一模块。其中E的耦合性最强。 供选择的答案

A:①强 ②适中 ③弱

B~E:①公共耦合 ②数据耦合 ③逻辑耦合

④外部耦合 ⑤内容耦合 ⑥控制耦合

【解析】

模块间的联系是评价程序结构质量的重要标准,模块间的互相关联程度由模块的耦合性衡量。耦合性越弱,模块间的联系越小,每个模块越容易独立地被理解、编写和修改;同时某个模块的错误不容易扩散蔓到其他模块,因此,在软件设计中,使各个模块的耦合尽可能弱将成为划分程序模块的原则。

模块按照其耦合性由强到弱可以分成以下5种:

(1)内容耦合 内容耦合指一个模块直接引用另一模块的内部信息;

(2)公共耦合 公共耦合指两个模块引用人同的全局数据区;

(3)控制耦合 控制耦合指一个模块传送给另一模块的参数是用于控制模块内部逻辑的控制信号;

(4)复合耦合 复合耦合指一个模块传送给另一模块的参数是一个复合的数据结构;

(5)数据耦合 数据耦合指一个模块传送给另一模块的参数是单个的数据项。

上述的5种耦合中内容的耦合性最强。

【答案】A:③ B:⑤ C:⑥ D:② E:⑤

试题20 (19xx年试题1)

从供选择的答案中选出应填入下列叙述中{ }内的正确答案,把编号写在答卷的对应栏内。 软件可移植性是用来衡量软件的A的重要尺度之一。为了提高软件的可移植性,应注意提高软件的B。采用C有助于提高B。为了提高可移植性,还应D。使用E语言开发的系统软件具有较好的可移植性。

供选择的答案

- 29 -

软件工程基础知识

A:①通用性 ②效率 ③质量 ④人-机界面

B:①使用的方便性 ②简洁性 ③可靠性 ④设备独立性

C:①优化算法 ②专用设备 ③表格驱动方式 ④树型文件目录

D:①有完备的文档资料 ②选择好的宿主计算机

③减少输入/输出次数 ④选择好的操作系统

E:①Coblo ②APL ③C ④PL/1

【解析】

可移植性是衡量软件质量高低的一个重要尺度之一。可移植性是指把原先在某硬件或软件环境下正常运行的软件,移植以另一个硬件或软件环境下,使该软件也能正确运行的难易程度。

设备独立性是指软件对设备的访问不随设备特性的变化而变化,所以,提高软件的设备独立性是提高软件可移植性的重要手段。为提高软件的可移植性,在设计和编写程序时,应注意使程序代码不要随意地与具体环境直接关联,并且不要直接使用硬件环境中的设备,使程序代码尽可能与环境无关,否则,设备变了,程序也要做大量的改动。

对一类常规或有一定通用功能的设备来说,它们都有一套反映其特性的参数。对软件来说 设备之间的差异就是它们的参数不同。为使程序能使用不同参数的设备,可采用表格驱动。表格驱动是指程序内部保留有一张记录着设备特性参数的参数表,这样,软件移植或环境有所改变时,只需修改参数表中若干参数,在程序不作任何修改的情况下,软件便可在新的环境下正确使用。表格驱动方式使程序独立于设备,促进了程序可移植性的实现。

完备的文档资料有助于软件移植的顺利进行。软件移植时,对原来的软件有所修改是难免的,理解原来软件的设计思想和程序采用的算法都依赖于软件的文档资料。

与其创建高级语言相比,C语言开发的软件具有良好的可移植性,计算机系统大多数都配置有C语言编译程序和提供C语言的标准库函数。统计资料表明,不同系统上的C语言编译程序80%的代码是公共的。

【答案】A:③ B:④ C:③ D:① E:③

试题21 (19xx年试题5)

从供选择的答案中选出应填入下列叙述中的{ }内的正确答案,把编号写在答卷的对应栏内。 模块内聚度用于衡量模块内部各成分之间彼此结合的紧密程度。

- 30 -

软件工程基础知识

1.一组语句在程序的多处出现,为了节省内存空间把这些语句放在一个模块中,该模块的内聚度是A的。偶然性

2.将几个逻辑上相似的成分放在一个模块中,该模块的内聚度是B的。 ⑦逻辑性

3.模块中所有成分引用共同的数据,该模块的内聚度是C的。通信性 通信性

4.模块内的某成分的输出是另一些成分的输入,该模块的内聚度是D的。顺序性

5.模块中所有成分结合起来完成一项任务,该模块的内聚度是E的。它具有简明外部界面,由它构成的软件易于理解、测试和维护。功能性

供选择的答案

A~E:①功能性 ②顺序性 ③通信性 ④过程性 ⑤偶然性 ⑥瞬时性 ⑦逻辑性。

【解析】

模块内聚度用于衡量模块内部各成分之间彼此结合的紧密程度。在软件设计过程中,设计者在划分程序模块之时,应力求模块的内聚度尽可能强。按模块内聚性分,模块内聚度由弱到强的顺序是:偶然性、逻辑性、瞬时性、过程性、通信性、顺序性和功能性。

一个模块内部的各组语句这宰没有必然的联系,则这个模块是偶然性内聚的;几个逻辑上相似的成分放在一个模块中,这种模块是逻辑内聚的;一些经常需要一起执行的程序段放在一起构成的模块称作瞬时性内聚的;因各成分要引用共同的数据,而把它们组成一个模块,这种模块称作是通信性内聚的;如模块中的一个成分的输出是另一些成分的输入,称这种模块是顺序性内聚的;如模块中的所有成分都是为了完成一项共同的任务,这种模块称作简明的外部界面,其可理解性、可测试性和维护性都比较好,所以功能内聚模块是设计人员应该追求的目标。

【答案】A:⑤ B:⑦ C:③ D:② E:①

- 31 -

相关推荐