单元测试

简介:         单元测试是软件测试的第一步,其详细描述如下:         第一,单元测试的主要任务。         单元测试针对每个程序的模块,主要测试5个方面的问题:模块接口、局部数据结构、边界条件、独立的路径和错误处理;如下图所示: (1)模块接口         这是对模块接口进行的测试,检查进出程序单元的数据流是否正确;模块接口测试必须在任何其它测试之前进行。

        单元测试是软件测试的第一步,其详细描述如下:

        第一,单元测试的主要任务

        单元测试针对每个程序的模块,主要测试5个方面的问题:模块接口、局部数据结构、边界条件、独立的路径和错误处理;如下图所示:

(1)模块接口

        这是对模块接口进行的测试,检查进出程序单元的数据流是否正确;模块接口测试必须在任何其它测试之前进行。

        模块接口测试至少需要如下的测试项目:

1)调用所测模块时的输入参数与模块形式参数在个数、属性和顺序上是否匹配

2)所测模块调用子模块时,它输入给子模块的参数与子模块中的形式参数在个数、属性和顺序上是否匹配

3)是否修改了只作输入用的形式参数

4)调用标准函数的参数在个数、属性和顺序上是否正确

5)全局变量的定义在各模块中是否一致

 

(2)局部数据结构

        在模块工作过程中,必须测试模块内部的数据能否保持完整性,包括内部数据的内容、形式及相互关系不发生错误。

        对于局部数据结构,应该在单元测试中注意发现以下几类错误:

1)不正确的或不一致的类型说明

2)错误的初始化或默认值

3)错误的变量名,如拼写错误或书写错误

4)下溢、上溢或者地址错误

 

(3)路径测试

        在单元测试中,最主要的测试是针对路径的测试;测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误。

        常见的错误有:误解的或不正确的算术优先级,混合模式的运算,错误的初始化,精确度不够精确和表达式的不正确符号表示。

        针对判定和条件覆盖,测试用例还要能够发现如下错误:不同数据类型的比较,不正确的逻辑操作或优先级,应当相等的地方由于精确度的错误而不能相等,不正确的判定或不正确的变量,不正确的或不存在的循环终止,当遇到分支循环时不能退出和不适当地修改循环变量。

 

(4)边界条件

        边界测试是单元测试的最后一步,必须采用边界值分析方法来设计测试用例,认真仔细地测试为限制数据处理而设置的边界处,看模块是否能够正常工作。

        一些可能与边界有关的数据类型如数值、字符、位置、数量和尺寸等,还要注意这些边界的首个、最后一个、最大值、最小值、最长、最短、最高和最低等特征。

        在边界条件测试中,应设计测试用例检查以下情况:

1)在n次循环的第0次、1次、n次是否有错误

2)运算或判断中取最大值、最小值时是否有错误

3)数据流、控制流中刚好等于、大于、小于确定的比较值是否出现错误

 

(5)出错处理

         测试出错处理的重点是模块在工作中发生了错误,其中的出错处理设施是否有效。

         检验程序中的出错处理可能面对的情况有:

1)对运行发生的错误描述难以理解

2)所报告的错误与实际遇到的错误不一致

3)出错后,在错误处理之前就引起系统的干预

4)例外条件的处理不正确

5)提供的错误信息不足,以至于无法找到错误的原因

 

        第二,单元测试的执行过程

        何时进行单元测试?单元测试常常是和代码编写工作同时进行的,在完成了程序编写、复查和语法正确性验证后,就应进行单元测试用例设计。

        在单元测试时,如果模块不是独立的程序,需要设置一些辅助测试模块;辅助测试模块有两种:

1)驱动模块(Drive):用来模拟被测试模块的上一级模块,相当于被测模块的主程序;它接收数据,将相关数据传送给被测模块,启动被测模块,并打印出相应的结果

2)桩模块(Stub):用来模拟被测模块工作过程中所调用的模块,它们一般只进行很少的数据处理

        驱动模块和桩模块都是额外的开销,虽然在单元测试中必须编写,但并不需要作为最终的产品提供给用户。

        被测模块、驱动模块和桩模块共同构成了一个如下图所示的单元测试的测试环境:

目录
相关文章
|
8月前
|
测试技术
|
7月前
|
测试技术 C# 容器
在C#中进行单元测试 _
前言 时隔多个月,终于抽空学习了点新知识,那么这次来记录一下C#怎么进行单元测试,单元测试是做什么的。 我相信大部分刚毕业的都很疑惑单元测试是干什么的?在小厂实习了6个月后,我发现每天除了写CRUD就是写CRUD,几乎用不到单元测试。写完一个功能直接上手去测,当然这只是我个人感受,仅供参考。 然后当我还在抱怨测试好烦的时候,大佬跟我说为什么不用单元测试和集成测试,我这也是有苦说不出。要知道光学会理论知识,没有实践作为基础,都是扯淡,入职这么久还真没用过单元测试,吓得我赶紧去找资料学习。 那么也是通过观看B站某位Up主的视频,然后有点想法写下这篇文章,虽然up主的主题是探究接口的作用和意义,但是
|
8月前
|
测试技术 iOS开发
单元测试,XCTestCase的使用与限制
单元测试,XCTestCase的使用与限制
79 2
|
8月前
|
测试技术
为什么要单元测试
刹⻋是降低了⻋速还是提升了⻋速?我们通常认为写单测费⼒耗时、耽误研发进度,仿佛在给项⽬“踩刹⻋”。⼤家不妨带着这个问题往下看,详细聊聊为什么单元测试可以让软件开发跑得更快。
|
8月前
|
敏捷开发 Java 测试技术
为什么要单元测试(正片)
在如今的互联⽹时代,软件迭代的速度越来越快,研发的职责也越来越多。DevOps的理念是"you build it, you run it",研发/测试合⼆为⼀的趋势也可以理解为对"you build it, you test it"的呼吁。当研发要对⾃⼰写的代码质量和测试负责的时候,好的测试实践就必不可少了。
|
测试技术 编译器 Linux
浅谈c++单元测试
浅谈c++单元测试
|
Java 测试技术
单元测试的正确姿势
软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低。为了能更好的保障软件质量,制定统一的系统自测指南,形成统一的流程达到此目标。
393 0
单元测试的正确姿势
|
Java 测试技术 容器
还在手动写单元测试?
还在手动写单元测试?
131 0
|
测试技术 C++ 编译器
|
SQL 测试技术 数据库
什么是单元测试?为什么要做?
什么是UT? UT(Unit Test)即单元测试
362 0
什么是单元测试?为什么要做?