案例 白盒测试中的边界值测试
白盒测试实验报告

白盒测试实验报告引言近年来,软件行业发展迅速,软件质量成为软件企业必须关注的重点。
白盒测试是软件测试的一种重要手段。
本文将介绍一次白盒测试实验的过程和结果。
实验内容本次实验采用的测试对象是一款音乐播放器软件,我们将以白盒测试为手段,对音乐播放器软件进行测试,为构建一个健壮性好,功能稳定的音乐播放器软件做出我们的贡献。
实验过程1.需求分析阶段需求分析是基础性工作,是成功进行软件测试的重要基础。
我们首先分析音乐播放器软件的需求,划分出测试的模块和对应的测试用例。
在分析过程中,我们还同时制定了测试计划和测试执行。
2.设计阶段在设计阶段,我们将测试模块分成了多个部分,比如软件启动,音乐播放,音乐分类等等。
设计测试用例时,我们着重考虑了边界值测试用例,异常测试用例,特殊情况测试用例等,以提高测试的覆盖率。
3.实施阶段在实施阶段,我们严格按照测试计划与测试用例执行测试。
针对测试结果,我们每天在会上讨论,分析测试结果,确认产生的缺陷,并提出了解决方案。
我们还记录了测试用例执行过程、测试结果及其缺陷,以备后续参考。
4.缺陷整理与跟踪在检测和记录所有缺陷及其描述、报告和跟踪过程中,我们将测试结果分为三类:一类是重要的缺陷,需要开发人员立即修复;二类是次要的缺陷,将在下一周期处理;三类是需要处理的小错误,可以在后续的版本中修复。
实验结果通过测试,我们发现了多个问题,并对其进行了记录和反馈。
其中主要缺陷有以下几个方面:1.在平台正常工作过程中,应及时清理平台缓存,否则可能导致存储空间的不足,影响音乐播放体验。
2.在进行音频播放时,带缓存的音乐样本(即缓存层的音乐)的播放时,有时会造成截断现象。
3.当用户对相同音频文件进行不同时间的快进、快退操作时,应能保证允许的时间是在音频文件长度范围内的。
结论本次白盒测试实验中,我们收集并汇总了测试过程中遇到的问题,并及时反馈给开发人员。
我们还为软件企业的软件质量提升提供了一定的保障,以帮助企业提高其软件产品的健壮程度和可靠性。
白盒测试案例

白盒测试案例白盒测试是软件测试中的一种重要测试方法,它主要针对软件内部结构进行测试,旨在检验程序中的逻辑错误、代码覆盖率和路径覆盖等问题。
下面我们将通过几个具体的案例来介绍白盒测试的应用和方法。
案例一,函数逻辑测试。
假设我们有一个简单的函数,用于计算两个整数的和。
在进行白盒测试时,我们需要考虑函数的各种可能输入和边界情况。
比如,输入为正数、负数、零等不同情况下,函数的返回值是否符合预期;输入边界情况下,比如最大值、最小值、边界值加一等情况下,函数是否能够正确处理。
同时,我们还需要测试函数的异常情况,比如输入非整数、输入为空等情况下,函数是否能够正确处理并给出合理的错误提示。
案例二,条件覆盖测试。
在一个复杂的程序中,通常会存在多个条件判断的情况,这时候我们需要进行条件覆盖测试来确保程序的每个条件都能够得到正确的覆盖。
比如,一个函数中包含了多个if-else语句,我们需要设计测试用例,使得每个条件都能够被至少一次触发,以确保程序的完整性和准确性。
在进行条件覆盖测试时,我们需要考虑各种可能的组合情况,以及条件的嵌套关系,确保每个条件都能够得到充分的测试覆盖。
案例三,路径覆盖测试。
路径覆盖测试是白盒测试中的一种重要方法,它旨在测试程序中的各个路径是否都能够被正确执行。
在进行路径覆盖测试时,我们需要分析程序的控制流图,找出所有可能的执行路径,并设计测试用例来覆盖这些路径。
通过路径覆盖测试,我们可以发现程序中隐藏的逻辑错误和潜在的漏洞,提高程序的稳定性和可靠性。
结语。
通过以上几个具体的案例,我们可以看到白盒测试在软件开发中的重要性和应用价值。
在进行白盒测试时,我们需要充分理解程序的内部结构和逻辑,设计合理的测试用例,确保程序的各个部分都能够得到充分的覆盖和测试,从而提高程序的质量和稳定性。
希望本文能够帮助大家更好地理解白盒测试,并在实际工作中加以应用。
测试方法之边界值测试

3)从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;
4)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能; 5)在做软件自动化测试时较为方便。
黑盒测试的缺点有:
1)不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%; 2)自动化测试的复用性较低。
6
黑盒测试方法
边界值分析(Boundary Value Analysis) 基本原理
错误更可能出现在输入变量的极值附近。
边界值分析关注输入空间的边界,并从中标识测试用例。
10
常见的边界值举例
).对16-bit 的整数而言 32767 和 -32768 是边界
).屏幕上光标在最左上、最右下位置
).报表的第一行和最后一行 ).数组元素的第一个和最后一个
软件测试方法
软件测试方法一般分为两种:
白盒测试(White Box Testing)
黑盒测试(Black-box Testing)
1
黑盒测试(Black-box Testing)
又叫功能测试,数据驱动测试或
基于规格说明的测试。它是在已 知产品所应具有的功能,通过测 试来检测每个功能是否都能正常 使用。
黑盒测试的测试用例设计方法
.边界值分析 .等价类划分
.因果图
.错误推测
.基于决策表的测试
.功能图分ቤተ መጻሕፍቲ ባይዱ方法
7
边界值测试(内容)
边界值分析
健壮性测试
最坏情况测试 特殊值测试
随机测试
8
1. 边界值分析
边界值分析的原理 边界值分析的思想 边界值分析测试用例设计方法
9
(1) 边界值分析的基本原理
白盒测试用例设计方式

白盒测试用例设计方式:常常利用的黑盒测试用例设计方式有等价类划分法、边界值测试法、决策表法、错误猜想法和场景法,在进展黑盒测试用例设计时的主要依据是软件系统规格说明书,因此在进展黑盒测试之前必需保证软件系统规格说明书是通过审核的,若是未经审核,那么需要进展探索式测试。
等价类划分法是指将输入数据进展等价类划分,划分依据为系统的预期结果,隶属于同一个等价类的输入数据会引发一样的预期结果,而且吻合一样的输入标准。
边界值测试法是对等价类划分法的一种补充,对于每一个等价类来讲,都会存在类的边缘,经研究证明,边缘的数据更易在系统运行中产生问题,因此边界值方式是一种超级必要的方式。
决策表方式适合于解决多个逻辑条件的组合。
判定表包括条件桩、条件项、动作桩、动作项。
条件桩中列出所有执行条件,顺序无关;条件项中列出所对应条件的所有可能情况下的取值;动作桩中列出可能采取的操作,顺序无关;动作项中列出条件项各类取值情况下采取的操作。
错误推测法概念:基于经历和直觉推测程序中所有可能存在的各类错误, 从而有针对性的设计测试用例的方式。
错误推测方式的根本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,按照他们选择测试用例。
场景法:ERP系统本身是一种业务流程很复杂,单据报表众多,逻辑性很强的系统,质量保证方面很宝贵到严格的控制的软件系统,在测试进程中常常会出现测试设计遗漏、测试执行遗漏等问题发生,一般的ERP系统设计可能包括以下几方面:、业务流程测试、数据逻辑测试、接口测试、兼容性测试、、易用性测试、用户体验测试等等;在针对ERP系统的测试进程中,必需具有清楚的测试设计思路,搭建根本的测试设计框架;其次熟悉所要设计的系统或模块的业务,所要实现的功能;然后灵活运用常常利用的测试设计方式〔等价类、边界值、错误猜想、路径分析法、场景法、正交验证法……用例设计方式〕;最后运用比拟合理统一的风格和模板进展设计测试用例;“业务场景、业务流程、数据逻辑〞是关键,业务理解清楚是做好ERP测试的根底;ERP系统测试用例分为几类来写比拟好:功能用例、业务流程用例、数据逻辑用例、接口用例,最好是把功能与流程类的测试用例分开来写;就个人而言,设计覆盖率高、冗余度低的测试用例应该从以下几个方面入手:一、功能用例设计:相对而言比拟简单,按照需求规格说明书、界面原型提取测试功能点/项,运用等价类、边界值、错误猜想、正交表等根本用例设计方式来设计,结合经历积累完善用例设计就可以够弄定,难度不大;需要按照文档/功能点/业务的转变进展修订/细化用例,提高功能用例的覆盖度;关于功能用例设计的方式和有很多,都可以借鉴和参考增加自身的经历积累和和知识沉淀。
三角形判断函数的各种测试用例(学生练习模板)

程序源码public class Triangle {public static int trijudge(int a, int b, int c){ if(a<b+c && b<a+c && c<a+b){if (a==b && b==c)return 3;else if (a==b || b==c || a==c)return 2;else return 1;}else return 0;}}白盒测试用例程序流程图路径覆盖、判定覆盖、条件覆盖、条件组合覆盖测试用例下表列出了各种白盒测试可能用到的测试用例:测试用例编号输入期望输出测试套件测试用例编号输入期望输出覆盖对象语句覆盖判定覆盖条件覆盖条件判定覆盖条件组合覆盖请思考一个问题:通过上面的测试后,你是否认为程序就一定是对的呢?为什么?有没有办法来解决这一点?控制流图独立路径测试用例测试用例编号 a b c 期望输出黑盒测试用例边界值测试用例从输入范围考虑,设三条边分别为a,b,c,则它们的边界值为:1,100。
因此,边界值的测试用例的每一条边应依次取1,2,99,100,其他两条边取正常值构成测试用例,最后再加上每条边都是正常值所构成的测试用例,总共有13个。
如果要设计健壮性边界值的测试用例,则每一条边应依次取0,1,2,99,100,101,其他两条边取正常值构成测试用例,最后再加上每条边都是正常值所构成的测试用例,,总共有19个健壮性边界值测试用例。
边界值测试用例测试用例编号 a b c 期望输出12345678910111213健壮性边界值测试用例测试用例编号 a b c 期望输出12345678910111213141516171819等价类测试用例输出等价类及测试用例从输出的结果来考虑等价类,有四种等价类,不能构成三角形、普通三角形、等边三角形、等腰三角形。
因为只从输出考虑,所以,变量只有一个,且没有无效等价类,因此,弱,强,一般,健壮等价类测试用例都相同。
白盒测试试验报告

实验二:白盒软件测试一、实验目的通过简单程序白盒测试,熟悉测试过程,对软件测试行程初步了解,并养成良好的测试习惯。
熟练掌握如何运用基路径测试方法进行测试用例设计,初步熟悉如何利用程序插装技术进行逻辑覆盖率分析。
二、实验内容背景:被测测试程序功能:计算被输入日期是星期几;程序定义:已知公元1年1月1日是星期一,只要输入年月日,能自动回复当天是星期几;测试环境: Windows vista、Dev C++;说明:本次测试采用插装测试法,由于程序简单,手动输入测试用例。
程序说明:A程序思路:计算输入日期与公元1年1月1日所相差的天数,具体如下:总天数=公元1年到输入日期上一年年底天数+输入年份的1月到上月月底天数+输入日期的天数B 闰年满足条件(year%4==0)&&(year%100!=0)||(year%400==0)(1)分析各种输入情况,结合程序输出结果,进行等价类划分,并给出详细测试用例;(2)根据(1)所划分的等价类,进行边界值分析,并给出具体的测试用例;(3)决策表测试法;①列出输入变量month、day、year的有效等价类;(条件桩)②分析程序的规格说明,给出问题规定的可能采取操作;(动作桩)③画出决策表(简化);④根据决策表,给出详细测试用例。
代码:(被测部分为while循环内部语句)#include<iostream> usingnamespacestd;intmain(){intx=1,year,month,day;while(x){1.inti,num=0,total,total1,total2;2.cout<<"请输入年份:";3.cin>>year;4.cout<<”请输入月份:“;5.cin>>month;6.cout<<”请输入日期:";7.cin>>day;//求得输入年份之前一年末的总天数8.for(i=1;i<year;i++){9.if((i%4==0)&&(i%100!=0)||(i%400==0))10.num++;}11.total1=365*(year-num-1)+366*num;//求得输入年份的总天数12.if((year%4==0)&&(year%100!=0)||(year%400==0)) { //求得输入月份之前一月末的总天数13.switch(month){case1:total2=0;break;case2:total2=31;break;case3:total2=60;break;case4:total2=91;break;case5:total2=121;break;case6:total2=152;break;case7:total2=182;break;case8:total2=213;break;case9:total2=244;break;case10:total2=274;break;case11:total2=305;break;case12:total2=335;break;}}else{14.switch(month){case1:total2=0;break;case2:total2=31;break;case3:total2=59;break;case4:total2=90;break;case5:total2=120;break;case6:total2=151;break;case7:total2=181;break;case8:total2=212;break;case9:total2=243;break;case10:total2=273;break;case11:total2=304;break;case12:total2=334;break;}//在加上输入的日,求其总和可得到从公元1年1月1日到输入日期当天的总天数15.total=total1+total2+day;16.intweek;17.week=total%7;18.cout<<”您输入的日期是";19.switch(week){case0:cout<<"星期天"<<endl;break;case1:cout<<"星期一"<<endl;break;case2:cout<<"星期二"<<endl;break;case3:cout<<" 星期三"<<endl;break;case4:cout<<"星期四"<<endl;break;case5:cout<<"星期五"<<endl;break;case6:cout<<"星期六"<<endl;break;cout<<"**********退出程序请输入0,否则任一输入继续**********"<<endl;cin>>x;}2、测试用例设计1)控制流图12)环路复杂度计算由图可知,图中的环路有六条,故环路复杂度为六。
测试用例的设计-边界值法例子

测试用例的设计-边界值法边界值分析也是一种黑盒测试方法,适度等价类分析方法的一种补充,由长期的测试工作经验得知,大量的错误是发生在输入或输出的边界上。
因此针对各种边界情况设计测试用例,可以查出更多的错误。
选择测试用例的原则:一、如果输入条件规定了值的范围,则应该取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值作为测试输入数据;二、如果输入条件规定了值的个数,则用最大个数、最小个数、比最大个数多1格、比最小个数少1个的数做为测试数据;三、根据规格说明的每一个输出条件,使用规则一;四、根据规格说明的每一个输出条件,使用规则二;五、如果程序的规格说明给出的输入域或输出域是有序集合(如有序表、顺序文件等),则应选取集合的第一个和最后一个元素作为测试用例;六、如果程序用了一个内部结构,应该选取这个内部数据结构的边界值作为测试用例;七、分析规格说明,找出其他可能的边界条件。
边界值法举例找零钱最佳组合假设商店货品价格(R) 皆不大於100 元(且为整数),若顾客付款在100 元内(P) ,求找给顾客之最少货币个(张)数?(货币面值50 元(N50) ,10 元(N10) ,5 元(N5) ,1 元(N1) 四种)一、分析输入的情形。
R > 1000 < R < = 100R <= 0P > 100R<= P <= 100P < R二、分析输出情形。
N50 = 1N50 = 04 > N10 >= 1N10 = 0N5 = 1N5 = 04 > N1 >= 1N1 = 0三、分析规格中每一决策点之情形,以RR1, RR2, RR3 表示计算要找50, 10, 5 元货币数时之剩余金额。
R > 100R <= 0P > 100P < RRR1 >= 50RR2 >= 10RR3 >= 5四、由上述之输入/输出条件组合出可能的情形。
白盒测试中的边界值分析与等价类划分

白盒测试中的边界值分析与等价类划分白盒测试是软件测试中一种重要的测试方法,通过对程序的内部结构和实现逻辑进行分析,从而设计出测试用例,验证程序的正确性和完备性。
边界值分析与等价类划分是白盒测试中常用的两种设计测试用例的方法。
1. 边界值分析边界值分析是通过测试程序的边界条件来找出潜在错误的测试方法。
在进行边界值分析时,我们要关注程序的输入、输出和内部变量的取值范围,以及边界处的特殊情况。
边界值测试将输入的值分为两类:恰好在边界的值和刚超出边界的值。
因为边界处常常是程序容易出错的地方,因此通过边界值测试可以覆盖这些潜在的错误。
下面以一个简单的例子来说明边界值分析。
假设有一个函数,用来判断输入的年份是否为闰年。
根据闰年的定义,能够被4整除但不能被100整除的年份是闰年,或者能够被400整除的年份也是闰年。
那么我们可以使用边界值分析来设计测试用例。
首先,找到边界情况:恰好在边界上的值。
比如,我们可以测试2000年(能够被400整除)和1900年(能够被4整除但不能被100整除)。
然后,我们测试超过边界的值,比如1999年和2001年。
通过这样的边界值分析,我们可以覆盖到所有可能出现问题的场景,提高测试用例的效率。
2. 等价类划分等价类划分是一种将输入值划分为等价类,并且每个等价类的输入具有相同的行为的测试设计技术。
等价类划分方法的核心思想是,将一组可能的输入值划分为若干个等价类,只需对每个等价类设计一个测试用例即可。
这样可以减少测试用例的数量,提高测试效率。
下面以一个简单的例子来说明等价类划分。
假设有一个函数,用来计算两个整数的和并返回结果。
我们可以将输入值划分为正整数、负整数、零和非整数四个等价类。
因为对于每个等价类的输入,函数的行为是相同的,所以只需选择每个等价类中的一个测试用例来代表该类。
例如,我们可以选择正整数中的1和2,负整数中的-1和-2,零和非整数中的0和1.5作为测试用例。
通过等价类划分,我们只需要设计6个测试用例,就能够覆盖到所有等价类,大大提高了测试的效率。
白盒测试中的边界值分析方法

白盒测试中的边界值分析方法边界值分析是白盒测试中一种常用的测试方法,通过测试输入的边界值和接近边界的值,来检查程序在边界条件下的正确性。
它能够有效地发现程序中潜在的错误和缺陷。
本文将介绍边界值分析的基本原理、方法以及应用。
一、边界值分析的原理在软件开发过程中,输入的值通常是有一定范围的,如数字范围、日期范围等。
边界值分析的基本原理是,如果一个程序在某个范围内是正确的,那么它在范围的边界处也应该是正确的。
相反,如果一个程序在某个范围内出现错误,它在边界处也很可能出现错误。
因此,通过测试边界和接近边界的值,我们能够有效地发现程序中的问题。
二、边界值分析的方法1. 单边界值测试:选择一个边界值作为测试输入,比如最小边界值、最大边界值或接近边界的值。
对于一个范围为1到100的输入,可以选择1、100或者2、99作为测试输入。
检查程序在该边界值附近的错误情况。
2. 双边界值测试:选择两个边界值作为测试输入,比如最小值和最大值,或者两个接近边界的值。
对于一个范围为1到100的输入,可以选择1和100、1和99、2和100或者2和99作为测试输入。
检查程序在两个边界值之间的情况,包括边界值本身。
3. 内部边界值测试:选择边界值附近的值作为测试输入。
对于一个范围为1到100的输入,可以选择10、50、90等值作为测试输入。
检查程序在边界值附近的情况,特别是边界值相邻的情况。
4. 错误边界值测试:选择具有错误特征的边界值作为测试输入,如负数、空值、非法字符等。
对于一个要求为正整数的输入,可以选择-1、0或者非数字字符作为测试输入。
检查程序对错误边界值的处理情况。
三、边界值分析的应用边界值分析可以应用于各种类型的软件测试,特别是输入验证、数值计算、日期处理等方面。
它能够帮助我们发现许多常见的错误和漏洞,提高程序的健壮性和可靠性。
在输入验证中,边界值分析可以帮助我们检查输入的最小值、最大值、边界条件等,确保程序能够正确处理各种输入情况。
黑盒测试和白盒测试区别及测试案例

什么是黑盒测试和白盒测试?任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。
这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
因此黑盒测试又叫功能测试或数据驱动测试。
黑盒测试主要是为了发现以下几类错误:1、是否有不正确或遗漏的功能?2、在接口上,输入是否能正确的接受?能否输出正确的结果?3、是否有数据结构错误或外部信息(例如数据文件)访问错误?4、性能上是否能够满足要求?5、是否有初始化或终止性错误?软件的白盒测试是对软件的过程性细节做细致的检查。
这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。
因此白盒测试又称为结构测试或逻辑驱动测试。
白盒测试主要是想对程序模块进行如下检查:1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
以上事实说明,软件测试有一个致命的缺陷,即测试的不完全、不彻底性。
由于任何程序只能进行少量(相对于穷举的巨大数量而言)的有限的测试,在未发现错误时,不能说明程序中没有错误。
白盒测试白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
白盒测试设计用例的方法

白盒测试设计用例的方法
1. 等价类划分法呀!这就像是把东西分类一样,把可能的情况分成几大类。
比如说测试一个登录功能,那就可以把用户名和密码的正确、错误情况进行分类,分别设计用例。
哇塞,这样不就能全面覆盖各种情况了嘛!
2. 边界值分析法,嘿,这个可重要啦!就像走路到了边界处特别要小心一样。
比如规定输入年龄在 18 到 60 岁,那 18 和 60 这两个边界值就得好好测试呀,这不是很容易理解嘛!
3. 因果图法呢,哎呀,就像是顺着线索找原因和结果。
比如有多个条件影响一个结果,那咱就得好好分析这些条件之间的关系,然后设计用例,不是挺有意思嘛!
4. 判定表法呀,这就好像是做一个决策表格似的。
对于复杂的条件组合,通过判定表清晰地列出来,然后得出对应的用例,是不是很厉害呢!
5. 正交试验法哦,听着就很牛掰吧!就像是从很多因素中选出最关键的组合来进行测试。
比如有多个参数要考虑,用这个方法就能高效地选出典型组合进行用例设计,是不是超级有用呀!
6. 场景法呢,哇哦,这简直就是在模拟一个场景片段呀!想想一个业务流程,从开始到结束,设计出符合各种场景的用例,这多生动形象呀,当然能把测试做好啦!
我觉得这些白盒测试设计用例的方法都超级棒,各有各的厉害之处,用好了就能让测试工作如虎添翼呀!。
白盒测试的实践经验与案例分享

白盒测试的实践经验与案例分享在软件开发和测试领域中,白盒测试是一种非常重要的测试方法。
与传统的黑盒测试不同,白盒测试是通过了解内部代码和结构来进行测试的。
在这篇文章中,我将分享一些我在白盒测试方面的实践经验和一些案例,希望对读者有所帮助。
一、了解白盒测试的基本原理白盒测试是基于源代码和内部结构的测试方法,旨在检查软件内部是否按照设计规范和要求来执行。
它也被称为结构测试或透明盒测试。
在进行白盒测试之前,测试人员需要有一定的编程知识和对软件内部结构的理解。
二、白盒测试的优势和适用场景1. 深入测试:白盒测试可以深入到程序的内部,发现隐藏的问题和潜在的错误。
2. 覆盖率分析:通过白盒测试可以准确地评估测试的覆盖率,找出覆盖不足的地方。
3. 异常处理:白盒测试可以测试异常处理的情况,确保程序在不同的异常场景下也能正确运行。
4. 代码优化:通过白盒测试可以找到代码中的冗余和低效之处,并提出优化的建议。
适用场景:白盒测试特别适用于关键代码、核心功能、复杂业务逻辑的测试,以及对系统的性能和安全性进行评估。
三、实践经验与案例分享1. 代码覆盖率工具的使用在进行白盒测试时,我们通常需要评估测试的覆盖率,以确保测试能够覆盖到所有的代码路径和分支。
为了简化这个过程,我们可以使用代码覆盖率工具,例如JaCoCo或SonarQube。
这些工具可以生成代码覆盖率报告,帮助我们了解哪些代码没有被测试到。
案例分享:在一个项目中,我使用了JaCoCo作为代码覆盖率工具。
通过分析覆盖率报告,我发现有几个核心函数没有得到充分测试。
我随后编写了更多的测试用例,以覆盖这些代码,并确保测试能够达到100%的覆盖率。
2. 边界值测试边界值测试是白盒测试中常用的一种方法,它旨在测试边界条件下程序的行为。
边界值通常是指输入或输出的最小、最大或临界值。
通过测试这些边界条件,我们可以发现因为边界条件而导致的错误。
案例分享:在一个金融软件的开发过程中,我负责进行边界值测试。
白盒测试案例

白盒测试案例白盒测试是软件测试中的一种重要测试方法,它主要是针对软件内部结构进行测试的一种方法。
白盒测试是通过检查程序内部的逻辑结构、代码覆盖率、路径覆盖率等来进行测试的,是一种验证程序内部逻辑正确性的测试方法。
在进行白盒测试时,需要编写相应的测试用例来对程序进行全面的测试,以确保程序的质量和稳定性。
在进行白盒测试时,需要考虑以下几个方面的测试案例:1. 代码覆盖率测试。
代码覆盖率测试是白盒测试中非常重要的一环,它主要是通过执行测试用例来检查程序的每一行代码是否都被执行到,以及每一行代码的执行次数。
通过代码覆盖率测试,可以有效地检查程序中的潜在逻辑错误和代码漏洞,提高程序的稳定性和可靠性。
例如,对于一个简单的函数,我们可以编写测试用例来覆盖函数的每一行代码,包括正常输入、边界输入和异常输入等情况,以确保函数能够正确地执行并返回期望的结果。
2. 路径覆盖率测试。
路径覆盖率测试是白盒测试中另一个重要的测试方法,它主要是通过执行测试用例来检查程序中的每一个可能路径是否都被覆盖到。
路径覆盖率测试可以有效地发现程序中的逻辑错误和潜在的漏洞,提高程序的健壮性和可靠性。
例如,对于一个复杂的程序,我们可以编写测试用例来覆盖程序中的每一个可能路径,包括条件分支、循环和异常处理等情况,以确保程序能够正确地执行并返回期望的结果。
3. 边界值测试。
边界值测试是白盒测试中的一种常用测试方法,它主要是通过测试程序的边界值情况来检查程序的正确性和稳定性。
边界值测试可以有效地发现程序中的边界条件错误和潜在的漏洞,提高程序的鲁棒性和可靠性。
例如,对于一个接受输入的函数,我们可以编写测试用例来覆盖函数的边界值情况,包括最小输入、最大输入、边界输入和异常输入等情况,以确保函数能够正确地执行并返回期望的结果。
总结。
白盒测试是软件测试中非常重要的一种测试方法,它主要是针对程序内部结构进行测试的一种方法。
在进行白盒测试时,需要编写相应的测试用例来对程序进行全面的测试,以确保程序的质量和稳定性。
白盒测试的测试用例设计方法

白盒测试的测试用例设计方法白盒测试是一种测试方法,旨在验证程序内部的结构和逻辑。
在白盒测试中,测试人员需要设计有效的测试用例来全面评估系统的功能和准确性。
本文将介绍几种常用的白盒测试用例设计方法。
一、语句覆盖(Statement Coverage)语句覆盖是一种基本的白盒测试用例设计方法。
它要求测试用例能够覆盖被测试程序中的每条语句至少一次。
通过执行每个语句,可以确保程序的基本功能正常运行。
测试人员可以通过代码走查和代码覆盖率工具来确定覆盖情况。
二、判定覆盖(Decision Coverage)判定覆盖是一种更为严格的白盒测试用例设计方法。
它要求测试用例能够覆盖每个条件语句的所有可能结果,包括真值和假值。
通过判定覆盖,可以验证程序在不同条件下的正确性。
测试人员需要对每个条件进行测试设计,确保每个结果都被覆盖到。
三、条件覆盖(Condition Coverage)条件覆盖是判定覆盖的一种补充方法。
它要求测试用例能够覆盖每个独立条件的所有可能情况。
通过条件覆盖,可以确保程序在各种条件下的正确处理。
测试人员需要考虑所有可能的条件组合,并设计相应的测试用例。
四、路径覆盖(Path Coverage)路径覆盖是一种高级的白盒测试用例设计方法。
它要求测试用例能够覆盖程序中所有可能的执行路径。
通过路径覆盖,可以全面评估程序的逻辑和流程。
测试人员需要分析代码,找出程序的所有路径,并设计测试用例来覆盖这些路径。
五、边界值覆盖(Boundary Value Coverage)边界值覆盖是一种特殊的白盒测试用例设计方法。
它要求测试用例能够覆盖每个输入和输出的边界值。
通过边界值覆盖,可以检测程序对边界情况的处理是否正确。
测试人员需要确定每个输入和输出的边界,设计测试用例来验证程序的边界处理能力。
六、错误推测(Error Guessing)错误推测是一种经验主义的白盒测试用例设计方法。
它要求测试人员根据自己的经验和直觉来猜测可能存在的错误,并设计相应的测试用例来验证。
软件测试报告

软件测试基础测试报告选题:前一日——PreDate指导老师:***学号:**********姓名:***一、问题描述前一日函数实现了一个这样的功能:输入一个合法日期,程序给出这一天的前一天。
为了方便测试,在程序中将年份人为地规定为1812年——2012年,超出这个界限则认为是错误的。
二、黑盒测试用例设计1.边界值测试由于有三个变量,如果用健壮最坏情况测试则需要7*7*7个测试用例,为了使测试相对完全而又不过于繁琐,我们这里使用最坏情况测试,共有125个测试用例。
表1 最坏情况测试用例(续)(续)(续)注:由于是边界值测试,其变量是按统一的定义域来测试的,并没有把不同天数的月份分开,所以会有一些输入日期是不存在的,程序也会因此提示输入错误。
2.等价类测试PreDate是一个三变量函数,即月份、日期和年,这些变量的有效值区间定义如下:M1={月份:前一月有30天}M2={月份:前一月有31天但不包含1月}M3={月份:1月}M4={月份:3月}D1={日期:2≤日期≤31}D2={日期:日期=1}Y1={年:年是闰年}Y2={年:年是平年}共有16个强一般等价类测试用例,如下表所示:表2强一般等价类测试用例注:由于考虑到一月的时候年份会减1,所以将一月单独化为一个等价类。
3.基于决策表的测试把等价类划分的每个类看成一个原因,再列出可能会出现的结果:a1. 不可能a2. 日期减1a3. 日期置31a4. 日期置30a5. 日期置29a6. 日期置28a7. 月份减1a8. 月份置12a9. 年份减1由于因果图画起来比较乱,所以省去了因果图,依据原因和结果得到PreDate的决策表如下:表3 PreDate函数的决策表对每一列生成测试用例:表4PreDate函数的决策表测试用例三、白盒测试用例设计1.被测主要代码1.i nt M,D,YStep1: Get Input2.Output("请输入")3.Input(M,D,Y)Step2: Is datetime right?4. If ((M<1) || (M>12) || (D<1) || (D>31) || (Y<1812) || (Y>2012))5. Then IsDatetimeRight=False6. Else IsDatetimeRight=True7. End ifStep3: Determine the datetime8. If IsDatetimeRight9. Then if (D>=2)10. Then {D=D-1Output ("前一日日期为"+Y+"年"+M+"月"+D+"日")}11. Else if (M==3)12. Then if (((Y%4==0) &&(Y%100! =0)) ||(Y%400==0))13. Then {M=2, D=29,Output("前一日日期为"+Y+"年"+M+"月"+D+"日")}14. Else {M=2, D=28,Output("前一日日期为"+Y+"年"+M+"月"+D+"日")}15. End if16. Else if (M==1)17. Then {M=12, D=31, Y=Y-1,Output("前一日日期为"+Y+"年"+M+"月"+D+"日")}18. Else if ((M==5) || (M==7) || (M==10) || (M==12))19. Then {M=M-1, D=30Output("前一日日期为"+Y+"年"+M+"月"+D+"日")}20. Else {M=M-1, D=31Output("前一日日期为"+Y+"年"+M+"月"+D+"日")}21. End if22. End if23. End if24.End if25. Else output ("Datetime is wrong!")26. End if27. End3.DD—路径图根据以上程序图,列出对应的DD—路径图中的节点,如表5所示:表5 图DD—路径类型相应的DD—路径图如下图所示:PreDate程序的DD—路径图4.基路径圈复杂度8基路径:1)ABCEFGIMOQRSTUW2)AB D EFGIMOQRSTUW3)ABCEF V W4)ABCEFG H UW5)ABCEFGI J L TUW6)ABCEFGI K L TUW7)ABCEFGIM N STUW8)ABCEFGIM0P RSTUW由源程序可知,该问题中存在逻辑依赖规则,即—若经过节点C,则必经过节点G—若经过节点D,则必经过节点V所以程序的基路径为:1)ABCEFGIMOQRSTUW9)AB D EFVW4)ABCEFG H UW5)ABCEFGI J L TUW6)ABCEFGI K L TUW7)ABCEFGIM N STUW8)ABCEFGIM0P RSTUW5.测试用例四、测试执行和报告1.程序代码package Predate;public class PreDate {public boolean isLeapYear(int year){/*** 判断闰年*/if(year%4==0&&year%100!=0)return true;if(year%400==0)return true;return false;}public boolean isLegalData(int year,int month,int day){ /*** 判断日期是否合法*/if(month>12||month<=0)return false;if(day<=0||day>31)return false;if(month==4||month==6||month==9||month==11){if(day>30)return false;return true;}if(month==2){if(isLeapYear(year)&&day>29)return false;if(!isLeapYear(year)&&day>28)return false;return true;}return true;}public String predate(int year,int month,int day){ if(!isLegalData(year, month, day))return"Date not legal";else if(day==1){if(month==1){year=year-1;return year+"年"+"12月"+"31日";}else if(month==3){if(isLeapYear(year))return year+"年"+"2月"+"29日";elsereturn year+"年"+"2月"+"28日";}else if(month==5||month==7||month==10||month==12){ month=month-1;return year+"年"+month+"月"+"30日";}else{month=month-1;return year+"年"+month+"月"+"31日";}}else{day=day-1;return year+"年"+month+"月"+day+"日";}}}2.测试代码package Test;import static org.junit.Assert.*;import Predate.PreDate;import org.junit.Before;import org.junit.Test;public class PreDateTest {private PreDate date;@Beforepublic void setUp() throws Exception {this.date = new PreDate();}@Testpublic void testIsLeapY ear() {/*** 测试年份是否为闰年*/assertEquals(true, date.isLeapYear(1992));assertEquals(true, date.isLeapYear(1812));assertEquals(true, date.isLeapYear(2012));assertEquals(false, date.isLeapY ear(1991));assertEquals(false, date.isLeapY ear(1990));}@Testpublic void testIsLegalData() {/*** 测试输入日期是否为合法日期*/assertEquals(true, date.isLegalData(2012, 12, 1));assertEquals(false, date.isLegalData(2013, 12, 1));assertEquals(true, date.isLegalData(1812, 12, 1));assertEquals(false, date.isLegalData(1811, 12, 1));/*** 以上四个测试用例测试了年份应在1812年至2012年之间*/assertEquals(true, date.isLegalData(2000, 1, 15));assertEquals(true, date.isLegalData(2000, 12, 15));assertEquals(false, date.isLegalData(2000, -1, 15));assertEquals(false, date.isLegalData(2000, 0, 15));assertEquals(false, date.isLegalData(2000, 13, 15));/*** 以上测试用例测试了月份的合法性(1~12)*/assertEquals(false, date.isLegalData(2000, 12, 0));assertEquals(true, date.isLegalData(2000, 12, 31));assertEquals(false, date.isLegalData(2000, 12, 32));assertEquals(true, date.isLegalData(2000, 6, 30));assertEquals(false, date.isLegalData(2000, 6, 31));assertEquals(true, date.isLegalData(2000, 2, 29));assertEquals(false, date.isLegalData(2000, 2, 30));assertEquals(false, date.isLegalData(2000, 2, 31));assertEquals(false, date.isLegalData(2001, 2, 29));assertEquals(false, date.isLegalData(2001, 2, 30));assertEquals(false, date.isLegalData(2000, 6, 31));/*** 以上测试用例测试了日期的合法性*/}@Testpublic void testPredate() {/*** 测试前一日函数,这里用的是基于决策表的测试用例*/assertEquals("2001年6月30日", date.predate(2001, 7, 1));assertEquals("2001年6月29日", date.predate(2001, 6, 30));assertEquals("2001年6月4日", date.predate(2001, 6, 5));assertEquals("2000年5月31日", date.predate(2000, 6, 1));assertEquals("1996年1月4日", date.predate(1996, 1, 5));assertEquals("1995年12月31日", date.predate(1996, 1, 1));assertEquals("2001年3月4日", date.predate(2001, 3, 5));assertEquals("2001年2月28日", date.predate(2001, 3, 1));assertEquals("2000年2月29日", date.predate(2000, 3, 1));}}3.发现的失效由于程序比较简短,所以只检测到部分错误,比如刚开始闰年的判断条件少了year%4=0&&year%100!=0的后半段,结果将1900年判断为闰年,经过分析将代码改正,能够正确的进行前一日的输出。
白盒测试方法及示例

白盒测试方法及示例白盒测试,也称为结构测试或者逻辑测试,是一种测试方法,旨在检查软件的内部结构和实现是否符合预期。
下面是一些白盒测试的常见方法及示例:1. 语句覆盖(Statement Coverage):目标是确保每个代码语句都至少执行了一次。
示例:对于一个函数,测试用例需要覆盖函数中的每个语句。
2. 判定覆盖(Decision Coverage):目标是确保每个条件判断语句的每个可能路径都被覆盖。
示例:对于一个条件判断语句,需要编写测试用例,覆盖每个可能的结果分支。
3. 条件覆盖(Condition Coverage):目标是确保每个条件的真值和假值至少都被测试到。
示例:对于一个包含多个条件的逻辑表达式,需要编写测试用例使得每个条件的取值都被测试到。
4. 路径覆盖(Path Coverage):目标是覆盖一个程序的所有可能路径。
示例:对于一个复杂的程序,需要编写足够的测试用例,覆盖程序的所有可能执行路径。
5. 循环覆盖(Loop Coverage):目标是确保循环结构的执行路径中的每个部分都至少执行一次。
示例:对于一个包含循环的函数,需要编写测试用例,覆盖循环结构的各种情况。
6. 边界值分析(Boundary Value Analysis):目标是测试输入数据的边界条件。
示例:对于一个接受输入数据的函数,需要编写测试用例,测试输入数据的最小值、最大值以及接近边界的值。
7. 异常处理测试(Exception Handling Testing):目标是测试程序对于异常情况的处理能力。
示例:对于一个可能出现异常的程序,需要编写测试用例,测试程序对于异常情况的响应。
总的来说,白盒测试是通过对软件的内部结构进行检查和测试,以确保软件在各种情况下都能正确运行。
对不同类型的白盒测试方法,我们可以根据具体的测试目标和需求选择合适的方法来进行测试。
同时,通过不同的示例可以更好地理解和应用这些白盒测试方法。
白盒测试中的边界值分析方法

白盒测试中的边界值分析方法白盒测试是软件测试中的一种方法,它通过对程序内部结构和代码进行分析,以了解程序是否按照预期工作。
边界值分析则是白盒测试中常用的一种测试策略,用于确定程序在输入值边界处的行为。
本文将介绍白盒测试中的边界值分析方法及其应用。
一、边界值分析的概念和作用边界值分析是一种测试技术,通过选取输入值的边界点,测试程序在边界点附近的行为,以揭示可能存在的错误。
它的基本思想是:程序往往在输入值的边界处容易出现错误,因此通过测试边界值可以更好地发现这些错误。
边界值分析可帮助测试人员尽早发现潜在的问题,并减少测试用例的数量。
二、边界值分析的方法1. 确定边界点在进行边界值分析前,首先需要确定输入值的边界点。
边界点是指在一个输入范围内最小和最大的值,以及刚好位于边界上的值。
例如,对于一个取值范围为1到100的输入,边界点包括1、100和50(位于范围中间的值)。
2. 选择边界测试用例根据确定的边界点,可以选择边界测试用例。
边界测试用例是在边界点附近的测试用例,以验证程序在边界处的行为。
测试用例应包括测试输入和预期输出。
3. 执行测试用例执行选择的边界测试用例,并观察程序的行为。
与预期输出不一致的结果可能暗示着程序存在错误。
4. 分析测试结果对测试结果进行分析,判断是否存在错误,并记录错误的位置和类型。
通过边界值分析,可以更好地揭示程序在输入边界处的异常行为。
三、边界值分析的应用场景边界值分析适用于多种场景,以下是几个常见的应用场景:1. 数值输入:对于需要输入数字的软件,边界值分析可帮助发现程序在边界点处的问题。
例如,一个接收年龄输入的程序,边界值测试用例可以包括最小合法年龄、最大合法年龄、刚刚达到合法年龄的值等。
2. 字符串输入:对于需要输入字符串的程序,边界值分析可验证程序在边界长度处的行为。
例如,一个要求用户输入用户名的程序,边界值测试用例可以包括最短合法长度、最长合法长度和刚刚超出最大长度的值等。
仓颉语言白盒测试优秀实践

仓颉语言白盒测试优秀实践
仓颉语言白盒测试的优秀实践包括以下几个方面:
1. 代码覆盖率检测:通过使用代码覆盖率工具,检测测试用例对仓颉语言代码的覆盖率。
通过检测代码的覆盖率情况,可以判断测试是否充分覆盖了仓颉语言代码的各个部分,从而提高测试的质量。
2. 边界值测试:仓颉语言的编码规则是由一系列5个基本笔画组成,每个基本笔画的位置可以是上、下、左、右、四个方向,共有125种可能的组合。
在白盒测试中,可以通过针对这些基本笔画的组合,测试边界值情况,例如测试在一个字母可以被输入的情况下,输入超过规定的5个笔画会有何种反应。
3. 逻辑覆盖测试:仓颉语言的逻辑非常规范和明确,因此在白盒测试中,可以通过针对逻辑的不同情况进行测试。
例如,测试当输入的笔画组合无法组成有效的字母时,程序的返回结果是否正确。
4. 异常处理测试:在白盒测试中,需要对各种异常情况进行测试。
例如,仓颉语言的输入限制了基本笔画的次序,因此测试在不符合笔画次序规定的情况下,程序的反应是否合理。
5. 性能测试:对于仓颉语言的输入和编码过程,可以进行性能测试,检测系统的响应时间和吞吐量。
通过性能测试,可以确定系统在大规模数据输入和编码时的稳定性和可靠性。
综上所述,仓颉语言白盒测试的优秀实践包括代码覆盖率检测、边界值测试、逻辑覆盖测试、异常处理测试和性能测试等方面,可以提高测试的覆盖率和质量,从而确保仓颉语言系统的稳定性和可靠性。
白盒测试中的边界值分析技术

白盒测试中的边界值分析技术边界值分析是白盒测试中常用的一种技术,通过测试边界值来检测程序在输入边界附近的行为。
边界值分析技术有效地揭示了程序在边界值处可能出现的错误和异常。
一、边界值分析的原理和方法边界值分析是基于一种合理的假设:在边界处的错误往往比在范围内部的错误更容易出现。
因此,通过测试边界值,可以更有效地发现错误和缺陷。
边界值分析的方法主要包括以下几个步骤:1. 确定输入条件:首先,需要明确测试对象的输入条件,包括输入变量的范围、类型和限制。
2. 确定边界值:根据输入条件,确定输入变量的边界值。
一般情况下,会选择最小边界值、最大边界值和一些典型的边界值。
3. 设计测试用例:根据确定的边界值,设计测试用例。
测试用例应涵盖各种可能的边界情况,既包括正常的边界情况,也包括异常的边界情况。
4. 执行测试用例:按照设计的测试用例执行测试,记录测试结果和发现的问题。
5. 分析测试结果:分析测试结果,查找并修复发现的问题。
二、边界值分析的优势边界值分析技术在白盒测试中具有以下几个优势:1. 高效性:通过测试边界值,可以有效地检测程序在边界附近的错误和异常,提高测试效率。
2. 准确性:边界值分析将测试重点放在程序的边界条件上,更容易发现边界条件下的问题,增加测试的准确性。
3. 全面性:边界值分析要求设计测试用例时考虑各种边界情况,使得测试覆盖范围更广,更全面。
4. 可重复性:边界值分析的测试用例是基于程序的边界条件设计的,因此可以重复使用,提高测试效率。
三、边界值分析的应用场景边界值分析技术在软件测试中有广泛的应用场景,特别适用于以下情况:1. 输入范围较大:当输入变量的范围较大时,使用边界值分析可以有效地缩小测试范围,提高测试效率。
2. 输入限制较多:当输入变量有一些限制条件时,如输入值必须为正数、输入值不能为零等,边界值分析可以帮助检测这些限制条件下的错误和异常。
3. 关键业务逻辑:当程序的关键业务逻辑与输入变量相关时,边界值分析可以验证这些关键逻辑在边界情况下是否正确。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
案例白盒测试中的边界值测试
白盒测试中需要重点测试哪些边界值呢?总结起来有以下几点:
➢测试数据类型的边界值,如整型的范围、单精度数的范围等。
➢测试数组的边界值。
➢测试分支判断语句的边界值:如if(a>=0)中的a=0。
1.数据类型的边界值
任何数据类型在内存中都是有一定的存储空间的。
例如C语言分为DOS平台和Windows平台。
Dos平台下的C语言中各种数据类型的存储范围如下表。
Windows平台下的C语言中各种数据类型的存储范围如下表。
如果是在Turbo C(DOS环境)里面定义了一个整型变量,就需要测试这个整型变量的数值是否超出了-32768—32767这个范围;而如果是在VC (Windows环境)里面定义了一个整型变量,就需要测试这个整型变量的数值是否超出了-2147485648—2147483647这个范围。
现看一个数据类型边界值测试的例子:
#incldue <stdio.h>
void main()
{
int a=32765;
int b=3;
int c;
c=a+b;;
printf(“%d”,c);
}
假设该程序是用DOS环境下的Turbo C开发的,则求得的c值为32768超出了这个范围,当然不能正确打印。
启发:a和b作为两个整形变量,它们没有超出范围,而a和b计算之后
的结果却超出了边界值,这也是程序员们经常犯的一个错误,要引起足够的重视。
2.数组的边界值
当测试数组时要重点测试其边界值,防止产生数组越界的问题,请看下面的例子:
#include <stdio.h>
void main()
{
int a[5];
int i=0;
for(i=0;i<=5;i++)
scanf(“%d”,&a[i]); //输入数组5个元素
for(i=1;i<5;i++)
printf(“%d”,a[i]); //打印数组5个元素
}
上面程序中循环时i的取值有问题。
第一个for循环:for(i=0;i<=5;i++),i值从0到5,赋给a[i]就变成了a[0]到a[5];而数组a[5]的范围却是从a[0]到a[4],没有a[5]这个元素,
这就是越界问题。
它会有什么后果呢?我们事先在内存中只给a[5]分配
了5个整型元素所占的空间,而在用scanf语句输入时,却要输入6个
元素,那么多输入的这一个元素存在哪里呢?只能存在与数组a[5]相邻
的内存空间,而这一空间是没有提前分配的,其中不一定存储什么样的
数据,因此就比较危险,可能幼年期内存溢出的错误。
第二个for循环:for(i=1;i<5;i++),i值从1到4,输出a[1]到a[4],显然把a[0]这一数组元素漏掉了,虽然这一问题不是数组越界问题,但
也属于边界值出了问题。
可以将程序修改如下:
#include <stdio.h>
void main()
{
int a[5];
int i=0;
for(i=0;i<5;i++)
scanf(“%d”,&a[i]); //输入数组5个元素
for(i=0;i<5;i++)
printf(“%d”,a[i]); //打印数组5个元素
}
3.分支判断语句的边界值
很多if语句、elseif语句都含有关系表达式,如if(a>=0),else if(b<1)等,这里面关系表达式的边界值需要重点留意,我们需要测试a=0,b=1时是否成立。
请看下面这个例子:
/*
程序功能:输入两个2位数(10-99之间的整数),计算它们的和并输出
*/
#include <stdio.h>
void main()
{
int a;
int b;
int c;
printf(“请输入两个10到99之间的整数”);
scanf(“%d%d”,&a,&b);
if(a<=10||a>=99)
printf(“a的值应该在10到99之间”);
else if(b<=10||b>=99)
printf(“b的值应该在10到99之间”);
else
{
c=a+b;
printf(“两个数的和为%d”,c);
}
}
重点观察一下if语句和else if语句的条件判断有没有问题。
if(a<=10||a>=99)
printf(“a的值应该在10到99之间”);
只要a<=10或者a>=99,程序就给出错误提示信息。
而实际上当输入10或99时,程序不应该报错,因为10和99也是两位数,属于合法数据,因此这句话应该改为:
if(a<10||a>99)
printf(“a的值应该在10到99之间”);
同理,下面的else if语句也应该改为:
else if(b<10||b>99)
printf(“b的值应该在10到99之间”);
通过对上面例子的分析,了解了分支语句的边界值如何测试,这也是程序员经常犯错误的地方,希望引起注意。