软件质量保证与测试基础习题参考答案
第一章 习题参考答案
1. 什么是软件质量?
软件质量有多种定义。
[GB/T12504-90, 计算机软件质量保证计划规范]对软件质量的定义:软件产品中能满足
给定需求的各种特性的总和。这些特性称为质量特性,它包括功能性、可靠性、易使用性、
时间经济性、资源经济性、可维护性和可移植性等。
[ANSI/IEEEstd729]对软件质量的定义:软件产品中能满足规定的和隐含的与需求能力有
关的全部特征和特性,包括:
软件产品质量满足用户要求的程度
软件各种属性的组合程度
用户对软件产品的综合反映程度
软件在使用过程中满足用户要求的程度
从以上定义可以看出,软件质量是软件产品满足使用要求的程度。其中“程度”是由软
件的特性或特征集组成的。
2. 简述描述软件质量的属性?
McCall 模型中 11 个质量要素,包括:
(1) 正确性(correctness)
程序满足规约(specification)及完成用户目标的程度,主要包括内容:易追溯性、一致性
和完备性。
(2)有效性(efficiency)
软件对计算机资源的使用效率,包括:
运行效率(execution efficiency):软件使用最少的处理时间的性质。
存储效率(storage efficiency):软件在操作中对存储空间的需求最小的性质。
(3)易使用性(usability)
学习使用的难易程度包括:操作软件、为软件准备输入数据、解释软件输出结果。
(4)可靠性(reliability)
能够防止因为概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因为操
作不当造成的软件系统失效的能力。包括:容错性、一致性、准确性和简洁性。
(5)完整性(integrity)
控制未被授权人员访问程序和数据的程度。包括存取控制和存取审查。
(6)易维护性(maintainability)
在程序的操作环境中确定软件故障的位置并纠正故障的难易程度。包括:一致性、简洁
性、简明性、模块性和自我描述性。
(7)灵活性(flexibility)
当软件的操作环境发生变化时对软件作相应修改的难易程度。包括:模块性、一般性、
易扩展性、自我描述性。
(8)易测试性(testability)
对软件测试以保证其无缺陷和满足其规约的难易程度。包括:简洁性、模块性、检视、
自我描述性。
(9)易移植性(portability)
将程序从一个运行环境移植到另一个运行环境的难易程度。包括:软件独立性、硬件独
立性、模块性和自我描述性。
(10)易复用性(reusebility)
复用一个软件或其部分的难易程度。包括:通用性、模块性、自我描述性、硬件独立性、
软件独立性。
(11)可互操作性(interoperability)
一个软件系统与其它软件系统相互通信并协同完成任务的难易程度。包括:通讯共同性、
数据共同性和模块性。
3. 详细描述 McCall 质量模型和 ISO/IEC9126 质量模型的结构和特点。
McCall 模型是层次结构模型,包括质量要素、衡量标准、度量。ISO/IEC9126 质量模型
分为:内部质量模型、外部质量模型、使用质量模型。
第二章 习题参考答案
1.简述软件质量保证定义。
软件质量保证(Software Quality Assurance,SQA)和一般的质量保证一样,是确保软件
产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进
行的所有有计划、有系统的管理活动。
IEEE 中对软件质量保证定义为,软件质量保证是一种有计划的、系统化的行动模式,它是为
项目或者产品符合已有技术需求提供充分信任所必需的。也可以说软件质量保证是设计用来
评价开发或者制造产品过程的一组活动,这组活动贯穿于软件生产的各个阶段即整个生存周
期。
2.简述软件质量保证要素。
软件质量保证涵盖了广泛的内容和活动,这些内容和活动侧重于软件质量管理,可以归
纳如下:标准,软件质量保证的任务是要确保遵循所采用的标准,并保证所有的工作产品符
合标准;评审和审核;测试;错误/缺陷的收集和分析;变更管理;教育:每个软件组织都
想改善其软件工程实践。改善的关键因素是对软件工程师、项目经理和其他利益相关者的教
育;安全管理;安全;风险管理。此外,软件质量保证还确保将质量作为主要关注对象的软
件支持活动(如维修、求助热线、文件和手册)高质量地进行和开展。
3.简述软件质量控制定义。
从软件质量控制本身的技术意义上说,软件质量控制是一组由开发组织使用的程序和方
法,使用它可在规定的资金投入和时间限制的条件下,提供满足客户质量要求的软件产品并
持续不断地改善开发过程和开发组织本身,以提高将来生产高质量软件产品的能力。根据这
个定义,可以看到软件质量控制包括如下几方面的含义:
(1)软件质量控制是开发组织执行的一系列过程;
(2)软件质量控制的目标是以最低的代价获得客户满意的软件产品;
(3)对于开发组织本身来说,软件质量控制的另一个目标是从每一次开发过程中学习以便
使软件质量控制一次比一次更好。
4.举例说明软件质量控制的风险管理法如何控制软件质量。
风险管理法是识别和控制软件开发中对成功地达到目标(包括软件质量目标)危害最大
的那些因素的一个系统性方法。风险管理法一般包括两部分内容:一是风险估计和风险控制,
二是选择用来进行风险估计和风险控制的技术。以财务软件为例,风险管理法实施步骤如下:
(1)根据经验识别项目要素的有关风险,如是否有项目风险、技术风险和商业风险;
(2)评估风险发生的概率和发生的代价,如是风险是可忽略的、轻微的、严重的还是灾难
性的;
(3)按发生概率和代价划分风险等级并排序,高概率、代价高的风险要优先处理;
(4)在项目限定条件下选择控制风险的技术并制定计划,如风险规避、风险缓解、风险转
移等;
(5)执行计划并监视进程,保证风险计划的执行;
(6)持续评估风险状态并采取正确的措施。
5.简述软件质量保证的目标。
软件质量保证的目标是以独立审查的方式,从第三方的角度监控软件开发任务的执行,
就软件项目是否正确遵循已制定的计划、标准和规程给开发人员和管理层提供反映产品和过
程质量的信息和数据,提高项目透明度,同时辅助软件工程组取得高质量的软件产品。
(1)需求质量,需求模型的正确性、完整性和一致性将对所有后续工作产品的质量有很大
的影响。软件质量保证必须确保软件团队严格评审需求模型,以达到高水平的质量。
(2)设计质量,软件团队应该评估设计模型的每个元素,以确保设计模型显示出高质量,
并且设计本身符合需求。SQA 寻找能反映设计质量的属性。
(3)代码质量,源代码和相关的工作产品(例如,其他说明资料)必须符合本地的编码标
准,并显示出易于维护的特点。SQA 应该找出那些能合理分析代码质量的属性。
(4)质量控制有效性,软件团队应使用有限的资源,在某种程度上最有可能得到高品质的
结果。SQA 分析在评审和测试上的资源分配,评估是否以最有效的方式进行分配的。
6.简述软件质量保证的任务。
软件质量保证的主要任务是为了提高软件的质量和软件的生产率,归为如下 8 点:
(1)正确定义用户要求;(2)力争不重复劳动;
(3)大力使用和推行软件工程学中所介绍的开发方法和工具;(4)组织外部力量协作;(5)
排除无效劳动;(6)发挥每个开发者的能力;
(7)提高软件开发的工程能力;(8)提高计划和管理质量能力。
7.什么是全面软件质量管理?
全面软件质量管理是一个组织以质量为中心,以全员参与为基础,目的在于通过让顾客
满意和本组织所有成员及社会受益而达到长期成功的一种软件质量管理模式。核心思想是:
(1)全员性,全员参与质量管理; (2)全过程性,管理好质量形成的全过程;
(3)
全面性,管理好质量涉及到的各个要素。
8.什么是 PDCA 循环,PDCA 有哪些特点?
全面质量管理最重要的方法是 PDCA 循环,最早由美国质量管理专家戴明提出来的,所
以又称为“戴明环”。PDCA 的含义如下:P(Plan)--计划;D(Do)--执行;C(Check)--检查;
A(Action)--处理,它反映了质量工作过程的 4 个阶段,通过 4 个阶段循环不断地改善质量。
对总结检查的结果进行处理,成功的经验加以肯定并适当推广、标准化;失败的教训加以总
结,未解决的问题放到下一个 PDCA 循环里。
PDCA 循环四个明显特点:
(1)周而复始
PDCA 循环四个过程不是运行一次就完结,而是周而复始进行。一个循环结束,解决一部分
问题,可能还有问题没解决,或者又出现新问题,再进行下一 PDCA 循环,依此类推。
(2)大环带小环
一个公司或组织的整体运行的体系与其内部各子体系的关系,是大环带小环的有机逻辑组合
体,彼此协同,互相促进。
(3)阶梯式上升
PDCA 循环不是停留在一个水平上循环,不断解决问题的过程是水平逐步上升的过程。
(4)统计的工具
PDCA 循环应用了科学的统计观念和处理方法,作为推动工作、发现问题和解决问题的有效
工具。
9. 简述 CMM 和 CMMI 的区别与联系。
CMM 是指“能力成熟度模型”,其英文全称为 Capability Maturity Model for Software,
英文缩写为 SW-CMM,简称 CMM。CMMI 是“能力成熟度模型集成”,其英文全称为 Capability
Maturity Model Integration。CMMI 是在 CMM 的基础上对一部分的学科进行集成得来的,不
但包括了软件开发过程改进,还包括系统集成、软硬件采购等方面的过程改进内容。CMMI
纠正了 CMM 存在的一些缺点,使其更加适用企业的过程改进实施。
从等级划分上看,1,3,5 级名称没变化,均是初始级,已定义级和优化级;但 2 级和 4 级
分别定义为已管理级和定量管理级,这个变化更突出 CMMI 定性管理和定量管理特点。
CMMI 共有分属于 4 个类别的 22 个过程域,覆盖了 4 个不同的领域;相对应的 CMM 共有
18 个过程域。
CMM 基于活动的度量方法和瀑布过程的有次序的、基于活动的管理规范有非常密切的联系,
更适合瀑布型的开发过程;而 CMMI 相对 CMM 更一步支持迭代开发过程和推动组织采用基
于结果的方法:开发业务安全,构想和原型方案,细化后纳入基线结构,可用发布,最后确
定为现场版本的发布。
CMMI 比 CMM 进一步强化了对需求的重视。在 CMM 中,关于需求只有需求管理这一个关
键过程域,也就是说强调对有质量的需求进行管理,而如何获取需求则没有提出明确的要求;
在 CMMI 中,3 级有一个独立的关键过程域,叫做需求开发,提出了对如何获取优秀的需求
的要求和方法。
CMMI 对工程活动进行了一定的强化。在 CMM 中只有 3 级中的软件产品工程和同行评审两
个关键过程域是与工程过程密切相关的;而在 CMMI 中,则将需求开发、验证、确认、技术
解决方案和集成项目管理这些工程过程活动都作为单独的关键过程域进行了要求。
CMMI3 级中单独强调了风险管理,而在 CMM 中把风险的管理分散在项目计划,项目跟踪与
监督中进行要求。
从 评估 方法 上看 , 随着 CMM 过 渡到 CMMI , 其通 用评 估框 架 CAF(Common Assessment
Framework) 变 成 评 估 需 求 ARC (Appraisal Requirement for CMMI); CBA-IPI 的 评 估 方 法 被
SCAMPI 方法替代。
10.简述 ISO 9000 与 CMMI 联系与区别。
ISO9000 是由国际标准化组织(International Organization for Standardization,ISO)所属
的质量管理和质量保证技术委员会 ISO/TC176 工作委员会制定并颁布的关于质量管理体系的
族标准的统称。CMMI 是 “能力成熟度模型集成”,其英文全称为 Capability Maturity Model
Integration。
ISO 9000 与 CMMI 都共同着眼于质量和过程管理,目前 2000 版的 ISO 更多的和 CMMI 有直
接对应的关系,甚至是大量的 CMMI4 和 CMMI5 级的要求。
CMMI 是专门针对软件产品开发和服务,而 ISO9000 涉及的范围则相当宽。CMMI 强调软件
开发过程的成熟度,即过程的不断改进和提高,而 ISO9000 则强调可接收的质量体系的最低
标准。
第三章 习题参考答案
1.软件计划阶段需要制定哪几项计划?
计划阶段主要包含 3 个需要在项目中执行和管理的计划,分别是软件项目管理计划、软
件项目质量管理计划和软件配置管理计划。其中软件项目管理计划主要包括基础设施计划、
进度计划(包括各种类型的估算)、风险管理计划、项目培训计划、执行计划、客户管理计
划。软件项目质量管理计划包括质量标准、同级评审计划、测试计划、度量管理计划、缺陷
预防计划、过程改进计划。软件配置管理计划包括软件配置管理计划组织、角色和职责、开
发/维护配置管理计划、产品配置管理。
2.需求说明过程包括哪几项任务?
需求分析阶段主要完成需求说明和需求管理两种活动,需求说明指的经过需求分析形成
系统需求规格说明书,该文档是需求过程中形成基线的主体,它是以后进一步设计和测试的
基础。需求说明过程主要包括的任务是执行需求分析、定义需求规格说明书、定义验收标准、
评审需求规格说明书和验收标准。
3.简述需求分析阶段质量保证的目的。
需求分析阶段要确保需求说明和需求管理是按照相关的质量标准和指定的流程完成的;
确保客户提出的需求是可行的;确保客户了解自己提出的需求的含义,并且这个需求能够真
正达到他们的目标;确保开发人员和客户对于需求没有误解或误会;确保向用户提供为满足
他所提出的需求而实际构建的适当软件系统;确保规格说明书与系统需求保持一致;确保规
格说明书能适当地改进系统的灵活性、可维护性以及性能;确保已建立了测试策略,确保已
建立了现实的开发进度表;确保已为系统设计了正式的变更规程。
4.简述制定编码计划的主要内容。
在编码前,项目经理要根据详细设计中的模块划分情况制定编码计划。主要内容:
(1)本次编码的目的,在制定编码计划时,必须要明确编码目的。
(2)编码人员组成,在编码前,确定本次编码的人员组成。选择编码人员时主要考虑以下
几点:责任心、技术能力、服从意识、努力程度、团队精神、编码效率、编码质量等。
(3)编码任务分配,在编码前,一定要为每个编码人员划分好自己所负责的模块,并且要
对编码进度做出安排,要规定各个模块的编码开始日期和结束日期。
5.简述测试过程的质量保证包括哪几方面。
(1)测试计划的有效性和全面性;
(2)测试用例设计完后,要经过非正式的复审和评审;
(3)严格执行测试;
(4)准确报告软件缺陷;
(5)提高测试覆盖度;
(6)测试结果分析和质量报告。
6.简述系统交付和安装阶段的质量保证过程。
(1)制定软件交付及培训计划,保证软件能及时交付并充分对用户进行培训。
(2)制定软件维护计划,以保证有效的维护实施和可靠的软件维护质量。
(3)交付给用户所有的文档,保证所有文档的一致性、完整性和正确性。
(4)交付、安装软件系统,包括搭建产品环境、安装软件和配置环境等。
(5)评审批准软件维护计划。
(6)用户验收确认,项目通过了用户的验收,用户接受了被交付的系统并签字确认。
该阶段除保证上述内容外,还要对即将进入到维护阶段的软件确保代码和文档的一致性;确
保对已建立的变更控制过程进行监测,包括将变更集成到软件的产品版本中的过程;确保对
代码的修改遵循编码标准,并且要对其进行评审,不要破坏整个代码结构。
第四章 习题参考答案
1.软件测试是什么?目的是什么?
软件测试是使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验其是否
满足规定的需要或是弄清楚预期结果与实际结果之间的差别。该定义明确提出了软件测试以
检验是否满足需求为目标。
软件测试的目的,Grenford J. Myers 在《The Art of Software Testing》一书中的观点:
软件测试是程序的执行过程,目的在于发现错误;
测试是为了证明程序有错,而不是证明程序无错误。
一个好的测试用例是在于它能发现至今未发现的错误;
一个成功的测试是发现了至今未发现的错误的测试。
2.什么是软件缺陷?如何产生的?
IEEE729 (1983) 中对软件缺陷给出了一个标准的定义:
从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种
问题;
从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。
由于软件系统越来越复杂,不管是需求分析、程序设计等都面临越来越大的挑战。由于
软件开发人员思维上的主观局限性,且目前开发的软件爱你系统都具有相当的复杂性,决定
了在开发过程中出现软件错误是不可避免的。造成软件缺陷的主要原因可从软件本身、团队
工作和技术问题等多个方面来查找,以确定造成软件缺陷的主要因素。
3.为什么说随着时间的推移修复软件缺陷的成本越来越高?
件生命周期的各阶段的工作都有可能发生错误,并不只是在编码阶段产生错误,需求和
设计阶段同样会产生错误。由于前一阶段的成果是后一阶段的工作基础,前一阶段的错误自
然会导致后一阶段的工作结果中有相应的错误,而且错误会累积、扩散,越来越多。越到后
期,修复缺陷的代价就会越大,因此,缺陷发现或解决的越迟,成本就越高。
4.简述验证和确认的区别。
Verification:Are we building the product right?是否正确地构造了软件?即是否正确地做事,
验证开发过程是否遵守已定义好的内容。
Validation:Are we building the right product?是否构造了正确的软件?即是否做正确的事或
正在构建用户所需要的功能。
5.什么是测试用例?如何设计好的测试用例?
IEEE 610.12 给出测试用例的定义为:
(1) 测试用例是一组输入(运行前提条件)和为某特定的目标而生成的预期结果及与之
相关的测试规程的一个特定的集合,或称为有效地发现软件缺陷的最小测试执行单元。
(2) 测试用例是一个文档,详细说明测试的输入、期望输出和为一测试项所准备的一组
执行条件。
涉及测试用例通常遵守以下原则:
(1) 使用成熟的测试用例设计方法来进行设计。
(2) 保证测试用例数据的正确性和操作的正确性。
(3) 确保测试用例应该针对单一的测试项。
(4) 每个测试用例应该针对单一的测试项。
(5) 保证测试结果是可以判定并且可以再现的。
(6) 保证测试用例的描述准确、清晰、具体。
(7) 测试用例设计应满足项目的时间、人员和资金约束。
6.软件测试都可以分哪些类别?
按测试技术分,软件测试可分为白盒测试和黑盒测试两种。
按测试方式分,软件测试可分为静态测试与动态测试两种。
从测试实施的阶段来划分,测试可以分为单元测试、集成测试、确认测试、系统测试和
验收测试。
按照测试内容可以分为功能测试、压力测试、性能测试、可靠性测试、安全性测试、兼
容性测试、安装测试、灾难性恢复测试、回归测试等。
7. 软件测试的原则都包括哪些?
原则 1:测试显示存在缺陷
原则 2:穷尽测试是不可行的
原则 3:测试活动要尽早开始
原则 4:缺陷集群性
原则 5:杀虫剂悖论原则
6:测试依赖于测试背景
原则 7:没有失效就是有用系统是一种谬论
第五章 习题参考答案
1.比较 V 模型、W 模型、H 模型、X 模型、前置模型的优缺点。
模 型
V 模型
W 模型
H 模型
特 点
强调整个软件项目开发需要经历若干个测试级别,与开发阶段对应,没有指出对需求、
设计进行测试。
强调测试计划等工作的先行和对需求和设计的测试,没有专门针对测试流程予以说明。
表现了测试是独立的。对每一个测试细节都有一个独立的操作流程,只要测试前提具
备,就可测试。
X 模型
前置模型 将开发和测试的生命周期整合在一起,伴随项目开发生命周期每个关键行为。
提出了测试设计,没有指出在软件测试各个阶段都应该进行测试设计。
2.测试生命周期包括什么?
软件测试生命周期,通常又被称为软件测试的基本过程,它包括的活动主要有:测试计
划和控制、测试分析和设计、测试实现和执行、测试评估等几个部分。
3.软件测试的执行过程包括哪些步骤?
4.测试计划包括哪些内容?
5.制定软件测试计划时特别需要注意哪些问题?
(1)明确测试的目标,增强测试计划的实用性
(2)坚持“4W+1H”规则,明确内容与过程
(3)采用评审机制,保证测试计划满足实际需求
(4)创建测试计划文档
6.参考附录 3 软件测试计划模板编制一份测试计划。
略
第六章 习题参考答案
1.名词解释
(1)静态测试:
对组件/系统进行规格或实现级别的测试,而不是执行这个软件,比如代码评审。
(2)动态测试:
通过运行软件的组件或系统来测试软件。
(3)评审:
是指对产品或产品状态进行评估,以确定与计划的结果所存在的误差,并提供改
进建议。
(4)异常:
任何与基于需求规格说明书、设计文档、用户文档、标准或者人们的感觉和经验
所希望的相偏离的状态。异常可能在评审、测试、分析、编辑或者软件的使用中
被发现。
(5)规格说明:
说明组件/系统的需求、设计、行为或其他特征的文档,常常还包括判断是否满
足这些条款的方法。理想情况下,文档是以全面、精确、可验证的方法进行说明
的。