论文部分内容阅读
【摘要】本文重点探讨单元测试技术在软件测试中的应用。通过对于单元测试的主要任务分析,论证单元测试在软件测试中所起到的重要作用,进一步论证单元测试方法在软件测试工作中的应用。
【关键词】单元测试;软件测试;单元测试的主要任务;单元测试方法
随着软件测试专业的发展,越来越多的软件测试技术被应用到测试工作中去。同时,基于软件技术的发展,我们还需要对所有测试阶段(对应于各种测试类型)和测试流程管理等方面要有进一步的理解和深化,为更好的完成测试工作奠定基础。因此,单元测试技术就显得尤为重要。
一、单元测试的主要任务
单元测试是典型的白盒测试,需使用白盒测试方法测试各个单元模块,并辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能符合需求或设计标准。
具体单元测试的分类如图1所示:
测试内容包括:
模块接口测试;
局部数据结构测试;
路径测试;
错误处理测试;
边界测试。
通过上述测试内容,可以发现和解决模块本身产生的问题和缺陷,具体如下
(一)模块接口:被测的模块、信息能否正常无误地流入和流出。模块接受的输入参数个数与模块的变元个数是否一致。参数与变量的属性是否匹配。参数与变量使用的单位是否一致。
传送给另一个被调用模块的变量个数与参数的个数是否相同。传送给另一个被调用模块的变量属性与参数的属性是否匹配。传送给另一个被调用模块的变量其单位是否与参数的单位一致。调用内部函数时,变量的个数、属性和次序是否正确。在模块多个入口的情况下,是否有引用与当前入口无关的参数。是否会修改只是作为输入值的变量。出现全局变量时,这些变量是否在所有引用它们的模块中都有相同的意义。有没有常数当作变量来传送。
(二)局部数据结构
在模块工作过程中,其内部的数据能否保持其完整性,包括内部数据的内容、形式及相互关系不发生错误。不正确的或不相容的说明。不正确的初始化或缺省值。错误的变量名,如拼写错或缩写错。不相容的数据类型。下溢、上溢或是地址错误。
(三)邊界条件
在为限制数据加工而设置的边界处,模块能否能够正常工作。普通合法数据是否正确处理。普通非法数据是否正确处理。边界内最接近边界的(合法)数据是否正确处理。边界外最接近边界的(非法)数据是否正确处理等。在n次循环的第0次、第1次、第n次是否有错误。运算或判断中取最大最小值时是否有错误。 数据流、控制流中刚好等于、大于、小于确定的比较值时是否出现错误。
(四)路径测试
路径测试也称覆盖测试。主要测试模块的运行能否做到满足特定的逻辑覆盖。对运算优先性的错误理解,或是错误的处理。运算方式未加区分,发生了混合运算的情况。初始化错误。表达式中符号表示的错误。
二、单元测试方法
在软件开发过程中,单元测试和编码共属实现阶段,编码完成并编译通过后才开始进行单元测试。
(一)进行动态的单元测试方法前要先对程序进行静态分析和代码审查的原因
第一,使用动态测试技术要准备测试用例,进行结果记录和分析,工作量大,发现错误太多会降低动态测试效率;
第二,目前的动态测试技术局限性比较大,有相当类型的错误靠动态测试是难以发现的。因此,先使用静态分析和代码审查技术,能充分地发挥人的判断和思维优势,检查出对机器而言很难发现的错误。典型的包括代码和设计规格的一致性,代码逻辑表达式的正确性。这些检查在动态测试阶段将会是非常繁琐而又非常困难的;
第三,有些错误在动态测试时是无法检查的;
第四,使用代码审查技术,一旦发现错误,就知道错误的性质和位置,调试代价较低;第五,使用静态分析方法一次就能揭示一批错误,并且随后就可以立即纠正错误。
(二)设置驱动模块和桩模块进行动态测试方法
在单元测试中,测试用例的设计与测试集合的准备是至关重要的。(1)要构造测试用例的运行环境,即确定用例运行的前提条件,明确被测模块/单元所需的程序环境(全局变量赋值或初始化实体),启动测试驱动,设置桩,调用被测模块,设置预期输出条件判断,最后恢复环境(包括清除桩)。(2)设计黑盒测试用例,即接口测试用例。第一步设计基本功能测试用例,证明被测单元至少在某种正常情况下能够运行了;第二步设计功能正面测试用例,找出被测单元对于设计要求的正确输入可能做出的不正确处理;第三步设计功能反面测试用例,找出被测单元对于设计要求的错误输入可能做出的不正确处理;最后一步设计性能测试用例,找出被测单元对于设计要求的性能可能做不到的错误。(3)设计白盒测试用例,即覆盖测试用例,找出单元内部控制结构和数据使用可能存在的问题。
单元测试代码是用于测试代码单元以查找缺陷的代码,其中代码单元可以是类、数据包或者应用程序级模块。在任何工程中执行单元测试都十分重要。它们可以帮助确定局部代码缺陷。代码单元的所有基本的对象功能和特性应该(通过不同的测试用例)在单元测试中得到处理。在许多较大的工程中,小组领导人可能会认为不包含单元测试的代码是不完整的。
编写单元测试与其说是一种科学,不如说是一种艺术。单元测试的目的是保证代码所执行的是期望它执行的工作,以及确定潜在的代码缺陷。编写单元测试的一个方法是首先确定一种可能存在的缺陷,然后编写代码以对其进行测试。一些开发人员甚至坚持认为应该在编写代码以前先编写单元测试。
即使代码进入了生产阶段,编写单元测试的工作也没有停止。在生产中,只要有新的代码缺陷被找出,该缺陷就应该得到处理,之后应该再执行一次单元测试以保证该缺陷不会再次出现。
【参考文献】
[1] 佟伟光.软件测试技术(第2版).人民邮电出版社.2010年8月
[2] 王顺. 软件测试方法与技术实践指南Java EE版. 清华大学出版社.2010年7月
【关键词】单元测试;软件测试;单元测试的主要任务;单元测试方法
随着软件测试专业的发展,越来越多的软件测试技术被应用到测试工作中去。同时,基于软件技术的发展,我们还需要对所有测试阶段(对应于各种测试类型)和测试流程管理等方面要有进一步的理解和深化,为更好的完成测试工作奠定基础。因此,单元测试技术就显得尤为重要。
一、单元测试的主要任务
单元测试是典型的白盒测试,需使用白盒测试方法测试各个单元模块,并辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能符合需求或设计标准。
具体单元测试的分类如图1所示:
测试内容包括:
模块接口测试;
局部数据结构测试;
路径测试;
错误处理测试;
边界测试。
通过上述测试内容,可以发现和解决模块本身产生的问题和缺陷,具体如下
(一)模块接口:被测的模块、信息能否正常无误地流入和流出。模块接受的输入参数个数与模块的变元个数是否一致。参数与变量的属性是否匹配。参数与变量使用的单位是否一致。
传送给另一个被调用模块的变量个数与参数的个数是否相同。传送给另一个被调用模块的变量属性与参数的属性是否匹配。传送给另一个被调用模块的变量其单位是否与参数的单位一致。调用内部函数时,变量的个数、属性和次序是否正确。在模块多个入口的情况下,是否有引用与当前入口无关的参数。是否会修改只是作为输入值的变量。出现全局变量时,这些变量是否在所有引用它们的模块中都有相同的意义。有没有常数当作变量来传送。
(二)局部数据结构
在模块工作过程中,其内部的数据能否保持其完整性,包括内部数据的内容、形式及相互关系不发生错误。不正确的或不相容的说明。不正确的初始化或缺省值。错误的变量名,如拼写错或缩写错。不相容的数据类型。下溢、上溢或是地址错误。
(三)邊界条件
在为限制数据加工而设置的边界处,模块能否能够正常工作。普通合法数据是否正确处理。普通非法数据是否正确处理。边界内最接近边界的(合法)数据是否正确处理。边界外最接近边界的(非法)数据是否正确处理等。在n次循环的第0次、第1次、第n次是否有错误。运算或判断中取最大最小值时是否有错误。 数据流、控制流中刚好等于、大于、小于确定的比较值时是否出现错误。
(四)路径测试
路径测试也称覆盖测试。主要测试模块的运行能否做到满足特定的逻辑覆盖。对运算优先性的错误理解,或是错误的处理。运算方式未加区分,发生了混合运算的情况。初始化错误。表达式中符号表示的错误。
二、单元测试方法
在软件开发过程中,单元测试和编码共属实现阶段,编码完成并编译通过后才开始进行单元测试。
(一)进行动态的单元测试方法前要先对程序进行静态分析和代码审查的原因
第一,使用动态测试技术要准备测试用例,进行结果记录和分析,工作量大,发现错误太多会降低动态测试效率;
第二,目前的动态测试技术局限性比较大,有相当类型的错误靠动态测试是难以发现的。因此,先使用静态分析和代码审查技术,能充分地发挥人的判断和思维优势,检查出对机器而言很难发现的错误。典型的包括代码和设计规格的一致性,代码逻辑表达式的正确性。这些检查在动态测试阶段将会是非常繁琐而又非常困难的;
第三,有些错误在动态测试时是无法检查的;
第四,使用代码审查技术,一旦发现错误,就知道错误的性质和位置,调试代价较低;第五,使用静态分析方法一次就能揭示一批错误,并且随后就可以立即纠正错误。
(二)设置驱动模块和桩模块进行动态测试方法
在单元测试中,测试用例的设计与测试集合的准备是至关重要的。(1)要构造测试用例的运行环境,即确定用例运行的前提条件,明确被测模块/单元所需的程序环境(全局变量赋值或初始化实体),启动测试驱动,设置桩,调用被测模块,设置预期输出条件判断,最后恢复环境(包括清除桩)。(2)设计黑盒测试用例,即接口测试用例。第一步设计基本功能测试用例,证明被测单元至少在某种正常情况下能够运行了;第二步设计功能正面测试用例,找出被测单元对于设计要求的正确输入可能做出的不正确处理;第三步设计功能反面测试用例,找出被测单元对于设计要求的错误输入可能做出的不正确处理;最后一步设计性能测试用例,找出被测单元对于设计要求的性能可能做不到的错误。(3)设计白盒测试用例,即覆盖测试用例,找出单元内部控制结构和数据使用可能存在的问题。
单元测试代码是用于测试代码单元以查找缺陷的代码,其中代码单元可以是类、数据包或者应用程序级模块。在任何工程中执行单元测试都十分重要。它们可以帮助确定局部代码缺陷。代码单元的所有基本的对象功能和特性应该(通过不同的测试用例)在单元测试中得到处理。在许多较大的工程中,小组领导人可能会认为不包含单元测试的代码是不完整的。
编写单元测试与其说是一种科学,不如说是一种艺术。单元测试的目的是保证代码所执行的是期望它执行的工作,以及确定潜在的代码缺陷。编写单元测试的一个方法是首先确定一种可能存在的缺陷,然后编写代码以对其进行测试。一些开发人员甚至坚持认为应该在编写代码以前先编写单元测试。
即使代码进入了生产阶段,编写单元测试的工作也没有停止。在生产中,只要有新的代码缺陷被找出,该缺陷就应该得到处理,之后应该再执行一次单元测试以保证该缺陷不会再次出现。
【参考文献】
[1] 佟伟光.软件测试技术(第2版).人民邮电出版社.2010年8月
[2] 王顺. 软件测试方法与技术实践指南Java EE版. 清华大学出版社.2010年7月