1、系统分析师-软件工程师 1及答案解析(总分:36.00,做题时间:90 分钟)一、单项选择题(总题数:25,分数:36.00)逆向工程过程的抽象层次是指可从源代码中抽取出来的设计信息的精密程度。抽象层次分为四层,其中“最低层”抽象能够导出过程的设计表示文档,“低层”抽象能够导出程序和数据结构信息,“中层”抽象能够导出 (1) ,“高层”抽象能够导出 (2) 。(分数:2.00)A.实体关系模型B.程序和文档结构信息C.全部文档信息D.数据流和控制流模型A.实体关系模型B.模块结构图C.完全的数据流图D.全部文档信息1.系统开发过程通常被分为若干个阶段,每个阶段的开始和结束都有明确的规定。人们常
2、将开发过程中完成某项关键工作的时刻称为里程碑。完成 (3) 时最适于称为里程碑。(分数:1.00)A.需求调查B.总体设计稿C.一套实体关系图D.50%的编码在业务领域分析过程中,通过建立实体关系图,把与业务相关的数据模型化;通过建立 (4) 来表示业务活动的分解过程;两个业务过程之间的相互依赖关系应记录在过程依赖图中;通过建立 (5) 来详细说明整个业务过程的逻辑。(分数:2.00)A.数据流图(DFD)B.过程层次图(PHD)C.过程活动图(PAD)D.过程关系图(PRD)A.数据流图(DFD)B.过程层次图(PHD)C.过程活动图(PAD)D.甘特图(Cantte)在各种不同的软件需求中
3、, (6) 描述了用户使用产品必须要完成的任务,可以在用例模型中予以说明。软件需求说明书是需求分析阶段的成果, (7) 不是其应包含的内容。(分数:2.00)A.业务需求B.非功能需求C.用户需求D.功能需求A.数据描述B.功能描述C.系统结构描述D.性能描述软件测试是为了发现错误而执行程序的过程。检验软件是否满足用户需求的测试称为 (8) 。 (9) 是维护中常用的方法,其目的是检验修改所引起的副作用。黑盒测试法主要根据 (10) 来设计测试用例。(分数:3.00)A.确认测试B.有效性测试C.系统测试D.集成测试A.回归测试B.模块测试C.功能测试D.结构测试A.程序数据结构B.程序流程图
4、C.程序内部逻辑D.程序外部功能对软件开发的看法可有多种观点,敏捷软件开发方法是一种 (11) ,代表性是极限编程 XP,它的核心思想为 (12) 。(分数:2.00)A.数学观B.建模观C.工程观D.协作游戏A.强调文档和以敏捷性应对变化B.强调建模和以敏捷性应对变化C.强调设计和以敏捷性应对变化D.强调人和人之间的合作的因素和以敏捷性应对变化2.逆向工程可用于维护已有的软件,逆向工程能够 (13) 。(分数:1.00)A.分析源程序,决定需要修改的部分及其影响的程度B.能够使用数学方法证明各软件功能的正确性C.分析源程序,从源程序导出程序结构D.将源程序改写成易于理解的、结构清晰的程序3.
5、在 CORBA体系结构中, (14) 属于客户端接口。(分数:1.00)A.静态 IDL SkeletonsB.POAC.静态 IDL StubsD.动态 Skeletons4.软件开发工具 VB、PB、Delphi 是可视化的。这些工具是一种 (15) 程序语言。(分数:1.00)A.事件驱动B.逻辑式C.函数式D.命令式5.若要重构一个功能上和性能上更为完善的改进的软件,可以使用 (16) 。(分数:1.00)A.逆向工程工具B.程序切片工具C.程序理解工具D.再工程工具下列要素中,不属于 DFD的是 (17) 。当使用 DFD对一个工资系统进行建模时, (18) 可以被认定为外部实体。(
6、分数:2.00)A.加工B.数据流C.数据存储D.联系A.接收工资单的银行B.工资系统源代码程序C.工资单D.工资数据库的维护软件的维护并不只是修正错误。为了满足用户提出的增加新功能、修改现有功能及一般性的改进要求和建议,需要进行 (19) ,它是软件维护工作的主要部分;软件测试不可能揭露旧系统中所有潜在的错误,所以这些程序在使用过程中还可能发生错误,诊断和更正这些错误的过程称为 (20) ;为了改进软件未来的可维护性或可靠性,或者为了给未来的改进提供更好的基础而对软件进行修改,这类活动称为 (21) 。(分数:3.00)A.完善性维护B.适应性维护C.预防性维护D.改正性维护A.完善性维护B
7、.适应性维护C.预防性维护D.改正性维护A.完善性维护B.适应性维护C.预防性维护D.改正性维护6.新项目与过去成功开发过的一个项目类似,但规模更大,这时应该使用 (22) 进行项目开发设计。(分数:1.00)A.原型法B.变换模型C.瀑布模型D.螺旋模型根据 McCabe环路复杂性度量,程序图 6-2的复杂度是 (23) ,对这个程序进行路径覆盖测试,可得到的基本路径是 (24) 。(分数:2.00)A.2B.3C.4D.5A.A-B-C-H-I-K;A-B-C-H-J-K;A-B-C-D-E-F-GB.A-B-C-H-I-K;A-B-C-H-J-K;A-B-C-D-E-F-G-C-H-I-
8、K;A-B-C-D-E-G-C-H-I-KC.A-B-C-H-I-K;A-B-C-H-J-K:A-B-C-D-E-F-G-C-H-I-K;A-B-D-E-G-C-H-J-KD.A-B-C-H-I-K;A-B-C-H-J-K;A-B-C-D-E-F-G-C-H-I-K;A-B-C-D-E-F-G-C-H-J-K:A-B-C-D-E-G-C-H-I-K7.下列关于软件需求管理与需求开发的论述,正确的是 (25) 。(分数:1.00)A.所谓需求管理是指对需求开发的管理B.需求管理包括需求获取、需求分析、需求定义和需求验证C.需求开发是将用户需求转化为应用系统成果的过程D.在需求管理中,要求维持对原
9、有需求和所有产品构件需求的双向跟踪8.为了使构件系统更切合实际、更有效地被复用,构件应当具备 (26) ,以提高其通用性。(分数:1.00)A.可继承性B.可变性C.可封装性D.可伸缩性9.在关于逆向工程的描述中,正确的是 (27) 。(分数:1.00)A.从已经安装的软件中提取设计规范,用以进行软件开发B.按照“输出一处理一输入”的顺序设计软件C.用硬件来实现软件的功能D.根据软件处理的对象来选择开发语言和开发工具10.在选择开发方法时,不适合使用原型法的情况是 (28) 。(分数:1.00)A.用户需求模糊不清B.系统设计方案难以确定C.系统使用范围变化很大D.用户的数据资源缺乏组织和管理
10、11.集成测试有各种方法,以下关于集成测试的描述中,不正确的是 (29) 。(分数:1.00)A.增量式集成测试容易定位错误,排除错误B.非增量式集成测试不能充分利用人力,会拖延工程进度C.增量式集成测试的强度大,测试更彻底D.即使各个模块都通过了测试,系统集成以后仍可能出现错误12.有两种需求定义的方法严格定义和原型定义,在关于这两种方法的描述中,不正确的是 (30) 。(分数:1.00)A.严格定义方法假定所有的需求都可以预先定义B.严格定义方法假定软件开发人员与用户之间的沟通存在障碍C.原型定义方法认为需求分析中不可避免地要出现很多反复D.原型定义方法强调用户在软件开发过程中的参与和决策
11、13.软件的分层式体系结构把软件系统划分为 4层,这 4层结构自顶向下分别是 (31) 。(分数:1.00)A.B.C.D.企业信息系统往往是一个具有业务复杂性和技术复杂性的大系统,针对其建设,系统分析首先要进行的工作是 (32) 。系统开发的目的是 (33) 。(分数:2.00)A.获得当前系统的物理模型B.抽象出当前系统的逻辑模型C.建立目标系统的逻辑模型D.建立目标系统的物理模型A.获得当前系统的物理模型B.抽象出当前系统的逻辑模型C.建立目标系统的逻辑模型D.建立目标系统的物理模型14.基于构件的开发(CBD)模型,融合了 (34) 模型的许多特征。该模型本质是演化的,采用迭代方法开发
12、软件。(分数:1.00)A.瀑布B.快速应用开发(RAD)C.螺旋D.形式化方法15.结构模板能够帮助分析员建立一个逐层细化的层次结构。结构环境图(ArchitectureContext Diagram,ACD)则位于层次结构的顶层。在从 ACD导出的 (35) 中给出了各个专门子系统和重要(数据与控制)信息流。(分数:1.00)A.系统语境图(SCD)B.结构互连图(AID)C.结构流程图(AFD)D.结构图的规格说明(ADS)16.需求分析的任务是借助于当前系统的物理模型导出目标系统的逻辑模型,解决目标系统“做什么”的问题。 (36) 并不是需求分析的实现步骤之一。(分数:1.00)A.获
13、得当前系统的物理模型B.抽象出当前系统的逻辑模型C.建立目标系统的逻辑模型D.确定目标实现的具体技术路线系统分析师-软件工程师 1答案解析(总分:36.00,做题时间:90 分钟)一、单项选择题(总题数:25,分数:36.00)逆向工程过程的抽象层次是指可从源代码中抽取出来的设计信息的精密程度。抽象层次分为四层,其中“最低层”抽象能够导出过程的设计表示文档,“低层”抽象能够导出程序和数据结构信息,“中层”抽象能够导出 (1) ,“高层”抽象能够导出 (2) 。(分数:2.00)A.实体关系模型B.程序和文档结构信息C.全部文档信息D.数据流和控制流模型 解析:A.实体关系模型 B.模块结构图C
14、.完全的数据流图D.全部文档信息解析:分析 逆向工程(Reverse Engineering,反向工程)的概念来自硬件。硬件厂商总想弄到竞争对手产品的设计和制造的“奥秘”,但是又得不到现成的档案,只好拆卸对手的产品并进行分析,导出该产品的一个或多个设计与制造的规格说明。软件的逆向工程是完全类似的,由于受到法律的约束,进行逆向工程的程序常常不是竞争对手的,而是自己开发的程序,有些是多年以前开发出来的。这些程序没有规格说明,对它们的了解很模糊。因此,软件的逆向工程是分析程序,力图在比源代码更高的抽象层次上建立程序表示的过程。逆向工程是一个设计恢复的过程,其工具可以从已有的程序中抽取数据结构、体系结
15、构和程序设计信息。再工程(Re-engineering)不仅能从已有的程序中重新获得设计信息,而且还能使用这些信息改建或重构现有的系统,以改进它的综合质量。一般软件人员利用再工程重新实现已存在的程序,同时加进新的功能或改善它的性能。每一个软件开发机构都会有上百万行的老代码,它们都是逆向工程和再工程的可能对象。但是由于某些程序并不频繁使用而且不需要改变,逆向工程和再工程的工具还处于摇篮时代,仅能对有限种类的应用程序执行逆向工程和再工程,代价又十分昂贵,因此对其库中的每一个程序都进行逆向工程和再工程是不现实的。软件再工程旨在对现存的大量软件系统进行挖掘、整理以得到有用的软件构件,或对已有软件构件进
16、行维护以延长其生存期。它是一个工程过程,能够将逆向工程、重构和正向工程组合起来,将现存系统重新构造为新的形式。再工程的基础是系统理解,包括对运行系统、源代码、设计、分析和文档等的全面理解,但在很多情况下,由于各类文档的丢失,只能对源代码进行理解,即程序理解。为了执行预防性维护,软件开发组织必须选择在最近的将来可能变更的程序,做好变更它们的准备,逆向工程和再工程可用于执行这种维护任务。逆向工程可以从源程序抽取出设计信息,但是,抽象的层次、文档的完整性、工具和分析员一起工作的程度,以及过程的方向性却是高度可变的。逆向工程过程及用于实现该过程的工具的抽象层次是指可从源代码中抽取出来的设计信息的精密程
17、度。理想地,抽象层次应该尽可能高,即逆向工程过程应该能够导出过程的设计表示(一种低层的抽象);程序和数据结构信息(稍高一点层次的抽象);数据和控制流模型(一种相对高层的抽象);以及实体一关系模型(一种高层抽象)。随着抽象层次增高,软件工程师将获得更有助于理解程序的信息。逆向工程过程的完整性是指在某抽象层次提供的细节程度。在大多数情况下,随着抽象层次增高,完整性将降低。例如,给定源代码列表,得到一个完整的过程设计表示是相对容易的,简单的数据流表示也可被导出,但是,要得到数据流图或状态图的完整集合却困难得多。1.系统开发过程通常被分为若干个阶段,每个阶段的开始和结束都有明确的规定。人们常将开发过程
18、中完成某项关键工作的时刻称为里程碑。完成 (3) 时最适于称为里程碑。(分数:1.00)A.需求调查B.总体设计稿 C.一套实体关系图D.50%的编码解析:分析 里程碑是软件生存周期中各开发阶段末尾的特定点。由正式的技术评审而得到的软件配置项和软件配置的正式文本才能成为里程碑。里程碑的作用是把各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检验和肯定阶段成果。软件开发进程中可以设置许多里程碑,里程碑为管理人员提供了指示项目进度的可靠依据。当一个软件工程任务成功地通过了评审并产生了文档之后,一个里程碑就完成了。因此,一般来说,文档编制与评审是软件开发进度的里程碑。在业务领域分析
19、过程中,通过建立实体关系图,把与业务相关的数据模型化;通过建立 (4) 来表示业务活动的分解过程;两个业务过程之间的相互依赖关系应记录在过程依赖图中;通过建立 (5) 来详细说明整个业务过程的逻辑。(分数:2.00)A.数据流图(DFD)B.过程层次图(PHD) C.过程活动图(PAD)D.过程关系图(PRD)解析:A.数据流图(DFD)B.过程层次图(PHD)C.过程活动图(PAD) D.甘特图(Cantte)解析:分析 在业务领域分析过程中,通过建立实体关系图,把与业务相关的数据模型化;通过建立过程层次图来表示业务活动的分解过程;两个业务过程之问的相互依赖关系应记录在过程依赖图中;通过建立
20、过程活动图来详细说明整个业务过程的逻辑。在各种不同的软件需求中, (6) 描述了用户使用产品必须要完成的任务,可以在用例模型中予以说明。软件需求说明书是需求分析阶段的成果, (7) 不是其应包含的内容。(分数:2.00)A.业务需求B.非功能需求C.用户需求 D.功能需求解析:A.数据描述B.功能描述C.系统结构描述 D.性能描述解析:分析 开发软件系统最为困难的部分就是准确说明开发什么。最为困难的概念性工作便是编写出详细的技术需求,这包括所有面向用户、面向机器和其他软件系统的接口。同时,这也是一旦出错,将最终会给系统带来极大困难的部分,并且以后再对它进行修改也极为困难。软件需求可以分为几个层
21、次,分别如下:(1)业务需求(business requirement)。反映组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。(2)用户需求(user requirement)。描述用户使用产品必须完成的任务,在用例文档或方案场景(scenario)说明中予以说明。(3)功能需求(functional requirement)。定义开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足业务需求。(4)非功能需求(none-functional requirement)。描述系统展现给用户的行为和执行的操作等。包括产品必须遵循的标准、规范和合约;外部界面的
22、具体细节;性能要求;设计或实现的约束条件;质量属性。软件需求说明书(SRS)是需求分析阶段的成果,不仅是系统测试和用户文档的基础,也是所有子系列项目规划、设计和编码的基础。它应该尽可能完整地描述系统预期的外部行为和用户可视化行为。除了设计和实现上的限制,软件需求规格说明不应该包括设计、构造、测试或工程管理的细节。可以使用以下三种方法编写软件需求规格说明。(1)用好的结构化和自然语言编写文本型文档。(2)建立图形化模型,这些模型可以描绘转换过程、系统状态和它们之间的变化、数据关系、逻辑流或对象类和它们的关系。(3)编写形式化规格说明,这可以通过使用数学上精确的形式化逻辑语言来定义。由于形式化规格
23、说明具有很强的严密性和精确度,因此,所使用的形式化语言只有极少数软件开发人员才熟悉,更不用说客户了。虽然结构化的自然语言具有许多缺点,但在大多数软件工程中,它仍是编写需求文档最现实的方法。包含了功能和非功能需求的基于文本的软件需求规格说明已经为大多数项目所接受。图形化分析模型通过提供另一种需求视图,增强了软件需求规格说明。软件测试是为了发现错误而执行程序的过程。检验软件是否满足用户需求的测试称为 (8) 。 (9) 是维护中常用的方法,其目的是检验修改所引起的副作用。黑盒测试法主要根据 (10) 来设计测试用例。(分数:3.00)A.确认测试 B.有效性测试C.系统测试D.集成测试解析:A.回
24、归测试 B.模块测试C.功能测试D.结构测试解析:A.程序数据结构B.程序流程图C.程序内部逻辑D.程序外部功能 解析:分析 软件测试是软件质量保证的主要手段之一,也是在将软件交付给客户之前所必须完成的步骤。软件测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。从测试阶段划分,可分为单元测试、集成测试、确认测试。(1)单元测试。也称模块测试,通常可放在编程阶段,由程序员对自己编写的模块进行测试,检查模块是否实现了详细设计说明书中规定的功能和算法。单元测试主要发现编程和详细设计中产生的错误,单元测试计划应该在详细设计阶段制定。单元测试期间着重从以下几个
25、方面对模块进行测试:模块接口;局部数据结构;重要的执行通路;出错处理通路;边界条件等。(2)集成测试。也称组装测试,它是对由各模块组装而成的程序进行测试,主要目标是发现模块间的接口和通信问题。集成测试主要发现设计阶段产生的错误,集成测试计划应该在概要设计阶段制定。集成的方式可分为非渐增式和渐增式,渐增式集成又可分为自顶向下集成和自底向上集成。(3)确认测试。主要依据软件需求说明书检查软件的功能、性能及其他特征是否与用户的需求一致。确认测试计划应该在需求分析阶段制定。软件配置复查是确认测试的另一项重要内容。复查的目的是保证软件配置的所有成分都已齐全,质量符合要求,文档与程序完全一致,具有完成软件
26、维护所必需的细节。如果一个软件是为某个客户定制的,最后还要由该客户来实施验收测试,以便确认其所有需求是否都己得到满足。由于软件系统的复杂性,在实际工作中,验收测试可能会持续到用户实际使用该软件之后的相当长的一段时间。如果一个软件是作为产品被许多客户使用的,不可能也没必要由每个客户进行验收测试。绝大多数软件开发商都使用被称为 测试和 测试的过程,来发现那些看起来只有最终用户才能发现的错误。 测试由用户在开发者的场所进行,并且在开发者的指导下进行测试。开发者负责记录发现的错误和使用中遇到的问题。也就是说, 测试是在“受控的”环境中进行的。 测试是在一个或多个用户的现场由该软件的最终用户实施的,开发
27、者通常不在现场,用户负责记录发现的错误和使用中遇到的问题并把这些问题报告给开发者。经过确认测试之后的软件通常就可以交付使用了。从测试方法划分,可分为白盒测试、黑盒测试。(1)白盒测试。又称结构测试,主要用于单元测试阶段。它的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部逻辑设计测试用例,检测程序中的主要执行通路是否都能按预定要求正确工作。白盒测试常用的技术是逻辑覆盖,即考察用测试数据运行被测程序时对程序逻辑的覆盖程度。主要的覆盖标准有 6种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径覆盖。(2)黑盒测试。又称功能测试,
28、主要用于集成测试和确认测试阶段。它把软件看做一个不透明的黑盒子,完全不考虑(或不了解)软件的内部结构和处理算法,它只检查软件功能是否能按照软件需求说明书的要求正常使用,软件是否能适当地接收输入数据并产生正确的输出信息,软件运行过程中能否保持外部信息(例如文件和数据库)的完整性等。常用的黑盒测试技术包括等价类划分、边值分析、错误推测和因果图等。实际应用中,在纠正了程序中的错误后,还应选择部分或全部原先已测试过的测试用例,对修改后的程序重新测试,这种测试称为回归测试。对软件开发的看法可有多种观点,敏捷软件开发方法是一种 (11) ,代表性是极限编程 XP,它的核心思想为 (12) 。(分数:2.0
29、0)A.数学观B.建模观C.工程观D.协作游戏 解析:A.强调文档和以敏捷性应对变化B.强调建模和以敏捷性应对变化C.强调设计和以敏捷性应对变化D.强调人和人之间的合作的因素和以敏捷性应对变化 解析:分析 在我们面临“软件危机”所带来的挑战之时,曾经通过采用严格的规范、详尽的文档来约束开发过程,以保证开发的质量与效果,获得了突出的成就。但是随着时代的进一步发展,商业周期越来越短,变化越来越快,甚至在软件开发的过程中,商业逻辑和需求已经悄然变化,这给本来还不成熟的软件产业带来了新的挑战。就在这种情况下,敏捷方法论应运而生。2001年这些方法论的创始人走到一起,成立了敏捷联盟,发表了颇具影响力的敏
30、捷宣言:个体和交互胜过过程和工具,可工作的软件胜过面面俱到的文档,客户合作胜过合同谈判,响应变化胜过遵循计划。比较有影响力的敏捷方法论包括 XP(极限编程)、PDD(特征驱动开发)、Crystal Method(水晶方法)、DSDM(动态系统开发方法)、ASD(自适应软件开发)、SCRUM、轻量型 RUP等。XP的思想源自 Kent Beck和 Ward Cunningham在软件项目中的合作经历。因为知道计划永远赶不上变化,XP无须开发人员在软件开始初期做出很多的文档。为了将以后出现 bug的几率降到最低,XP 提倡测试先行。XP 的核心是其总结的沟通、简单、反馈、勇气四大价值观。它包括 1
31、2种最佳实践,分别是计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作 40小时、现场客户及编码标准。SCRUM是一种迭代的增量化过程,用于产品开发或工作管理。它是一种可以集合各种开发实践的经验化过程框架。SCRUM 中发布产品的重要性高于一切。 该方法由 KenSchwaber和 Jeff Sutherland提出,旨在寻求充分发挥面向对象和构件技术的开发方法,是对迭代式面向对象方法的改进。Crystal Methods由 Alistair Cockburn在 20世纪 90年代末提出。之所以是个系列,是因为他相信不同类型的项目需要不同的方法。虽
32、然水晶系列不如 XP的产出效率高,但会有更多的人能够接受并遵循它。FDD由 Peter Coad、Jeff de Luca、Eric Lefebvre 共同开发,是一套针对中小型软件开发项目的开发模式。此外,FDD 是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。ASD由 Jim Highsmith在 1999年正式提出。ASD 强调开发方法的适应性,这一思想来源于复杂系统的混沌理论。ASD 不像其他方法那样有很多具体的实践做法,它更侧重为 ASD的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。DSDM是
33、众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。实践证明 DSDM是成功的敏捷开发方法之一。在英国,由于其在各种规模的软件组织中的成功,它己成为应用最为广泛的快速应用开发方法。DSDM 不但遵循了敏捷方法的原理,而且也适合那些成熟的传统开发方法有坚实基础的软件组织。RUP其实是个过程的框架,它可以包容许多不同类型的过程,Craig Larman 极力主张以敏捷型方式来使用RUP。他的观点是:目前如此众多的努力以推进敏捷型方法,只不过是在接受能被视为 RUP的主流 OO开发方法而已。2.逆向工程可用于维护已有的软件,逆向工程能够 (13) 。(分数:1.00)A.分析源程
34、序,决定需要修改的部分及其影响的程度B.能够使用数学方法证明各软件功能的正确性C.分析源程序,从源程序导出程序结构 D.将源程序改写成易于理解的、结构清晰的程序解析:分析 请参考试题 1的分析。3.在 CORBA体系结构中, (14) 属于客户端接口。(分数:1.00)A.静态 IDL SkeletonsB.POAC.静态 IDL Stubs D.动态 Skeletons解析:分析 在 CORBA体系结构中,ORB(Object Request Broker,对象请求代理)负责处理底层网络细节,它可以运行在各种不同的底层网络协议上,例如 TCP/IP、IPX 和 SS7等。在此基础上,ORB
35、实现了一系列的功能,例如对象定位、编组与解组、初始化服务和接口库等。它为客户端和服务器端提供标准API,使得客户不用考虑底层网络细节,通过对象引用来实现对远程对象的请求调用。IDL(Interface Definition Language,接口定义语言)定义了客户机和服务器之间的静态接口,通过它实现对象接口与对象实现的分离,屏蔽语言和系统软件带来的异构件。通过标准的 IDL编泽器,可生成客户机端的 IDL存根(Stubs)和服务器端的骨架(Skeletons),这两者就如同客户机端程序和服务器端程序连接ORB的黏合剂,IDL 存根提供了访问对象服务的静态接口,而骨架则包含了服务对象的静态接口
36、,并负责实现与对象实现中具体方法的连接。IDL存根被称为静态调用接口,由 IDL编译器编译目标对象的 IDL接口描述文件而自动产生,客户程序与它直接相连。IDL 存根的作用相当于本地调用,由存根向 ORB透明地提供一个接口,以实现对操作参数的编码和解释。IDL 存根把请求从特定的编程语言的表示形式转换为适于传递到目标对象的形式进行通信传输。存根为客户提供了一种机制,使得客户能够不关心 ORB的存在,而把请求交给存根,由存根负责对请求参数的封装和发送,以及对返回结果的接收和解封装。静态 IDL骨架是静态 IDL存根在服务器端的对应,在清求的接收端提供与存根类似的服务。当 ORB接收到请求时,由骨
37、架将请求参数解封装,识别客户所请求的服务,(向上)调用服务器中的对象实现;服务器完成了对请求的处理后,骨架把执行结果进行封装,并将结果返回给客户程序。由于存根和骨架都是从用户的接口定义编译而来,所以它们都和具体的接口有关,并且,在请求发生前,存根和骨架早已分别被直接连接到客户程序和对象实现中去。为此,通过存根和骨架的调用统称为静态调用。IDL 存根和 IDL骨架之间没有必须配对的限制。动态骨架接口(Dynamic Skeleton Interface,DSI)允许动态调用对象,对象实现需要实现动态调用例程的接口。DSI 是 DII(IDL动态调用接口)在服务器方的对应。与 DII允许客户不通过
38、存根就可以调用请求类似,DSI 允许用户在没有静态骨架信息的条件下来获得对象实现。DSI 从进入的消息找出调用的目标对象及相应的方法,并提供运行时的连接机制。POA(Potcable Object Adapter,可携带对象适配器)是一个引导客户端的请求到具体的对象应用的机制。POA提供了标准的 API去登记对象应用,或激活对象应用。POA 是灵活的 CORBA编程模型模块,并且提供了大量的规则来配置它的行为。4.软件开发工具 VB、PB、Delphi 是可视化的。这些工具是一种 (15) 程序语言。(分数:1.00)A.事件驱动 B.逻辑式C.函数式D.命令式解析:分析 程序设计语言用来编写
39、计算机程序(指计算任务的处理对象和处理规则的描述),它包括语法、语义、语用三个方面。语法表示程序的结构或形式,即表示构成语言的各记号间的组合规则,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。语用表示程序与使用者的关系。程序设计语言的基本成分有数据、运算、控制和传输。数据成分用以描述程序中所涉及的数据;运算成分用以描述程序中所包含的运算;控制成分用以表达程序中的控制构造;传输成分用以表达程序中数据的传输。可以从不同的角度对程序设计语言进行分类,从程序设计语言的本质来看,可以分为 3类:机器语言、汇编语言和高级语言。
40、机器语言是特定计算机系统所固有的语言,用机器语言编写的程序可读性很差,程序员难以修改和维护。汇编语言用助记符号来表示机器指令中的操作码和操作数,汇编语言是一种和机器语言十分接近的语言,它的书写格式在很大程度上取决于特定计算机的机器指令。目前已有许多流行的高级语言,如 Fortran、Cobol、Pascal、C/C+、Java 等。这类语言与人们的自然语言比较接近,大大提高了程序设计的效率,便于进行交流。Fortran 是第一个被广泛用于科学计算的高级语言。Algol 60 是早期研制出来的高级语言,它有严格的文法规则,用巴科斯范式 BNF来描述语言,是一个分程序结构的语言。Cobol 是一种
41、面向事务处理的高级语言。Pascal 语言提供的为数不多而又相当紧凑的机制使其有相当强的表达能力。C 是一种通用程序设计语言,作为一种较低级的语言,C 提供了指针和地址操作的功能,以及书写结构良好的程序所需的控制结构。C 与 UNIX操作系统紧密相关,UNIX 操作系统及其上的许多软件都是用 C编写的。(1)过程性语言。过程性语言就是指传统的程序设计语言。在使用传统的程序设计语言时,程序员不仅要说明信息结构,而且要描述程序的控制流程,因此它被称为过程性语言。过程性语言是相对于新型程序设计语言(函数式、逻辑式、面向对象)和第四代语言(4GL)而言的,其特点是通过使用赋值语句改变变量的状态来完成各
42、种任务。(2)面向对象语言。simula 是最早提出类的概念的语言,完备地体现面向对象并提出继承概念的程序设计语言是 Smalltalk 80。C+和 Java是目前用得最多的面向对象的语言。(3)逻辑型语言。逻辑型语言是一类以形式逻辑为基础的语言,其理论基础是一阶谓词演算。Prolog 是典型的逻辑式语言,具有和传统的命令型程序设计完全不同的风格。组成 Prolog程序语句的基本形式是Horn子句,Prolog 程序由围绕某一主题的事实、规则和询问 3类语句组成,这 3类语句分别用来陈述事实、定义规则和提出问题。Prolog 具有很强的推理功能,适用于书写自动定理证明、专家系统、自然语言理解
43、等人工智能问题的程序。归约方法是逻辑式语言的主要方法之一。它是把一簇命题转换成标准的子句集形式,采用匹配和合一的算法,消除冗余,以获得新命题正确性的证明或命题集一致性的验证。(4)函数型语言。函数型语言是一类以 演算为基础的语言。Lisp 是典型的函数型程序语言。函数是一种对应规则(映射),它使其定义域中每一个值和值域中唯一的值相对应。函数型程序设计语言的优点在于它是一种面向值的语言,无状态,无副作用,具有引用透明性,函数值只取决于变元值,具有同一组变元的函数,其值唯一。对表达式中出现的任何函数都可以用其他函数来代替,只要这些函数调用产生相同的值。这些特点有助于程序模块化的实现。函数型程序设计
44、语言和逻辑型程序设计语言都属于申述型语言。(5)可视化开发工具。目前,比较热门的软件开发工具都是可视化的,例如 Visual Basic、Visual C+、Delphi、PowerBuilder 和 JBuilder等。这些工具都是一种事件驱动程序语言,编程时,必须在程序内设计各种事件的处理程序代码。当事件发生时,随即驱动执行相应的程序段。这些开发工具都提供了良好的控件工具,可供用户很方便地建立用户界面,大大提高了稗序设计的效率。人工智能又称机器智能,是研究如何用计算机来实现人类智能的一门学科。它包括自然语言理解、感知与认知、定理自动证明、模式识别、计算机视觉、知识工程与专家系统等。人工智能
45、主要是用计算机来模拟人的思维,包括知识的表示、存储、传输、处理、推断、联想等。其中,知识的表示与推理是核心内容。而一般的计算机语言不适于知识的表示与推理。因此科学家们推出了与一般算法语言有较大差异的、有强大的知识处理能力的计算机语言(如 Lisp、Prolog 和 OPS等),人们把这类语言称为人工智能语言。人工智能语言按知识表示和处理方式的不同分成逻辑式与函数式两大类。Lisp 语言是函数式的,Prolog 语言是逻辑式的,此外还有混合型的。5.若要重构一个功能上和性能上更为完善的改进的软件,可以使用 (16) 。(分数:1.00)A.逆向工程工具B.程序切片工具C.程序理解工具D.再工程工
46、具 解析:分析 请参考试题 1的分析。下列要素中,不属于 DFD的是 (17) 。当使用 DFD对一个工资系统进行建模时, (18) 可以被认定为外部实体。(分数:2.00)A.加工B.数据流C.数据存储D.联系 解析:A.接收工资单的银行 B.工资系统源代码程序C.工资单D.工资数据库的维护解析:分析 在数据流图中,可能出现 4种基本符号,分别是数据流、加工、数据存储和外部实体(数据源及数据终点)。数据流是具有名字和流向的数据,在数据流图中用标有名字的箭头表示;加工是对数据流的变换,一般用圆圈表示;数据存储是可访问的存储信息,一般用直线段表示;外部实体是位于被建模的系统之外的信息生产者或消费
47、者,是不能由计算机处理的成分,它们分别表明数据处理过程的数据来源及数据去向,用标有名字的方框表示。为了表达数据处理过程的数据加工情况,用一个数据流图是不够的。稍微复杂一些的实际问题,在数据流图上常常出现十几个甚至几十个加工,这样的数据流图看起来很不清楚。层次结构的数据流图能很好地解决这一问题。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,有助于清楚地表达和理解整个系统。软件的维护并不只是修正错误。为了满足用户提出的增加新功能、修改现有功能及一般性的改进要求和建议,需要进行 (19) ,它是软件维护工作的主要部分;软件测试不可能揭露旧系统中所有潜在的错误,所以这些程序在使用
48、过程中还可能发生错误,诊断和更正这些错误的过程称为 (20) ;为了改进软件未来的可维护性或可靠性,或者为了给未来的改进提供更好的基础而对软件进行修改,这类活动称为 (21) 。(分数:3.00)A.完善性维护 B.适应性维护C.预防性维护D.改正性维护解析:A.完善性维护B.适应性维护C.预防性维护D.改正性维护 解析:A.完善性维护B.适应性维护C.预防性维护 D.改正性维护解析:分析 软件经过测试,交付给用户后,在使用和运行过程中可能在软件运行/维护阶段对软件产品进行的修改就是所谓的维护。软件维护占整个软件生命周期的 60%80%,维护的类型主要有 4种。(1)改正性维护。为了识别和纠正
49、软件错误,改正软件性能上的缺陷,排除实施中的错误使用,应当进行的诊断和改正错误的过程就叫做改正性维护。(2)适应性维护。在使用过程中,外部环境(新的软硬件配置)、数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。为使软件适应这种变化而去修改软件的过程就叫做适应性维护。(3)完善性维护。在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能,增强软件性能,改进加工效率,提高软件的可维护性。这种情况下进行的维护活动叫做完善性维护。(4)预防性维护。这是为了提高软件的可维护性、可靠性等特性,为以后进一步改进软件打下良好基础。通常,预防性维护定义为:“把今天的方法学用于昨天的系统,以满足明天的需要”。也就是说,采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编制和测试。以上 4类维护的工作量如图 6-1所示。影响维护工作量的因素主要有系统大小、程序设计语言、系统年龄、数据库技术的应用、先进的软件开发技术五个方面。程序修改的步骤为分析和理解程序、修改程序和重新验证程序。经过分析,全面、准确、迅速地理解程序是决定维护成败和质量好坏的关键。为了容易地理解程序,要