1、本 科 毕 业 设 计题 目:程序结构与测试用例个数的关系程序结构与测试用例个数的关系摘要:测试用例的产生是软件测试过程中的重要环节,测试用例的数量直接关系到测试的工作量。测试用例的数量选择是进行测试的一个难题,测试用例个数合适与否直接关系到产品质量。随机测试可以避免出现测试偏见,随机测试用例个数的设计对软件测试至关重要。本文针对究竟多少随机测试用例才是充分的这一问题进行探讨,在研究和分析国内外大量有关文献资料的基础上,设计程序插桩,研究不同程序结构在基路径测试中对测试用例个数的影响。将实验得到的数据拟合得出公式,最后用判定三角形的程序进行验证。关键词:程序结构;基路经;随机测试;数据拟合Th
2、e relationship between program structure and the number of test caseAbstract: The generation of test cases is the important link in the process of software testing , testing is directly related to the number of test cases. The number of test cases selection is a problem for the test, the test case n
3、umber right or not directly related to the quality of the product. Random testing can avoid bias, random number of test case design is very important to software testing. Based on how many random test cases are fully discusses this problem, in the research and analysis, on the basis of a lot of rele
4、vant literature at home and abroad, the design program pile, the different program structure in the base path tests the impact on the number of test cases. The data obtained by the experiment data fitting formula, validated with determination of the triangle program finally. Key word: Program Struct
5、ure;Base Path ;Random Testing; Data Fitting 目录程序结构与测试用例个数的关系 .1一、绪论 .11.1 论文 研究背景和意义 .11.2 软件测试的目的 .11.3 论文研究内容 .1二、软件测试技术 .22.1 软件测试概述 .22.2 软件测试技术的分类 .22.3 软件测试的阶段划分 .22.4 软件测试存在的问题 .32.5 测试用例的选择 .32.6 测试用例自动化生成技术 .42.7 结构性测试 .42.7.1 路径测试 .42.7.1.1 基路径测试 .52.8 随机测试 .5三、程序结构 .63.1 方法简述 .63.2 系统结构图
6、.63.3 程序结构图 .7四、程序结构与测试用例个数的研究 .104.1 程序控制流图 .104.2 程序算法的实现 .144.3 程序插桩 .194.3.1 程序插桩原因 .194.3.2 程序插桩方法 .204.4 测试用例生成框架 .21五、实验结果分析 .215.1 数据统计结果 .215.2 总结公式 .215.2.1 数据拟合 .225.2.1.1 线性拟合 .225.2.1.2 非线性拟合 .255.2.2 曲线拟合的 MATLAB 实现 .275.2.3 拟合公式 .275.3 公式的验证 .325.3.1 待测程序分析 .325.3.1.1 程序流程分析 .335.3.1.
7、2 基路径的确定 .345.3.2 程序测试用例生成及验证结果 .35六、结束语 .36参考文献 .36附录 .36致谢 .370程序结构与测试用例个数的关系一、绪论1.1 论文研究背景和意义软件测试是软件工程的一个重要环节,随着软件技术的发展,软件测试的地位得到提高。测试用例的数量直接关系到测试的工作量。所以测试用例的研究对于软件测试来说至关重要。判断测试是否完整的一个主要评测方法是基于需求的覆盖,而为达到所要求的覆盖,测试用例的选择和数量是关键,也是一个难题,由其测试用例数量在自动化测试中更是难点。测试用例个数合适与否直接关系到产品质量。对于测试用例个数的确定,在现实运用中还没有比较可让大
8、家信服的解决方法,只能凭借以往工作中的经验判断。在此背景下,本文就程序结构与测试用例个数的关系进行研究。1.2 软件测试的目的现如今,众多国内外的对软件测试的研究工作及机构正在开展,也有很多已经形成了比较成熟的软件测试技术和规范的流程管理。我们为什么要进行软件测试呢,其目的在于寻找软件的错误,以进行修正;验证软件是否符合要求;是可用的;指导软件的开发过程;提供软件的相关特征,是软件质量保证的可靠手段。1.3 论文研究内容现如今,软件测试的实践性大于理论性,软件测试理论体系尚不成熟、测试工具也不够完善、而测试效果对于个人的依赖性比较大。故本次毕业设计,运用大学所学的程序设计及软件测试的基础知识,
9、在查阅大量资料的基础上,理解、掌握结构测试的原理、方法,探讨随机抽取测试用例满足全覆盖程序基路径的测试用例个数与程序高度、复杂度及输入参数个数的关系,设计若干程1序结构,给出相应的程序代码,分析各种结果,获得他们之间的量化关系。二、软件测试技术2.1 软件测试概述按照通俗的说法,软件测试就是为了在程序执行时能发现其中的错误。在IEEE 提出的软件工程标准术语中 1,其定义为:“使用人工和自动手段来运行和测试某个系统的过程,目的在于检验他是否满足规定的需求或是弄清预期结果与实际结果之间的差别” 。一个好的测试发现未曾发现的错误,一个测试成果就是发现了错误。软件测试是一项复杂的工作,其工作必须是可
10、控的,结果必须是可信的。我们用测试用例的覆盖率、测试执行的正确性、测试能正确发现问题、测试文档能正确反映问题来保证软件测试的可靠性。2.2 软件测试技术的分类现有的软件测试技术 2通常分为静态测试和动态测试。而动态测试和静态测试的区别就是是否运用测试用例运行程序,如果运行则是动态测试,如果不运行就是静态测试。动态测试又可以分为白盒测试和黑盒测试,静态测试分为语法测试和语义测试。选择测试数据的角度可以分为功能测试和结构测试;从测试数据的类型,可分辨是确定性测试还是随机性测试;从所测的软件的程序语言,可分为面向过程和对象的测试。2.3 软件测试的阶段划分传统的软件测试阶段 3包括单元测试、集成测试
11、、确认测试、系统测试、验证和确认以及回归测试。1 引用古乐编著的软件测试技术概论第一章2 引用古乐编著的软件测试技术概论第一章3 引用 Paul C.Jorgensen 编著的软件测试第 11 页2用户需求定义需求分析预设计详细设计编码单元测试集成测试确认测试系统测试软件开发 软件设计2.4 软件测试存在的问题对于软件测试,手工测试有许多的优点,但是如果软件很大,程序很复杂的话就面临这多方面的问题,手工测试与软件技术的发展矛盾将越来越严重,会阻碍软件产业的发展,给其造成一定的负担,如速度慢, (会浪费大量的劳动力、时间、金钱且效率低) ;检查不够全面(人为的一些错误、思考的偏差) ;可重用性低
12、(一般手工测试,都是针对具体的程序,在其他程序上使用的可能性很低)都是手工测试的不足之处。2.5 测试用例的选择测试用例是针对要测试的内容所确定的一组输入信息,是为达到最佳的测试效果或高效的揭露隐藏的错误而精心设计的少量测试数据。测试用例一般应包括输入数据和预期结果,在本论文中仅指输入数据。到目前为止,测试用例 4的选择依然是进行结构测试的一个难以攻克的问题,还没有得到妥善的解决。一种方法是经验测试法,需不断执行程序,直至实现了预期的覆盖才停止。这种方法的不足之处在于其效率低,工作量大,只要有一条路径没有被测试,就会4 引用 Carlos Pacheco. 的 Directed Random
13、Testing 论文3一直执行下去,直到覆盖路径为止,这种方法的使用较多。另一种方法是利用程序结构图,构造出实现分支覆盖或路径覆盖的全部路径,然后根据每个路径选择合适的数据输入,并执行程序。这种方法的不足之处在于输入数据的选择比较困难。2.6 测试用例自动化生成技术由测试用例的选择我们不难看出,测试用例自动化生成技术 5是成功进行软件测试的关键技术之一,一般可分为功能测试数据的生成和结构测试数据的生成,可以为被测程序自动化生成测试用例,减轻了测试工作人员的工作量,改变了以往凭借经验、直觉产生测试用例的做法,使测试用例更加具有客观性,也能进一步提高测试的效率,也为软件测试的发展提供了一个捷径之路
14、。2.7 结构性测试为了与功能性测试形成对比,结构性测试有时叫做白盒测试,它的实现是已知的,并被用来标识测试用例程序的结构和处理过程象白盒子一样透明。允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。结构测试基于被测程序的源代码,其测试方法支持严格定义、数学分析和精确度量。结构性测试对程序模块的所有独立路径至少检测一次,对所有的逻辑判定,取“真”与“假”的两种情况都至少测试一次,在循环的边界和运行界限内要执行循环体,对测试内部数据结构的有效性等也要进行检测。当测试时间用光、无法考虑新的测试用例或达到所要求的覆盖等条件时测试可停止。2.7.1 路径测试路径测试的理想是实现路径覆盖,是指根据路径设计测试用例 6的一种技术,是结构性测试最为典型的问题。从程序入口开始,执行过程中经历每一个语句,直至程序出口,它降低了测试用例设计的难度,不需要用到太多的测试方面的5 引用罗银的软件测试数据自动生成研究论文6 引用李宝林、叶军的面向路径的测试数据自动生成工具论文