《ppt-软件缺陷和缺陷排除的两种重要手段1.软件测试2.软件评审》由会员分享,可在线阅读,更多相关《ppt-软件缺陷和缺陷排除的两种重要手段1.软件测试2.软件评审(79页珍藏版)》请在金锄头文库上搜索。
1、1 软件工程与软件测试模型 2 软件缺陷和缺陷排除的两种重要手段 1. 软件测试 2. 软件评审 3 软件测试的基本概念 1. 测试的目的 2. 测试的对象 3. 软件测试的原则 4. 软件测试信息流,第二部分(章)软件工程与软件测试,5. 为什么不可能做到穷举测试 6. 测试策略 (1)测试步骤 (2)生存期各阶段V and V&T活动 (3)测试查错曲线 (4)排除隐错的相对成本 4 软件测试的一般性理论 5 软件测试的挑战和问题,1 软件工程与软件测试模型,一、什么是软件测试? 1983年IEEE定义为: 使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或
2、是弄清预期结果与实际结果之间的差别。 作用 1、测试是为了要找出缺陷,但同时,也可以通过对缺陷的度量和统计,分析缺陷产生的原因和缺陷的分布特征,分析产品的质量、工作效率、诊断开发过程中的问题,并通过改进各个开发过程提高过程能力,最终降低缺陷数量和缺陷密度。 2、没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。,1 软件工程与软件测试模型,你真的懂测试吗 编程大师说:没有错误的程序世间难求。 (编程之道) 你在学校里学过测试吗?(读到博士可能也不懂测试) 你所在的企业重视测试吗? (小公司程序员的技能更加全面) 临时抱佛脚行吗?你以为有文档模板就会测试了吗? 如果不懂得有效地
3、进行测试,你不仅得不到功劳,也没人欣赏你的苦劳,你拥有最多的将只是疲劳。 职业软件工程师应当掌握需求开发、系统设计、编程、测试、维护 所有技能。,1 软件工程与软件测试模型,二、软件测试阶段 单元测试、集成测试、系统测试、验收测试。是“从小到大”、“由内至外”、“循序渐进”的测试过程,体现了“分而治之”的思想。 单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。 集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既要验证“设计”又要验证“需求”。 系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系
4、统是否符合“需求规格说明书”。 验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执行。,1 软件工程与软件测试模型,一般的软件测试过程,1 软件工程与软件测试模型,二、V模型介绍 如果软件开发过程采用严格的瀑布模型,那么开发与测试有“V”型的对应关系 。,customer, user, PM, technical support,Design/Analysis,Validate requirements,验收测试设计,集成测试设计,单元测试设计,开发和测试过程的V模型,系统规格描述,框架设计,系统测试,集成测试,详细设计,Code,单元测试,需求,验收测试,系统测试设计,执行
5、单元测试,执行集成测试,执行系统测试,执行验收测试,1 软件工程与软件测试模型,2 软件缺陷和缺陷排除的手段,一、软件缺陷 二、缺陷排除的手段,一、软件缺陷,1、软件缺陷是对软件产品预期属性的偏离现象 对产品规格说明的偏离。如:规格说明规定了a+b=c,而软件产品实际上做的不是。 对用户期望的偏离,即用户要求未体现在产品中(可能是规格说明有疏漏,也可能是实现中的问题。) 2、缺陷有三种 错误:未将规格说明正确实现。 遗漏:规定的或预期的需求未体现在产品中(可能未将规格说明全面实现,也可能在开发过程中追加了需求。) 额外的实现:规格说明并未规定的需求被纳入产品,得到实现。 3、软件缺陷不可能完全
6、避免,一、软件缺陷,4、缺陷和事故 机械和建筑业的对比。 缺陷是软件内部的“裂缝”,在未影响到用户和系统运行的情况下是隐蔽状态,并未表现出来。 当缺陷引发运行错误或产生负面影响时,构成事故,造成损失或伤害。,二、排除软件缺陷的两种重要手段,1、软件测试 测试在软件开发中占有重要地位 测试成本占有开发成本的近一半,软件开发成本分布,需求分析,设计走查,概要设计,设计评审,详细设计,编码,代码走查,单元测试,集成测试,确认测试,测试评审,需求评审,测试策划,2、软件项目评审,评审与走查,3 软件测试的基本概念,1、测试目的(J. Myers) 测试是程序执行的过程,目的在于发现错误(缺陷) 好的测
7、试用例能有效地发现别的测试用例未发现的错误(缺陷) 成功的测试是发现了未曾发现的错误(缺陷),3 软件测试的基本概念,2、测试的对象 1) 程序测试:发现程序中的缺陷,程序正确性的各种情况,a程序编写无语法错误 b程序执行中未发现明显的运行错误 c程序中无不适当语句 例:某程序 说明部分 D L, 对说明 语句部分 S L=3; 对赋值 I M=L+5 对引用 R D D R D D D D I R R I I R I I 正常 异常,程序正确性的各种情况,d. 程序运行时能通过典型的有效测试数据,得到正确的预期结果。 e. 程序运行时能通过典型的无效测试数据,得到正确的结果。 f. 程序运行
8、时能通过任何可能给出的数据,给出正确的结果。,2) 软件测试:发现程序及前期开发的缺陷,需求规格 说明 SRS,设计规格 说明 DS,程序,软件测试的对象,3、 软件测试的原则,在测试工作开始以前,不应设想程序中没有缺陷或找不出缺陷。(测试心理学) 测试以前应预知测试的结果数据。 尽可能避免测试自己写的程序。坚持独立测试原则,必要的情况下建立独立测试机构。 测试用例应兼顾有效输入和无效输入。 不仅要检验程序是否做了该做的事,还应检验是否做了不该做的事。 测试的充分性。 测试的有效性。 限于人力、物力,测试工作适可而止。(测试经济学) 保留一切测试用例。 任何已测程序的变更都应重新进行测试。(回
9、归测试),4、软件测试信息流,测试计划 测试用例 测试程序,5、测试成本曲线,不足测试,过度测试,测试的程度 t,未发现的缺陷数,测试成本,最佳测试点,5、为什么不可能做穷举测试,M1,D1,D2,D3,D4,M2,M3,M4,M5,M6,M7,D5,=20次,循环次数 0 1 220 独立路径数 51+52+53+5211014 (1百万亿) 每个测试用例(考虑、执行、验证结果)5分钟 共需测试时间 10亿年,5、为什么不可能做穷举测试,若X、Y为所有可能的整数 在字长32位机上 测试 X1、Y1 Z1 Xn、Yn Zn n = 232232 = 264 1.84 1019,生存期各阶段V、
10、V&T活动,分析,设计,编码,维护,安装,测试,单元测试,系统测试,验证,确认,系统测试 质量控制,集成测试,回归测试,验收测试,6、测试策略,软件测试的基本过程,软件测试周期示意,验证与确认,验证(Verification): 在软件生存期各个阶段,验证是指检测各个阶段结束时的工作产品是否满足对上一阶段的结束后的工作产品所定义的规格的验证过程。,验证与确认,确认(Validation): 在软件生存周期各个阶段,确认是指检测各个阶段结束时的工作产品是否满足在软件生存周期初期在系统需求文档中描述的各项软件规格的确认过程。,确认和验证的比较,验证是检测每一阶段形成的工作产品是否与前一阶段定义的规
11、格相一致, 确认是检测每一阶段的工作产品是否与最初定义的软件需求规格相一致。 软件测试既可用于验证,又可用于确认。,测试查错曲线,发现的错误数,周,周,需求隐错,设计隐错,编码隐错,静态分析,排除隐错的相对成本,4 软件测试的一般性理论 一、黑盒测试与白盒测试,黑盒测试(Black-box testing) 黑盒测试是从用户观点出发的测试,它又称功能测试(不全面,还包括功能测试)、数据驱动测试或基于规格说明书或用户手册的测试。它所依据的是程序的外部特性。,黑盒测试只关心输入与输出的对应关系,不关心被测程序的内部关系。,4 软件测试的一般性理论 黑盒测试的准则,基于需求规格说明书的测试(需求矩阵
12、) 需求列表 设计列表:概要设计和详细设计 测试用例与需求的对照表,4 软件测试的一般性理论 一、黑盒测试与白盒测试,白盒测试(White-box testing) 白盒测试又称结构测试、逻辑驱动测试或基于程序的测试,其测试过程如图所示。,白盒测试要研究被测程序的源代码结构,4 软件测试的一般性理论 一、黑盒测试与白盒测试,白盒测试覆盖准则 语句覆盖 -在测试时,设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少执行一次。 分支覆盖 -在测试时,设计若干测试用例,运行被测程序,使程序中的每个判断真假的分支至少遍历一次。 条件覆盖 -在测试时,设计若干测试用例,运行被测程序,使程序中的
13、每个条件的可能取值至少满足一次。 条件分支覆盖 -在测试时,设计足够的测试用例,使得判断中每个条件的所有可能取值至少出现一次,并且每个判断本身的判定结果也至少出现一次。 路径覆盖 - 设计足够多的测试用例,要求覆盖程序中所有可能的路径。,4 软件测试的一般性理论 一、黑盒测试与白盒测试,软件测试的衡量标准 需求的覆盖 需求追溯表/需求矩阵 缺陷数量 多、新 缺陷重现率 BUG能按照一定的测试过程稳定重现 效率 平均每人天发现的BUG数(5个/人天) 成本 少。合理的测试人力和软、硬件资源安排 重用价值 测试的数据或者样例可以重用,静态测试和动态测试,静态测试 是指不实际运行被测程序,而只是静态
14、地检查程序代码、界面或文档中可能存在的错误。 对于代码测试:主要测试代码是否符合相应的标准和规范。 对于界面测试:主要测试软件的实际界面与需求中的说明是否符合。 对于文档测试:主要测试用户手册和需求说明是否符合用户的实际需要。,程序代码的静态测试需要我们按照相应语言的代码规范模板来逐行检查程序代码,C语言程序的例子,#include Max(float x,float y) float z; Z=xy?x:y; return (z); ,Main() float a,b; int c; scanf(“%f,%f”, ,必须修改的问题有三个,程序没有注释 一般注释语句要占到代码总行数的1/51/
15、4; 注释语句包括程序的基本信息如作者、版本号、创建日期等,以及主要功能模块。 子函数max没有返回值得类型 由于Z的值为单精度型,可以在max前面加一个float类型声明 精度丢失问题 注意语句 c=max(a,b),c的精度为整型,而max为float。,建议修改的问题也是3个,Main函数没有返回值类型和参数列表 建议改为:void main(void),表明main函数的返回值和参数都为空。 1行代码只定义1个变量 程序适当加一些空行,C语言编码规范(简易版),动态测试(dynamic testing),顾名思义,是指实际运行被测程序,输入相应的测试数据,检查实际的输出结果和预期结果是否符合。,白盒测试黑盒测试、静态测试和动态测试只是一个测试的不同分类的角度而已。,黑盒测试可以是动态测试,也可以是静态测试; 白盒测试可以是动态测试,也可以是静态测试; 动态测试可以是黑盒测试,也可以是白盒测试; 静态测试可以是黑盒测试,也可以是白盒测试。,4 软件测试的一般性理论 二、单元测试,什么是单元测试? 是指对软件中的最小可测试单元进行检查和验证 单元:人为规定的最小的被测试单元。如:在结构