单元测试之模块接口、局部数据结构、路径、边界条件、错误处理、代码书写规范

单元测试是以程序设计说明书为指导,测试模块范围内的重要控制路径,以揭露错误。

测试的相对复杂性和所发现的错误受到单元测试所限定的范围的限制。它在执行的过程中紧密的依照程序框架对模块进行测试,测试包含入口和出口的参数,输入和输出信息,错误处理信息,部分边界数值测试。需要在6个方面对所测模块进行检查。

1.模块接口测试

模块接口测试是单元测试的基础,当模块通过外部设备进行输入/输出操作时,只有在数据能正确流入、流出模块的前提下,模块才能完成他的功能。

模块接口测试应考虑下列因素:

★ 调用其他模块时所给的输入参数与模块的形式参数在个数、属性、顺序上是否匹配;

★ 调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;

★ 调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;

★ 调用预定义函数时所用参数的个数、属性和次序是否正确;

★ 输入的实际参数与形式参数的个数是否相同;

★ 输入的实际参数与形式参数的属性是否匹配;

★ 输入的实际参数与形式参数的量纲是否一致;

★ 是否修改了只做输入用的形式参数;

★ 是否存在与当前入口点无关的参数引用;

★ 是否修改了只读型参数;

★ 对全程变量的定义各模块是否一致;

★ 是否把某些约束作为参数传递。

★ 输出给标准函数的参数在个数、属性、顺序上是否正确;

★ 限制是否通过形式参数来传送;

★ 文件属性是否正确;

★ OPEN/CLOSE语句是否正确;

★ 格式说明与输入输出语句是否匹配;

★ 缓冲区大小与记录长度是否匹配;

★ 文件使用前是否已经打开;

★ 是否处理了输入/输出错误;

★ 输出信息中是否有文字性错误;

★ 在结束文件处理时是否关闭了文件。

2.局部数据结构测试

局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确的基础。模块的局部数据结构往往是错误的根源,力求发现最常见的几类错误:

★ 不合适或不相容的类型说明;

★ 变量无初值;

★ 变量初始化或省缺值有错;

★ 不正确的变量名(拼错或不正确地截断);

★ 出现上溢、下溢和地址异常。

3.路径测试

应对模块中重要的执行路径进行测试。由于错误的计算、不正确的比较或不正常的控制流而导致执行路径的错误。路径错误应考虑下列因素:

★ 运算的优先次序不正确或误解了运算的优先次序;

★ 运算的方式错,即运算的对象彼此在类型上不相容;

★ 算法错;

★ 初始化不正确;

★ 浮点数运算精度问题而造成的两值比较不等;

★ 关系表达式中不正确的变量和比较符号表示不正确;

★ 不正确地多循环一次或少循环一次;

★ 错误的或不可能的循环终止条件;

★ 当遇到发散的迭代时不能终止的循环;

★ 不适当地修改了循环变量等。

4. 边界条件测试

边界条件测试是单元测试中最重要的一项任务。软件经常在边界上失效,边界条件测试是一项基础测试,也是后面系统测试中的功能测试的重点,边界测试执行的较好,可以大大提高程序健壮性。边界条件测试应考虑下列因素:

★ 程序内有一个n次循环,n次循环应是1~n, 出错0~n;

★ 小于、小于等于、等于、大于、大于等于、不等于确定的比较值出错;

★ 出现上溢、下溢和地址异常。

5.错误处理测试

比较完善的模块设计要求能预见出错的条件,并设置适当的出错处理,以便在一旦程序出错时,能对出错程序重做安排,保证其逻辑上的正确性。这种出错处理也应当是模块功能的一部分。错误处理测试应考虑下列因素:

★ 出错的描述难以理解;

★ 出错的描述不足以对错误定位,不足以确定出错的原因;

★ 显示的错误与实际的错误不符;

★ 对错误条件的处理不正确;

★ 异常处理不当。

6.代码书写规范

代码书写规范应考虑下列因素:

★ 模块设计程序框架流程图;

★ 代码书写规范,对齐方式;

★ 代码的注释;

★ 参数类型,数据长度,指针,数组长度大小;

★ 输入输出参数和结果。

单元测试是对每个程序的单体调试。主要有以下几步:

(1) 程序语法检查;

(2) 程序逻辑检查。

在程序的逻辑检查之前,首先需要制作测试数据;即假设一些输入数据和文件数据。测试数据直接影响了程序的调试工作,所以制作的数据应该满足以下几个条件:

(1) 数据应能满足设计上要求的上下限及循环次数;

(2) 数据应满足程序中的各种检验要求的错误数据;

(3) 数据应能适宜于人工对程序的检查工作。

测试数据的内容包含4个方面:

(1) 正常的数据

(2) 不同的数据

(3) 错误的数据

(4) 大量的数据

通过以上不同角度的数据检验,证明程序逻辑是对的,程序的调试也就结束了。

在程序测试期,评价模块的五个主要特性是:

★ 模块接口;

★ 局部数据结构;

★ “重要”的执行路径;

★ 错误处理路径;

★ 影响上述几点的界限条件。

在其它任何测试开始之前,需要测试横穿模块接口的数据流。如果数据不是正确地进入和退出,其它的测试就谈不上。

在程序测试中接口测试的清单如下:

⑴ 输入参数的数目是否等于变元的数目

⑵ 参数与变元的属性是否匹配

⑶ 参数与变元的单位是否匹配

⑷ 传送给被调用模块的变元数是否等于参数的项目

⑸ 传送给被调用模块的变元属性是否同参数属性一致

⑹ 传送给被调用模块的变元单位是否同参数的单位一致

⑺ 属于内部的函数属性数目及变元次序是否正确

⑻ 对参数的任何访问是否与当前的入口点无关

⑼ 输入是否改动变元

⑽ 跨模块的全程量定义是否相容

⑾ 限制是否作为变元来传送

⑿ 参数是否被重复定义

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容