【软件测试及质量保证】小结(中)

简介: 【软件测试及质量保证】小结

part Ⅱ


测试基础


过程质量模型(生存周期)


过程质量模型如图所示:



生存周期基本过程


  • 合同视图


  • 获取-供应


  • 工程试图


  • 开发


  • 运作视图


  • 运作


  • 维护


五种软件测试的分类-按软件的“不同阶段”分类


五种分类方式


  1. 按软件的“不同状态”分类


  1. 按软件的“不同阶段”分类


  1. 按软件的“不同特性”分类


  1. 按软件的“不同开发方式”分类(业界)


  1. 按测试的“不同方法”分类(学界)


按不同阶段分类



  1. 单元测试:对程序员编写完成的某个程序单元测试;

  2. 集成测试(组装测试):将所有程序单元(模块)进行有序的、递增的组装并测试。发现模块间接口以及全局数据结构等问题。

  3. 确认测试:通过检验和提供客观证据,证明软件是否满足《软件需求说明书》中规定的需求。

  4. 系统测试:为确认是否达到原始目标,对集成的硬件和软件系统进行的测试。检查完整的程序系统能否和系统(硬件、外设、网络和系统软件、支持平台等)正确配置、连接、并满足用户需求。

  5. 验收测试:按照项目任务书或合同、供需双方约定的验收依据文件进行的对整个系统的测试与评审,决定是否接收或拒收系统。

回归测试


回归测试:重复以前的全部或部分的相同测试。


  • 目的:软件的改变可能是源于发现了错误并做了修改,也有可能是因为在集成或维护阶段加入了新的模块。回归测试就是为确定修改和检查修改是否损害了原有的正常功能。


  • 重要性:回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在极端编程方法中,更是要求每天都进行若干次回归测试。


软件测试的一组重要观点-软件错误的四种形式


  • 软件错误


当程序没有实现其最终用户合理预期的功能要求时,就表现为软件错误


  • 软件错误的四种形式


错误(error):在软件生存周期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生;


缺陷(defect):存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差;


故障(fault):是一种动态行为,指在软件运行过程中,出现的不希望或不可接受的内部状态;


失效(failure):指在软件运行时产生的,一种不希望或不可接受的外部行为结果。


软件测试的一组重要观点-软件测试的一组“重要论断”


  1. “零缺陷软件”是不可能的,只是一个可望不可及的目标;


  1. 完全测试程序是不可能的


  1. 测试只能证明错误存在,不能证明错误不存在


  1. 测试应当循序渐进,不应企图一次性测完


  1. 80-20原则:80%的错误聚集在20%的模块中,经常出错的模块改错后还会经常出错


  1. 找到的软件缺陷越多,说明软件缺陷越多


  1. 并非所有软件缺陷都能修复


  1. 需求说明书总是在不断变化


  1. 测试资源是很有限的


  1. 软件测试人员通常在项目组中不受欢迎


缺陷管理-“缺陷管理信息系统”的设计


定义:缺陷管理是指对于测试人员发现的软件缺陷,如何进行提交、确认、修复、验证等管理过程的跟踪管理。


MIS设计的三个关键问题?


问题一:“缺陷”对象数据结构设计



“核心属性”是缺陷管理的信息化基础,包括:


缺陷引发后果的“严重性”、处理缺陷的“优先级”。


严重性和优先级的设计:



四种严重性


1.严重。系统崩溃、数据丢失、数据破坏(系统级、数据级)


例如:蓝屏、死机、数据保存异常、完整性约束被破坏


2.较严重。操作性错误、错误结果、遗漏功能(功能级)


例如:某菜单项功能无法使用、报表项统计错误、“下一步”无法进入指定环节


3.一般:错别字、小问题(表现级)


例如:对必填框未作校验


4.建议:不影响使用的“瑕疵”或有“更好的”实现(优化级)


例如:某图片显示变形、界面不“横平竖直”、关键内容显示不完整


  • 五种优先级


1.最高。立即修复,停止进一步测试


2.次高。在产品发布之前必须修复


3.中等:如果时间允许应该修改


4.最低:可能会修改,但也能发布


问题二:“缺陷”对象状态设计


缺陷的“状态”及“状态之间的转换关系”设计是“缺陷管理信息系统”过程管理基础。

通常,参考生命周期理论,缺陷对象可设定六种“状态”:


“生死”状态:New 、 Closed(由测试决定)


“确认”状态:Open 、 Fixed(由开发决定)


“拒绝”状态:Declined 、Deferred


  1. 六种常见的“错误状态”及“转换关系”


1.New(新信息):测试中新报告的软件bug


2.Closed(关闭):错误已被修复,并已经过验证。


3.Open(打开):bug已被确认,并分配给相关的开发人员处理


4.Fixed(修正):bug已由开发人员修正完成,等待测试人员验证


5.Declined(拒绝):测试人员或开发人员认为不是错误,拒绝修改


6.Deferred(延期):不在当前版本修复,在之后某个版本中修复


错误状态转换图:



问题三:针对“缺陷”对象的功能设计


功能一:“缺陷”对象的基础功能,增删改查;


功能二:系统角色定义和OA流转功能;


功能三:常用统计、分析功能


黑盒测试


黑盒测试(功能测试),又被称为数据驱动测试、基于规格说明的测试或用户测试


等价类划分-等价类划分的基本方法


*基本思想


等价类划分”的测试方法是把所有可能的输入数据,即程序的输入域划分为若干子集,然后从每一个子集中,选取少数具有代表性的数据作为测试用例。


它的一个基本假设是在划分的子集中,每个输入条件都是等效的(即等价类),如果其中一个输入不能发现问题,那么集合中其他输入条件进行测试也不能发现错误。


由此可见,该方法的基本思想是用一组有限的数据代表近似无限的数据。


*基本步骤


根据程序的I/O特性,将程序的定义域划分为有限个等价区段 ,即“等价类”;

根据每个等价类设计出“测试用例”。


*基本类型


有效等价类 — 对于程序的规格说明是合理的、有意义的输入数据构成的集合。


无效等价类 — 对于程序的规格说明,是不合理的,是没有意义的输入数据构成的集合。


基本方法



附:设计测试用例的基本原则


  1. 为每个等价类编号;


  1. 一个测试用例,尽可能覆盖多个有效等价类


  1. 一个测试用例,只能覆盖一个无效等价类。


等价类划分-练习题


示例一:在某大学学籍管理信息系统中,假设学生年龄的输入范围为16~40,则根据黑盒测试中的等价类划分技术,下面划分正确的是____


A:可划分为2个有效等价类,2个无效等价类;


B:可划分为1个有效等价类,2个无效等价类;


C:可划分为2个有效等价类,1个无效等价类;


D:可划分为1个有效等价类,1个无效等价类;


正确答案:B


示例二:某录入界面有4个输入项,要求分别如下:1)姓名,2-4个汉字;2)性别,男/女;3)年龄,16~40;4)学历,博士/硕士/学士/其他。请用等价类划分方法,对这个界面设计测试用例,预期结果略。


依据等价类划分思想,本题计划采用5个测试用例,进行等价类覆盖:


1.大,大,10,大大


2.大大,男,18,博士


3.大大大大大,女,42,硕士


4.大,大,10,学士


5.大,大,10,其他


示例三:在黑盒测试方法中,等价类划分方法设计测试用例的步骤是:根据输入条件把数目极多的输入数据划分成若干个有效等价类和若干个无效等价类;设计一个测试用例,使其覆盖_(1)尚未被覆盖的有效等价类,重复这一步,直至所有有效等价类均被覆盖。设计一个测试用例,使其覆盖(2)_尚未被覆盖的无效等价类,重复这一步,直至所有无效等价类均被覆盖.


A.1个; B.7个左右; C.一半;


D.尽可能少的; E.尽可能多的; F.全部.


正确答案:E,A


示例四:Nextdate()的等价类划分测试用例设计。


提示:包括“普通、跨月、跨年”三种情况。



1.03/08/2016 (1)


2.03/32/2016 (2)


3.03/31/2016 (3)


4.04/30/2016 (4)


5.02/29/2016 (5)


6.02/28/2015 (6)


7.13/28/2015 (7)


8.12/31/1999 (8-10)


9.12/31/0 (11)


示例五:三角形问题:


一个程序读入三个整数,把这三个数值看作一个三角形的三条边的长度值。这个程序要打印出信息,说明“非三角形”、“不等边三角形”、“等腰三角形”、“等边三角形”。


提示:区分“是否为三角形的三条边”、“是否等腰”、“是否等边”三种情况




依据“覆盖原则”,对测试用例化简:删1(留11)删8-10(留13-15)


示例六(应用题):佣金问题。某商店销售玩具枪支配件,包括枪机(45元/只) ,枪托(30元/只),枪管(25元/只),为了刺激销售业绩,实施佣金计算公式如下:


1.销售额≤1000元 佣金=销售额*10%


2.1000<销售额≤1800 佣金=100+(销售额-1000)*15%


3.销售额>1800 佣金=220+(销售额-1800)*20%


现已开发“销售业绩计算程序”,输入为某员工所售的枪机、枪托、枪管销售数量,输出为该员工的佣金数。请依据等价类方法,设计测试用例,检验该程序的有效性


分析:本程序输出为“分段函数”,具有三段,之和覆盖数轴。因此,具有三个“有效等价”类,无“无效等价类”


1.用例1,输入:5,5,5 预期输出:50


2.用例2,输入:15,15,15 预期输出:175


3.用例3,输入:25,25,25 预期输出:360


思考:健壮性测试(Robustness Testing)又称为容错性测试,用于测试系统在错误输入或出现故障时,是否能够自动恢复或者忽略故障继续运行。如考虑健壮性评价,则可以补充哪些“无效等价类”的测试用例?


小结


  • 思考:


  • 等价类划分方法,是一种思维模式。对问题空间进行分类,并用测试用例进行“覆盖”验证的思想。


  • 建立这种思维模式,有利于迅速窥视一个系统的全貌和概要,从按摩器、相机等功能浏览,到汽车、机床的试驾。有利于迅速找到一个系统的漏洞和弱点的漏洞(例如CCH)。


  • 等价类划分方法,具有“快速遍历”的性质,是涉猎学习一个系统或一台设备的重要方法。


边界值分析-练习题


常见边界的边界值




例题一:用边界值分析法,假定X为整数,10<=X<=100,那么X在测试中应该取__边界值。


A:X=10,X=100


B:X=9,X=10,X=100,X=101


C:X=10,X=11,X=99,X=100


D:X=9,X=10,X=50,X=100


正确答案:B


例题二:每位密码都要求为字符(包括大小写字母)或“0”-“9”,请问其ASCII编码的边界是什么?


在计算机软件中,字符是很重要的表示元素,ASCII是最常见的编码,编写一段代码,观察1-255的ASCII符号



正确答案:


CHR(64);CHR(65);CHR(90);CHR(91)


CHR(96);CHR(97);CHR(122);CHR(123)


CHR(47);CHR(48);CHR(57);CHR(58)


例题三:下面为C语言程序,边界值问题可以定位在___。


Int data(3);


Int I;


For (i=1;i<=3;i++)


data(i)=100


A.Data(0)


B.Data(1)


C.Data(2)


D.Data(3)


正确答案:A


例题四:有一个二元函数f(x,y),其中x取值【1,12】,y取值【1,31】


分析:依据“单故障假设”,即有两个或两个以上故障同时出现而导致软件失效的情况很少,也就是说,软件失效基本上是由单故障引起的。因此,在边界值分析法中,获取两元以上函数的测试用例方法,通常逐一针对每个变量设计其边界,同时对其他变量固定为“中间值”,类似于求“偏导”。


正确答案:


测试用例共分两组,8个


第一组:<0,15>,<1,15>,<12,15>,<13,15>


第二组:<6,0>,<6,1>,<6,31>,<6,32>


例题五:有一个三元函数f(x,y,z),其中,x取值【1900,2100】,y取值【1,12】,z取值【1,31】,请写出该函数采用边界值分析法设计的测试用例。


正确答案:


测试用例共分三组,12个


第一组:<1899,6,15>,<1900,6,15>,<2100,6,15>,<2101,6,15>


第二组:<2000,0,15>,<2000,1,15>,<2000,12,15>,<2000,13,15>


第三组:<2000,6,0>,<2000,6,1>,<2000,6,31>,<2000,6,32>


白盒测试


白盒测试(结构测试),又被称为逻辑驱动测试、基于程序本身的测试或程序员测试


逻辑覆盖的6种方法


白盒测试通常采用覆盖法进行测试,即通过遍历程序结构设计测试用例。按照覆盖的程度,可以分为多种覆盖准则:


  1. 语句覆盖,SC(Statement Coverage)



  1. 判定覆盖,DC(Decision Coverage)



  1. 条件覆盖,CC(Condition Coverage)



  1. 条件/判定覆盖,CDC(Condition/Decision Coverage)



  1. 多条件覆盖,MCC(Multiple Condition Coverage)



  1. 路径覆盖,PC(Path Coverage)



目录
相关文章
|
3天前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成:提升效率与质量的关键
在快节奏的软件开发环境中,自动化测试和持续集成已经成为不可或缺的部分。本文将探讨自动化测试和持续集成的重要性,以及它们如何协同工作以提高软件开发的效率和质量。通过分析自动化测试的策略、工具选择以及持续集成的实践,我们将揭示这些技术如何帮助开发团队快速响应变化,减少错误,并加速产品上市时间。
|
8天前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的新篇章:利用AI提升软件质量
【10月更文挑战第35天】在软件开发的海洋中,自动化测试犹如一艘救生艇,它帮助团队确保产品质量,同时减少人为错误。本文将探索如何通过集成人工智能(AI)技术,使自动化测试更加智能化,从而提升软件测试的效率和准确性。我们将从AI在测试用例生成、测试执行和结果分析中的应用出发,深入讨论AI如何重塑软件测试领域,并配以实际代码示例来说明这些概念。
34 3
|
22天前
|
敏捷开发 监控 jenkins
自动化测试之美:打造高效的软件质量保障体系
【10月更文挑战第20天】在软件开发的海洋中,自动化测试如同一艘精准的导航船,引领项目避开错误的礁石,驶向质量的彼岸。本文将扬帆起航,探索如何构建和实施一个高效的自动化测试体系,确保软件产品的稳定性和可靠性。我们将从测试策略的制定、工具的选择、脚本的编写,到持续集成的实施,一步步描绘出自动化测试的蓝图,让读者能够掌握这一技术的关键要素,并在自己的项目中加以应用。
28 5
|
1月前
|
测试技术
软件质量保护与测试(第2版)学习总结第十章 黑盒测试
本文是《软件质量保护与测试》(第2版)第十章的学习总结,介绍了黑盒测试的基本概念和方法,包括等价类划分、边界值分析和因果图法,并通过具体例子展示了如何设计测试用例来验证软件的功能性需求。
65 1
软件质量保护与测试(第2版)学习总结第十章 黑盒测试
|
1月前
|
人工智能 人机交互 数据库
软件质量保护与测试(第2版)学习总结第一章
本文是《软件质量保护与测试》(第2版)第一章的学习总结,概述了软件的特征、分类、软件工程的层次化技术、现代软件开发的变化,以及软件质量的概念和评价体系,包括黑盒、白盒和灰盒测试方法。
31 1
软件质量保护与测试(第2版)学习总结第一章
|
22天前
|
Java 测试技术 持续交付
探索自动化测试的奥秘:提升软件质量的关键
【10月更文挑战第20天】 在当今快速发展的软件行业中,自动化测试已成为确保产品质量和加速开发周期的重要工具。本文将深入探讨自动化测试的核心概念、实施策略及其对软件开发生命周期的影响,旨在为读者提供一种全面理解自动化测试的视角,并展示如何有效地将其应用于实际项目中以提高软件质量和效率。
18 2
|
1月前
|
测试技术
软件质量保护与测试(第2版)学习总结第十一章 白盒测试
本文是《软件质量保护与测试》(第2版)第十一章的学习总结,详细讲解了白盒测试中的控制流测试技术,包括语句覆盖、判断覆盖、条件覆盖、判定-条件覆盖和路径覆盖等方法,并通过具体代码示例展示了如何设计测试用例来验证程序中的不同执行路径。
54 2
|
1月前
|
安全 数据挖掘 测试技术
提升软件质量:探索高效测试策略
在软件开发过程中,测试是一个关键步骤,它决定了产品能否满足用户需求并保持高性能和安全性。本文将探讨几种有效的测试策略,包括自动化测试、性能测试和安全测试,以帮助开发团队提高软件质量。我们将分析每种方法的优势、实施步骤及面临的挑战,并提供实用的建议。
23 1