软件工程习题答案2024最新版

发布于:2024-05-04 ⋅ 阅读:(57) ⋅ 点赞:(0)

习题一答案

一、选择题

  1. 软件的主要特性是(A B C)。

A) **无形 **B) 高成本

C) **包括程序和文档 ** D) 可独立构成计算机系统

  1. 软件工程三要素是(B)。

A) 技术、方法和工具 B) 方法工具过程

C) 方法、对象和类 D) 过程、模型、方法

  1. 包含风险分析的软件工程模型是(A)。

A)** 螺旋模型** B) 瀑布模型 C) 增量模型 D) 喷泉模型

  1. 软件工程的主要目标是(C)。

A) 软件需求 B) 软件设计 C) 风险分析 D) 软件实现

  1. 下列属于面向对象开发方法的是(A B C D)。

A) Booch B) UML C) Coad D) OMT

  1. 软件危机的主要表现是(B D)。

A) 软件成本太高 B) 软件产品的质量低劣

C) 软件开发人员明显不足 D) 软件生产率低下

  1. 软件开发方法的主要工作模型有(A B C)

A) 螺旋模型 B) 循环模型 C) 瀑布模型 D) 专家模型

  1. 软件工程的目标有(A B C)。

A) 易于维护 B) 低的开发成本

C) 高性能 D) 短的开发期

  1. 软件工程学的目的和意义是(A D)。

A)** 应用科学的方法和工程化的规范管理来指导软件开发**

B) 克服软件危机

C) 作好软件开发的培训工作

D) 以较低的成本开发出高质量的软件

二、 判断题

  1. 软件就是程序,编写软件就是编写程序。(×)

  2. 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。(×)

  3. 结构化方法的工作模型是使用螺旋模型进行开发。(×)

  4. 结构化方法和OO方法都是一种面向过程的软件开发方法。(×)

  5. 原型化开发方法包括生成原型和实现原型两个步骤。(×)

  6. 面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √)

  7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。(×)

  8. 软件工具的作用是为了延长软件产品的寿命。(×)

  9. 软件工程过程应该以软件设计为中心,关键是编写程序。(×)

  10. RCP法与RSP法的主要区别是前者采用循环渐进的开发方式,原型将成为最终的产品,而后者原型将被废弃。(√)

三、简答题

  1. 软件产品的特性是什么?

答:● 软件是一种逻辑产品,具有无形性;

● 软件产品的生产主要是研制;主要是脑力劳动;

● 软件不存在磨损和老化问题,但存在退化问题;

● 软件产品的成本非常昂贵,其开发方式目前尚未完全摆脱手工生产方式;

● 软件具有**“复杂性”**,其开发和运行常受到计算机系统的限制。

  1. 软件发展有几个阶段?各有何特征?

答:①** 程序设计阶段。**

硬件特征:价格贵、存储容量小、运行可靠性差。

软件特征:只有程序、程序设计概念,不重视程序设计方法。

程序系统阶段

硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长。

软件特征:程序员数量猛增,开发人员素质低。

软件工程阶段

硬件特征:向超高速、大容量、微型化及网络化方向发展。

软件特征:开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。

  1. 什么是软件危机?其产生的原因是什么?

答:“软件危机”(Software Crisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力、财力,而在开发过程中就夭折。软件危机主要表现在两个方面:

(1**) 软件产品质量低劣**,甚至开发过程就夭折。

(2**) 软件生产率低**,不能满足需要。

  1. 什么是软件过程?有哪些主要的软件过程模型?它们各有哪些特点

答:软件过程是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。软件过程模型是对软件开发实际过程的抽象和简化,是描述软件开发过程中各种活动如何执行的模型,因此又称为软件开发模型。

主要的软件过程模型有:瀑布模型、增量模型、螺旋模型、喷泉模型和基于知识的模型等。

⑴瀑布模型是经典的软件开发模型,将软件开发活动中的各项活动规定为依线性顺序连接的若干阶段,它简单易用,在消除非结构化软件、降低软件的复杂性、促进软件开发工程化方面起了很大的作用。但在软件开发实践中也逐渐暴露出它的缺点。它将一个充满回溯的软件开发过程硬性分割为几个阶段,无法解决软件需求不明确或者变动的问题。

⑵增量模型是一种非整体开发的模型。根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。

⑶螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:制定计划、风险分析、实施工程、客户评估。

⑷喷泉模型用于采用对象技术的软件开发项目。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。软件开发过程有4个阶段,即分析、系统设计、软件设计和实现。各阶段相互重叠,以分析为基础,资源消耗成塔形,从高层返回低层无资源消耗。强调增量开发,是对象驱动的过程,反映了对象的开发和重用过程。

⑸基于知识的模型也称为智能模型。通过领域的专家系统,可使需求说明更加完整、准确和无二义性。通过软件工程知识和特定应用领域的知识和规则的应用来提供开发的帮助。

  1. 有哪些主要的软件开发方法?

答:主要的软件开发方法有:结构化开发方法、原型化开发方法和面向对象的开发方法。

  1. 软件生存周期各阶段的主要任务是什么?

答:软件生存周期按瀑布模型分为6个阶段:

● 可行性研究与计划(确定系统的目标和规模,分析项目的可行性);

● 需求分析与规格说明(明确系统的规格和要求);

● 设计(包括概要设计和详细设计,将系统分解为模块);

● 编程(用程序语言实现每个模块,简单容易);

● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级);

● 运行维护(扩充功能、纠错等)。

  1. 原型化方法的核心是什么?它具有哪些特点?

答:原型化方法的核心是,花费少量代价建立一个可运行的系统,使用户及早获得学习的机会。强调软件开发人员与用户的不断交互,通过原型的演进不断适应用户任务改变的需求。它是一个循环的模型。速成原型法按以下步骤循环执行:

① 快速分析。② 构造原型。③ 运行和评价原型。④ 修改与改进。

8.面向对象的开发方法为什么逐渐成为软件开发的主流方法?

答:传统开发方法存在软件重用性差、可维护性差、应对需求的灵活性差等问题,应用结构化方法开发的软件,其稳定性、可修改性和可重用性都不是很好;面向对象的开发方法有效克服了传统方法的不足,采用与人类习惯相一致的思维方法,在提高软件系统的稳定性、可修改性、可重用性、可维护性、以及应对需求的灵活性等方面具有明显优势。

9.什么是软件开发环境?它对软件开发过程有何意义?

软件开发环境是指在计算机的基本软件基础上,为了支持软件的开发而提供的一组工具软件系统,它是为了支持软件开发过程而构建的基础设施,旨在提供开发人员所需的资源和工具,以便高效地开发、测试和交付软件

10.敏捷软件开发的核心思想是什么?以XP方法为例进行说明。

答:敏捷开发的核心思想是迭代式开发、自组织团队。将整个项目分解为数个短期的迭代周期,快速相应需求进行增量开发;由团队自身寻找最佳的工作方式来完成工作。XP(Extreme Programming,极限编程络)是一种广泛应用的敏捷开发方法,强调团队成员之间的紧密合作和高度自组织,以求高质量的软件交付。

11.软件开发工具的集成可以分成哪几个层次?

一个集成化的CASE开发环境通常需要完成以下三个层次集成:
(1)平台的集成。平台是指CASE工具运行所处的计算机硬件和操作系统环境。
(2)界面的集成。界面集成是指集成化的CASE环境中的各种软件开发工具都采用统一的用户交互界面和方式,以达到减少用户学习和使用这些工具的难度和复杂度的目的。
(3)数据的集成。为了实现不同的CASE 工具之间的数据交换与共享,数据的集成是集成化的CASE开发环境需要解决的一个核心问题。

12.集成化的CASE环境相对于彼此独立的软件开发工具有哪些明显的优势?

答:集成化的CASE环境具有如下优势:(1)软件开发过程中的所有信息都采用统一的存储格式,集中统一存储在共享的中心数据库中,使得在软件工具之间、开发人员之间、开发活动的各个过程之间可以方便而高效地进行数据的共享和交换。(2)集成化的CASE环境由于采用了统一的用户界面,为软件开发人员提供了更为方便的使用平台,并且改善了开发人员之间的协调能力。(3)集成化CASE环境的使用,可以贯穿软件开发的各个阶段,包括分析、设计、编码、测试、维护和配置,这使得软件开发活动和相关的开发信息可以流畅地由一个开发阶段过渡到下一个开发阶段。(4)集成化的CASE环境也具有更好的可移植性,使其可以适用于不同的硬件平台和操作系统。

习题二答案

一、 选择题

  1. 需求分析的主要目的是(B C)。

A) 系统开发的具体方案

B)** 进一步确定用户的需求**

C) 解决系统是“做什么”的问题

D) 解决系统是“如何做”的问题

  1. 需求分析的主要方法有(C D)。

A) 形式化分析方法 B) PAD图描述

C)** 结构化分析(SA)方法** D) OOA法

  1. 面向对象的分析方法主要是建立三类模型,即(D)。

A) 系统模型、E-R模型、应用模型

B) 对象模型、动态模型、应用模型

C) E-R模型、对象模型、功能模型

D) 对象模型动态模型功能模型

  1. SA法的主要描述手段有(B)。

A)系统流程图和模块图

B) DFD图、数据词典、加工说明

C) 软件结构图、加工说明

D) 功能结构图、加工说明

  1. 画分层DFD图的基本原则有(A C D)。

A)** 数据守恒原则**

B) 分解的可靠性原则

C) 子、父图平衡的原则

D)** 数据流封闭的原则**

  1. 在E-R模型中,包含的基本成分是(C)。

A) 数据、对象、实体

B) 控制、联系、对象

C) 实体、联系、属性

D) 实体、属性、联系

  1. 用例驱动的需求方法的主要优点是(A D)。

A) 作为需求分析阶段用户与开发者之间交流信息的工具

B) 对系统的数据结构进行描述

C) 对目标系统的层次结构进行描述

D) 作为分析和设计的工具

  1. 数据字典是数据流图中所有元素的定义的集合,一般由 (C) 四类条目组成。

A) 数据说明条目、控制流条目、加工条目、数据存储条目

B)数据流条目、数据项条目、文件条目、加工条目

C) 数据源条目、数据流条目、数据处理条目、数据文件条目

D) 数据流条目、数据文件条目、数据池条目、加工条目

  1. 在需求分析阶段主要采用图形工具来描述的原因是(B C)。

A) 图形的信息量大,便于描述规模大的软件系统

B)** 图形工具能够极好地概括描述一个系统的信息,比文字叙述能够更好地表达重要的细节**

C**) 图形能够更加直观地描述目标系统,便于用户理解和交流,有利于开发者与用户之间达成一致的需求**

D) 图形比文字描述简单、形象

二、 判断题

  1. SA法是面向数据流,建立在数据封闭原则上的需求分析方法。 (√)

  2. 需求管理主要是对需求变化的管理,即如何有效控制和适应需求的变化。 (√)

  3. 在面向对象的需求分析方法中,建立动态模型是最主要的任务。 (×)

4 加工小说明是对系统流程图中的加工进行说明。 (×)

  1. 判定表的优点是容易转换为计算机实现,缺点是不能够描述组合条件。 (×)

6 需求分析的主要方法有SD法、OOA法及HIPO法等。 (×)

  1. 分层的DFD(数据流图)图可以用于可行性分析阶段,描述系统的物理结构。 (×)

  2. 信息建模方法是从数据的角度来建立信息模型的,最常用的描述信息模型的方法是E-R图。

(√)

9用于需求分析的软件工具,应该能够保证需求的正确性,即验证需求的一致性、完整性、现实性和有效性。 (√)

10.面向对象的分析是用面向对象的方法对目标系统的问题空间进行理解、分析和反映。通过对象层次结构的组织确定解空间中应存在的对象和对象层次结构。 (√)

11.面向对象的分析过程主要包括3项内容:理解、表达和验证。 (√)

12.面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程。 (√)

三、 简答题

  1. 需求工程包括哪些基本活动?各项基本活动的主要任务是什么?

答:需求工程过程包括如下主要活动:

⑴ 获取需求。深入实际,在充分理解用户需求的基础上,获取足够多的问题领域的知识,积极与用户交流,捕捉、分析和修订用户对目标系统的需求,并提炼出符合解决领域问题的用户需求。需求获取的方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等。

⑵ 需求分析与建模。对已获取的需求进行分析和提炼,进行抽象描述,建立目标系统的概念模型,需求概念模型的要求包括实现的独立性:不模拟数据的表示和内部组织等;需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。进一步对所建立的模型(原型)进行分析。需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。

⑶ 需求规格说明。对需求模型进行精确的、形式化的描述,为计算机系统的实现提供基础。

⑷ 确认需求。以需求规格说明为基础输入,通过符号执行、模拟或快速原型等方法,分析和验证需求规格说明的正确性和可行性,确保需求说明准确、完整地表达系统的主要特性,就是对需求规格说明与用户达成一致。其主要任务是冲突求解,包括定义冲突和冲突求解两方面。常用的冲突求解方法有:协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。

⑸ 需求管理。在整个需求工程过程中,贯穿了需求管理活动。需求管理主要包括跟踪和管理需求变化,支持系统的需求演进。由于客户的需要总是不断(连续)增长的,但一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件管理的首要问题。对于传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。当前的发展是软件家族法,即产品线方法。多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性,并进行关于变化的推理。进化需求是十分必要的。

2.简述抽取需求的主要方法,并比较它们的特点。

⑴面谈法。这是一种重要而直接简单,随时可使用的发现和获取需求的方法。面谈的对象主要有用户和领域专家:与用户面谈主要了解和提取需求,与领域专家面谈,是一个对领域知识的学习和转换过程。使用该方法时应注意面谈前要充分准备,面谈后认真分析总结,同时注意掌握面谈的人际交流技巧,才能取得好的效果。

⑵问卷法调查法。通过采用向用户发问卷调查表的方式,达到彻底弄清项目需求的一种需求获取方法。这是一种从多个用户处收集需求信息的有效方式,是对面谈法的补充。

⑶会议讨论法。所谓会议讨论法,是指开发方和用户方召开若干次需求讨论会议,达到彻底弄清项目需求的一种需求获取方法。这种方法适合于开发方不清楚项目需求的情况。

⑷原型法。对于某些试验性、探索性的项目,更是难于得到一个准确、无二义性的需求。而原型化方法(Prototyping Method)是获取这一类项目需求的有效方法。

⑸面向用例的方法。分析建立“用例”的过程,也就是提取需求的过程。

在实际应用中,常常将以上方法进行综合应用。

3.为什么要对所完成的需求进行确认?需求确认的主要内容是什么?

确保需求的准确性和完整性:需求确认的一个主要目的是确保收集到的需求反映了用户的真实意图和需要。这有助于减少开发过程中的误解和错误。

避免未来的成本和时间消耗:如果需求在早期阶段没有得到正确的确认,那么在开发过程中可能需要进行重大更改,这将消耗更多的时间和资源。

促进利益相关者之间的沟通:需求确认过程涉及与客户和用户的交流,有助于确保所有人都对项目的方向和目标有共同的理解。

确保软件满足业务目标:通过确认需求,可以确保开发的软件产品能够满足业务目标和用户期望。

需求确认的主要内容包括:

需求的审核:评估需求文档的完整性和准确性,确保所有必要的信息都已包含并准确无误。

需求的验证:确保需求与业务目标和用户期望相符合。

优先级和分类:根据重要性和紧急性对需求进行优先级排序,并将其分类(如功能需求、性能需求等)。

变更控制:确定如何处理需求变更请求,包括评估变更的影响和必要的调整步骤。

利益相关者的批准:确保所有主要利益相关者都对需求文档表示同意。

  1. 客户的需要总是不断地增长,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化就成为软件进化的首要问题。请说明需求变更的管理过程。

答:需求变更的管理是需求管理的核心内容。其主要任务是对系统需求变更进行跟踪和控制。对传统的变化管理过程来说,其基本内容包括软件配置、软件基线和变更审查等。目前推出的新的管理方法有软件家族法,即软件产品线方法及多视点方法等。下图描述了需求变更的管理过程。

  1. M公司的软件产品以实验型的新软件为主。用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。若你作为一名管理人员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由。切记:副总裁不喜欢报告长度超过一页。

尊敬的副总裁,

作为新加入的管理人员,我认真分析了我们公司当前采用的瀑布模型在软件开发中的应用。瀑布模型,作为一种经典的软件开发方法,在很多方面取得了成功。然而,它在面对实验型软件开发时展现出一些局限性,特别是在适应快速变化的需求和技术面前。以下是我对于为何快速原型法更适合我们公司软件开发的分析:

适应性强:实验型软件开发往往伴随不断变化的需求和快速的技术进步。快速原型法允许我们更灵活地适应这些变化,因为它强调的是迭代和持续的客户反馈。

更快的市场响应:通过快速原型法,我们可以更迅速地开发出初步产品并投放市场,这对于保持行业竞争力至关重要。

增强客户满意度:快速原型法通过不断的原型演示和客户反馈,有助于确保最终产品更贴近用户实际需求。

风险降低:此方法通过早期原型展示和测试,有助于在开发过程早期识别并修正问题,从而降低项目失败的风险。

促进团队协作:快速原型法鼓励跨功能团队的协作,有利于知识和技能的共享,提高团队整体效能。

总之,鉴于我们公司的软件产品特点和市场需求的快速变化,我坚信快速原型法能够提供更高的灵活性、效率和客户满意度。采纳这一方法不仅能够加强我们在市场中的竞争力,还能提高我们对新技术和新需求的响应能力。

感谢您的时间和考虑。

此致

  1. 如何画分层数据流图?有哪些基本原则?

答:总的原则是:至顶而下,逐层分解(画分层数据流图)。逐层分解的画法可以控制每一层的复杂度。

顶层:将整个系统作为一个加工,描述系统边界(输入与输出)。

中间层:将某个加工分解为一组子加工,其中的子加工还需进一步分解。

底层:由不再进行分解的基本加工组成。

画分层数据流图的基本原则有:① 数据守恒与数据封闭原则。② 加工分解的原则。③ 子图与父图“平衡”的原则。④ 合理使用文件的原则。

  1. 加工小说明有哪些描述方法?它们各有何优缺点?为什么不采用自然语言进行描述?

答:主要的描述方法有三种;结构化语言、判定表和判定树。

● 结构化语言:介于自然语言和形式语言(如谓词逻辑)之间的的一种半形式语言,它是自然语言的一个受限制的子集。是在自然语言的基础上加上一些约束,一般分为两层结构:外层语法较具体,为控制结构(顺序、选择、循环);内层较灵活,表达“做什么”。

常用结构化英语或结构化汉语表示,精确、简明扼要、文体灵活。结构化语言特点:简单,易学,少二义性,但不好处理组合条件。

● 判定表:适用于表述比较复杂的加工逻辑,如具有多项选择条件的操作。判定表是一种二维的表格,常用于较复杂的组合条件。通常由四部分组成,如教材表2-2所示。对用结构化语言不易处理的较复杂的组合条件问题,可使用判定表。

● 判定树:本质上与判定表相同,图形表示更易于理解。描述一般组合条件较清晰,但不易输入计算机。

  1. 考察下图中子图、父图的平衡关系。

图1

图2

参考答案:

⑴ 显然,图1中子图与父图不平衡。

⑵ 图2中,如果有如下数据条目:

订货单=客户+账号+数量

则子、父图平衡。

9.为什么面向对象方法能够有效地解决软件需求中存在的问题?

需求过程中存在两大难题,一是需求的确定是困难的,二是需求是不断变动的。尤其是对于一些大型软件系统,开发周期长,系统规模大,复杂性高。

面向对象的方法中,由于对象所具有的封装性和信息隐蔽,使得对象的内部实现与外界隔离,具有较强的独立性。而且面向对象的方法是以对象为中心构造软件系统,而不是基于对系统功能进行分解来构造系统,当系统功能需求改变时不会引起系统结构的变化,使软件系统具有良好的稳定性和可适应性。

软件生存期各阶段所使用的方法、技术具有高度的连续性,对软件开发过程所有阶段进行综合考虑,能有效地降低软件开发的复杂度,提高软件质量,也便于需求的确定。

10.面向对象的分析包括哪些主要活动?简述00A的分析过程。

获取用户基本需求。通常使用用例(user case)来收集和描述。

标识类和对象,包括标识类及对象的属性和操作

定义类的结构和层次

建立类或对象之间的关系,描述系统的静态结构

建立对象-行为模型,描述系统的动态行为

下面是OOA的基本分析过程:

定义问题域:

识别对象和类:

定义对象间的关系:

建立对象的层次结构:

识别对象的属性和方法:

建模和文档化:

验证和审查:

准备过渡到面向对象设计(OOD):

11.试分析“学生选课系统”的功能需求和非功能需求。

在分析“学生选课系统”的功能需求和非功能需求时,我们需要考虑系统的主要目的和用户的期望。以下是对这两类需求的一般分析:

功能需求

功能需求描述了系统应该执行的具体任务和功能。

用户账户管理:

学生注册和登录。

教师和管理员账户管理。

课程信息管理:

显示课程列表,包括课程名称、描述、教师、时间安排、学分等信息。

教师能够添加、修改或删除课程信息。

选课功能:

学生能够浏览、筛选、注册和退选课程。

系统应处理课程容量限制、时间冲突和先修课要求。

成绩管理:

教师能够上传成绩。

学生能查看自己的课程成绩。

课表生成:

自动生成学生的课表,显示所选课程的时间和地点。

通知和提醒:

向学生发送选课开始、结束提醒和成绩发布通知。

报告和统计:

生成选课统计和成绩分析报告。

非功能需求

非功能需求描述了系统如何运行,以及它的一些约束条件。

性能要求:

系统应能够快速响应用户请求,尤其在选课高峰期。

系统应能支持多用户同时在线操作。

可用性:

界面友好,易于学习和使用。

提供必要的帮助文档和用户支持。

安全性:

用户数据加密存储。

实现对敏感操作的身份验证和权限控制。

可靠性和稳定性:

系统应具备高可靠性,减少故障时间。

应有数据备份和恢复机制。

可扩展性和可维护性:

系统架构应支持未来的升级和扩展。

系统应便于维护和更新。

兼容性:

应兼容主流浏览器和不同操作系统。

考虑移动设备的访问适配性。

法规遵从性:

符合数据保护和隐私法规。

遵循教育行业相关标准和规范。

12 画出银行取款过程的用例图。问题描述为:储户用存折取款,首先填写取款单,根据“ 银行卡”中的信息检验取款单与存折,如有问题,将问题反馈给储户,否则,登录“储户存款数据库”,修改相应数据,并更新“银行卡”,同时发出付款通知,出纳向储户付款。

参考答案:

分析所给出的需求,确定角色为:储户、存款数据库、存折、出纳。用例为:填写取款单、验证取款单与存折、银行卡管理、数据库管理、付款。

习题三答案

** 一、 选择题**

  1. 模块基本特征是(A C)。

A) 外部特征(输入/输出、功能) B) 内部特征(输入/输出、功能)

C) **内部特征(局部数据、代码) ** D) 外部特征(局部数据、代码 )

  1. SD方法的设计总则是(C D)。

A) 程序简洁、操作方便 B) 结构清晰、合理

C) 模块内聚性强 D) 模块之间耦合度低

  1. 软件设计的主要任务是(A B D)。

A)** 将分析阶段获得的需求说明转换为计算机中可实现的系统**;

B) 完成系统的数据结构和程序结构设计

C) 完成模块的编码和测试

D)** 对模块内部的过程进行设计**

  1. 设计阶段应达到的目标有(A D)。

A) 提高可靠性和可维护性 B) 提高应用范围

C) 结构清晰 D) 提高可理解性和效率

  1. 从工程管理的角度来看,软件设计分(D)两步完成。

A) 系统分析、模块设计 B) 详细设计、总体设计

C) 模块设计、详细设计 D)** 总体设计、详细设计**

  1. 模块独立性准则定性指标(B D)来衡量。

A) 分解度 B)** 耦合度 ** C) 屏蔽性 D) 内聚性

  1. 用户界面设计的任务包括(A B C)。

A) **确定用户界面类型 ** B) 建立任务模型

C) 建立用户模型 D) 建立功能模型

二、判断题

  1. 划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。 (×)

  2. 在网状结构中任何两个模块都是平等的,没有从属关系,所以在软件开发过程中常常被使用。(×)

  3. 信息隐蔽原则有利于提高模块的内聚性。(√)

  4. 中心变换型的DFD图可看成是对输入数据进行转换而得到输出数据的处理,因此可以使用事务分析技术得到初始的模块结构图。(×)

  5. SD法是一种面向数据结构的设计方法,强调程序结构与问题结构相对应。 (×)

  6. 当模块的控制范围是其作用范围的子集时,模块之间的耦合度较低。(×)

7.面向对象的设计的主要目标是提高生产效率,提高质量和可维护性。(√)

三、简答题

  1. 请解释为什么需要体系结构设计。

答:软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、元素间的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。良好的体系结构是普遍适用的,它可以高效地处理各种各样的个体需求。

  1. 集中式模型和分布式模型相比各有什么优缺点?

答:以集中式的仓库模型为例。其主要优点:

  1. 数据由某个子系统产生,并且被存储到仓库中,以便为另外一些子系统共享;
  2. 由于中央集中控制的缘故,共享数据能得到有效的管理,各子系统之间不需要通过复杂的机制来传递共享数据;
  3. 一个子系统不必关心其他的子系统是怎么使用它产生的数据;
  4. 所有的子系统都拥有一致的基于中央数据仓库的数据视图。如果新子系统也采用相同的规范,则将它集成于系统中是容易的。

但这种系统也有明显的缺陷:

  1. 虽然共享数据得到了有效的管理,但随之而来的问题是各子系统必须有一致的数据视图以便能共享数据,换句话说,就是各子系统之间为了能共享数据必须走一条折中的路线,这不可避免地会影响整个系统的性能。
  2. 一个子系统发生了改变,它产生的数据也可能发生结构上的改变。问题随之而来,其他的子系统如何能正确解析这些数据呢?所以为了达到共享的目的,数据翻译系统会被引入到整个系统当中。但这种翻译的代价是很高的,并且有时是不可能完成的。
  3. 中央数据仓库和各子系统的私有数据库必须有相同的关于备份、安全、访问控制和恢复的策略,这可能会影响子系统的效率。
  4. 集中式的控制使数据和子系统的分布变得非常困难甚至成为不可能。这里分布指的是将数据或子系统分散到不同的机器上。

分布式结构有这样的一些优势:

  1. 资源共享:系统中每个服务节点上的资源都可以被系统中的其他节点访问;
  2. 开放性高:系统可以方便地增删不同软硬结构的节点;
  3. 可伸缩性好:系统可以方便地增删新的服务资源以满足需要;
  4. 容错能力强:分布式系统中的信息冗余可以容忍一定程度的软硬故障;
  5. 透明性高:系统中的节点一般只需知道服务的位置而不必清楚系统的结构。

但分布式结构也存在着一些不足:

  1. 复杂性:分布式系统比集中式系统要复杂得多。集中式系统的性能主要依赖于主机的处理器能力,而分布式系统的性能则还会依赖于网络的带宽,这让情形变得更加复杂。

  2. 安全性:网络环境随时面临着各种威胁:病毒、恶意代码、非法访问等。如何保证安全性是一个让人头疼的问题。

  3. 可管理性:分布式系统的开放性造成了系统的异构性。显而易见,管理异构的系统比管理主机系统要困难得多。

  4. 不可预知性:这主要指系统的响应时间。网络环境本身的特点决定了网络负载会明显地影响整个系统的响应时间。

  5. 请举出一种集中式模型的实例,并图示它的结构。

  1. 胖客户模型和瘦客户模型的区别是什么?它们分别被应用在什么样的场合?

答:在胖客户模型中,客户端应用负责用户界面和应用逻辑部分,因此它的工作比较繁重。一般的数据库应用都是属于这种结构。而与此相反,在瘦客户模型中,服务器负责了更多的工作,而客户端的工作就变得非常单纯。浏览器/Web服务器结构就属于瘦客户结构,而且常被称为B/S(Browser/Server)结构。

5.请举出一种分布式模型的实例,并图示它的结构。

7.分布式对象模型与客户-服务器模型有什么异同?

答:在C/S模型中,客户和服务器的“地位”是不“平等”的:客户只能向服务器提出服务请求,而服务器不能向客户提出服务请求,同时服务器之间可以互相提供服务。另外,客户一般要知道服务器在网络上的具体位置(服务器的域名或者IP地址),相反,服务器则不需要。这种差别在一定程度上限制了系统的灵活性和可扩展性。而在分布式对象结构中,服务的提供者是被称为“对象”(Object)的系统组件(System Component)。每个对象的地位在逻辑上是平等的,它们可以互相为对方提供所需的服务。在这种情况下,提供服务的对象就是服务器,而提出服务请求的对象就是客户。为了能够提供服务,每个对象都有一个服务接口。

9.模块分解的最终目的是什么?

答:模块分解的目的是将系统“分而治之”,以降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。

  1. 模块分解应该遵循什么样的标准?

答:按照“降低块间联系,提高块内联系”的设计总则对模块进行分解。具体从以下方面考虑:

(1) 尽可能建立功能模块;

(2) 消除重复功能;

(3) 模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间联系;

(4) 模块的大小适当;

(5) 模块的扇入/扇出数不宜太多。

也可以用软件独立性的两个定性指标来度量模块分解的标准:

一是耦合性。用于描述模块之间联系的紧密程度。从三个方面衡量块间联系大小:①方式 (直接或间接)②类型(数据型、控制型、混合型)③数量(数量越大,块间联系越紧密。

二是内聚性。用于描述模块内部联系的紧密程度。它是从功能的角度来度量模块内的联系。显然,块内联系愈紧,即内聚性愈强,模块独立性愈好。功能型模块独立性最好。

18.请采用MVC模式,为某个银行的ATM 系统设计用户界面。

习题四答案

一、选择题

  1. 面向对象程序设计的基本机制是(ABC)。

A) **继承 **B) **消息 **C) **方法 **D) 结构

  1. 下列属于面向对象的要素有(BCD)。

A) 分类性 B) **抽象 **C) **共享 **D) 封装

  1. 下列选项中属于面向对象开发方法的有(ACD)。

    A) **Booch **B) CAD C) **Coad **D) OMT

  2. 下列属于Coad/Yourdon方法中面向对象的分析模型的层次有(AB)。

A) 主题层 B) 对象层 C) 应用层 D) 接口层

  1. 一个类属性依其特征划分,其类型有(ABCD)。

    A) 描述型 B) 定义型 C) **派生型 ** D) 参考型

  2. 在进行面向对象分析时,所采用的模型有(ABC)。

    A) 对象模型 B) 动态模型 C) 静态模型 D) 功能模型

  3. 状态是对象属性的值的一种抽象,它的性质有(AB)。

A)** 时间性** B) 持续性 C) 有序性 D) 有穷性

  1. 建立继承关系时所采用的方式有(AC)。

A) 自顶向下 B) 从内到外 C) 自底向上 D) 从复杂到简单

  1. 对象是人们要研究的任何事物,主要的对象类型有(ABCD)。

A) 有形实体 B) 作用 C) **事件 ** D) 性能说明

10.下列不是模型元素的是(D)。 (A)关联 (B)聚合 (C)依赖 (D)笔记

11.UML具有扩展性,常见的扩展机制有(BCD)。 (A)修饰 (B)版类 (C)加标签值 (D)约束

12.UML支持的建模方式有(C)。 (A)静态建模(B)动态建模 (C)模块化建模(D)功能建模

13.下列各种图可用于动态建模的有(ACD)。 (A)状态图 (B)类图 (C)序列图 (D)活动图

14.下列属于状态的组成部分的有(AB)。 (A)名称 (B)活动 (C)条件 (D)事件

15.UML中包括的事件有(ABCD )。 (A)条件为真 (B)收到另一对象的信号 (C)收到操作调用 (D)时间表达式

16.属性的可见性有(ABD)。 (A)公有的

(B)私有的 (C)私有保护的

(D)保护的

17.用例之间的关系有(BCD)。 (A)友元 (B)扩展 (C)使用 (D)组合

18.消息的类型有(ABC)。 (A)同步 (B)异步 (C)简单 (D)复杂

二、判断题

  1. 类是指具有相同或相似性质对象的抽象,对象是抽象的类,类的具体化就是对象。(×)

  2. 继承性是父类和子类之间共享数据结构和消息的机制,这是类之间的一种关系(×)。

  3. 多态性增强了软件的灵活性和重用性,允许用更为明确、易懂的方式去建立通用软件,多态性和继承性相结合使软件具有更广泛的重用性和可扩充性。(√)

4.类的设计过程包括确定类、确定关联类、确定属性、识别继承关系。(√)

  1. 复用也叫重用或再用,面向对象技术中的“类”是比较理想的可重用软构件,它有三种重用方式:实例重用、继承重用、多态重用。(√)

6.UML建模语言是由视图、图、模型元素和通用机制构成的层次关系来描述的。(√)

7.UML是一种建模语言,是一种标准的表示,是一种方法。(×) 8.泳道是一种分组机制,它描述了状态图中对象所执行的活动。(×) 9.同步消息和异步消息的主要区别是,同步消息的发送对象在消息发送后,不必等待消息处理可立即继续执行,而异步消息则发送对象必须等待接收对象完成消息处理后才能继续执行。(×) 10.类图中的角色用于描述该类在关联中所扮演的角色和职责。(√) 11.类图用来表示系统中类与类之间的关系,它是对系统动态结构的描述。(×) 12.用例模型的基本组成部件是用例、角色和用例之间的联系。(√) 13.用例之间有扩展、使用、组合等几种关系。(√) 14.顺序图描述对象之间的交互关系,重点描述对象间消息传递的时间顺序。(√) 15.活动图显示动作及其结果,着重描述操作实现中所完成的工作,以及用例实例或类中的活动。(×)

三、 简答题

1**.**消息传递机制与传统程序设计模式中的过程调用相比,有何本质区别?

答:(1) 消息传递必须给出信道的信息,通常要指出明确的接收方。

(2) 由于接收方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一接收方发送同样的信息,可因接收方的当前状态不同而得到不同的结果。

(3) 消息传递可以是异步的,发送方可以不必等待接收方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。

2.比较面向对象方法与结构化方法的特点,说明为什么面向对象方法比结构化方法更加优越。

答:结构化方法是以数据流和数据封闭性为基础的,由SA、SD和 SP三部分构成。该方法:

①无法实现从问题空间到解空间的直接映射。开发方法求解过程是先对应用领域(问题空间)进行分析,建立起问题空间的逻辑模型,再通过一系列复杂的转换和算法,构造计算机系统,获得解空间。

②无法实现高效的软件复用。结构化方法是面向过程的,将数据和处理过程(操作)分离,不仅增加了软件开发的难度,也难于支持软件复用。

③开发方法难以实现从分析到设计的直接过渡,从SA到SD要经过一系列复杂的变换**。**

而面向对象的方法以对象为核心,强调模拟现实世界中的概念而不是算法,尽量用符合人类认识世界的思维方式来渐进地分析、解决问题。

①使问题空间与解空间具有一致性,便于对软件开发过程所有阶段进行综合考虑,能有效地降低软件开发的复杂度,提高软件质量。

②软件开发各个阶段有机集成,有利于系统的稳定性。

③具有良好的重用性。面向对象的技术在利用可重用的软件成分构造新软件系统上具有很大的灵活性,由于对象所具有的封装性和信息隐蔽,使得对象的内部实现与外界隔离,具有较强的独立性。继承性本身就是一种重用机制。

综上,显然面向对象方法比结构化方法更加优越。

3.OMT方法明确提出了建模的概念,为什么在软件开发过程中需要进行建模?

答:OMT方法从不同而又相关的角度建立三类模型:对象模型、动态模型和函数模型,并为每一类模型提供了图形表示。

软件模型一般包括数学模型、描述模型和图形模型。在软件开发过程中进行建模,一是由于软件系统的复杂性和规模的不断增大,需要建立不同的模型对系统的各个层次更好地进行描述。模型具有的直观性及丰富的信息描述,便于开发人员与用户的交流。建立的模型为以后的系统维护和升级提供了文档**。**鉴于上述原因,在软件开发过程中建模,能够提高软件开发的效率和质量。

4.为什么说面向对象的方法为软件复用提供了良好的环境?

答:软件复用是将已有的软件成分用于构造新的软件系统,以达到提高软件系统的开发质量与效率,降低开发成本的目的。复用的软件成分也称为可复用构件(Reusable Component)。

对可复用组件一般有以下的要求:具有功能上的独立性与完整性;具有较高的通用性;具有较高的灵活性;具有严格的质量保证;具有较高的标准化程度。面向对象的方法对复用的支持主要反映在:

⑴面向对象方法可以保护在整个软件生存周期概念、原则、术语及表示法达到高度一致。这使面向对象方法不但能在各个级别支持软件复用,而且能对各个级别的复用形成统一、高效的支持,达到良好的全局效果。

⑵OOA基本模型体现了更高的抽象,更容易成为一个可复用的系统构架。

⑶所有的对象都用类作为其抽象描述。类作为一种可复用构件,在运用于不同系统时,不会出现因该类对象实例不同而使系统模型有所不同的情况。

所以面向对象方法的主要概念及原则与软件复用的要求十分吻合。OO方法中的对象和类是系统的基本构成单位,它符合可复用构件所应具备的那些特性,如完整性、独立性、可标识性、一般性、抽象、封装等。尤其是面向对象方法的对象封装性,为软件复用技术提供了良好的条件。而继承机制本质上就是一种复用机制,因此面向对象方法为软件复用提供了一个良好的环境。

5.以图4.82(一个首次报名入学的UML活动图)为例,说明如何绘制活动图。

6.简述扩展、包含和细化3种UML依赖关系的异同。

答:相同:扩展,包含和泛化这三种UML关系用在UML用例图的时候很多。不同: 1.扩展是用在用例和用例之间,扩展是指扩展用例与基用例之间的关系,说明如何将扩展用例定义的行为插入基用例定义的欣慰序列。比如发布博客用例和暂存博客用例之间就可以是扩展关系。 2.包含也是用在用例和用例之间,比如写博客用例,应包含了插入图片例。 3.泛化关系用在角色和角色之间的,比如管理员和系统管理员可以是泛化关系。

7.软件开发为什么要使用UML建模?它有何特点?

答:一、有助于按照现实或者实际情况进行直观的描述。 二、能够规定软件或者模型的结构,行为,属性。 三、能够指导软件构造的模板。 四、对决策进行文档化

统一建模语言 (UML)是一种绘制软件蓝图的标准语言。可以用 UML对软件密集型系统的制品进行可视化详述和文档化。 (1分)UML是一种定义良好、易于表达、功能强大且普遍适用的可视化建模语言。(1分) 它融入了软件工程领域的新思想、新方法和新技术。(1分)它的作用域不限于支持面向对象的分析与设计还支持从需求分析开始的软件开发的全过程。(1分)UML的作用就是用很多图从静态和动态方面来全面描述我们将要开发的系统。(1分)

8.简述UML的实际建模过程。

答:UML建模过程是一个迭代过程。每次迭代都建立相应的模型。分为以下几个阶段:
① 分析阶段。建模的目的是捕捉系统的功能需求,分析、提取所开发系统的“客观世界”领域的类以及描述它们的合作关系。常以用例图为首选模型。
② 设计阶段。建模的目的是通过考虑实现环境,将分析阶段的模型扩展和转化为可行的技术实现方案。常建立以类图为主的静态模型,及包括状态模型、顺序模型、活动模型和合作模型等 动态模型。
③ 实现阶段。主要工作就是进行编码,同时对已构造的模型作相应的修正。
④ 配置阶段。通过模型描述所开发系统的软硬件配置情况建立配置模型。
⑤ 测试阶段。使用前几个阶段所构造的模型来指导和协助测试工作。

9.在UML中的状态图、协作图、活动图、序列图在系统分析中各起到了什么作用?

答:状态图(State Diagram)用来描述一个特定对象在其生存周期或在某段时间内的所有可能的状态及其引起状态转移的事件。一个状态图包括一系列的状态以及状态之间的改变。例如订单的状态变化等,在实时系统中用得较多,还可以用于辅助设计用户界面。顺序图(Sequence Diagram) 清晰地描述一组对象之间动态的交互关系、时间的约束关系,着重描述对象间消息传递的时间顺序,所以顺序图在实时系统中被大量使用。当参与交互的对象数目增加,交互关系复杂时用顺序图描述会显得杂乱,协作图(Collaboration Diagram)从另一个角度来更好地描述相互协作的对象间的交互关系和链接(Link)关系。着重体现交互对象间的静态链接关系和协作关系。协作图也可以从顺序图生成。活动图(Activity Diagram)是由状态图变化而来的,从系统任务的观点来看,系统的执行过程是由一系列有序活动组成的。活动图可以有效地描述整个系统的流程,描述了系统的全局的动态行为,且只有活动图是唯一能够描述并发活动的UML图。

10.顺序图与合作图都是交互图,它们有何不同?所描述的主要系统特征是什么?

顺序图(Sequence Diagram) 重点描述某些对象间消息传递的时间顺序,对象间的通信和交互通过在对象的生命线之间传送的消息来表示。还常给出消息的说明信息及消息之间的时间限制及一些约束信息等。但当参与交互的对象数增加,交互关系复杂时难于表达清楚对象之间的交互关系。
合作图(Collaboration Diagram) 则着重体现交互对象间的静态链接关系和协作关系,不强调执行事件的顺序,而是强调为了完成某个任务,对象之间通过发送消息实现协同工作关系。可以有效地描述当参与对象数较多时的交互关系。

11.状态图与活动图有何相同与不同之处?在建立系统模型时,应该如何使用这两类模型?

答:活动图(Activity Diagram)是由状态图变化而来的,它们各自用于不同的目的。状态图着重描述了对象的状态变化以及触发状态变化的事件。但是,从系统任务的观点看系统,它是由一系列有序活动组成的,活动图是从活动的角度描述系统任务,并且可以描述系统任务中的并发活动。活动图描述了系统中各种活动的执行顺序,刻画一个方法中所要进行的各项活动的执行流程。活动图显示动作及其结果,着重描述操作实现中完成的工作以及用例或对象内部的活动。
此外,在状态图中状态的变迁通常需要事件的触发,而活动图中一个活动结束后将立即进入下-个活动。

12.什么是抽象类?在建模时有时使用抽象类有什么好处?

答: 抽象类 是 指没有实例的类,定义一些抽象的操作,即不提供实现方法的操作,只提供操作的特征,并标注 {abstract} 。如 在建立类模型时,常将一些属性与操作类似的类作为一个抽象类的子类,使系统结构更加清晰,增加系统的可读性。

14.在分析和设计阶段都需要建立类图,试说明分析类图与设计类图的主要区别是什么。

在软件开发的不同阶段都使用类图,但这些类图表示了不同层次的抽象。在需求分析阶段,类图是研究领域的概念;在设计阶段,类图重点描述类与类之间的接口。 由于分析类图主要描述应用领域中的概念,它们的类可以从这些概念中得出,或者说分析类图中的类是从需求中获取的。 设计类图描述软件的接口部分,而不是软件的实现部分。面向对象开发方法非常重视区别接口与实现之间的差异,可以用一个类型(Type)描述一个接口,这个接口可能因为实现环境、运行特性或者用户的不同而具有多种实现方式。设计类图更易于开发者之间的相互理解和交流。设计类图通常是在分析类图的基础上进行细化和改进的。

15.问题描述为,储户用存折取款,首先填写取款单,根据“账卡”中的信息检验取款单与存折,如有问题,将问题反馈给储户,否则,登录“储户存款数据库”,修改相应数据,并更新“账卡”,同时发出付款通知,出纳向储户付款。 (1)建立系统的用例模型。 (2)建立角色和用例的描述模板。

16.一个小型图书资料管理系统的主要功能有图书资料的借出、归还、查询和管理,该系统有图书管理员和普通读者,普通读者要使用系统必须先注册。 图书管理员负责添加、更新和修改、删除图书资料,登记和查询图书的借阅、归还情况。读者可以按照作者或主题检索图书资料,还可以预订图书资料,即当新购买或有读者归还时,系统立即通知读者来借阅。 (1)确定系统的类,并定义其属性和操作。 (2)画出系统的分析类图。

17.为什么说RUP 与UML密切结合能够开发出满足最终用户需要的高质量软件?

答:好的软件过程,是应用UML成功地进行软件开发的关键。在众多的软件开发过程中,RUP统一过程(Rational Unified Process)能够与UML最佳结合,不仅因为该过程的开发者也是UML的创立者,更因为RUP过程能够有效地测度工作进度,控制和改善工作效率。
RUP是最佳软件开发经验的总结,具有迭代式增量开发、使用实例驱动、以软件体系结构为核心的三个鲜明特点,还包括了软件开发中的6大经验:迭代式开发;管理需求;使用基于组件的软件体系结构;可视化建模;验证软件质量;控制软件变更。因此,RUP与UML密切结合,能够开发出满足最终用户需要的高质量软件。

18.分析 RUP的二维开发模型,说明RUP的迭代开发过程。

答:在 RUP 中,软件开发生存周期根据时间和 RUP的核心工作流划分为二维空间。横轴描述
RUP开发过程的动态结构,纵轴描述RUP的静态组成部分。
(1)横轴把软件开发周期(Cycle)划分为起始(Inception)、演化(Elaboration)、构造(Construction)和提交(Transition)四个连续的阶段(Pahse)。
(2)纵轴表示核心工作流。RUP中有商业建模、需求、分析和设计、实现、测试、部署、配置和变更管理、软件项目管理和环境9个核心工作流(Core Workflows):
RUP中的每个阶段都由一个或多个连续的迭代组成,每一个迭代都是一个完整的开发过程,产生一个可执行的产品版本,在每个阶段结束前都应有一个里程碑(MileStone)评估该阶段的工作,只有当阶段目标达到时才允许项目进入下一阶段,产生一个阶段里程碑。这是一种更灵活、风险更小的方法,是多次通过不同的开发工作流,这样可以更好地理解需求,构造一个健壮的体系结构,并最终交付一系列逐步完成的版本,称为一个迭代生存周期。

  1. 以例5-5中图5.22“资源管理用例图”为例,说明<<include>>和<<extend>>的区别。

答:在图5.22中,用例“删除资源”和“更新资源”与用例“查找资源”之间是<<include>>的关系,<<include>>本质上是一种使用关系,当一个用例包含另一个用例时,这两个用例之间就构成了使用关系。说明“删除资源”和“更新资源”的操作都需要首先“查找资源”。

扩展<<extend>>是向一个用例中加入一些新的动作后构成了另外一个用例,后者是继承前者的一些行为得来的。图5.22中,对用例“更新资源”中增加动作“清除技能”,得到用例“从资源中清除技能”,增加动作“指定技能”,得到用例“把技能指定给资源”,因此,用例“更新资源”与“从资源中清除技能”和“把技能指定给资源”之间的关系是<<extend>>。

习题五答案

1.程序设计语言分为哪几类?

答:程序设计语言,按照语言级别可以分为两大类:低级语言和高级语言。

低级语言包括机器语言和汇编语言。低级语言依赖于特定的机器,其使用复杂、繁琐、费时、易出差错,因而程序编写也有一定的难度。

机器语言是表示成二进制形式的机器基本指令集,或者是操作码经过符号化的基本指令集,其存储由语言本身决定。汇编语言比机器语言更直观,是机器语言中地址部分符号化的结果,或进一步包括宏构造。

即便是现在汇编语言有着生产效率低、维护困难、容易出错的缺点,但是在实现与硬件系统接口部分时,仍然采用它,因为它易于实现接口,实现效率高。

高级语言的表示方法要比低级语言更接近于待解的问题,其特点是在一定程度上与具体机器无关,易学、易用、易维护。高级语言的实现极大地提高了软件的生产效率。

众多的高级语言根据不同的标准有不同的分类方式。

  1. 按照应用范围分为:通用语言与专用语言。

通用语言有:Pascal、C、C++、Java等;目标单一的语言称为专用语言,有:APT等。

  1. 按照用户的要求分为:过程式语言和非过程式语言。

过程式语言的主要特征是,用户可以指明一系列可执行的顺序运算,以表示相应的计算过程,如Pascal、C等;非过程式语言反之,较为著名的是Java。

  1. 按照使用方式分为:交互式语言和非交互式语言。

具有反映人机交互作用的语言成分的语言成为交互式语言,如BASIC等;不反映人机交互作用的语言称为非交互式语言,如Pascal、C等都是非交互式语言。

  1. 按照语言的内在特点分为:系统实现语言、静态高级语言、动态高级语言和块结构高级语言;

系统实现语言例如:C语言;静态高级语言例如:COBOL和FORTRAN语言;动态高级语言的特点是动态完成所有的存储管理,如Java;块结构高级语言,例如ALGOL和Pascal语言。

  1. 程序设计语言的成分有哪些?

程序设计语言基本的组成成分如下:

①数据成分,用于描述程序所涉及的数据

  1. 程序名字声明:首先声明这个程序设计对象在这个程序中的名字,这样避免编译时出现错误。例如,设计一个电子时钟,那么对于主程序完全可以对其名字声明为:clock,这样当后面进行编译的时候就能够识别这是已经声明了的对象,而不再报错。
  2. 数据类型声明:对程序实现时用到的各种数据的类型作一声明,如整型、浮点型、用户自定义类型等。

②运算成分,用以描述程序中所包含的运算

  1. 初始化:程序设计实现时最常出现的一种错误就是没有对于要运算的数据初始化,即没有赋予一个合适的初始数据,结果造成了编译或运行时出错。
  2. 运算对象:运算对象是程序执行时要运行的对象,包括一个算术表达式或者一个逻辑表达式,或者是一个完整的语言,例如:赋值语句等。

③控制成分,用以描述程序中所包含的控制。

  1. 顺序控制结构:顺序执行的语句构成了顺序结构。
  2. 循环控制结构:常见的循环控制结构有for语句和while语句,至于它们的基本使用以及表达形式这里不再赘述。
  3. 分支控制结构:常见的分支控制结构有if语句和switch-case语句两种,另外if语句中又分为带else和不带else语句两种。

④传输成分,用以表达程序中数据的传输。传输成分包括基本的输入和输出。

3.程序设计语言的选择对应用程序的开发有什么样的影响?

答:通常应根据软件系统的应用特点,程序设计语言的内在特性以及系统的性能要求等方面来进行选择。程序设计语言的选择应该考虑以下因素:

  • 项目的应用领域。应尽量选取适合某个应用领域的语言。例如,选择Visual Basic来开发数据库应用就比选择Visual C++要容易一些。
  • 算法和计算复杂性。要根据不同语言的特点来选取能够适应软件项目算法和计算复杂性的语言。例如,对于科学计算较多的应用一般会考虑选择FORTRAN语言。
  • 软件的执行环境。要选取机器上能运行且具有相应支持软件的语言。例如,在嵌入式系统中(这类系统的硬件资源往往较少),软件开发语言多为C/C++、Java。
  • 性能因素。应结合工程具体性能来考虑,例如实时系统对响应速度有特殊要求,就应选择汇编语言、C语言等。
  • 数据结构的复杂性。要根据不同语言构造数据结构类型的能力选取合适的语言。C++、Java这样的高级语言显然比汇编语言的表达能力要强。
  • 软件开发人员的知识水平以及心理因素。知识水平包括开发人员的专业知识,程序设计能力;心理因素是指开发人员对某种语言或工具的熟悉程度。从技术的层面来讲,大多数的任务用任何一门高级语言都可以完成,所以选择开发者熟悉的语言是可以提高效率的。为此,要尽量避免受外界的影响,盲目追求高、新的语言。

4.结构化程序设计的特点是什么?为什么要采用结构化程序设计?

答:结构程序设计的概念最早是由E. W. Dijkstra提出来的,他指出:“可以从高级语言中取消GOTO语句,程序质量与程序中所包含的GOTO语句的数量成反比”。并指出结构程序设计并非简单的取消GOTO语句,而是创立一种新的程序设计思想、方法和风格,以显著提高软件生产率和质量。

提高程序可读性的关键是使程序结构简单清晰,结构化程序设计(SP)方法是达到这一目标的重要手段。

结构化程序设计是一种程序设计技术,它采用自顶向下,逐步求精的程序设计方法和单入口和单出口的控制结构。具体来说,结构化程序设计技术主要具有以下特点:

(1)自顶而下,逐步求精

这种逐步求精的思想符合人类解决复杂问题的普遍规律,从而可以显著提高软件开发的效率。而且这种思想还体现了“先全局,后局部”、“先抽象,后具体”的方法,使开发的程序层次结构清晰,易读、易理解还易验证,因而提高了程序的质量。

将程序自顶向下逐步细化的分解过程用一个树状结构来描述,如下图所示。

(2)单入口和单出口的控制结构

结构化的程序是由且仅由顺序、选择、循环三种基本控制结构组成,既保证了程序结构清晰,又提高了程序代码的可重用性。这三种基本结构可以组成所有的各种复杂程序。

结构化程序设计的基本原理中一个重要的概念是“模块化”。因为要实现结构化的程序设计总体的思想是:自顶向下,逐步求精,分而治之。相应的结构化程序设计的步骤如下图所示。

提出和分析问题

确定数学模型

设计算法

模块化编程

程序整个编译、运行

模块是由边界元素限定的相邻的程序元素的序列,而且有一个总体标志符来代表它。

所谓模块化,即是将一个大任务分成若干个较小的任务,较小的任务又细分为更小的任务,直到更小的任务只能解决功能单一的任务为止,一个小任务称为一个模块。各个模块可以分别由不同的人编写和调试。把大任务逐步分解成小任务的过程可以称为是“自顶向下,逐步细化”的过程。

对于模块的设计和实现有以下5条基本的标准:

  • 可分解性
  • 可组装性
  • 可理解性
  • 连续性
  • 保护性

遵循以上标准是进行结构化程序设计时运用模块化原理的基本准则,这样设计出来的程序不但软件结构清晰,而且代码也有很好的可读性和可维护性。

5.对比面向对象程序设计,结构化程序设计有什么样的优势和劣势?

答:

结构化程序设计方法容易理解和交流,对于大系统可以从全局逐步展开到局部,整体性较好。结构化方法是其他系统开发方法(如面向对象方法)的基础。面向过程程序设计,主要是为拉大型的工程计算或者为拉完成某个任务而求出结果的对界面则要求不高其优点是运行速度快;面向对象程序设计,稳定可靠,有利于维护和重用,并容易实现多层分布式结构,主要是对各种事物能形象的描述并且模拟在计算机上运行它兼容以上面向过程的好多功能,优点是界面比较好做,缺点执行速度和容量没有上面的快;结构化程序设计,对于以上二者均适合。

6.面向对象程序设计的优势是什么?

可提高程序的重用性;可控制程序的复杂性;可改善程序的可维护性;能够更好地支持大型程序设计;增强了计算机处理信息的范围;能够很好地适应新的硬件环境。

7.算法转换的指导原则是什么?

答:转换过程中的指导原则是:

  1. 在编码前,尽可能化简有关的算术表达式和逻辑表达式。
  2. 仔细检查算法中嵌套的循环,尽可能将某些语句或表达式移到循环外面。
  3. 尽量避免使用多维数组。
  4. 尽量避免使用指针和复杂的表。
  5. 采用“快速”的算术运算。
  6. 不要混淆数据类型,避免在表达式中出现类型混杂。
  7. 尽量采用整数算术表达式和布尔表达式。
  8. 选用等效的高效率算法。

上述的原则要在转换时统筹考虑,而不应该教条地使用。例如,程序员谨守的一条原则就是尽量不用GOTO语句,但是当要从一个嵌套很深的循环中直接跳出来时,GOTO语句就能很好地发挥作用。

8.影响软件代码效率的因素有哪些?

答:⑴算法对效率的影响

关于算法的转换指导原则,在一定程度上减小了算法对效率的影响。从这一点能够看出算法直接影响到的是程序,进而影响到了整个代码的效率问题。故而在转换时需要注意之外,在程序设计和实现时同样需要考虑效率的问题。

⑵存储效率

处理器的分页调度和分段调度的特点决定了文件的存储效率,同样对于代码也存在这个问题。一般来说使用能保持功能域的结构化控制结构是提高效率的好办法。提高效率的办法通常也是提高存储效率的方法。

⑶输入输出效率

输入和输出的效率决定的是人与计算机之间通信的效率,程序设计中输入和输出的简单清晰,是提高输入输出效率的关键。

9.软件复用有哪些优点?

参考答案:1)提高生产率

软件复用最明显的好处在于提高生产率,从而减少开发代价。牛产率的提高不仅体现在代码开发阶段。在分析、设计及测试阶段同样可以利用重用来节省开销。

2)减少维护代价

这是软件复用的一个重要优点需要维护的部分也减少了。

3)提高互操作性

一个更为重要的好处在于使用经过检验的构件,减少丁可能的错误,同时软件4个更为重要的好处在于软件复用技术提高了系统问的互操作性。基于复用技术生产的幻件系统。大多使用相同的接口对外实现通信。因此,系统将更为有效地实现与其他系统之间的互操作。

4)支持快速原型

软件复用技术的另一个好处在于对快速原型的支持,即可以快速构造出系统可操作的模型,以获得用户对系统功能的反馈。利用可复用构件可以快速有效地构造出应用程序的原型。

5)减少培训开销

软件复用技术还有利于减少培训开销,即雇员在熟悉任务时所需的非正式的开销程师将使用一个可复用构件库,其中的构件都是他们所熟悉和精通的。

习题六答案

一、 选择题

  1. 软件测试的主要特点是(A C)。

A)** 软件测试的开销大** B) 软件测试要依靠工具

C) 软件不能进行“穷举”测试 D) 软件测试要依靠人工

  1. 整体测试又称为组装测试,其主要内容包括(C D)。

A) 对整体的性能进行测试 B) 用白盒法设计测试用例进行测试

C) 确定组装策略和次序 D) 对组装过程进行测试

  1. 渐增式是将模块一个一个地连入系统,每连入一个模块(C)。

A) 只需要对新连入的模块进行测试

B) 都不需要再进行测试

C) 要对新子系统进行测试

D) 都要进行回归测试

  1. 静态测试是以人工的、非形式化的方法对程序进行分析和测试。常用的静态测试方法有 (B C D)。

A) 运行程序并分析运行结果

B) 桌前检查与代码会审

C) **数据流分析图 **

D) 调用图

  1. 集成过程的原则是(B C)。

A) 按照模块的大小集成

B) 尽早测试包含I/O的模块

C) 尽早测试关键模块

D) 按照“输入—处理—输出”的次序进行集成

  1. 面向对象的测试与传统测试方法的主要区别是(A C)。

A) 面向对象的测试可在编码前进行,传统测试方法在编码后进行

B) 面向对象的测试以需求和设计阶段的测试为主,不需要进行代码测试

C) 测试对象不同

D) 面向对象的测试不需要设计测试用例,只需要进行会议评审

  1. 软件测试的基本原则是(A C D)。

A) 关键是注重选择高效的测试用例

B) 选择尽可能多的测试用例

C) 尽量不由程序设计者进行测试

D) 充分注意测试中的群集现象

  1. 等价分类法的关键是(C)。

A) 确定等价类的边界条件

B) 按照用例来确定等价类

C) 划分等价类

D)确定系统中相同和不同的部分

9面向对象的基本单位是(A)。 (A) ( B)对象 (C)成员变量 (D)组件

二、 判断题

  1. 单元测试通常应该先进行人工走查,再以白盒法为主,辅以黑盒法进行动态测试。 (√)

  2. 功能测试是系统测试的主要内容,检查系统的功能、性能是否与需求规格说明书相同。( √)

  3. 白盒法是一种静态测试方法,主要用于模块测试。 (×)

  4. 整体测试又称为逻辑覆盖测试,需要对系统模块的内部结构进行测试。(×)

  5. 在等价分类法中,为了提高测试效率,一个测试用例可以覆盖多个无效等价类。(×)

  6. 发现错误多的模块,残留在模块中的错误也多。(√)

  7. 面向对象的测试不能采用黑盒法,因为它是一种全新的开发模式。(×)

  8. 在发现错误后,则应按照一定的技术去纠正它,纠错的关键是定位错误。(√)

三、 简答题

  1. 等价分类法的基本思想是什么?

答:根据程序的输入特性,将程序的定义域划分为有限个等价区段——“等价类”,从等价类中选择出具有“代表性”的用例,即测试某个等价类的代表值就等价于对这一类其他值的测试。如果某个等价类的一个输入数据(代表值)测试中查出了错误,说明该类中其他测试用例也会有错误。

  1. 自顶向下渐增与自底而上渐增各有何优、缺点?

答:① 自顶向下渐增

优点:能够尽早发现系统主控方面的问题,并尽早测试系统结构的问题。

缺点:需要编写桩模块,由于下属模块往往不止一个,也不止一层,加之模块接口的复杂性,桩模块很难模拟各下层模块之间的调用关系,也无法验证桩模块是否完全模拟了下属模块的功能。因此很难尽早查出底层容易出错的复杂模块中的错误,所以导致过多的回归测试。

② 自底向上渐增

优点:需要编写驱动模块。驱动模块是模拟主程序或者调用模块的功能,处于被测试模块的上层,所以驱动模块只需模拟向被测模块传递数据,接收或打印从被测模块返回的数据等功能,比编写桩模块容易。还能够尽早查出底层涉及较复杂的算法和实际的I/O模块中的错误。

缺点:只有当系统所有模块全部组装完成,才能看到系统完整的结构,才能测试系统的主控功能。

  1. 渐增式与非渐增式有何区别?为什么通常采用渐增式?

答:非渐增式是将所有的模块一次连接起来,简单、易行,节省机时,但测试过程中难于查错,发现错误也很难定位,测试效率低。

渐增式是将模块一个一个地连入系统,每连入一个模块,都要对新子系统进行测试。这种组装测试方案虽然用机时多,但比较非渐增式容易查出错误及进行错误定位,有利于查出模块接口部分的错误,测试效率高。因此通常采用渐增式。

4.为什么在实际的组装测试中都应该采用混合增值的方法?请自己设计2~3个混合增值的测试方法。

在软件开发中,混合增值方法结合了多种测试技术和方法,以提高测试的效率和有效性。采用混合增值方法的主要原因是因为不同的测试方法各有优势和局限,而混合使用可以相互弥补,提高发现错误的概率,同时确保更全面的测试覆盖率。以下是我设计的几个混合增值的测试方法示例:

  1. 迭代式测试与自动化测试结合

原理:将迭代式测试与自动化测试相结合,可以有效利用自动化测试的快速和重复性,同时通过迭代式测试不断完善和调整测试用例。

实施

  • 在每个迭代阶段,首先进行手动测试以探索新功能和识别潜在问题。
  • 将已稳定的测试用例转化为自动化测试脚本。
  • 在后续的迭代中,重复使用自动化测试脚本,同时继续手动测试新功能。

优势:这种方法结合了自动化测试的效率和手动测试的深入探索能力,使测试过程更加高效和全面。

  1. 白盒测试与黑盒测试结合

原理:白盒测试关注代码内部逻辑和结构,而黑盒测试关注功能和用户需求。二者结合可以实现代码级和功能级的全面测试。

实施

  • 使用白盒测试方法,如单元测试,来验证代码内部结构和逻辑。
  • 同时采用黑盒测试方法,如系统测试或验收测试,来验证软件功能是否符合用户需求和规格说明。

优势:这种方法确保了从代码到用户界面的每个方面都经过了严格测试,提高了软件的质量和可靠性。

  1. 静态测试与动态测试结合

原理:静态测试在不执行代码的情况下检查软件,如代码审查,而动态测试在运行代码时进行。二者结合可以在软件开发的早期发现问题。

实施

  • 在开发早期进行静态代码分析和同行评审,以识别潜在的编码问题和标准偏差。
  • 在代码编写完毕后进行动态测试,如功能测试和性能测试,以验证软件行为。

优势:结合静态和动态测试可以更早地发现和修正错误,减少后期开发和维护的成本。

5.为什么一个测试用例只能覆盖一个无效等价类?

  1. 明确性和精确性:当测试用例专注于一个无效等价类时,可以更清晰地确定测试的目的和预期结果。这有助于精确地识别出特定的错误和问题。

  2. 故障隔离:如果一个测试用例覆盖多个无效等价类,当测试失败时,很难确定是哪个等价类的输入导致了问题。单独测试每个无效等价类有助于快速定位和解决问题。

  3. 减少干扰:不同的无效输入可能导致不同类型的错误或异常,将它们混合在一个测试用例中可能会相互干扰,使得测试结果难以解读。

  4. 提高测试效率:专注于单一的无效等价类可以提高测试的效率,因为每个测试用例都是针对性设计的,可以直接验证特定的条件和场景。

  5. 易于管理和维护:单独覆盖每个无效等价类的测试用例更易于管理和维护。这在长期的软件维护中尤为重要,因为它简化了识别和更新测试用例的过程。

  6. 什么是α测试和β测试?

答:α测试是在开发机构的监督下,在确认测试阶段后期由个别用户对软件进行测试,目的是评价软件的FLURPS(功能、局域化、可使用性、可靠性、性能和支持性),注重界面和特色。

β测试是在进行了α测试的基础上,由支持软件预发行的客户对FLURPS进行测试,主要目的是测试系统的可支持性,是在软件产品正式发布前的测试。

  1. 黑盒法与白盒法的区别是什么?各自运用在什么情况下?

答:白盒法测试又称结构测试或逻辑驱动测试。必须考虑程序内部结构和内部特性,针对特定条件或与循环集设计测试用例,对软件的主要逻辑路径进行测试。一般主要用于模块测试。

黑盒法测试又称功能测试或基于规格说明的测试。这种方法是从用户观点出发,测试时把被测程序当作一个黑盒,不考虑程序内部结构和内部特性,测试者只知道该程序输入和输出之间的关系或程序的功能的情况下,依靠能够反映着这一关系和程序功能需求规格的说明书,来确定测试用例和推断测试结果的正确性。一般用于集成测试、确认测试及功能测试、系统测试等。

8.软件测试与其他软件开发活动相比具有什么样的特点?

答:软件测试的目标在于,以最小的工作量和成本,尽可能多地发现软件系统中存在的各种错误和缺陷,以确保软件系统的正确性和可靠性。其主要特点是:

⑴ 软件测试的开销大。按照Boehm的统计,软件测试的开销大约占总成本的30%~50%。

⑵ 不能进行“穷举”测试。只有将所有可能的情况都测试到,才有可能检查出所有的错误,但这是不可能的。

⑶** **软件测试难度大。既然不能进行 “穷举”测试,又要查出尽可能多的错误,随着软件的规模和复杂度不断增加,软件测试工作的难度越来越大。

测试也是一种开发活动,但鉴于软件测试的以上特点,它比其他软件开发活动更加复杂、困难和重要,且无论怎样强调它的重要性都不过分。

9.软件测试通常包含哪几个基本步骤?

答:软件测试通常应该对需求、总体设计、详细设计、编码实现各个阶段所获得的开发产品进行测试,软件测试应该贯穿于整个软件开发的全过程。

软件测试过程按测试的先后次序可分为以下步骤进行:单元测试、集成测试、确认测试和系统测试,最后进行验收测试。

⑴单元测试。完成每个模块的测试,尽可能发现模块内部的错误。单元测试主要采用白盒测试法。

⑵集成测试。把已测试过的模块按照一定顺序组装起来,构成软件系统。主要采用黑盒测试法。但对发现错误较多的新子系统,还可能采用白盒法进行回归测试。

⑶确认测试:检验所开发的软件能否满足所有功能和性能需求的最后手段,通常均采用黑盒测试法。

⑷系统测试:完成确认测试以后,检验它能否与系统的其他部分(如硬件,数据库及操作人员)协调工作,需要进行系统测试。

⑸验收测试:检验软件产品质量的最后一道工序是验收测试。与前面讨论的各种测试活动的不同之处主要在于它突出了客户的作用,同时软件开发人员也应有一定程度的参与。

10.软件调试有哪些方法?各自有什么特点?

答:常见的软件调试策略包括:试探法、归纳法、演绎法、回溯法和对分法等。

⑴试探法。一种比较原始的调试策略。它的基本思想是通过分析软件系统运行过程中大量数据信息、中间结果的变化情况来查找错误发生的原因、确定错误发生的位置。该方法简单、易行,但调试效率低,只适用于结构比较简单的小型系统。

⑵归纳法。一种由特殊到一般的逻辑推理方法。根据软件测试所取得的个别错误数据,错误线索着手,通过分析这些线索之间的关系而发现错误。

⑶演绎法。一种由一般到特殊的逻辑推理方法。根据已有的测试数据,设想所有可能的出错原因,然后通过测试逐一排除不正确、不可能的出错原因,最后证明剩余的错误的合理性,确定错误发生的位置。

⑷回溯法。从软件系统中发现错误位置开始,沿着程序的控制流程往回追踪程序代码,直至找到错误发生的位置或范围。回溯法对于规模较小的软件系统而言是一种比较有效的调试策略,但不适宜较大型的软件。

⑸对分查找法。在程序中插入某些变量关键点的正确值,检查程序的运行结果,在插入点以后的运行正确,则错误发生在插入点的前半部分;反之,错误发生在插入点的后半部分。不断对分缩小错误范围,进行错误定位。

11.面向对象的测试与传统的测试有什么相同和不同之处?

答:⑴传统的测试要在编码之后才进行,主要测试的对象是程序代码。而面向对象的测试既在没有代码的情况下进行测试,也在有代码的情况下进行测试,是一种被应用在开发过程不同阶段的活动,是与开发过程密切相关而又分离出来的过程,贯穿软件开发的全过程。

⑵面向对象的测试更关注对象而不是像传统的测试仅完成输入输出的单一功能,强调需求或设计的测试,验证和确认规格说明的有效性和正确性。一般采用静态走查和动态的场景模拟等方法,保证了需求和设计的高质量。

⑶由于测试对象不同,如传统测试中的单元测试,对应面向对象的测试中的类测试,类测试包括:类属性的测试、类操作的测试、可能状态下对象测试。根据面向对象的主要特性,在测试策略和方法上有所区别。通常面向对象的测试更加困难,例如类间的继承性可能给测试带来新的困难,继承性层次的测试需要更彻底的测试方法。

⑷在面向对象的测试中,一些常用的传统测试技术,如白盒法、黑盒法仍然可以使用。

12.面向对象的集成测试与传统的集成测试有何区别?

答:传统测试方法中的集成测试,主要采用黑盒法,按照自顶向下和自底向上的集成策略对模块进行组装测试。

面向对象的集成测试即交互测试,要检测类相互作用时才会产生的错误,即交互测试只关心系统的结构和内部的相互作用。对类进行交互测试,以确定它们能否在一起共同工作。交互测试的重点是要确保那些已经单独测试过的类的对象,相互间能够正确地传送消息。而面向对象的软件没有层次控制结构,一次集成一个操作到类中(传统的增量集成方法)是不可能的。

通常采用两种不同的策略:

⑴ 基于线程的测试(thread-based testing),集成对回应系统的一个输入或事件所需的一组类,每个线程被集成并分别测试。

⑵ 基于使用的测试(use-based testing),先测试独立类(几乎不使用服务器的类),然后测试下一层使用独立类的类(依赖类)。通过对依赖类层次的测试,逐步构造新的子系统,最后构造完整的系统。

13.什么是自动化测试?它有什么特点?自动化测试能否全部替代手工测试?为什么?

什么是自动化测试?

自动化测试是使用软件工具来执行预定的测试任务,如运行测试脚本来验证软件应用的行为,而不是手动执行这些任务。它通常用于重复性高的测试用例,或者在需要频繁执行同样测试的场景中。

自动化测试的特点

重复性和一致性:自动化测试可以重复执行相同的测试用例,每次以相同的方式,保证了测试的一致性。

效率:自动化测试可以快速执行大量的测试用例,特别是在回归测试中,大大节省了时间和人力成本。

准确性:减少了人为错误,提高了测试的准确性。

可扩展性:能够轻松地增加新的测试用例和适应软件的变化。

持续集成兼容性:自动化测试可以集成到持续集成/持续部署(CI/CD)流程中,实现持续的质量监控。

报告和分析:自动化工具可以生成详细的测试报告和日志,方便分析和追踪。

自动化测试能否全部替代手工测试?

尽管自动化测试有很多优势,但它不能完全替代手工测试。原因如下:

复杂性和可变性:对于一些复杂的用户界面和用户体验测试,手工测试能提供更准确的人类视角和直觉判断。

初期成本和维护:自动化测试需要初期的设定和配置,且随着应用的变化需要持续的维护。

测试覆盖范围:某些特定的测试场景(如临时的探索性测试或特定的业务逻辑)更适合手动执行。

灵活性:手工测试在面对需求快速变更时更加灵活。

启动阶段的测试:在软件开发的早期阶段,当功能尚未稳定时,手工测试更为适用。

14.简述自动化测试过程。

  1. 需求分析和规划

目标确定:明确自动化测试的目标和预期结果。

适用性评估:确定哪些测试用例适合自动化。通常,重复性高、稳定性强的测试用例更适合自动化。

  1. 选择自动化工具

根据项目需求、测试环境、语言兼容性等因素选择合适的自动化工具。

  1. 设计测试用例

设计可自动化的测试脚本和测试用例。

确保测试用例覆盖了所有重要的功能点。

  1. 设置测试环境

准备或配置必要的硬件、软件、网络等环境。

确保测试环境与实际运行环境相似。

  1. 开发测试脚本

编写或录制自动化测试脚本。

如果需要,为脚本编写必要的功能库或辅助函数。

  1. 测试执行

运行测试脚本并监控其执行情况。

确保测试运行稳定且无错误。

  1. 结果分析和报告

分析测试结果,识别缺陷和问题。

生成测试报告,记录测试过程和发现的问题。

  1. 维护和更新

随着应用程序的更新,对测试脚本进行必要的维护和更新。

保持测试用例的相关性和有效性。

  1. 反馈和改进

根据测试结果和反馈对自动化策略进行改进。

持续优化自动化测试过程。

  1. 集成和扩展

如适用,将自动化测试集成到持续集成/持续部署(CI/CD)流程中。

根据需要扩展测试覆盖范围。

习题七答案

一、选择题

  1. 软件维护的类型有(A B C D)。

A) 完善性维护 B) **纠错性维护 **C) **适应性维护 ** D) 预防性维护

  1. 各种软件维护的类型中最重要的是(A B)。

A) 完善性维护 B) **纠错性维护 ** C) 适应性维护 D) 预防性维护

  1. 以下属于完善性维护的有(B D)。

A) 解决开发时未能测试各种可能条件带来的问题

B) 增加联机求助命令

C) 缩短系统的应答时间,使其达到特定要求

D) **为软件的运行增加监控设施 **

  1. 进行系统修改时可能会产生维护的副作用,它们可能有(A B C)。

A) 修改数据的副作用 B) **修改错误后,又引入了新的错误 **

C) **修改代码的副作用 ** D) 文档资料的副作用

  1. 确定可维护性的因素主要有(B C D)。

A) 文档 B) **可理解性 ** C) **可修改性 ** D) 可测试性

  1. 软件维护阶段所产生的文档主要有(A B)。

A) **软件问题报告 ** B) 软件修改报告

C) 软件修改申请报告 D) 测试报告

  1. 表达计划安排的主要工具有(A B D)。

A)** PERT图** B) 甘特图 C)DFD图 D) 进度表

二、判断题

  1. 软件维护只需要校正性维护、适应性维护和完善性维护。(×)

  2. 软件维护总工作量可用公式表示为:M = P + K*EXP(D-C)。(×)

  3. 生产性活动包括分析评价、修改设计、编写程序代码和设计约束。(×)

  4. 改进程序的执行效率不会引入错误。(×)

  5. 强调简明性的程序出错率低。(√)

  6. 用面向对象方法开发的软件系统,可维护性好。(√)

三、简答题

  1. 为什么要进行软件维护?

答:软件维护是指软件系统交付使用以后,为了改正错误或满足新的需求而修改软件的过程。一个中等规模的软件,如果其开发过程需要一两年时间,则它投入使用以后,其运行时间可能持续5~10年之久。在这个维护阶段中,人们需要着手解决开发阶段尚未解决的问题,同时,还解决维护工作本身所产生的问题。做好软件的维护工作不仅能够排除软件中存在的错误,使它能够正常工作,而且还可以使它扩充功能,提高性能,为用户带来新的效益。维护阶段的花费约占整个软件生存周期花费的67%。因此,应充分认识到维护现有软件的重要意义。

  1. 怎样防止维护的副作用?

答:修改代码所产生的副作用一般可以在退化测试过程中对其造成系统的故障进行查明和纠正;完善设计文档资料可以限制修改数据的副作用,在文档中描述了数据结构,并提供了一种把数据元素、记录、文件以及其他结构与系统模块联系起来的交叉对照表;在软件系统再次交付使用之前,对整个软件配置进行复审,将能大大减少文档资料的副作用。

  1. 什么是软件的可维护性?可维护性度量的特性是什么?

答:软件的可维护性是指维护人员为纠正软件系统出现的错误或缺陷,以及为满足新的要求而理解、修改和完善软件系统的难易程度。可维护性是所有软件系统都应具备的特点。在软件工程的每一阶段都应该努力提高系统的可维护性,在每个阶段结束前的审查和复审中,应着重对可维护性进行复审。

可维护性度量的特性主要有可理解性、可测试性和可修改性。可理解性被定义为人们通过阅读源代码和文档了解软件系统的结构、接口、功能、内部过程以及如何运行的难易程度;可测试性被定义为诊断和测试系统的难易程度;可修改性被定义为修改软件系统的难易程度;它们是密切相关的。

  1. 提高可维护性的方法有哪些?

答:在软件工程的每一阶段都应该努力提高系统的可维护性,在每个阶段结束前的审查和复审中,应着重对可维护性进行复审。

在需求分析阶段的复审中,应对将来要扩充和修改的部分加以注明。在讨论软件可移植性问题时,要考虑可能要影响软件维护的系统界面。

在软件设计的复审中,应从便于修改、模块化和功能独立的目标出发,评价软件的结构和过程,还应对将来可能修改的部分预先做准备。

在软件代码复审中,应强调编码风格和内部说明这两个影响可维护性的因素。

在软件系统交付使用前的每一测试步骤中都应给出需要进行预防性维护部分的提示。

在完成每项维护工作后,都应对软件维护本身进行仔细认真的复审。

为了从根本上提高软件系统的可维护性,人们正试图通过直接维护软件规格说明来维护软件 ,同时也在大力发展软件重用技术。

  1. 软件的可维护性与哪些因素有关?在软件开发过程中采取哪些才能提高软件产品的可维护性?

答:

软件的可维护性是指在规定的条件下,对软件进行修正以改正故障、提高性能或其他属性,以及适应环境变化的能力。软件可维护性与以下因素密切相关:

  1. 代码质量:清晰、简洁、一致的编码风格和良好的代码结构都有利于提高可维护性。
  2. 文档质量:详细的设计文档、用户手册和注释可以帮助维护者更快地理解软件。
  3. 模块化设计:软件设计时采用模块化可以使得各部分独立,便于理解和修改。
  4. 复杂度管理:减少软件复杂度,避免过度复杂的设计和实现。
  5. 标准遵循:遵循行业标准和最佳实践可以提高代码的可读性和可维护性。
  6. 依赖管理:合理管理外部库或组件的依赖关系,避免过度依赖不稳定或过时的组件。

在软件开发过程中,可以采取以下措施提高软件产品的可维护性:

  1. 编写清晰的代码:遵循编码标准和最佳实践,确保代码易于理解和修改。
  2. 进行代码审查:定期进行代码审查,以保证代码质量和一致性。
  3. 编写详细的文档和注释:保证项目文档的完整性,包括设计文档、用户手册和代码注释。
  4. 采用模块化和解耦的设计:通过模块化设计降低各部分之间的耦合度,使得单个模块可以独立更新和维护。
  5. 实现可测试性:编写可测试的代码并进行充分的单元测试,确保新的更改不会破坏现有功能。
  6. 版本控制的使用:使用版本控制系统来管理代码的变更,便于追踪历史和回滚更改。
  7. 重构:定期对代码进行重构,以改善其结构和清理不必要的复杂性。
  8. 持续集成和持续部署:实施CI/CD流程,以确保代码的集成和部署的自动化和一致性。
  9. 规划和管理依赖:谨慎选择外部库或框架,定期更新以避免安全漏洞和兼容性问题。

习题八答案

  1. 为什么要进行软件项目管理?

答:软件项目管理是对软件项目开发全过程的管理,是对整个软件生存期的所有活动进行管理。任何工程的成败,都与管理的好坏密切相关,软件项目也不例外。尤其是软件产品的特殊性,软件项目的管理对于保证软件产品的质量具有极为重要的作用,是软件项目开发成功的关键。

  1. 软件项目管理有哪些特点?

答:软件项目管理的主要特点包括如下几个方面:

⑴ 软件项目管理涉及的范围广,涉及软件开发进度计划、人员配置与组织、项目跟踪与控制等。

⑵ 应用到多方面的综合知识,特别是要涉及社会的因素、精神的因素、认知的因素,这比技术问题复杂得多。

⑶ 人员配备情况复杂多变,组织管理难度大。

⑷ 管理技术的基础是实践,为取得管理技术成果必须反复实践。

  1. 软件项目管理主要对哪些方面进行管理?

答:软件项目管理的对象是软件工程项目,因此软件项目管理涉及的范围覆盖了整个软件工程过程。软件项目管理的主要活动有:

⑴ 软件可行性分析

即从技术上、经济上和社会上等方面对软件开发项目进行估算,避免盲目投资,减少损失。

⑵ 软件项目的成本估算

从理论到具体的模型在开发前估算软件项目的成本,减少盲目工作。

⑶ 软件生产率

⑷ 通过对影响软件生产率的5种因素(人、问题、过程、产品和资源)进行分析,以便在软件开发时,更好地进行软件资源配置。

⑸ 软件项目质量管理

软件项目的质量管理也是软件项目开发的重要内容,对于影响软件质量的因素和质量的度量都是质量管理的基本内容。

⑹ 软件计划

开发软件项目的计划涉及实施项目的各个环节,带有全局的性质。计划的合理性和准确性往往关系着项目的成败。

⑺ 软件开发人员管理

软件开发的主体是软件开发人员,对软件开发人员的管理十分重要,它直接关系到如何发挥最大的工作效率和软件项目是否开发成功。

其中,软件项目的成本估算,重要的是项目所需资源的估算。软件项目资源估算指,在软件项目开发前,对软件项目所需的资源的估算。

①人力资源——在考虑各种软件开发资源时,人是最重要的资源。在安排开发活动时必须考虑人员的技术水平、专业、人数,以及在开发过程中各阶段对各种人员的需求,可按照Putnam-Nordan曲线安排。

②硬件资源——硬件是作为软件开发项目的一种工具而投入的。在计划软件项目开发时,考虑三种硬件资源,主要包括宿主机(软件开发时使用的计算机及外围设备)、目标机(运行已开发成功的软件的计算机及外围设备)和其他硬件设备(专用软件开发时需要的特殊硬件资源)。

③软件资源——软件在开发期间使用了许多软件工具来帮助软件的开发。因此软件资源实际就是软件工具集,主要软件工具分为业务系统计划工具集、项目管理工具集、支援工具、分析和设计工具、编程工具、组装和测试工具、原型化和模拟工具、维护工具、框架工具等。

④软件复用性及软件部件库——为了促成软件的复用,以提高软件的生产率和软件产品的质量,应建立可复用的软件部件库。对于软件的复用,人们经常忽略,但这却是相当重要的一环。

⑻软件项目风险管理

  1. 项目可行性报告包括哪几部分的内容?

答:包括如下内容:

⑴ 引言

系统名称、目标、功能、开发组织单位,服务对象等。

⑵ 系统开发的背景,必要性和意义

①现行系统的调查研究:组织机构、业务流程、工作负荷、费用、人员、设备、计算机应用情况、存在问题等。

②需求调查和分析:用户提出的需求及考虑经济改革和发展需要进行预测结果。

⑶ 新系统的几种方案介绍

①拟建系统目标

②系统规模及初步方案(粗略的逻辑模型)

③系统的实施方案(计划安排)

④投资方案

⑤人员培训及补充方案

⑥其他可供选择的方案

⑷ 可行性研究

1)技术上的可行性(按系统目标衡量)

①对现有技术的估价

②使用现有技术进行系统开发的可行性

③对技术发展可能产生影响的预测

④关键技术人员的数量和水平估计

2)经济上的可行性(估算成本/效益比)

①现有的经济条件

②开发、运行费用

③对系统效益的估计

④投资回收期

⑤成本/效益比

3)系统运行的可行性

①对组织机构的影响

②人员适应的可行性

③环境条件的可行性

⑸ 几种方案的比较分析

⑹ 结论

  1. 一个公司为它的电子商务网站建设发出标书,你的公司准备投标。作为项目负责人,请你估算这个项目的成本。

答:略。

  1. 竞标的对手实力很强,你准备采用压价的方式来争取这个项目吗?

答:略。

  1. 考察一个实际的项目,看看项目涉及的人员有哪几类,他们各自负责什么样的工作。

答:略。

  1. 如果你是培训经理,负责对项目中的程序员进行程序设计语言C#的培训。那些接受培训的程序员有刚从学校毕业的学生,也有从其他公司跳槽过来的人员。请根据他们的不同特点制定一套合理的培训方案。

答:略。

  1. 请设计一份问卷调查表,其内容主要涉及各类人员在项目进行过程中的心理和生理需求,然后进行抽样调查。

答:略。

  1. 分析你的问卷调查结果,看看能得出什么样的结论。

答:略。

  1. 有这样一个项目,参与人员较多,公司分配给项目组的办公面积也有1 000 m2^{\mathrm{2}}​2​​,还有各种开发设备。假设你是项目负责人,请根据你得出的调查结论,提出一套方案对项目中涉及的硬件设施和人员进行分配和管理。

答:略。

  1. 如果你接手了一项前任项目经理未完成的项目,那么你打算如何对项目进行管理?

答:略。

  1. 影响软件质量的因素有哪些?

答:影响软件质量的因素如下表所示。

质量因素 定 义
正确性 系统满足规格说明和优化目标的程度,即在预定环境下能正确地完成预期功能的程度
健壮性 在硬件故障、操作错误等意外情况下,系统能作出适当反应的程度
效 率 为完成预定功能,系统需要的计算资源的多少
完整性 即安全性,对非法使用软件或数据,系统能够控制(禁止)的程度
可用性 对系统完成预定功能的满意程度
风 险 能否按照预定成本和进度完成系统,并为用户所满意的程度
可理解性 理解和使用该系统的容易程度
可维护性 诊断和改正运行时所发现错误所需工作量的大小
灵活性 即适应性,修改或改进正在运行的系统所需工作量的大小
可测试性 软件易测试的程度
可移植性 改变系统的软、硬件环境及配置时,所需工作量的大小
可再用性 软件在其他系统中可被再次使用的程度(或范围)
互运行性 把该系统与另一个系统结合起来所需的工作量
  1. 假设你正在负责一项软件开发项目,你的客户对软件的质量非常关心。请写一份质量度量报告来取信你的客户。

答:略。

  1. ERP系统的管理思想是什么?

答:ERP(Enterprise Resource Planning)即企业资源规划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。ERP系统集信息技术与先进的管理思想于一身,成为现代企业的先进运行模式,反映时代对企业合理调配资源,最大化地创造社会财富的要求,成为企业在信息时代生存、发展的基石。

  1. 有人说,一个公司不上ERP是等死,上ERP是找死。你如何理解这样的抱怨?又打算怎样来反驳?

答:略。

习题九答案

一、选择题

  1. CMM表示( A )。

    A) **软件能力成熟度模型 ** B) 软件过程工业化控制

     C) 国际软件质量认证 	        	D) 软件统一性标准
    
  2. 软件过程和产品质量有详细的度量标准,并且得到了定量的认识和控制。以下(C )具有上述特征。

    A) 可重复级 B) 已定义级 C)** 已管理级 ** D) 优化级

  3. CMM是开发高效率、高质量和低成本软件时,普遍采用的软件生产过程标准,它的主要用途不包括( C )。

A) 软件过程评估 B) 软件过程改进 C) 软件过程控制 D) 软件能力评价

  1. CMMI的开发和应用的主要原因是(A B D)。

    A) 解决软件项目的过程改进难度增大问题

B) 实现软件工程的并行与多学科组合

C) 降低软件风险的需要

D) 实现过程改进的最佳效益

二、 判断题

  1. CMM是指导软件开发的一种面向对象的新技术。 (×)

  2. CMM将软件过程的成熟度分为以下5个级别:初始级、可重复级、已定义级、已管理级和优化级。 (√ )

3.CMM对开发一个软件所做的基本要求是“有章可循,有章必循”。 (√ )

4.CMM侧重评价软件产品的各项指标是否已达到了标准;ISO 9000则强调了软件开发的过程控制和预见性。(×)

5.CMM的两种类型的评估分别是:软件过程评估和软件能力评价。(√ )

6.每个关键过程域所包含的关键实践仅涉及4个方面:执行约定、执行能力、实施活动和验证实施。(×)

三、 简答题

  1. CMM将软件过程的成熟度分为哪几个级别?

答:初始级、可重复级、已定义级、已管理级和优化级。

2.如何描述CMM软件能力成熟度模型分级结构及主要特征?

答:CMM提供了一个阶梯式的过程成熟度框架,这一框架由5个成熟度等级构成。除初始级以外,其余的成熟度等级都包含了若干个关键过程域,每个关键过程域又包含了若干个关键实践,这些关键实践按照5个共同特点加以组织,分别是执行约定、执行能力、执行活动、测量和分析、验证执行。每个共同特性进一步又划分成若干关键实践,当这些关键实践都得到实现时,就完成了关键过程域的目标。

  1. 简述基于CMM评估的内容、评估过程和评估模型。

答:CMM的评估要遵循SEI的CAF规范。评估过程包括员工培训、问卷调查和统计、文档审查、数据分析、与企业的高层领导讨论和撰写评估报告等,评估结束时由主任评估师签字生效。

目前主要有两种基于CMM的评估方法:一种是CBA-SCE,基于CMM对组织的软件能力进行评估,是由组织外部的评估小组对该组织的软件能力进行的评估,另一种是CBA-IPI,是基于CMM对内部的过程改进进行的评估,是由组织内部和外部人员联合组成的评估小组对软件组织本身进行评估以改进质量。

评估参考模型由二维组成:过程维可用来测量的主要过程目标来描述;过程能力维用于任何过程的一系列过程属性来描述。这一系列过程属性表示管理一个过程和改进过程实施能力所必须的可测量的特性。

  1. CMM的关键过程域是如何划分的?如何将这些过程域在CMM进行分类?

答:在CMM中一共有18个关键过程域,分布在2~5个级别中:

(1)可重复级中的关键过程域集中关注从非软件工程化向软件工程化转变初期必须做好的事情。其中包括它的6个关键过程域。

(2)已定义级中的关键过程域既涉及项目,又涉及组织,这是因为组织建立了对所有项目都有效的软件工程过程和管理过程的规范化基础设施。该等级包括7个关键过程域。

(3)已管理级中的关键过程域的主要任务是为软件过程和软件产品建立一种可以理解的定量的方式。该等级中有两个关键过程域,即定量过程管理和软件质量管理。

(4)优化级有3个关键过程域,主要涉及的内容是软件组织和项目中如何实现持续不断的过程改进。

  1. CMMI有哪些特点?

答:CMMI是一套包括多个学科、可扩充的模型系列

⑴ 解决软件项目的过程改进难度增大问题。

⑵ 实现软件工程的并行与多学科组合:并行工程、交叉学科群组、交叉功能群组、集成化产品群组以及集成化产品和过程开发等,都代表了在产品或服务的整个生存周期的合适时间处理这类问题的不同方法。

⑶ 实现过程改进的最佳效益:正如通过CMM的过程改进能够产生显著的效益一样,集成过程改进也能产生更大的效益。包括:成本、侧重点、过程集成和灵活性。

  1. 目前CMMI包括哪些子模型?

答:CMMI模型系列,现在使用的最新模型是2002年发布的V.1.1版本系列,分4个学科,分别简称为CMMI-SE/SW/IPPD/SS(系统工程、软件工程、集成化产品和过程开发,供应商管理能力模型集成)、CMMI-SE/SW/IPPD(系统工程、软件工程、集成化产品和过程开发能力模型集成)、CMMI-SE/SW(系统工程和软件工程能力模型集成)、CMMI-SW(软件工程能力模型集成)。由于CMMI是可扩充的集合,今后可能还会有新的学科模型出现。

7.CMM 和 CMMI有哪些差别?

答:UML建模过程是一个迭代过程。每次迭代都建立相应的模型。分为以下几个阶段: ① 分析阶段。建模的目的是捕捉系统的功能需求,分析、提取所开发系统的“客观世界”领域的类以及描述它们的合作关系。常以用例图为首选模型。 ② 设计阶段。建模的目的是通过考虑实现环境,将分析阶段的模型扩展和转化为可行的技术实现方案。常建立以类图为主的静态模型,及包括状态模型、顺序模型、活动模型和合作模型等 动态模型。 ③ 实现阶段。主要工作就是进行编码,同时对已构造的模型作相应的修正。 ④ 配置阶段。通过模型描述所开发系统的软硬件配置情况建立配置模型。 ⑤ 测试阶段。使用前几个阶段所构造的模型来指导和协助测试工作。


网站公告

今日签到

点亮在社区的每一天
去签到