Part1数学背景
C1测试概述
标识(是区分的意思?)测试用例:
1、功能性测试(黑盒)
方法:将软件当做一个黑盒,根据软件的规格说明比较期望输出和实际输出
1)边界值分析
2)健壮性分析
3)最坏情况分析
4)特殊值测试
5)输入等价类
6)输出等价类
7)基于决策树的测试
优点:与软件如何实现无关,如果软件内部变化,测试用例仍然可用
测试用例和开发可以并行(这里不大明白)节约时间
缺点:测试用例重复
存在未测试的软件漏洞
2、结构性测试(白盒)P8的图没看懂要表达什么意思
二者比较:功能性测试结合覆盖率指标,能解决大多数问题
缺陷种类:输入/输出缺陷、逻辑缺陷、计算缺陷、接口缺陷、数据缺陷
单元测试、集成测试和系统测试对应软件开发中不同时期的测试
C2举例
1、三角形问题:经典测试问题,三角形的三条边之间的关系决定能不能构成三角形以及三角形的种类
2、NextData函数(这是我们写过的Python作业):先判断是否是闰年(闰年条件);根据每个月的天数计算
3、佣金问题:很像峰谷电电费的计算方法
4、ATM机存取款及余额查询:根据每种逻辑选择显示不同的界面
5、货币转换器:在同一个界面上操作、结合数字
6、土星牌挡风玻璃雨刷:决策表的使用例子
C3一些数学问题
1、集合
2、韦恩图
3、集合操作
4、函数:定义域值域、函数合成没看明白
5、命题逻辑(数字电路中讲过)
C4图论(很像数据结构的内容)
1、图、节点的度,其实就是树;连接性是“连通性”的代名词,两点之间存在路径即可连通;圈(孔)数=边-节点数+组件数;有向图;节点的类型
2、用于测试的图:类似于程序的流程图;有限状态机类似于元胞自动机,只不过元胞不是“胡乱”生长的,每两个元胞之间的发生方式由人为约定
3、Petri网:一种双向有向图(p60的图)EDPN网:事件驱动的Petri网
Part2功能性测试
C5功能测试
1)边界值分析:考虑定义域和值域的边界情况,一个有n个变量的函数有4n+1个边界值分析的测试用例
2)健壮性分析:鲁棒性,是边界值分析的扩展,取略大于max和略小于min的值,观察系统的表现
3)最坏情况分析:边界值分析是最坏情况用例的真子集,也就是说,最坏情况要把每个输入的情况都测试到,n变量函数的最坏情况测试,会产生5^n个测试用例。
4)特殊值测试:依赖测试人员的经验
5)随机测试:最基本的测试方法
C6等价类测试
1)弱一般等价类测试:测试用例中每个等价类的一个变量实现
2)强一般等价类测试:基于多假设,覆盖所有等价类
3)弱(有单缺陷假设)健壮性(考虑无效值)等价类测试
4)强(多单缺陷假设)健壮性(考虑无效值)等价类测试:其实就是包括了所有边界情况及无效值的测试用例
C7基于决策表的测试(因果图法&决策表格法)
利用表格行列考虑到每种情况,判断每种情况后输出预期结果,可以在列上加入所有情况,个人觉得像是表格表示因果图。
决策表适用于有如下特征的应用
1)if-then-else逻辑很明显
2)输入变量存在逻辑关系
3)涉及输入变量子集的计算
4)圈复杂度(独立线性路径条数,即合理的预防错误所需测试的最少路径条数)很高
决策表的面积很大,迭代可以帮助我们改进
C8功能性测试总结
边界值的测试用例数量是最高的,它通常依赖于自动化测试,却是很粗糙的;决策表的测试用例数量最少,是最精细的
容易使用的方法会生成大量测试用例,执行时间大大增加
测试效率
功能测试会漏掉一些功能和重复测试一些功能(本书提出可以用更精细的手段缩小一些漏洞,结构性测试有一些指标可以量化测试效率)
根据特征选用合适的测试方法
1)变量之间是否是物理量或者逻辑量
2)变量之间是否存在约束关系或者说变量之间是否是独立的
3)假设单缺陷还是多缺陷
4)是否有大量例外需要处理
对不同的特征提供以下方法作为参考
1)物理量变量用定义域测试和等价类测试
2)变量间独立用定义域测试和等价类测试;不独立用决策表测试
3)单缺陷假设用边界值分析和健壮性测试;多缺陷假设用最坏情况测试&决策表测试
4)有大量例外处理,用健壮性测试和决策表测试
5)变量引用逻辑量,用等价类测试用例和决策表测试
Part3结构性测试
C9路径测试
给定一段程序,测试其中的逻辑路径,例如if-else、while,对于逻辑路径有一个指标是覆盖率(测试覆盖分析器)。DD路径(决策树路径Yor N)是最常见的,类似的还有语句与判断测试、多条件覆盖、循环覆盖。
基路径测试:把程序看成一种向量空间,对非常有意义的元素集合的测试就是基测试。特殊的介绍McCabe的基路径,即强连接图的圈数量即为图中线性独立环路的数量.
基本复杂度:串行(顺序结构);前测试循环(条件&顺序);后测试循环(条件&顺序,不过顺序发生在后一条件)
通常具有高圈复杂度的程序需要更充分的测试,一般采用V(G)=10,如果复杂度更高,选择简化单元或者计划更充分的测试。单元的结构很好的,基本复杂度为1,很容易简化。如果单元的基本的复杂度超过了指导方针规定,最好先解决非结构化的问题
C10数据流测试
指对软件代码在中变量使用情况的测试;大多数程序用数据来检验其功能、分析源代码。早期的数据流测试往往是检查“变量定义但未使用、变量未定义、变量使用前重复定义”,这些错误很容易通过程序的索引表发现,静态测试已经足以检查出错误。数据流测试适用于计算密集的程序
C11结构性测试总结
何时停止:
1)时间不够(其实我觉得这一条不是很确切,作为质量保障不能上线存在质量隐患的软件)
2)继续测试没有发现新缺陷
3)继续测试没有发现新失效
4)没有新的测试用例
5)继续测试的性价比(回报)不是很高
6)达到测试文档所提的测试要求
业界最常用的是DD路径覆盖指标
Part4集成与系统测试
C12测试层次
传统瀑布模型将测试分为四个阶段,集成测试分为自顶向下和自底向上最后的系统测试往往是功能性测试而非结构测试。
举例:ASTM系统的测试(和之前的逻辑路经测试大体相同)但是ASTM涉及硬件,还需要考虑其与终端传感器、服务器等的通信。
C13集成测试
集成测试在系统测试之前、单元测试之后,测试组合单元时出现的问题。通过使用要求在组合单元前测试每个单元并确保每个单元的生存能力的测试计划,可以知道在组合单元时所发现的任何错误很可能与单元之间的接口有关。在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。
C14系统测试
定义:一个产品初步完成后对其进行的整体测试
与集成测试的区别:摘自博客http://blog.csdn.net/zll01/article/details/4555406
1.计划和用例编制的先后顺序
从V模型来讲,在需求阶段就要制定系统测试计划和用例,HLD的时候做集成测试计划和用例,有些公司的具体实践不一样,但是顺
序肯定是先做系统测试计划用例,再做集成
2.用例的粒度
系统测试用例相对很接近用户接受测试用例
集成测试用例比系统测试用例更详细,而且对于接口部分要重点写,毕竟要集成各个模块或者子系统
3.执行测试的顺序
先执行集成测试,待集成测试出的问题修复之后,(配置管理,基线化),再做系统测试。
4.用例的数量
系统测试的用例数量一般比集成测试的用例数量少,具体的数量要根据各个公司的性能基线来确定,一般写不到这个数量的测试用例还通不过审计
系统测试这个称呼往往被用于压力测试、容量测试、性能测试、安全测试等方面。
而集成测试这个称呼往往被用于细节化的功能测试的超集——从用户需求来设计和组织较大颗粒度的功能测试。
系统测试最主要的就是功能测试,测试软件《需求规格说明书》中提到的功能是否有遗漏,是否正确的实现。做系统测试要严格按照《需求规格说明书》,以它为标准。测试方法一般都使用黑盒测试法;
集成测试在系统测试之前,单元测试完成之后系统集成的时候进行测试。集成测试主要是针对程序内部结构进行测试,特别是对程序之间的接口进行测试。集成测试对测试人员的编写脚本能力要求比较高。测试方法一般选用黑盒测试和白盒测试相结合。
集成测试:是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的借口是否正确。它根据集成测试计划,一边将模块或其他年间单位组合成越来越大的系统,一边运行该系统,以分析所组成的系统是否正确,各个组成部分是否合拍。集成测试的策略主要有自顶向下和自底向上两种。也可以理解为在软件设计单元、功能模块组装、集成为系统时,对应用系统的各个部件(软件单元、功能模块接口、链接等)进行的联合测试,以决定他们能否在一起共同工作,部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。
系统测试:系统测试是基于软件需求说明书的黑盒测试,是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确,并非一项简单的任务,被称为测试的“先知者问题”。因此,系统测试应该按照测试计划进行,其输入、输出和其他的动态运行行为应该与软件规约进行对比。软件系统测试的方法很多,主要有功能测试,性能测试,随机测试等。
通俗的讲,一个产品从研发到出厂的工程中,测试分为三个阶段:单元测试、集成测试、系统测试;单元测试:一个模块的功能及常规错误测试;集成测试:完成单元测试后,各模块联调测试;集中在各模块的接口是否一致、各模块间的数据流和控制硫是否按照设计实现其功能、以及结果的正确性验证等等;可以使整个产品的集成测试,也可以使大模块的集成测试;系统测试:针对整个产品的全面测试,既包含各模块的验证性测试(验证前两个阶段测试的正确性)和功能性(产品提交个用户的功能)测试,又包括对整个产品的健壮性、安全性、可维护性及各种性能参数的测试
C15交互测试
定义交互的范围:行动(理解为行为会更好)、数据、时间、端口和线索。根据时间和位置将交互分为四种。数据是静态的二线索和事件会持续一段时间,端口和数据没有持续时间。
1)单处理器中的静态交互
2)多处理器中的静态交互
3)单处理器中的动态交互
4)多处理器中的动态交互