软件过程模型(软件开发模型)详细内容请见
模型 | 要点 |
---|---|
瀑布模型 | 适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目。 |
V模型 | 强调测试贯穿项目始终,而不是集中在测试阶段。是一种测试的开发模型。 |
原型模型 | 典型的原型开发方法模型。适用于需求不明确的场景,构造简易系统,可以帮助用户明确需求。 |
增量模型 | 融合了瀑布模型的基本成分和原型实现的迭代特征,可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试。强调每一个增量均发布一个可操作的产品。 |
螺旋模型 | 典型特点是引入了风险分析。结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。属于面向对象开发模型,强调风险引入。 |
喷泉模型 | 典型的面向对象的模型。特点是迭代、无间隙。会将软件开发划分为多个阶段,但各个阶段无明显界限,并且可以迭代交义。 |
统一过程模型 | 典型特点是用例驱动、以架构为中心、迭代和增量。统一过程把一个项目分为四个不同的阶段: 构思阶段:包括用户沟通和计划活动两个方面,强调定义和细化用例,并将其作为主要模型。 细化阶段:包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示。 构建阶段:将设计转化为实现,并进行集成和测试。 移交阶段:将产品发布给用户进行测试评价,并收集用户的意见,之后再次进行迭代修改产品使之完善 |
敏捷开发 | 敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想。常见的敏捷开发方法有极限编程法、水晶法、并列争球法和自适应软件开发方法。 (1)极限编程是一种轻量级的开发方法,它提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准。 (2)水晶法强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。 (3)并列争球法的核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件。 (4)自适应软件开发的核心是三个非线性的,重叠的开发阶段:猜测、合作、学习。 |
基于构件的开发模型 | 构件的复用 |
结构化开发方法
原型开发方法
面向对象的开发方法
面向服务的开发方法
软件设计的原则:高内聚、低耦合
内聚类型 | 描述 |
---|---|
偶然聚合 | 模块完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系。 |
逻辑聚合 | 模块内部的各个组成在逻辑上具有相似的处理动作,但功能用途上彼此无关。 |
时间聚合 | 模块内部的各个组成部分所包含的处理动作必须在同一时间内执行。 |
过程聚合 | 模块内部各个组成部分所要完成的动作虽然没有关系,但必须按特定的次序执行。 |
通信聚合 | 模块的各个组成部分所完成的动作都使用了同一个数据或产生同一输出数据。 |
顺序聚合 | 模块内部的各个部分,前一部分处理动作的最后输出是后一部分处理动作的输入。 |
功能聚合 | 模块内部各个部分全部属于一个整体,并执行同一功能,且各部分对实现该功能都必不可少 |
耦合类型 | 描述 |
---|---|
非直接耦合 | 两个模块之间没有直接关系,它们的联系完全是通过主模块的控制和调用来实现的。 |
数据耦合 | 两个模块彼此间通过数据参数交换信息。 |
标记耦合 | 一组模块通过参数表传递记录信息,这个记录是某一个数据结构的子结构,而不是简单变量。 |
控制耦合 | 两个模块彼此间传递的信息中有控制信息。 |
外部耦合 | 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。 |
公共耦合 | 两个模块之间通过一个公共的数据区域传递信息。 |
内容耦合 | 一个模块需要涉及到另一个模块的内部信息。 |
黑盒测试:等价类划分、边界值分析、错误推测、因果图。
白盒测试:语句覆盖、判定覆盖、条件覆盖、条件/判定覆盖、路径覆盖。
灰盒测试
各类测试详细内容见链接。
各测试阶段的任务:
(1)验收测试:有效性测试、软件配置审查、验收测试。
(2)系统测试:恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试。
(3)集成测试:模块间的接口和通信。
(4)单元测试:模块接口、局部数据结构、边界条件、独立的路径、错误处理。
(5)其他测试:回归测试(修改软件后进行的测试,防止引入新的错误)。负载测试(对软件负载能力的测试)。压力测试(对软件超负荷条件下运行情况的测试)。
基本每年都有一个选择题。
详细McCabe复杂度计算方法请见。
维护类型 | 描述 |
---|---|
更正性维护 |
针对真实存在并已经发生的错误进行的维护行为。 |
预防性维护 |
针对真实存在但还未发生的错误进行的维护。 |
适应性维护 |
指使应用软件适应信息技术变化和管理需求变化而进行的修改。企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。 |
完善性维护 |
扩充功能和改善性能而进行的修改。对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。 |
类型 | 内容 |
---|---|
功能性 | 适用性、准确性、互操作性、安全保密性 |
可靠性 | 成熟性、容错性、易恢复性 |
易用性 | 易理解性、易学性、易操作性、吸引性 |
效率 | 时间特性、资源利用性 |
维护性 | 易分析性、稳定性、易测试性、易改变性 |
可移植性 | 适应性、易安装性、共存性、易替换性 |
(1)功能性(Functionality)。与一组功能及其指定的性质的存在有关的一组属性,功能是指满足规定或隐含需求的那些功能。
(2)可靠性(Reliability)。与在规定的一段时间内和规定的条件下软件维持在其性能水平有关的能力。
(3)易使用性(Usability)。与为使用所需的努力和由一组规定或隐含的用户对这样使用所做的个别评价有关的一组属性。
(4)效率(Efficiency)。在规定条件下,与软件的性能水平与所用资源量之间的关系有关的软件属性。
(5)可维护性(Maintainability)。与进行规定的修改所需要的努力有关的一组属性。
(6)可移植性(Portability)。与软件可从某一环境转移到另一环境的能力有关的一组属性。
CMMI 能力成熟度模型集成 |
描述 |
---|---|
初始级 | 杂乱无章,甚至混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。 |
可重复级 | 建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。 |
已定义级 | 管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准过程。 |
已管理级 | 制定了软件过程和产品质量的详细度量标准。 |
优化级 | 加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进。 |
CMMI阶段式模型 | 描述 |
---|---|
初始的 | 过程不可预测且缺乏控制 |
已管理的 | 过程为项目服务 |
已定义的 | 过程为组织服务 |
定量管理的 | 过程已度量和控制 |
优化的 | 集中于过程改进 |
CMMI连续式模型 | 描述 |
---|---|
CL0(未完成的) | 过程域未执行或未得到CL1中定义的所有目标 |
CL1(已执行的) | 其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标 |
CL2(已管理的) | 其共性目标是集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制、和评审。 |
CL3(已定义级的) | 其共性目标集中于已定义的过程的制度化。过程是按照组织的裁剪指南从组织的标准过程中裁剪得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进 |
CL4(定量管理的) | 其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的质量目标作为管理准则 |
CL5(优化的) | 使用量化(统计学)手段改变和优化过程域,以满足客户的改变和持续改进计划中的过程域的功效 |
CMM模型 | 描述 |
---|---|
初始级 | 杂乱无章,甚至混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用 |
可重复级 | 建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功 |
已定义级 | 管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准过程。 |
已管理级 | 制定了软件过程和产品质量的详细度量标准 |
优化级 | 加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进 |
【试题解析】∶在本题的两个空中,第1个空比较容易,由于题目明确说明"用户需求不清晰且经常发生变化"所以只有原型化方法适用。而第2空需求变化不大的情况下,其实多种模型都可用,所以另一条线索成为解题关键,即"数据处理领域问题"。结构化方法的基本特征是:自顶向下,逐层分解,也适合于大型的数据处理系统,所以用他最合适。
【试题解析】∶结构化开发方法是一种面向数据流的开发方法,其基本思想是软件功能的分解和抽象。结构化开发方法又称生命周期法,是迄今为止最传统、应用最广泛的一种信息系统开发方法。结构化开发方法采用系统工程的思想和工程化的方法,按用户至上的原则,结构化、模块化、自顶向下地对信息系统进行分析与设计。该方法严格按照信息系统开发的阶段性开展设计工作,每个阶段都产生一定的设计成果,通过评估后再进入下一阶段开发工作。因此,结构化开发方法具有以下优点:
结构化开发方法存在的不足主要是开发周期太长,个性化开发阶段的文档编写工作量过大或过于烦琐,无法发挥开发人员的个性化开发能力。一般来说,结构化开发方法主要适用于组织规模较大、组织结构相对稳定的企业,这些大型企业往往业务处理过程规范、信息系统数据需求非常明确,在一定时期内需求变化不大。
【试题解析】∶面向数据流的设计是以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构,因此又称结构化设计。该方法由美国IBM公司L.Constantine和E.Yourdon等人于1974年提出,与结构化分析(SA)衔接,构成了完整的结构化分析与设计技术,是目前使用最广泛的软件设计方法之一。
各种软件系统,不论DFD如何庞大和复杂,一般可分为变换型和事务型,一个软件系统既可以只有一种数据流类型,也可以是两种数据流类型。在结构化设计中,可以将数据流映射为软件系统的模块结构,不同类型的数据流有不同的映射方法。
【试题解析】∶极限编程( extreme Programming.XP)是1998年由Kent Beck首先提出的一种轻量级的软件开发方法,同时也是一种非常严谨和周密的方法。这种方法强调交流、简单、反馈和勇气4项原则,也就是说一个软件项目可以从4个方面进行改善:加强交流;从简单做起;寻求反饿;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期。通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和可能存在的困难等,并根据实际情况及时地调整开发过程。
【试题解析】∶本题考查面向对象开发方法。面向对象开发方法有Booch方法、Coad方法和OMT方法。Jackson方法是一种面向数据结构的开发方法。
【试题解析】∶A选项过程内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。
B选项时间内聚。如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。
C选项顺序内聚。如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。本题描述的是C选项。
D选项逻辑内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。
【试题解析】∶要求功能是以特定的次序执行,所以是过程内聚。
【试题解析】∶功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。
顺序内聚:处理元素相关,而且必须顺序执行。
通信内聚:所有处理元素集中在一个数据结构的区域上。
过程内聚:处理元素相关,而且必须按特定的次序执行。
瞬时内聚:所包含的任务必须在同一时间间隔内执行(如初始化模块)。
逻辑内聚:完成逻辑上相关的一组任务。
偶然内聚:完成一组没有关系或松散关系的任务。
巧合内聚就是偶然内聚。偶然内聚由于内容都是不相关的,所以必然导致它与外界多个模块有关联,这也使得模块间的耦合度增加。
【试题解析】∶如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。本题为通信内聚。
逻辑聚合:模块内部的各个组成在逻辑上具有相似的处理动作,但功能用途上彼此无关。
过程聚合:模块内部各个组成部分所要完成的动作虽然没有关系,但必须按特定的次序执行。
内容耦合:—个模块需要涉及另一个模块的内部信息。
【试题解析】∶内聚是指模块内部各元素之间联系的紧密程度,模块的内聚类型通常可以分为7种,根据内聚度从高到低排序分别如下:
功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。
顺序内聚:处理元素相关,而且必须顺序执行。
通信内聚:所有处理元素集中在一个数据结构的区域上。
过程内聚:处理元素相关,而且必须按特定的次序执行。
瞬时内聚:所包含的任务必须在同一时间间隔内执行(如初始化模块)。
逻辑内聚:完成逻辑上相关的一组任务。
偶然内聚:完成一组没有关系或松散关系的任务。
【试题解析】∶本题考查软件模块化的基本概念。
模块的内聚性表现了模块内部各个子成分功能的集中程度,分为6级,如下图所示:
【试题解析】∶数据耦合是通过参数表传递简单信息。
公共耦合是多个模块访问同一个公共数据环境。
外部耦合是一组模块访问同一个全局简单变量而没有通过参数表传递。
内容耦合是一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口。本题描述的是内容耦合。
【试题解析】∶数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。
公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
标记耦合︰一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。本题描述的是标记耦合。
【试题解析】∶非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。
标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。其实传递的是这个数据结构的地址;
控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合。
(1)一个模块直接访问另一个模块的内部数据;
(2)一个模块不通过正常入口转到另一模块内部;
(3)两个模块有一部分程序代码重叠(只可能出现在汇编语言中);
(4)一个模块有多个入口。
根据本题题干描述,采购子系统"给财务子系统传递采购金额、收款方和采购日期等信息”,传递时应将这些数据包装在数据结构中,因此二者之间是标记耦合。
【试题解析】∶耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。
【试题解析】∶数据耦合:两个模块彼此间通过数据参数交换信息。
标记耦合:一组模块通过参数表传递记录信息,这个记录是某一个数据结构的子结构,而不是简单变量。
控制耦合:两个模块彼此间传递的信息中有控制信息。
内容耦合:一个模块需要涉及另一个模块的内部信息。
本题应该选择B选项。
【试题解析】∶耦合是指两个或两个以上的模块相互依赖于对方的一个量度。它可以分为非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合及内容耦合等。
当一个模块直接修改或操作另一个模块的数据或者直接转入另一个模块时,就发生了内容耦合。所以本题的答案选D。
【试题解析】∶由于模块A和模块E都引用了专用数据区的内容,所以是公共耦合。
【试题解析】∶本题考查软件模块化的基本概念。
模块的耦合度表现了模块之间相互关联的程度,分为b级,如下图所示:
【试题解析】∶软件设计原则始终强调高内聚、低耦合的设计原则。具体包括:
保持模块的大小适中
尽可能减少调用的深度
多扇入,少扇出。
单入口,单出口
模块的作用域应该在模块之内
功能应该是可以被预测的。
综上所述,仅有C选项模块规模越小越好是不符合设计原则的。
【试题解析】∶模块控制域:这个模块本身以及所有直接或间接从属于它的模块的集合。
模块作用域:指受该模块内一个判定所影响的所有模块的集合。
模块的作用域应该在控制域范围之内,本题选择B选项。
【试题解析】∶1、模块化设计要求高内聚、低耦合,模块独立体现的就是高内聚低耦合。A选项正确。
2、在结构化设计中,系统由多个逻辑上相对独立的模块组成,在模块划分时需要遵循如下原则:
(1)模块的大小要适中。系统分解时需要考虑模块的规模,过大的模块可能导致系统分解不充分,其内部可能包括不同类型的功能,需要进一步划分,尽量使得各个模块的功能单一;过小的模块将导致系统的复杂度增加,模块之间的调用过于频繁,反而降低了模块的独立性。不是越小越好。B选项错误。
(2)模块的扇入和扇出要合理。模块的扇入指模块直接上级模块的个数。模块的直属下级模块个数即为模块的扇出。
(3)深度和宽度适当。深度表示软件结构中模块的层数,如果层数过多,则应考虑是否有些模块设计过于简单,看能否适当合并。宽度是软件结构中同一个层次上的模块总数的最大值,一般说来,宽度越大系统越复杂,对宽度影响最大的因素是模块的扇出。在系统设计时,需要权衡系统的深度和宽度,尽量降低系统的复杂性,减少实施过程的难度,提高开发和维护的效率。需要控制模块接口的复杂性。D选项正确。
3、尽力使模块的作用域在其控制域之内。模块控制域:这个模块本身以及所有直接或间接从属于它的模块的集合。模块作用域:指受该模块内一个判定所影响的所有模块的集合。C选项正确。
【试题解析】∶在结构化设计中,系统由多个逻辑上相对独立的模块组成,在模块划分时需要遵循如下原则:
(1)模块的大小要适中。系统分解时需要考虑模块的规模,过大的模块可能导致系统分解不充分,其内部可能包括不同类型的功能,需要进一步划分,尽量使得各个模块的功能单一;过小的模块将导致系统的复杂度增加,模块之间的调用过于频繁,反而降低了模块的独立性。一般来说,一个模块的大小使其实现代码在1~2页纸之内,或者其实现代码行数在50~200行之间,这种规模的模块易于实现和维护。
(2)模块的扇入和扇出要合理。一个模块的扇出是指该模块直接调用的下级模块的个数;扇出大表示模块的复杂度高,需要控制和协调过多的下级模块。扇出过大一般是因为缺乏中间层次,应该适当增加中间层次的控制模块;扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。一个模块的扇入是指直接调用该模块的上级模块的个数;扇入大表示模块的复用程度高。设计良好的软件结构通常顶层扇出比较大,中间扇出较少,底层模块则有大扇入。一般来说,系统的平均扇入和扇出系数为3或4,不应该超过7,否则会增大出错的概率。
(3)深度和宽度适当。深度表示软件结构中模块的层数,如果层数过多,则应考虑是否有些模块设计过于简单,看能否适当合并。宽度是软件结构中同一个层次上的模块总数的最大值,一般说来,宽度越大系统越复杂,对宽度影响最大的因素是模块的扇出。在系统设计时,需要权衡系统的深度和宽度,尽量降低系统的复杂性,减少实施过程的难度,提高开发和维护的效率。
【试题解析】∶高内聚是使模块的功能要相对独立和单一,这个功能单纯意思有出入。
对于单一,是指尽量只做一件事,而功能单纯,并不能说明模块能且仅能完成一个功能。
相对其他选项而言,D选项的说法并不合适。
【试题解析】∶一个模块的作用范围(或称影响范围)指受该模块内一个判定影响的所有模块的集合。
一个模块的控制范围指模块本身以及其所有下属模块((直接或间接从属于它的模块)的集合。
一个模块的作用范围应在其控制范围之内,且判定所在的模块应在其影响的模块在层次上尽量靠近。如果再设计过程中,发现模块作用范围不在其控制范围之内,可以用"上移判点"或下移受判断影响的模块,将它下移到判断所在模块的控制范围内"的方法加以改进。
【试题解析】∶人机交互"黄金三原则"包括:用户操纵控制、减轻用户的记忆负担、保持界面的一致性。
用户操纵控制:以不强迫用户进入不必要或不希望的动作的方式来定义交互模式;提供灵活的交互;允许中断和撤销用户交互;当技能级别增长时可以使交互流线化并允许定制交互;使用户与内部技术细节隔离开来;设计应允许用户与出现在屏幕上的对象直接交互。
减轻用户的记忆负担:减少对短期记忆的要求;建立有意义的默认;定义直观的快捷方式;界面的视觉布局应该基于真实世界的象征;以不断进展的方式揭示信息。
保持界面的一致性:允许用户将当前任务放入有意义的环境中;在应用系统家族中保持一致;如果过去的交互模型已经建立起了用户期望,除非有不得已的理由,否则不要改变它。
【试题解析】∶其中系统测试和验收测试是针对于需求分析,集成测试针对于概要设计,单元测试针对于详细设计,软件实现应该是针对于编码部分。
【试题解析】∶一个高效的测试是指用少量的测试用例,发现被测软件尽可能多的错误。软件测试不能说明软件中不存在错误,不能用穷举法来进行测试。A选项错误。
经验表明,测试中存在集群规律,即未发现的错误数量与已发现的错误数量成正比,已发现的错误数量越多,则该模块未被发现的错误也就越多。B选项错误。
软件测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。C选项错误。
D选项的描述是正确的,白盒测试中语句覆盖是覆盖度最弱的,所以路径覆盖往往能比语句覆盖发现更多的错误。
【试题解析】∶无论哪种调试方法,其目的都是为了对错误进行定位。目前常用的调试方法有试探法、回溯法、对分查找法、演绎法和归纳法。
试探法:调试人员分析错误的症状,猜测问题所在的位置,利用在程序中设置输出语句,分析寄存器、存储器的内容等手段获得错误的线索,一步一步地试探和分析出错误所在。这种方法效率都很低,适合于错误比较简单的程序。
回溯法:调试人员从发现错误症状的位置开始,人工沿着程序的控制流程往回跟踪代码,直到找出错误根源为止。这种方法适合于小型程序,对于大规模程序,由于其需要回溯的路径太多而变得不可操作。
对分查找法:这种方法主要用来缩小错误的范围,如果已经知道程序中的变量在若干位置的正确取值,可以在这些位置给这些变量以正确值,观察程序运行的输出结果,如果没有发现问题,则说明从赋予变量一个正确值开始到输出结果之间的程序没有错误,问题可能在除此以外的程序中。否则错误就在所观察的这部分程序中,对含有错误的程序段再使用这种方法,直到把故障范围缩小到比较容易诊断为止。
归纳法:归纳法就是从测试所暴露的问题出发,收集所有正确或不正确的数据,分析它们之间的关系,提出假想的错误原因,用这些数据来证明或反驳,从而查出错误所在。本题题干描述的是归纳法。
演绎法:演绎法根据测试结果,列出所有可能的错误原因;分析已有数据,排除不可能和彼此矛盾的原因;对其余原因,选择可能性最大的,利用已有的数据完善该假设,使假设更具体;用假设来解释所有的原始测试结果,如果能解释这一切,则假设得以证实,也就是找出错误,否则,要么是假设不完备或不成立,要么有多个错误同时存在,需要重新分析,提出新的假设,直到发现错误为止。
【试题解析】∶软件测试的目的是为了发现尽可能多的缺陷。
【试题解析】∶测试用例要包括欲测试的功能、应输入的数据和预期的输出结果。测试用例应覆盖有效合理输入,也要包含不合理、失效的输入。
【试题解析】∶软件测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件产品(主要是指程序)中的错误和缺陷。软件测试是软件质量保证的主要手段之一,软件测试应该尽可能早地计划和设计测试用例,而不是从编码阶段开始。
一个好的测试用例是极有可能发现至今为止尚未发现的错误的测试用例。一次成功的测试是发现了至今为止尚未发现的错误的测试。一个高效的测试是指用少量的测试用例,发现被测软件尽可能多的错误。软件测试不能说明软件中不存在错误。
经验表明,测试中存在集群规律,即未发现的错误数量与已发现的错误数量成正比,已发现的错误数量越多,则该模块未被发现的错误也就越多。
【试题解析】∶测试人员应该在系统设计阶段介入,根据概要设计说明书开始制定测试计划:测试过程要求用户参与,特别是提交阶段要通过用户的验收测试;设计测试用例时不但要选择合理的输入数据作为测试用例,还要选择不合理的输入数据作为测试用例。
【试题解析】∶对于第一小组:发现了第二组发现的错误的15/30=0。5=50%
对于第二小组:发现了第一组发现的错误的15/25=0。6=60%
根据第一组的发现的错误数和第一组的效率得到:25÷50%=50
根据第二组的发现的错误数和第二组的效率得到:30÷60%=50
由于两个小组是独立进行测试的,所以可以估计:程序中的错误总数为50个。
【试题解析】∶根据等价类划分的原则,如果规定了输入数据的范围,则可划分为1个有效等价类和2个无效等价类。学生年龄的输入范围为16~40,则有效等价类为16s年龄≤40,两个无效等价类为年龄>40或年龄<16。
【试题解析】∶本题考查系统测试中的确认测试。确认测试首先要进行有效性测试以及软件配置审查,然后进行验收测试和安装测试。其中有效性测试,就是在模拟环境下,通过黑盒测试检验所开发的软件是否与需求规格说明书一致。
①6、7、13; ②4、7、10; ③39、20、35;
④9、11、21; ⑤5、5、4;⑥4、4、4。
【试题解析】∶本题考查黑盒测试技术的等价类划分。①为前两边之和等于第三边;②为三边不等且任意两边之和大于第三边;③④前两边之和小于第三边;⑤为其中有两边相等且可构成等腰三角形;⑥为三边相等且可构成等边三角形。
【试题解析】∶本题考查软件开发阶段与测试的对应关系。通过单元测试,(也称为模块测试)消除程序模块内部存在的错误和缺陷,这类测试在代码编写阶段完成,通过集成测试(也称为组装测试)检测和排除子系统结构上的错误和缺陷,通过确认验收测试,验证软件功能是否满足用户要求,通过系统测试,在已确认的计算机软硬件环境下,通过与系统需求对比,发现系统与用户需求不符或矛盾的地方。
【试题解析】∶在软件外部,可以用 MTTR 来度量软件的可维护性,它指出处理一个有错误的软件需要花费的平均时间。如果用M表示可维护性指标,那么 M=1/(1+MTTR)。本题选择 D 选项。
A选项一般用来表示可靠性或可用性指标。
【试题解析】∶软件维护是软件生命周期最长的一段,相对于软件开发任务而言,软件维护工作要更加复杂,D选项描述不正确。
【试题解析】∶辅助软件维护过程中的活动的软件称为"软件维护工具”,它辅助维护人员对软件代码及其文档进行各种维护活动。软件维护工具主要有:1、版本控制工具;2、文档分析工具;3、开发信息库工具;4、逆向工程工具;5、再工程工具;6、配置管理支持工具。
【试题解析】∶在软件开发的各个阶段都需考虑软件的可维护性。
【试题解析】∶在软件开发的各个阶段都需考虑软件的可维护性。
【试题解析】∶在系统运行过程中,软件需要维护的原因是多样的,根据维护的原因不同,可以将软件维护分为以下四种:
(1)改正性维护。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程就称为改正性维护。
(2)适应性维护。在使用过程中,外部环境(新的硬、软件配置)、数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。为使软件适应这种变化,而去修改软件的过程就称为适应性维护。
(3)改善性维护。在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动称为改善性维护。
(4)预防性维护。这是指预先提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础。本题对该销售系统的修改是为了应对数据格式的变化而作出的修改。
【试题解析】∶改正性维护也叫正确性维护,是指在使用过程中发现了隐蔽的错误后,为了诊断和改正这些隐蔽错误而修改软件的活动。
适应性维护是指为了适应变化了的环境而修改软件的活动。
完善性维护是指为了扩充或完善原有软件的功能或性能而修改软件的活动。
预防性维护是指为了提高软件的可维护性和可靠性、为未来的进一步改进打下基础而修改软件的活动。
防错性的程序设计,可以减少在系统运行时发生错误,有效地控制正确性维护的成本。
【试题解析】∶软件维护的内容一般包括准确性维护、适应性维护、完善性维护和预防性维护。正确性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。适应性维护是指使应用软件适应信息技术变化和管理需求变化而进行的修改。完善性维护主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。预防性维护是指为了适应未来的软硬件环境的变化,主动增加预防性的新功能,以使应用系统适应各类变化而不被淘汰。
【试题解析】∶易用性的自特性包括易理解性、易学性、易操作性,其中C选项易分析性属于可维护性的子特性。
【试题解析】∶可维护性质量特性是指与软件维护的难易程度相关的一组软件属性,它包含了易分析性、稳定性、易测试性和易改变性4个子特性。其中:
易分析性是描述诊断缺陷或失效原因、判定待修改程度的难易程度的特性。
稳定性是描述修改造成难以预料的后果的风险程度,风险程度越低,稳定性越好。
易测试性是描述测试已修改软件的难易程度的特性。
易改变性是描述修改、排错或适应环境变化的难易程度。
本题中,是说与为确认经修改软件所需努力有关的软件属性,也就是说要确认修改后的软件是否正确所要付出的努力,这应该是易测试性所描述的内容,因此本题答案选A。
【试题解析】∶功能性是指与功能及其指定的性质有关的一组软件质量;可靠性是指衡量在规定的一段时间内和规定条件下维护性能水平的一组软件质量;可维护性是指与软件维护的难易程度相关的一组软件属性;易使用性是指与使用难易程度及规定或隐含用户对使用方式所做的评价相关的属性。
综上所述,可以知道将每个用户的数据和其他用户的数据隔离开,是考虑了软件的功能性质量特性。
【试题解析】∶CMM中1级成熟度最低,5级成熟度最高,B选项描述错误,其他选项描述都是正确的。
【试题解析】∶《软件设计师教程(第5版)》P247页:
CLO(未完成的)∶过程域未执行或未得到CL1中定义的所有目标。
CL1(已执行的)∶其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
CL2(已管理的)︰其共性目标是集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制和评审。
CL3(已定义级的)∶其共性目标集中于已定义的过程的制度化。过程是按照组织的裁剪指南从组织的标准过程中裁剪得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。
CL4(定量管理的)∶其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的质量目标作为管理准则。
CL5(优化的)∶使用量化(统计学))手段改变和优化过程域,以满足客户的改变和持续改进计划中的过程域的功效。
【试题解析】∶本题考查能力成熟度模型,参考《软件设计师教程(第5版《软件设计师教程((第5版)》P247页:
CL1(未完成的)︰过程域未执行或未得到CL1中定义的所有目标。
CL1(已执行的)︰其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
CL2(已管理的)︰其共性目标是集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制和评审。
CL3(已定义级的)︰其共性目标集中于已定义的过程的制度化。过程是按照组织的裁剪指南从组织的标准过程中裁剪得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。
CL4 (定量管理的)︰其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的质量目标作为管理准则。
CL5(优化的)∶使用量化(统计学)手段改变和优化过程域,以满足客户的改变和持续改进计划中的过程域的功效。
【试题解析】∶CMM的分级结构及其过程描述:
(1)初始级:软件过程的特点是无秩序或说无定规的,有时甚至是混乱的。软件过程定义几乎处于无章法、无步骤可循的状态,软件产品所取得的成功往往依赖于极个别人的努力和机遇。
(2)可重复级:已建立了基本的项目管理过程,可用于对成本、进度和功能特性进行跟踪。对类似的应用项目,有章可循并能重复以往所取得的成功。
(3)已定义级:用于管理的和工程的软件过程均已文档化、标准化,并形成了整个软件组织的标准软件过程。全部项目均采用与实际情况相吻合的、适当修改后的标准软件过程来进行操作。
(4)已管理级:软件过程和产品质量有详细的度量标准。软件过程和产品质量得到了定量的认识和控制。
(5)优化级:通过对来自过程、新概念和新技术等方面的各种有用信息的定量分析,能够不断地、持续地对促进过程进行改进。
除第一级外,每一级都设定了一组目标,如果达到了这组目标,则表明达到了这个成熟级别,自然可以向上一更为成熟的高一级别迈进。CMM体系不主张跨级别的进化,因为从第二级开始,每一个低级别的实现均是更高级别实现的基础。
【试题解析】∶ 软件过程改进的实施对象是软件企业的软件过程,也就是软件产品的生产过程,其中还也包括软件维护之类的维护过程。
在本题各选项的描述中,A、B、C都是正确的,D不正确。
CMMI是Capability Maturity Model Integration的简称,即能力成熟度模型集成,它是在CMM的基础上发展起来的。CMMI是一种过程改进模型,它不仅支持阶段性过程改进,而且还支持连续性过程改进。
【试题解析】∶软件过程改进/过程改进(SPI)帮助软件企业对其软件(制作)过程的改变(进)进行计划、(措施)制定以及实施。它的实施对象就是软件企业的软件过程,也就是软件产品的生产过程,当然也包括软件维护之类的维护过程,而对于其他的过程并不关注。在软件过程改进时,如果发现问题,需转化为软件过程改进计划。软件过程改进不是一次性就能达到最终目标,而是需要反复进行的,每次改进会经历四个步骤:评估、计划、改进和监控。
软件过程改进的框架包括:过程改进基础设施,过程改进线路图,软件过程评估方法和软件过程改进计划。
【试题解析】∶软件能力成熟度模型是美国卡内基·梅隆大学提出的用于评估软件机构的能力成熟度方法和标准,现已被业界广泛重视。该模型将软件机构能力成熟度分为5个级别.从第三级(定义级)到最高级(优化级),都要求软件开发过程及相应的管理工作必须标准化、文档化,并综合为软件机构的标准软件过程:并必须建立完善的培训制度和专家评审制度。
【试题解析】∶本题考查软件能力成熟度模型(CMM)的成熟度等级。CMM将软件过程能力成熟度划分为5级,每一级都为下一级提供一个基础。管理级对软件过程和产品都有定量的理解与控制,因此管理级和优化级均对软件过程和产品有定量的理解与控制。
【试题解析】∶本题考查软件成熟度模型(CMM)的基本概念。建立基本的项目管理和实践来跟踪项目费用、进度和功能特性为可重复级的核心;使用标准开发过程(或方法论)构建(或集成)系统为已定义级的核心;管理层寻求更主动地应对系统的开发问题为已管理级的核心;连续地监督和改进标准化的系统开发过程为优先级的核心。
【试题解析】∶本题考查成熟度等级(CMM)知识。在CMM的不同等级有不同的核心。在可重复级,建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性。在已定义级,所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件。在已管理级,收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解与控制。在优化级,过程的量化反馈和先进的新思想、新技术促使过程不断改进。