软件工程 周志钊 zhouzhizhao08@163.com.

Slides:



Advertisements
Similar presentations
紧扣说明 反思教学 策略备考. 陕西省 2016 年中考数学命题趋势及备考策略 一、明确依据,把握方向 二、明确变化,把握趋势 三、正视现实,增强信心 四、科学备考,提升效益.
Advertisements

1.1 程序和程序设计 程 序:简单的说程序就是指令的集合。 计算机设计语言: 机器语言 :二进制 0 、 1 汇编语言:助记符(英语单词)。 高级语言: 人类自然语言(数学语言 + 英语) 如: C 语言、 Qbasic 、 VB 等 第一章:程序设计基本概念.
必修2 第一单元 古代中国经济的基本结构和特点
報告人:教育部會計處處長 黃 永 傳 日 期:103 年12 月27 日
第二章 流体运动的基本方程和基本规律 § 2.1 连续方程 § 2.2 动量方程 § 2.3 能量方程 § 2.4 方程的基本解法
人生格言: 天道酬勤 学院:自动化与电气工程学院 班级: 自师1201 姓名:刘 威.
民國88年至99年期間,下列何種空氣品質指標污染物有逐年升高的趨勢?
2011年10月31日是一个令人警醒的日子,世界在10月31日迎来第70亿人口。当日凌晨,成为象征性的全球第70亿名成员之一的婴儿在菲律宾降生。 ?
案例1 A(17周岁)、B(19周岁)两人来到中国,欲向C服装公司订购一批服装到本国销售。其中,A来自甲国,该国法律规定,具有完全民事行为能力的成年人的年龄标准为16周岁;而B来自乙国,乙国法律规定,具有完全民事行为能力的成年人的年龄标准为20周岁。中国法律规定的具有完全民事行为能力的人的年龄标准为18周岁(不考虑16至18周岁的特殊情况)。
第九课时 二元一次方程组 .
七(7)中队读书节 韩茜、蒋霁制作.
初级会计实务 第八章 产品成本核算 主讲人:杨菠.
2016届高三期初调研 分析 徐国民
中考阅读 复习备考交流 西安铁一中分校 向连吾.
第三章 仓储技术作业过程.
岳阳市教学竞赛课件 勾股定理 授课者 赵真金.
财经法规与会计职业道德 (3) 四川财经职业学院.
中央广播电视大学开放教育 成本会计(补修)期末复习
人教版义务教育课程标准实验教科书 小学数学四年级上册第七单元《数学广角》 合理安排时间 248.
第三单元 发展社会主义民主政治.
致亲爱的同学们 天空的幸福是穿一身蓝 森林的幸福是披一身绿 阳光的幸福是如钻石般耀眼 老师的幸福是因为认识了你们 愿你们努力进取,永不言败.
3.3 资源的跨区域调配 ——以南水北调为例 铜山中学 李启强.
专题二 识图题增分技巧.
第七章 财务报告 财务报告 第一节 财务报告概述 一、财务报告及其目标: 1、概念:财务报告是指企业对外提供的反映企业某一特定日期
第二章 植物病害的病原物 第一节 植物病原真菌
第四课时 常见天气系统 阜宁一中 姚亚林.
中考语文积累 永宁县教研室 步正军 2015.9.
第十课 创新意识与社会进步 1.辩证的否定观:辩证否定、形而上学的否定观
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
群組未知 水蜜桃每4個裝一盒,爸爸買了5盒,一共買了幾個水蜜桃? 爸爸想把20個水蜜桃平分給他的5個朋友,每個朋友可以得到幾個水蜜桃?
小学数学知识讲座 应用题.
勾股定理 说课人:钱丹.
倒装句之其他句式.
证券投资基金 投资121 06号余煜欢 09号陈秋婷 33号陈柔韵 08号潘晓峰 10号曾杰 34号谭锐权.
大綱: AAA 性質 SAS 性質 SSS 性質 顧震宇 台灣數位學習科技股份有限公司
第 22 课 孙中山的民主追求 1 .近代变法救国主张的失败教训: “师夷之长技以制 夷”“中体西用”、兴办洋务、变法维新等的失败,使孙中山
C语言程序设计 第五章 选择结构程序设计.
高级语言程序设计 主讲人:陈玉华.
第一章 C语言概述.
第五章 选择结构程序设计 一、关系运算符和表达式 1、关系运算符 在程序中经常需要比较两个量的大小关系, 以决定程序下一步
人教版数学四年级(下) 乘法分配律 单击页面即可演示.
大綱: 列式問題 代入消去法 加減消去法 根的相關問題 顧震宇 台灣數位學習科技股份有限公司
4.8 平行线 海南华侨中学 王应寿.
问题求解 入门.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
直线和平面平行的判定.
★ ★ ★ ★ ★如有教务问题,课后统一提问或者到服务QQ提问
第三章 暴力法.
Welcome 实验:筷子提米.
第一部分 数字电路 第4章 组合逻辑电路 主讲教师:喻红.
第一章 C语言概述 教师:周芸.
第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换.
不等式的基本性质 本节内容 本课内容 4.2.
大綱: 母子相似性質 內、外分比性質 重點複習 顧震宇 台灣數位學習科技股份有限公司
商用微積分:觀念與應用 CH1 微積分預備知識.
9.1.2不等式的性质 周村实验中学 许伟伟.
第八节 算术运算符和算术表达式.
2015中考第一轮复习 确定圆的条件.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
第七章 软件测试 Software Testing
直线系应用.
美丽的旋转.
第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章
下列哪些是不等式 的解? 10, 9 , , –1,  全部皆是 你認為不等式 有多少個解? 5 個 無限多個
畢氏定理(百牛大祭)的故事 張美玲 製作 資料來源:探索數學的故事(凡異出版社).
C程序设计 复习 1、计算机系统的组成 外部设备:输入、输出设备(同人打交道《十进制》)
大綱: 比例線段定義 平行線截比例線段性質 顧震宇 台灣數位學習科技股份有限公司
成本會計 在決策中的功能 第四課 1.
102年人事預算編列說明 邁向頂尖大學辦公室製作.
Presentation transcript:

软件工程 周志钊 zhouzhizhao08@163.com

软 件 测 试 基 本 概 念 定义 作用 目标 工作量 执行程序、排除的错误的过程;是对软件规格说明、设计和编码的最全面最后的审查 发现软件中的错误提高正确性、可靠性、质量 工作量 占工作量的40%以上,甚至3~5倍以上 目标 执行,以发现错误好用例,发现尚未发现的错误 好测试,发现错的测试用例

软件测试的原则 ①尽早 不断地进行软件“测试” ②输入数据,合理不合理都要选 ③按阶段制定测试计划,严格执行 ④错多重测 ⑤避免自测 ⑥勿用穷举 ⑦长期保存文档

软 件 测 试 方 法 2种方法 动态测试 静态测试 事先设计好一组 采用人工检测和 测试用例,然后通过运行程序来发现错误 计算机辅助 静态分析的方法 对程序进行检测

静态测试 静态测试是采用人工检测和计算机辅助静态分析的手段对程序进行检测,方法如下: (1)人工测试:是指不依靠计算机运行程序,而靠人工审查程序或评审软件。人工审查程序的重点是对编码质量进行检查,而软件审查除了审查编码还要对各阶段的软件产品(各种文档)进行复查。人工检测可以发现计算机不易发现的错误,特别是软件总体设计和详细设计阶段的错误。据统计,能有效地发现30%~70%的逻辑设计和编码错误,可以减少系统测试的总工作量。

静态测试 (2)计算机辅助静态分析:指利用静态分析软件工具对被测试程序进行特性分析,从程序中提取一些信息,主要检查用错的局部变量和全程变量、不匹配参数、错误的循环嵌套、潜在的死循环及不会执行到的代码等。还可以分析各种类型的语句出现的次数、变量和常量的引用表、标识符的使用方式、过程的调用层次及违背编码规则等。

动态测试 动态测试与静态测试相反,主要是设计一组输入数据,然后通过运行程序来发现错误。在软件的设计中,出现了大量的测试用例设计方法。测试任何工程化产品,一般有两种方法: (1)黑盒测试:了解了产品的功能,然后构造测试,来证实所有的功能是完全可执行的。 (2)白盒测试:知道测试产品的内部结构及处理过程,可以构造测试用例,对所有的结构都进行测试。

黑 盒 测 试 输出 输入 又称功能测试,不考虑内部结构和处理过程,测试仅在接口上进行。用来证实软件功能的可操作性,检查程序是否满足功能要求,是否能很好地接收数据,并产生正确的输出。一般用来检验系统的基本特征。

黑 盒 测 试 合理的输入: x=4 ,y=2 x=-4,y=4 x=0,y=0 不合理的输入: x=3.5,y=2.6 x=a, y=& r = x + 4/y 输入整数x、y,求r值 输出 输入 预期结果: r = 4 合理的输入: x=4 ,y=2 x=-4,y=4 x=0,y=0 x 值有误 y值有误 不合理的输入: x=3.5,y=2.6 x=a, y=& 值不正确 ???

黑 盒 测 试 黑盒测试的任务是发现以下错误: (1)是否有不正确或遗漏了的功能。 (2)在界面上,能否正确地处理合理和不合理的输入数据,并产生正确的输出信息。 (3)访问外部信息是否有错。 (4)性能上是否满足要求等。 (5)初始化和终止错误。 用黑盒法测试时,必须在所有可能的输入条件和输出条件中确定测试数据。

白 盒 测 试 完全了解程序的内部结构和详细的处理过程,测试在程序内部结构上进行。对程序中尽可能多的逻辑路径进行测试,在所有的点检验内部控制结构和数据结构是否和预期相同。

白 盒 测 试 开始 Y Y 1. 输入x,y Y 2.x<0 4.r1=sqrt(x) Y 3. x值错 5. y= =0 N Y N 1. 输入x,y 路径1:1, 2, 3, 10 Y 路径2:1,2,4,5,6,10 2.x<0 N 路径3:1,2,4,5,     7,8,9,10 4.r1=sqrt(x) Y 3. x值错 5. y= =0 N 测试数据1:x=-2,y=7 6. y值错 7. r2=4/y 测试数据2:x=4,y=0 8. r=r1+r2 测试数据3:x=4,y=7 9. 输出r值 10. 结束

黑、白盒对比分析总结 类型 测试依据 开发环境 测试原则 黑 盒 功能需求 快速应用开发环境 所有可能的输入及其结果 白 盒 程序内部结构 结构化开发环境 覆盖所有的路径(语句)

黑、白盒对比分析总结 因为白盒测试不检查功能,因此即使每条路径都测试并正确了,程序仍可能有错。例如要求编写一个升序的程序,错编成降序程序(功能错误),就是穷举路径测试也无法发现。再如由于疏忽漏写了路径,白盒测试也发现不了。 所以,黑盒法和白盒法都不能使测试达到彻底。为了让有限的测试发现更多的错误,需精心设计测试用例。

软件测试技术 白盒测试——逻辑覆盖 白盒测试——基本路径 白盒测试——循环测试 黑盒测试——等价类划分 黑盒测试——边界值分析、 错误推测、组合数据测试

白盒测试—逻辑覆盖 1. 逻辑覆盖 下面根据如图所示的程序,分别讨论几种常用的覆盖技术。 (a>1) AND (b=0) 1. 逻辑覆盖 下面根据如图所示的程序,分别讨论几种常用的覆盖技术。 (a>1) AND (b=0) (a=2) OR (x>1) 语句段1 语句段2 开始 结束 T F 1 2 3 4 5

几种常用的逻辑覆盖技术 1)语句覆盖 2)判定覆盖 3)条件覆盖 4)判定/条件覆盖 5)条件组合覆盖 6)路径覆盖

几种常用的逻辑覆盖技术 1、语句覆盖: 语句覆盖就是设计足够的调试用例,使得程序中的每个语句至少执行一次。 上图程序段中共有4条路径:P1(124)、P2(135)、P3(125)、P4(134)。 P1正好满足语句覆盖的条件。可以设计如下的输入数据: A=2,B=0,x=4 语句覆盖不能发现判断中的逻辑运算错误。第一个判断中的逻辑运算符“&&”若错写成了“||”,利用上面的输入数据则检查不出这个错误。

几种常用的逻辑覆盖技术 2、判定覆盖: 判定覆盖就是设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖。 测试用例如果能够测试路径P1(124)和P2(135),就可以满足判定覆盖要求。可以设计如下两组输入数据: A=2,B=0,x=4 A=1,B=1,x=1 也可以让测试用例测试路径P3(125)和P4(134)。相应的两组输入数据如下: A=2,B=1,x=1 A=4,B=0,x=4 判定覆盖比语句覆盖强,但是仍不能保证判断条件的正确性。例如:第二个判断条件中的x>1若错写成了x<1,利用上面的输入数据就不能检查出这个错误。

几种常用的逻辑覆盖技术 3、条件覆盖: 条件覆盖就是设计足够的测试用例,使得程序判定中的每个条件的各种可能的值都至少出现一次。 条件:A>1,B=0,A=2,x>1。需要有足够的测试用例使得上述四个条件都能有满足和不满足的情况。以下这两组输入数据能满足这些要求: A=2,B=0,x=4 A=1,B=1,x=1 满足条件覆盖不一定满足判定覆盖。

几种常用的逻辑覆盖技术 4、判定/条件覆盖: 判定/条件覆盖就是设计足够的测试用例,使得判定中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。 对于上面的例子,下述两组输入数据能满足这些要求: A=2,B=0,x=4 A=1,B=1,x=1 采用判定/条件覆盖时,逻辑表达式中的错误不一定能测试出来。 在逻辑表达式中,如果“与”表达式中某一条件为“假”,则整个表达式的值为“假”,这个表达式中另外的几个条件就不起作用了。同样地,如果在“或”表达式中,某一条件为“真”,则整个表达式的值为“真”,其它条件也就不起作用了。

几种常用的逻辑覆盖技术 5、条件组合覆盖:就是设计足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次。 可能的条件组合: (1)A>1,B=0 (2)A>1,B≠0 (3)A≤1,B=0 (4)A≤1,B≠0 (5)A=2,x>1 (6)A=2,x≤1 (7)A≠2,x>1 (8)A≠2,x≤1 相应的输入数据: A=2,B=0,x=4 满足(1)和(5) A=2,B=1,x=1 满足(2)和(6) A=1,B=0,x=2 满足(3)和(7) A=1,B=1,x=1 满足(4)和(8) 显然,满足条件组合覆盖的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。但是,满足条件组合覆盖标准的测试数据并不一定覆盖了程序中的每条路径,例如,利用上述四组测试数据就遗漏了路径P3(125)。

几种常用的逻辑覆盖技术 6、路径覆盖: 设计足够多的测试数据,可以覆盖被测程序中的所有可能的路径。 x=2,y=0,z=3;覆盖路径124 共有4条路径,设计4组测试用例,就可以覆盖这4条路径: x=2,y=0,z=3;覆盖路径124 x=2,y=1,z=1;覆盖路径134 x=1,y=1,z=1;覆盖路径135 x=3,y=0,z=1;覆盖路径125

6种覆盖标准的对比 发现错误能力 覆盖标准 要求 弱 强 语句覆盖 每条语句至少执行一次 判定覆盖 每个判定的每个分支至少执行一次 条件覆盖 每个判定的每个条件应取到各种可能的值 判定/条件覆盖 同时满足判定覆盖和条件覆盖 条件组合覆盖 每个判定中各条件的每一种组合至少出现一次 路径覆盖 使程序中每一条可能的路径至少执行一次

白盒测试—循环测试 除了选择结构外,循环也是程序中主要逻辑结构,要覆盖含有循环的所有路径是不可能的,但可通过限制循环次数来测试。 1)对于最多为n次的单循环,可设计测试用例实现下列测试: ①跳过循环,即一次也不执行; ②仅循环1次; ③循环2次; ④循环m次,m<n ; ⑤分别循环第n – 1次,n次和n+1次。

白盒测试—循环测试 2)对于嵌套循环的测试: ①从最内层循环开始测试,此时外层循环都取最小值,对内层进行单循环的测试; ②向外退一层进行测试,此时其内层循环取一些典型值,其外层循环仍取最小值; ③继续向外层扩展,直至测试完成。

白盒测试—基本路径 实际问题中,一个不太复杂的程序路径是一个庞大的数字,将覆盖的路径数压缩到一定限度内可简化测试。通过分析程序流程图,导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次。 (1)以详细设计或源程序为基础,导出程序流程图的拓扑结构——程序图。

白盒测试—基本路径 (a)程序流程图 (b)程序图

白盒测试—基本路径 (2)程序图G的环路复杂性V(G)的计算。 例如,上图的V(G)=4,还可以按如下两种方法计算:

白盒测试—基本路径 程序图的环路复杂性亦是平面图中区域的个数。 控制流程 流图 环形复杂性 基本路径集合 测试用例 已知 1 2 3 4 1 5 6 8 9 11 10 12 R1 R2 R4 R6 7

白盒测试—基本路径 (3)确定只包含独立路径的基本路径集。 在上图中,一组独立的路径是: path1:1—11 (4)为每一条独立路径各设计一组测试用例,确保基本路径集合中每条独立路径至少执行一次。

基本路径测试举例 某程序读入三个整数,分别解释为三角形的各边,并据此打印信息,说明三角形是普通的、等腰的或等边的。 设计并实现上述的程序,用基本路径测试法设计测试用例,实际测试后总结所得到的结果。

1)程序流程图如下: 输入a,b,c 输入a,b,c a+b<=c || |a-b|>=c 开始 1 2、3和4 F 5 T 输入a,b,c 6 和 7 F a+b<=c || |a-b|>=c F 9 T a==b 13 10 T F F a==c a==c F 15 T T b==c 17 16 T 14 12 11 8 输出普通 输出等腰 输出等腰 输出等腰 输出等边 输出不是 18 结束

2)C语言程序如下: #include "math.h " main( ) { int a ,b , c; printf ("please input a , b , c: "); scanf ("%d%d%d ", &a , &b , &c ); while ( a<=0 || b<=0 || c<=0 ) { printf ( " a , b , c must be > 0!\nplease input a , b , c: " ); scanf ("%d%d%d " ,&a , &b , &c ); } if ( a+b <= c || abs (a-b) >= c ) printf (“It is not a triangle!\n "); else if ( a==b ) if ( a==c ) printf ( "It is a equilateral triangle!\n " ); else printf ("It is a isosceles triangle!\n " ); else if (a==c ) printf ("It is a isosceles triangle!\n " ); else if (b==c ) printf ("It is a isosceles triangle!\n " ); else printf ("It is a general triangle!\n " );

3)程序图(流图) 4)求出巡回秩数: ①V(G)=E-N+2=26-18+2=10 ②V(G)=P+1=9+1=10 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 R3 R1 R2 R4 R5 R6 R7 R8 R9 R10 3)程序图(流图) 4)求出巡回秩数: ①V(G)=E-N+2=26-18+2=10 ②V(G)=P+1=9+1=10 其中结点2、3、4、6、7、9、10、13、15是判定结点 ③V(G)=10(个区域)

5)确定基本路径集合(10条) 路径1: 1 – 2 – 5 – 2 路径2: 1 – 2 – 3 – 5 – 2 路径1: 1 – 2 – 5 – 2 路径2: 1 – 2 – 3 – 5 – 2 路径3: 1 – 2 – 3 – 4 – 5 – 2 路径4: 1 – 2 – 3 – 4 – 6 – 8 – 18 路径5: 1 – 2 – 3 – 4 – 6 – 7 – 8 – 18 路径6: 1 – 2 – 3 – 4 – 6 – 7 – 9 – 10 – 11 – 18 路径7: 1 – 2 – 3 – 4 – 6 – 7 – 9 – 10 – 12 – 18 路径8: 1 – 2 – 3 – 4 – 6 – 7 – 9 – 13 – 14 – 18 路径9: 1 – 2 – 3 – 4 – 6 – 7 – 9 – 13 – 15 – 16 – 18 路径10:1 – 2 – 3 – 4 – 6 – 7 – 9 – 13 – 15 – 17 – 18

6)为每一条独立路径设计设计用例 ①路径1的测试用例:a = – 3, b = 4, c = 5; 期望结果:输出 出错:a , b , c must be > 0! 提示输入:please input a , b , c: ②路径2的测试用例:a = 3 , b = – 4 , c = 5 ; ③路径3的测试用例:a = 3 , b = 4 , c = – 5 ; ④路径4的测试用例:a = 3 , b = 1 , c = 5 ; 期望结果:输出 : It is not a triangle! ⑤路径5的测试用例:a = 3 , b = 7 , c = 2;

6)为每一条独立路径设计设计用例 ⑥路径6的测试用例:a = 3 , b = 3 , c = 3 ; 期望结果:输出 : It is a equilateral triangle! ⑦路径7的测试用例:a = 3 , b = 3 , c = 5 ; 期望结果:输出 : It is a isosceles triangle! ⑧路径8的测试用例:a = 3 , b = 4 , c = 3 ; ⑨路径9的测试用例:a = 3 , b = 4 , c = 4 ; ⑩路径10的测试用例:a = 3 , b = 4 , c = 5 ; 期望结果:输出 : It is a general triangle!

黑盒测试 目的:主要是测试软件是否满足功能需求。 测试的错误类型有: ①不正确或遗漏的功能; ②接口错误; ③性能错误; ④数据结构或外部数据访问错误; ⑤初始化或终止条件错误等等。 黑盒测试设计测试用例的方法: 等价类的划分、边界值分析、 错误推测、组合数据测试等。

黑盒测试—等价类划分 不可能用所有可能的输入数据测试程序功能,而只能从输入数据中选一个子集进行测试。 等价类划分是选择测试子集的办法。它将输入数据域按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,认为测试等价类的代表值的结果就等于对该类其他值的测试。

黑盒测试—等价类划分 【例7.1】设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在1990年1月~2003年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的“日期检查功能”。 1)划分等价类并编号 表7-1 等价类划分的结果 输入等价类 有效等价类 无效等价类 日期的类型 及长度 ①6位数字字符 ②有非数字字符 ③少于6位数字字符 ④多于6位数字字符 年份范围 ⑤在1990~2003之间 ⑥小于1990 ⑦大于2003 月份范围 ⑧在01~12之间 ⑨等于00 ⑩大于12

黑盒测试—等价类划分 2)设计测试用例,以便覆盖所有的有效等价类 在表7-1中列出了3个有效等价类, 编号分别为①、⑤、⑧, (每个用例尽可能多地覆盖尚未被覆盖过的有效等价类) 在表7-1中列出了3个有效等价类, 编号分别为①、⑤、⑧, 设计的测试用例如下: 测试数据 期望结果 覆盖的有效等价类 200211 输入有效 ①、⑤、⑧

黑盒测试—等价类划分 测试数据 期望结果 覆盖的无效等价类 95June 无效输入 ② 20036 无效输入 ③ 3)为每一个无效等价类设计一个测试用例,设计结果如下: 测试数据 期望结果 覆盖的无效等价类 95June 无效输入 ② 20036 无效输入 ③ 2001006 无效输入 ④ 198912 无效输入 ⑥ 201001 无效输入 ⑦ 200100 无效输入 ⑨ 200113 无效输入 ⑩

等价类划分的几条经验性原则 ①如果规定了输入值的范围,则可划分出一个有效的和两个无效的等价类。 ②如果规定了数据输入的个数,则可划分出一个有效的和两个无效的等价类。 ③如果规定了输入数据的一组值,而且程序对不同的输入值进行不同的处理,则每个允许的输入值是一个有效的等价类,有一个无效的等价类(这组值以外的值)。 ④如果规定了输入数据必须遵循的规则,则有一个有效的等价类和若干个无效的等价类(从不同的角度违反规则)。 ⑤如果输入条件规定了一个集合,则可划分出一个有效的等价类和一个无效的等价类。

黑盒测试—边界值分析 等价类划分的缺点是没有选择某些高效的、能够发现更多错误的测试用例。 边界值分析(boundary value analysis,BVA)是指设计测试用例,使程序在输入或输出的边界值或者边界值左右的值执行。 实践表明,程序往往在处理边界情况时发生错误,因此检查边界情况的测试用例是比较高效的,可以查出更多错误。

黑盒测试—边界值分析 边界值分析方法可以单独设计测试用例,也可以作为等价类划分方法的补充,即在各个等价类中主要是选择边界上及其左右的值。 边界值分析方法设计测试用例的经验性原则: 1)如果输入条件指定了范围[a,b],则a、b以及紧挨a、b左右的各一个值都应作为测试用例。比如,学生成绩为[0,100],应取-1、0、1、99、100、101共6个值作为测试用例。

黑盒测试—边界值分析 2)如果输入条件指定了输入数据的个数范围,则按最大、最小个数及其左右的个数各设计一个测试用例。比如,一个输入文件应包括1~255个记录,则应分别设计输入0个、1个、2个、254个、255个、256个记录的测试用例。 3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。

黑盒测试—边界值分析 如一个学生成绩管理系统规定,只能查询95~98级大学生的各科成绩,可以设计测试用例,除了查询范围内的学生的学生成绩,还需设计查询94级、99级学生成绩的测试用例(不合理输出等价类)。 由于输出值的边界与输入值的边界没有必然的对应关系,所以要检查输出值的边界不一定可能,要产生超出输出值之外的结果也不一定能做到,但必要时还需试一试。

“报表日期”边界值分析法测试用例 输入等价类 测试用例说明 测试数据 期望结果 选取理由 报表日期的 类型及长度 1个数字字符 5个数字字符 7个数字字符 有1个非数字字符 全部是非数字字符 6个数字字符 5 19995 199905 1999.5 May--- 显示出错 显示有效 仅有一个合法字符 比有效长度少1 比有效长度多1 只有一个非法字符 6个非法字符 类型及长度均有效 日期范围 在有效范围边界 上选取数据 199001 199912 199000 199913 输入有效 最小日期 最大日期 刚好小于最小日期 刚好大于最大日期 月份范围 月份为1月 月份为12月 月份<1 月份>12 199801 199812 199800 199813 最小月份 最大月份 刚好小于最小月份 刚好大于最大月份

黑盒测试—错误推测 在测试程序时,人们根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。 基本思想是:程序测试员通过已经掌握的测试理论和实际测试中积累的经验,推测程序在哪些情况下可能发生错误,并将可能发生错误的情况列出,然后为每一可能发生错误的情况各设计一个测试用例。

黑盒测试—错误推测 例如,测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况: 1)输入的线性表为空表; 2)表中只含有一个元素; 3)输入表中所有元素已排好序; 4)输入表已按逆序排好; 5)输入表中部分或全部元素相同。 可针对以上列出的每一种情况各设计一个测试用例。

黑盒测试—组合数据测试 在单个测试用例没有测试出错误的情况下,采用测试数据的某种组合却可能检测出程序中隐藏的错误。 组合数据测试(因果图)以判定表为依据,将自然语言描述的功能说明转换为判定表,列出输入数据的各种组合情况和程序相应的动作、可能的输出结果之间的对应关系,最后为判定表的每一列设计一测试用例。

黑盒测试—组合数据测试

综合策略 没有哪一种测试方法是最好的,发现错误能力最强的。每种方法都适合于发现某种特定类型的错误。因此在实际测试中,常常联合使用各种测试方法,形成综合策略,通常先用黑盒测试法设计基本的测试用例,再用白盒法补充一些必要的测试用例,方法如下: (1)在任何情况下都应使用边界值分析法,用这种方法设计的用例暴露程序错误能力强。设计用例时,应该既包括输入数据的边界情况又包括输出数据的边界情况。

综合策略 (2)必要时用等价类划分方法补充一些测试用例。 (3)再用错误推测法补充测试用例。 (4)检查上述测试用例的逻辑覆盖程度,如未满足所要求的覆盖标准,再增加例子。 (5)如果需求说明中含有输入条件的组合情况,则一开始就可使用因果图法。

软件测试过程 软件测试过程中的信息: (1)软件配置:指需求说明书、设计说明书和源程序等。 (2)测试配置:指测试方案、测试用例和测试驱动程序等。 (3)测试工具:指计算机辅助测试的有关工具。

软件测试过程 测试并不只是针对编码进行的测试,一般在软件产品交付使用之前要经过单元测试、集成测试、确认测试和系统测试。 部件 代码 单元测试 … 设计 规格说明 系统 功能需求 其他 软件需求 用户需求 规格说明 安装测试 用户 环境 在使用中的系统 集成测试 集成后 的模块 功能测试 功能 系统 性能测试 验证, 生效的 软件 验收测试 被接受 的系统 测试后 的模块

软件测试与软件开发过程的关系

单元测试 1、单元测试的内容 1)模块接口 2)局部数据结构 3)重要的执行路径 4)错误处理 5)边界条件

单元测试 2、单元测试的方法 由于被测试的模块处于整个软件结构的某一层位置上,一般是被其他模块调用或调用其他模块,其本身不能进行单独运行,因此在单元测试时,需要为被测模块设计驱动模块(driver)和桩(stub)模块。 驱动模块的作用是用来模拟被测模块的上级调用模块,功能要比真正的上级模块简单得多,仅仅是接收被测模块的测试结果并输出。桩模块则用来代替被测模块所调用的模块。它的作用是提供被测模块所需的信息。

单元测试的测试环境 (a)软件结构 (b)模块B的测试环境

集成测试 集成测试是指在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统而进行的测试,故也称组装测试或联合测试。实践证明,单个模块能正常工作,组装后不见得仍能正常工作。

集成测试 集成测试的内容: ①通过接口的数据 ②模块间的功能影响 ③子功能组合起来有没有实现主功能; ④全局数据结构的影响 ⑤误差积累

集成测试的模块组装方法 深度优先或广度优先。 1)深度优先 先从软件结构中选择一条主控路径,把该路径上的模块结合起来测试,则某个完整功能会被实现和测试,接着再结合其他需要优先考虑的路径。

集成测试的模块组装方法 其中Si代表桩模块。

集成测试的模块组装方法 2)宽度优先 逐层结合直接下属的所有模块。如对于上图的例子,结合顺序为M,A,B,C,D,E。

确认测试 确认测试又称有效性测试。它的任务是检查软件的功能与性能是否与需求说明书中确定的指标相符合。因而需求说明是确认测试的基础。 确认测试阶段有进行确认测试与软件配置审查两项工作。 软件配置审查的任务是检查软件的所有文档资料的完整性、正确性。如发现遗漏和错误,应补充和改正。同时要编排好目录,为以后的软件维护工作奠定基础。

系统测试 几类系统测试简介: 1)功能测试 2)性能测试 9)兼容性/转换性能测试 3)恢复测试 10)构成测试 4)安全测试 5)容量测试 6)压力测试 7)可用性测试 8)存储器测试 9)兼容性/转换性能测试 10)构成测试 11)可靠性测试 12)可服务性测试 13)资料测试 14)规程测试 15)安装测试

软件测试文档 软件测试计划 测试说明文件 软件测试分析报告

调试的概念 2 3 调试则是在进行了一次成功的测试之后立即开始的。 1 调试的目的是确定错误的位置和引起错误的原因,并加以改正。因此,又称为排错或纠错。 3 错误定位是软件工程中最困难的工作,确定发生错误的位置和内在原因所需的工作量几乎占整个调试工作量的90%。

调试方法 分为三类: 原始类; 归纳法 排除类; 回溯类。 演绎法 1.原始类(brute force) 分为三类: 原始类; 归纳法 排除类; 回溯类。 演绎法 1.原始类(brute force) 其主要思想是“通过程序运行现场找错”。例如输出存储器、寄存器的内容,在程序中插入打印语句等等。这种方法的效率低,还需要修改程序,更依赖测试人员的能力和经验。

调试方法—归纳法调试 1 2 4 3 收集数据 收集程序做对了什么和做错了什么的有关全部数据 整理、分析数据 对收集的数据进行分析、比较和整理,注意观察数据间的关系,从错误的症状中发现线索 3 提出假设 对这些线索进行研究和推测,提出有关错误产生的原因和部位的一个或多个假设。如果有多个假设,首先选择可能性最大的一个。 4 证明假设 由数据验证或反证假设,如果假设得到证实,据此阅读程序找出出错原因和位置并进行改正;如果无法验证,则可能假设错误或有多重错误,需要提出新的假设,进行新的验证。

调试方法 3.演绎法调试 演绎法是枚举所有可能引起出错的原因作为假设,然后从中排除不可能发生的原因和假设,对余下的假设进行不断地验证和改进,最后从中推演出出错的原因和部位。 4.回溯法调试 对小型程序进行调试,回溯法是一种有效的方法。该方法是从发现错误现象的地方出发,人工沿程序的控制流程向回追踪,直至找到产生错误的原因为止。但是,当程序的规模较大时,由于需回溯的路线显著增加,因此无法做到完全回溯,只好采用其他的调试方法。

小结 测试的目的是为了发现错误,而不是去证明程序正确。 测试方法分为静态测试和动态测试。有两种不同的测试用例设计技术:黑盒测试和白盒测试。 白盒测试是以了解程序的内部结构为基础的。黑盒测试是一种对功能的测试。 测试过程分单元测试、集成测试、确认测试和系统测试。 测试发现错误后,需要定位错误,这就用到了调试技术了。调试技术都是属于经验总结,因此要提高调试技术,需要经常总结调试的经验。