软件测试基础 - 单元测试理论部分

一、单元测试

1.定义: 单元测试是对软件基本组成单元进行的测试,如函数(function或procedure)或一个类的方法(method)。

2.单元定义:单元具体有一些基本属性,如明确的功能、规格定义,明确的与其他部分的接口定义等,可清晰地与同一程序的其他单元划分。

在传统的结构化编程语言中,如C语言,进行测试的单元一般是函数或子过程;在面向对象的语言中,如C++,进行测试的基本单元是类或类的方法。

3.基本单元:基本单元不一定是指一个具体的函数(function或procedure)或一个类的方法(method),在具体实现时,也可能对应的是多个程序文件中的一组函数。

4.对象:文档和代码。

5.目的:文档和需求是否一致/代码本身的逻辑检测/文档和代码的一致性。

例1:一个求绝对值函数,文档:当输入参数x>=0时,return x,否则return -x; 代码中写成x>0时,return x,否则return -x;

例2:对于定义的指针变量,不初始化就直接引用。该指针变量所指向的地址是运行时随机产生的,该地址又可能是只能系统访问的内存地址或者其它软件所使用的内存地址,这种情况下会产生错误;

二、单元测试关注重点

1.单元的接口(静态测试)

单元接口就是输入和输出对应关系的集合;对单元进行动态测试无非就是给这个单元一个输入,然后检查输出是否和预期一样。

      如果数据不能正常的输入和输出,单元测试就无从谈起,因此需要对单元接口进行如下的测试:

a.被测单元的输入输出参数在个数、属性、顺序上是否和详细设计中的描述保持一致→代码实现应和设计保持一致,接口处容易被忽略;

b.是否修改了只做输入用的形式参数→不要修改只做输入用的形式参数,否则可能会导致数据的错误修改;

c.约束条件是否通过形式参数来传送→避免约束条件通过形式参数传送,防止单元之间的控制耦合;

2.局部数据结构---开发工具

单元的局部数据结构是最常见的错误来源,应设计测试用例以检查以下各种错误:

a.检查不正确或不一致的数据类型;

b.指针未初始化;

c.定义的数据类型不正确,如int a=65536;

d.拷贝过程中出现的错误,如Num1拷贝后变成Num2;

e.强制转型,导致精度丢失,如int a;float b;a=b会导致精度丢失;

3.独立路径

对基本执行路径和循环进行测试会发现大量的错误。设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流面导致的错误:

a.运算的优先次序不正确或误解了运算的优先次序,如:a=b+c>>2不等同于a=b+c/4;

b.运算的方式错误; a=b++;和a=++b不同;

c.不同数据类型的比较;unsigned int a;int b;while(a>b);

d."差1错",不正确的多循环或少循环一次;for(i=0;i<=100;i++)循环101次而不是100次;

e.错误的或不可能的循环终止条件;while(|a|<0),导致死循环;

f.关系表达式中不正确的变量和比较符;如if(x==1)写成if(x=1)

g.当遇到发散的迭代时不能终止的循环,所以迭代要慎用,调用层次不能过深;

h.不适当的修改了循环变量等;while(i);

4.边界条件---覆盖率测试层面

边界上出现错误是常见的,例如:在n次循环的第n次,取最大最小值时容易发生错误;特别要注意数据流,控制流中刚好等于、大于、小于确定的比较值时出现错误的可能性。

int a[10];
for (i=1;i<=10;i++)
{
  sum=sum+a[i];
}

5.出错处理---描述准确与否

比较完善的单元设计要求能预见出错的条件,并设置适当的出错处理,以便在程序出错时,能对出错程序重新做安排,保证其逻辑上的正确性。

a.出错的描述不具体或者难以理解,如用户登录界面,输入用户名密码后出现error code00001;

b.出错的描述不足以对错误定位和确定出错的原因,如登陆失败;

c.显示的错误与实际不符,如用户名输错,却显示密码错误;

d.对错误条件的处理不正确,如虽然显示密码错误,但点击确定后仍可登陆;

e.对错误进行处理之前,错误条件已经引起系统的干预等,如严重错误导致操作系统干预;

三、如何进行单元测试

1.单元测试环境

一个类调用另一个类:导入(import)/实例化(New)

驱动单元:

a.接收测试数据,包含测试用例输入和预期输出;

b.把测试用例输入传送给要测试的单元;

c.将被测单元的实际输出和预期输出进行比较,得到测试结果;

d.将测试结果输出到指定位置;

如:测试加法函数

void driver(){
  int sum=0;
  sum=add(1,1);   //b
  if (2==sum)       //c
    printf("ok!\n");  //d
  else
    printf("fail!\n");
}

2.单元测试策略

a.孤立的测试策略

方法:不考虑每个模块与其他模块之间的关系,为每个模块设计桩模块和驱动模块。每个模块进行独立的单元测试,如下图所示:

优点:简单易操作;可以达到较高覆盖率;可以并行开展;纯粹的单元测试;

缺点:驱动函数和桩函数工作量大,效率低;

b.自顶向下的单元测试策略

方法:先对最顶层的单元进行测试,把顶层所调用的单元做成桩模块。其次对第二层进行测试,使用上面已经测试的单元做驱动模块。依此类推直到测试完所有模块。

优点:可以节省驱动函数的开发工作量,测试效率较高;

缺点:随着被测单元一个一个被加入,测试过程将变得越来越复杂,并且开发和维护的成本将增加;

c.自底向上测试

方法:先对模块调用层次图上最低层的模块进行单元测试,模拟调用该模块的模块做驱动模块,然后再对上面一层做单元测试,用下面已被测试过的模块做桩模块。依此类推,直到测试完所有模块。

优点:可以节省桩函数的开发工作量,测试效率较高;

缺点:不是纯粹的单元测试,底层函数的测试质量对上层函数的测试将产生很大的影响;

四、单元测试的四个阶段

1.单元测试计划阶段:完成单元测试计划

2.单元测试设计阶段:完成单元测试方案

3.单元测试实现阶段:完成单元测试用例、单元测试规程、单元测试脚本及数据文件

4.单元测试执行阶段:执行单元测试用例,修改发现的问题并进行回归测试,提交单元测试报告

五、单元测试原则

1.对全新的代码或修改多的代码进行单元测试。

2.单元测试根据单元测试计划和方案进行, 排除测试的随意性。

3.必须保证单元测试计划、单元测方案、单元测试用例等经过评审。

4. 当测试用例的测试结果与预期结果不一致时,单元测试的执行人员需如实记录实际的测试结果。

5.只有当测试计划中的结束标准达到时,单元测试才能结束。

6.对被测单元需达到一定的代码覆盖率要求。

时间: 2024-08-07 04:19:36

软件测试基础 - 单元测试理论部分的相关文章

软件测试基础学习笔记

LR学习笔记 I.         软件测试基础 1.     软件的概念:程序与文档的结合. 2.     软件缺陷的概念:指计算机的硬件.软件系统或应用软件出现的错误,即为BUG. 1)     硬件错误原因:设计错误和硬件部件老化失效 2)     软件错误原因:软件开发企业设计错误引发 3.     软件生命周期的概念:从软件需求的定义.产生直到被废弃的生命周期. II.         软件测试的定义 1.     测试:包含硬件测试和软件测试 2.     测试用例:针对需求规格说明

软件测试基础知识

软件测试基础知识 1.  软件质量与软件测试 软件测试:在规定条件下对程序进行操作,以发现错误,对软件质量进行评估,包括对软件形成过程的文档.数据以及程序进行测试 软件质量:软件特性的总和,软件满足规定或潜在用户需求的能力 2.  软件测试与质量保证 软件测试只是质量保证工作中的一个环节,软件质量保证与软件测试是软件质量工程的两个不同层面的工作: 质量保证:通过预防.检查与改进来保证软件质量,采用全面质量管理和过程改进的原理来开展质量保证工作,主要关注软件质量的检查与测试,主要着眼于软件开发活动

第2章, 软件测试基础

2.1.1,什么是软件测试 软件测试的经典定义是在规定条件下对程序进行操作,以发现错误,对软件质量进行评估 60%以上的软件错误并不是程序错误,而是分析和设计错误,因此做好软件需求和软件阶段的测试工作就显得非常重要 2.1.2,什么是软件质量 软件质量定义:软件特性的总和,软件满足规定或者潜在用户需求的能力 2..1.3,软件测试与质量保证的区别 质量保证:质量保证的重要工作通过预防.检查与改进来保证软件质量,着重于软件的开发过程.步骤和产物 软件测试:对软件开发的过程产物以及软件进行剖析,软件

软件测试基础(1)

目录 l 软件测试基础 l 掌握软件测试相关的概念 l 掌握软件生命周期以及各阶段相关的工作 l 掌握测试的对象和原则 l 了解软件开发模型 l 掌握软件测试模型及各模型的特点 l 掌握软件测试的方法和类型 l  了解软件测试质量及测试与QA的关系.区别 测试相关概念 IT( information technology )信息科技和产业的意思 软件:一系列按照特定顺序组织的计算机数据和指令的集合程序+数据+文件 产品:能够供给市场,被人们使用和消费,并能满足人们某种需求的任何东西,包括有形的物

软件测试基础入门知识点

软件测试基础入门知识点 一.行业前景 前言 ? 程序员之间流传着这样一句话:有人喜欢创造世界,他们做了开发工程师,有人喜欢挑毛病,所以他们做了测试工程师. 什么是软件测试 软件测试就是利用手工或测试工具按照测试方案和流程对产品进行功能和性能测试,简单的来说就是为软件做"质检". 软件测试的重要性 ? bug 的经济损失: ? 软件 bug 对我们的生活,工作都会带来毁灭性的破坏.据悉,每年的软件 bug 会让整个市场经济带来近600亿美元的损失! 成立软件测试部门的原因 软件测试能提前

测试用例与软件测试基础

一.软件测试基础 软件:简单的理解就是软件是一个集合,包含三个部分:程序代码.文档.数据 软件测试:软件测试就是为了发现错误而审查软件文档.检查软件数据和执行程序代码的过程.其目的在于在软件交付使用前充分发现缺陷并协助相关部门定位.解决缺陷,最后交付一个高质量的软件给用户.软件测试是软件生存周期的一个重要阶段,其主要任务是对被测对象,从初期的需求规格说明书,到最后的系统交付使用,整个过程进行检查.验证,以确保软件质量. 测试目的:基于不同的立场,存在着两种完全不同的测试目的.从用户的角度出发,普

《软件测试基础》读书报告:第四章 输入空间划分

<软件测试基础>读书报告 第四章 输入空间划分 为了更直接地使相同测试需求的值集合是恰好合适,划分输入空间的方式直接的根据输入值的参数来定义输入域.输入参数可能是方法的参数和全局变量,也可能是系统当前的表现状态,或者干脆是用户级给定的一个输入,这都要根据实际情况来划分.总输入域中划分出若干个区域,从这些区域中选出一些值来进行测试. 从参数的域开始,把每个域可能的值划到块里,从块中选取适当的值来组成测试用例的过程就是输入域建模的过程.对于输入与的划分,一般是基于程序相应的某周特性,程序的输入,程

软件测试基础 - 集成测试(理论部分)

一.集成测试概念 集成测试也叫组装测试.联合测试.子系统测试或部件测试,是在单元测试的基础上,将所有函数按照概要设计要求组装成为子系统或系统所进行的测试:它和单元测试所关注的范围是不同的,因此,它们在发现问题的集合上包含有不相交的区域,不能使用集成测试来替代单元测试,反之亦然. 二.集成测试关注点1.模块间的接口     把各个模块连接起来的时候,穿越模块接口的数据是否会丢失:     全局数据结构是否有问题,会不会被异常修改: 2.集成后的功能     各个子功能组合起来,能否达到预期要求的父

软件测试基础知识大全

1.   软件生命周期(SDLC)的六个阶段 1.问题的定义及规划       此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性. 2.需求分析       在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析.需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础."唯一不变的是变化本身.",同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行. 3.软