单元测试的意义 是啥

单元测试是对软件基本组成单元进行的测试,如函数(function、procedure)或一个类的方法(method)。单元具有一些基本属性,如明确的功能、规格定义、与其他部分的接口定义等,可清晰地与同一程序的其他单元划分。
在一种传统的结构化编程语言(比如C语言)中,要进行测试的单元一般是函数或子过程。在类似C++这样的面向对象的语言中,要进行测试的基本单元是类或类的方法。测试时基本单元不一定是指一个具体的函数或一个类的方法,也可能对应多个程序文件中的一组函数。
单元测试的目的在于发现各模块内部可能存在的各种错误,主要包括以下几个方面:
(1)验证代码是与设计相符合的。
(2)发现设计和需求中存在的错误。
(3)发现在编码过程中引入的错误。
单元测试的重点
单元测试主要是针对系统最基本的单元代码进行测试,测试时主要从接口、独立路径、出错处理、边界条件和局部数据五个方面进行测试,如图10-1所示。通过这五个方面来检查模块内部是否存在错误。
单元测试的意义 是啥

下面就这五个方面进行详细的介绍。
(1)接口测试。
接口测试主要是对函数数据的输入和输出进行测试,主要包括以下几个方面的内容:
1)调用所测模块时的输入参数与模块的形式参数在个数、属性、顺序上是否匹配。
2)所测模块调用子模块时,它输入给子模块的参数与子模块中的形式参数在个数、属性、顺序上是否匹配。
3)是否修改了只用作输入的形式参数。
【实例】形式变量sum被作为工作变量使用,当外部函数调用该函数时,外部变量很可能会覆盖该形式参数对应的内存区域,进而导致sum的结果不一致。
void sum_data( unsigned int num, int *data, int *sum ){unsigned int count;*sum = 0;for (count = 0; count \u0026lt; num; count++){*sum += data; // sum 成了工作变量}}应该将以上代码进行修改,修改后的代码如下:void sum_data( unsigned int num, int *data, int *sum ){unsigned int count ;int sum_temp;sum_temp = 0;for (count = 0; count \u0026lt; num; count ++){sum_temp += data;}*sum = sum_temp;}
4)输出给标准函数的参数在个数、属性、顺序上是否正确。5)全局变量的定义在各个模块中是否一致。6)约束条件是否通过形式参数来传送。如果约束条件通过形式参数来传送,很容易出现控制耦合的情况,如以下代码段:int add_sub( int a, int b, unsigned char add_sub_flg ){if (add_sub_flg == integer_add){return (a + b);}else{return (a – b);}}可以将代码分成两个函数来实现,代码如下:int add( int a, int b ){return (a + b);}int sub( int a, int b ){return (a – b);}关于耦合还有以下几种情况:1)无直接耦合:两个模块之间没有直接的调用关系,称为无直接耦合。
2)数据耦合:如果两个模块之间只是通过参数交换信息,而且所交换的信息仅仅是简单数据类型,那么这种耦合称为数据耦合。
3)印记耦合:如果数据结构作为参数进行传递,就称为印记耦合。印记耦合是数据耦合的一个变种。
4)控制耦合:如果两个模块之间所交换的信息包含控制信息,那么这种耦合称为控制耦合。
5)外部耦合:如果某个模块和外部的硬件环境产生交互操作,则产生外部耦合。
6)共用耦合:当两个或多个模块通过一个公共区相互作用时,它们之间的耦合称为共用耦合。
这类公共区可以是全程数据区、共享通信区、内存公共覆盖区、任何介质上的文件、物理设备等。
7)内容耦合:内容耦合指的是一个模块和另外一个模块的内容直接产生联系,一个模块直接


推荐阅读