《软件测试的有效方法(第2版)》笔记(一)
第一章 评估软件测试的能力和人员资格
1、软件开发过程:计划P、执行D、检查C、行动A。--PDCA循环
2、软件测试涉及的人员:软件客户、软件用户、开发人员、测试人员、信息技术管理人员、高级组织管理人员、审计员。
3、软件测试的多种角色:制造、创作车间、专业化过程。
4、缺陷:与期望的产品属性存在的差异。分两类:
(1)产品规格书中的缺陷;
(2)与客户/用户的期望不符。
另一种分法:
(1)错误;
(2)遗漏;
(3)超额。
故障:当缺陷引起了运行错误或对客户/用户产生了消极影响时。
××注意:至少90%的缺陷是由于过程问题引起的。
创建软件时产生缺陷的数量主要取决于过程是否完备,完备指过程中可以允许多大的变化。
风险:指不希望的事件发生的可能性。
5、软件测试中的“三步测试法”:
(1)确定当前测试能力的状态;
(2)确定改进目标;
(3)制订测试计划以达到测试目标。
6、质量保证协会QAI确定了与世界级软件测试组织普遍相关的八项标准:
(1)测试计划;
(2)对测试人员的培训;
(3)对测试工作的管理;
(4)用户对测试的满意程度;
(5)测试过程的使用;
(6)有效的测试实践;
(7)应用测试工具;
(8)对测试全过程的质量控制。
如果一组织能达到这八项标准的要求,就可以称他为世界级的软件测试组织。
7、评估现有测试过程的质量
实现过程:
(1)组建评估小组;
(2)完成评估调查问卷;
(3)创建Kiviat图;
(4)评估结果。
软件测试工程师认证CSTE
通用知识主题CBOK:五大类:
(1)一般技能;
(2)测试技巧/方法;
(3)测试计划;
(4)执行测试计划;
(5)测试分析的报告与改进。
第二章 制定软件测试策略
1、确定解决方法的有效性是解决问题的必要步骤。测试就是用来确定解决方法的技术。
三个方面:
(1)在软件系统开发生命周期的每个节点对软件有效性的证明;
(2)根据用户的需要和要求确定最终系统的有效性;
(3)通过使用样本测试数据执行软件来检查系统的行为。
问题的紧急程度决定了解决方案。明确测试需求。
2、风险:是引起损失的一种情况。系统在开发和安装阶段可能存在的策略风险是:
(1)可能得出不正确的结果;
(2)系统接受了未经授权的事务处理;
(3)计算机文件的完整性受到破坏;
(4)处理过程不可重建。
(5)失去处理的连续性;
(6)提供给用户的服务达不到满意的程度;
(7)系统安全性达不到标准;
(8)处理过程不符合组织原则或政府规定;
(9)系统结果不可靠;
(10)系统使用难度大;
(11)程序不可维护;
(12)系统不能移植到其它硬件或软件中;
(13)系统不能与其它计算机系统互连;
(14)性能不合格;
(15)系统操作难度大。
有效的测试方法就是明确和评价计算机系统的各种风险。
“太少的测试是犯罪,太多的测试是罪恶。”
测试中的问题产生的原因:
(1)没有定义测试目标;
(2)测试软件生命周期的错误阶段;
(3)使用无效的测试技术。
测试费用的有效性可用测试费用曲线来表示。
3、测试信息服务系统不仅仅是一类IT问题,还是一类组织问题。
一些技术的发展会导致测试方法的修改,如下:
(1)一体化;
(2)系统链接;
(3)多米诺骨牌效应;
(4)依赖电子商务;
(5)多用户。
4、建立测试原则 四项标准:
(1)测试的定义:定义一个清晰、扼要、明确的测试;
(2)测试系统:通过这一方法实现测试和强制测试;
(3)评价:信息服务管理将如何衡量和评价测试;
(4)标准:衡量测试的标准。
建立测试原则的方法:
(1)直接管理:一个或多个高级管理员制定的原则;
(2)信息服务一致原则:IT管理部门召集一些高级专家和有声望的人来参与原则的制定;
(3)用户会议:联合IT各部门管理用户的关键人员制定测试原则。
5、测试的结构化方法
测试过程要包括生命周期的每个阶段:
(1)需求——决定验证方法;确定需求是否恰当;生成功能测试数据;确定设计是否符合需求。
(2)设计——确定设计是否恰当;生成结构合功能测试数据;确定是否符合设计。
(3)编程——确定程序完成得是否恰当;生成程序的结构合功能测试数据。
(4)测试——测试应用系统。
(5)安装——把测试过的系统投入生产。
(6)维护——修改和重新测试。
在每个阶段都要完成的活动有:
(1)分析该阶段的产品结构是否适合于测试;
(2)根据该阶段的结构产生测试单元。
另外,在设计和编程阶段完成的活动:
(1)确定该阶段的结构是否符合前面阶段产生的结构;
(2)精炼或重新定义前面阶段生成的测试单元。
6、测试策略的两个组件是:
(1)测试因素:需要由测试策略确定的风险和问题;
(2)测试阶段:系统开发生命周期里需要测试的各阶段。
7、测试因素:正确性、文件完整性、合法性、审计跟踪、处理的连续性、服务水平、访问控制、符合性、可靠性、易用性、可维护性、可移植性、耦合、性能、易操作性。
8、制定测试策略 步骤:
(1)选择和分级测试因素;
(2)明确系统开发阶段;
(3)明确系统开发时的商业风险;
(4)把风险置于矩阵中。
9、创建测试策略样例:
(1)选择和分类测试因素;
(2)明确受到影响的阶段;
(3)联系每个阶段和因素,确定测试需要考虑的问题;
(4)定义测试策略。
10、测试方法论:与测试策略相统一,代表了测试应用系统的详细工作程序。工作程序用测试方法论立方体表示。
第三章 建立软件测试方法论
测试方法论是使测试策略得以实施的一套方法。依照需求恰当的使用测试策略矩阵。任务是决定测试、制定可行的测试方法,识别出风险。
1、测试目的:发现和消除软件的缺陷或者与预期结果的偏差。两类缺陷:
(1)与规格说明不符;
(2)与期望不符。
2、导致软件缺陷的原因:
(1)信息技术对需求的解释不正确;
(2)用户提出了错误需求;
(3)没有正确记录用户的需求;
(4)设计规格说明不正确;
(5)程序规格说明不正确;
(6)程序编码中有错误;
(7)数据输入错误;
(8)测试错误;
(9)纠错时出现错误;
(10)纠错条件导致另外的缺陷。
测试的费用主要取决于在项目生命周期的什么时期开始测试,越晚越贵。
测试应该从生命周期的第一个阶段开始,并贯穿于整个软件开发的生命周期。
生命周期测试:是对解决方案的持续测试,即使在软件开发计划完成后或者被测试的系统处于执行状态的时候,都不能中断测试。直到正式开始开发过程,生命周期测试才能开始。
3、四个测试技术:
(1)验证:确保系统遵循组织标准和规程,主要靠评审或一些不可执行的方法。
验证需要的评审有:
(1.1)需求评审:研究并讨论计算机系统的需求,以确保它能满足用户的需要及其可行性;
(1.2)代码走查:对程序源代码进行非正式的分析,以发现缺陷并且验证编码技术;
(1.3)代码审查:对程序源代码进行正式的分析,以发现为符合计算机系统设计规格说明所发生的设计缺陷;
(1.4)设计评审:研究并讨论计算机系统的设计,以确保它支持系统需求;
(1.5)回顾评审。
(2)确认:通过一系列可以看到和评价的测试来执行系统功能,以确保系统操作按照计划实现。
确认的测试有:
(2.1)单元测试:单独程序、模块或代码单元的测试;
(2.2)集成测试:相关的程序模块、代码单元测试;
(2.3)系统测试:对于整个计算机系统的测试;
(2.4)用户验收测试:对于计算机系统或系统某部分的测试,确保它们能配合系统工作,而无需考虑系统需求。
(3)功能测试:即黑盒测试。基本只能使用确认技术。
(4)结构测试:白盒测试。主要使用验证技术。
功能测试的优势:模拟实际系统的使用;进行没有系统结构的设想。
功能测试的不足:遗漏软件中潜在的逻辑错误;可能造成冗余测试。
结构测试的优势:可以测试软件的结构逻辑;测试时不用考虑是否完成了功能测试。
结构测试的不足:不能保证是否满足用户的需求;结构测试不可以模拟现实世界的情况。
两者结合才能确认整个系统。
4、工作流程:是一种方法,它用图示或文档的方式来说明指定的活动是如何完成的。
每一个工作流程由以下四个部分组成:输入、执行过程、检查过程、输出。
工作流程的概念可用作系统创建步骤的图示说明。
5、开发测试方法论中要考虑的八个问题
(1)获取和研究测试策略;
(2)确定开发项目的类型;
(3)确定软件系统的类型;
(4)确定项目的范围;
(5)确定战术风险;
(6)确定何时进行测试;
(7)建立系统测试计划;
(8)建立单元测试计划。
步骤如下:
(1)获取和研究测试策略;
(2)确定开发项目的类型;
项目类型:指开发的软件环境或方法论。
当环境变化大了,测试风险也会不同。
(3)确定软件系统的类型
软件系统的类型指该系统要完成的处理过程,一般有16种不同的软件处理类型:
(3.1)批处理:可以运行一般的批量处理;
(3.2)事件控制:由外部事件引发的实时处理数据;
(3.3)处理控制:从外部接收数据,根据收到的数据发出命令来控制某些行为;
(3.4)规程控制:控制其它软件;
(3.5)高级数学模型:类似于模拟和商业策略软件,但具有过多运用数学模型造成的复杂性;
(3.6)消息处理:管理输入输出消息,处理文本或者文本包中包含的信息;
(3.7)诊断软件:检测和隔离硬件错误,这些硬件存在于电脑或与其通信的硬件中;
(3.8)传感器和信号处理:类似于消息处理,但需更多的处理过程来分析输入数据,并使之转换成可用的数据处理格式;
(3.9)模拟:模拟一种环境、任务状况、其它硬件;从这些输入中得出对计算机程序或硬件最真实的评价;
(3.10)数据库管理:管理数据的存储和访问;
(3.11)数据采集:实时接收信息,并以某种形式保存数据,用作以后的处理;
(3.12)数据表示:格式化数据及转化数据;
(3.13)决策和计划辅助:使用人工智能技术提供一个专家系统来评价数据,为决策和政策制订者提供附加的信息和考虑;
(3.14)图形和图像处理:生成和处理计算机图像;
(3.15)计算机系统软件:为运行计算机程序提供服务;
(3.16)软件开发工具:为辅助软件开发提供服务;
(4)确定项目的范围:指包含在被测试的软件中的所有行为——可以理解的系统需求和规格说明的范围。
(5)确定战术风险 战术风险分为三类:
(5.1)结构化风险:应用系统及创建应用系统的方法中所涉及的风险;
(5.2)技术风险:创建和操作应用系统的技术所涉及的风险;
(5.3)规模风险:软件各方面的规模所设计的风险。
确定战术风险的步骤:
第一,理解风险和对风险的分级;
第二,确定被测试的软件系统中适当级值;
第三,计算和累计风险分数。
(6)确定何时进行测试
测试在项目的各个阶段都应该进行。在这些阶段的测试行为有:
A. 需求阶段行为:确定测试策略;确定需求是否恰当;创建功能测试条件。
B. 设计阶段行为:确定需求设计符合性;确定设计是否恰当;创建结构和功能测试条件。
C. 编程阶段行为:确定设计符合性;确定执行是否恰当;创建程序单元的结构和功能测试条件。
D. 测试阶段行为:确定测试计划是否恰当;测试应用系统。
E. 安装阶段行为:修改和重新测试系统。
(7)建立系统测试计划
测试计划要提供测试软件的背景信息、测试目标和风险,以及测试的业务功能和要完成的特殊测试。
测试计划类似于执行测试的路线图,它被分解成特殊测试和低级测试。
测试执行后,要测试结果生成测试报告。
(8)建立单元测试计划
把系统分成组件和单元来执行具体的处理,这些单元都要有自己的测试计划。根据软件对质量的要求程度,决定这些计划的复杂程度。
单元测试计划着重确定单元测试完成时间。