一种有效的边界测试点选取策略
- 格式:pdf
- 大小:355.34 KB
- 文档页数:6
软件测试中的边界值分析技术边界值分析是软件测试中一种常用的技术,它被广泛应用于各个测试阶段,包括单元测试、集成测试和系统测试等。
边界值分析的核心思想是通过测试边界值来发现潜在的错误和缺陷,提高软件的质量和可靠性。
本文将详细介绍软件测试中的边界值分析技术,以及它的应用场景和实施方法。
一、边界值分析的定义和原理边界值分析是一种基于边界条件的测试技术,它通过选择测试用例的边界值来检测程序的错误和异常。
边界值是指输入和输出的极限值,包括最大边界、最小边界和一些特殊边界。
通过测试这些边界值,可以发现程序在极端情况下的行为,进而检验程序的正确性和稳定性。
边界值分析的原理基于以下两个假设:1. 程序在边界值附近的行为可能与其他位置存在差异。
2. 错误通常在边界值处发生,而不太可能在常规值的范围内发生。
二、边界值分析的应用场景边界值分析技术适用于各种软件测试场景,特别适用于以下几种情况:1. 输入值范围非常大的情况:当输入值的取值范围非常大时,全面地进行测试是不现实的,因此边界值分析可以帮助我们找到输入范围的边界,并选择边界值进行测试。
2. 条件覆盖不容易实现的情况:在某些情况下,程序的条件覆盖非常难以实现,因此可以通过边界值分析的方法来减少测试用例的数量,节约测试成本。
3. 对程序输出有限制的情况:当程序的输出有一定限制时,边界值分析可以找到使输出达到边界的输入值,确保程序在极端情况下的正确性。
4. 对程序响应时间有要求的情况:当程序对响应时间有严格要求时,边界值分析可以检查程序在边界值情况下是否能满足时间要求。
三、边界值分析的实施方法边界值分析的实施方法主要包括以下几个步骤:1. 确定输入变量:首先需要确定程序的输入变量,即要进行边界值分析的变量。
2. 确定边界值:根据输入变量的定义和范围,确定边界值。
通常边界值可以分为最小边界、最大边界和特殊边界。
3. 选择测试用例:根据边界值,选择测试用例。
通常可以选择最小边界值、最大边界值和其他一些特殊边界值进行测试。
软件测试中的边界值分析与边界条件选择边界值分析是软件测试过程中的一种重要技术,它能够帮助测试人员有效地检测软件系统在输入范围的边界处是否存在错误或异常情况。
边界条件选择是边界值分析的关键步骤,它确定了需要测试的具体边界值,从而保证测试的全面性和有效性。
在软件测试中,边界值分析是一种黑盒测试技术,其核心思想是通过选取输入数据集中的边界值来进行测试。
边界值通常是指输入域的最小值、最大值以及与边界相关的特殊值。
边界值分析的目标是发现在边界处可能存在的错误和异常情况。
边界值分析的一般步骤如下:1. 确定输入条件:我们需要明确需要进行边界值分析的输入条件。
这些条件可能包括数字、日期、字符串等。
例如,如果我们需要测试一个接受年份输入的软件系统,输入条件可以是一个四位数的年份。
2. 确定边界值:根据输入条件,我们需要确定边界值。
边界值通常包括最小值、最大值以及两个临界值。
例如,对于四位数的年份输入,最小值可以是公历的最早年份,最大值可以是公历的最晚年份,而临界值可以是最早年份的前一年和最晚年份的后一年。
3. 选择测试用例:根据边界值确定测试用例。
测试用例应该覆盖所有的边界情况,包括最小值、最大值以及临界值。
例如,对于四位数年份的边界值分析,测试用例可以包括最早年份、最晚年份、最早年份的前一年和最晚年份的后一年。
4. 执行测试:根据测试用例,执行相应的测试。
测试人员需要根据边界值分析的结果,判断软件系统在边界处是否存在错误或异常情况。
如果发现错误或异常情况,测试人员需要记录并报告给开发人员进行修复。
边界条件选择是边界值分析的关键步骤,它确保了测试的全面性和有效性。
在选择边界条件时,我们需要考虑以下几个因素:1. 最小值和最大值:边界条件应该包括输入范围的最小值和最大值,确保测试能够覆盖整个输入范围。
2. 临界值:除了最小值和最大值,边界条件还应该包括临界值,即最小值和最大值的边界情况。
例如,对于四位数年份的边界值分析,临界值可以是最早年份的前一年和最晚年份的后一年。
边界值测试在软件测试中扮演着重要的角色,它能够帮助我们有效地发现潜在的错误和缺陷。
测试框架的边界值测试是其中的一种技巧,本文将与读者分享一些关于测试框架边界值测试的技巧和经验。
1. 理解边界值测试的意义边界值测试是通过选取边界边界值作为测试输入来检测程序在边界情况下的表现。
边界值通常是可能导致错误的最小和最大值,因此边界值测试能够帮助我们发现一些隐藏的错误。
例如,如果一个程序要求用户输入一个数字,边界值测试就可以用来测试输入的最小值、最大值,以及比最小值小一点和比最大值大一点的值。
2. 选择合适的边界值在进行边界值测试时,我们需要选择适当的边界值。
关键是要选择能够覆盖可能的错误情况的边界值,这样才能有效地检测出程序中的错误。
例如,如果一个程序要求输入一个年龄值,我们需要选择最小年龄和最大年龄作为边界值,同时也需要选择比最小年龄小一岁和比最大年龄大一岁的值作为边界值。
3. 考虑边界值的各种组合除了单独测试边界值外,还可以考虑边界值的各种组合情况。
这些组合测试能够帮助我们发现在边界情况下可能发生的错误。
例如,如果一个程序要求输入一个日期,我们需要测试特殊日期(如闰年的2月29日),以及接近边界日期的组合(如在闰年2月28日的基础上加一天)。
4. 注意边界值测试可能存在的问题虽然边界值测试是一种有效的测试技巧,但也存在一些问题需要注意。
首先,由于边界值测试通常会生成大量的测试用例,测试的覆盖范围可能会非常广。
这就需要我们在测试设计和执行时进行合理的规划和控制。
其次,边界值测试只是一种测试技巧,不能覆盖所有的测试场景,因此需要结合其他的测试方法来提高测试的全面性和深度。
5. 结合自动化测试工具进行边界值测试边界值测试通常需要生成大量的测试用例,这可能会增加测试的工作负担和时间成本。
为了提高测试效率,我们可以考虑使用自动化测试工具来辅助进行边界值测试。
自动化测试工具可以帮助我们自动生成测试用例,并对测试结果进行自动分析和报告,从而提高测试效率和准确性。
软件测试的方法和策略软件测试是一个非常关键的步骤,它可以验证软件是否符合质量标准并找出其中的缺陷。
为了确保测试的有效性和高效性,测试团队需要选择合适的测试方法和策略。
本文将介绍几种常用的软件测试方法和策略,并对其优劣进行分析。
一、黑盒测试方法黑盒测试方法是一种基于软件外部行为的测试方法,测试人员不需要了解软件的内部结构和代码。
它主要通过输入合法和非法的数据,以及模拟用户的操作行为来验证软件的正确性和功能性。
1. 等价类划分法等价类划分法是一种常用的黑盒测试方法,它将输入数据分为多个等价类,只需从每个等价类中选择一个代表性数据进行测试,可以有效地减少测试用例的数量,同时保证覆盖所有的等价类。
2. 边界值分析法边界值分析法是基于等价类划分法的一种测试方法,它主要关注输入数据的边界情况。
通过选择边界值进行测试,可以发现由于边界情况引起的问题,提高测试的有效性。
二、白盒测试方法白盒测试方法是基于软件内部结构和代码的测试方法,测试人员需要了解软件的内部逻辑和实现方式。
它主要通过检查代码的执行路径来验证软件的正确性和可靠性。
1. 语句覆盖语句覆盖是一种基本的白盒测试方法,它要求测试用例执行到每个语句至少一次。
通过检查每个语句的执行情况,可以发现潜在的代码问题,提高软件的质量。
2. 条件覆盖条件覆盖是一种更严格的白盒测试方法,它要求测试用例覆盖所有可能的条件组合。
通过检查每个条件的真假情况,可以验证软件在不同条件下的行为,提高测试的全面性。
三、自动化测试策略自动化测试是一种高效的测试策略,它可以通过编写脚本自动化执行测试用例,减少人力成本,并提高测试的速度和准确性。
1. 单元测试单元测试是一种自动化测试策略,它对软件中的最小功能单元进行测试。
通过编写单元测试用例,可以快速检查代码的正确性,并及早发现问题。
2. 集成测试集成测试是一种自动化测试策略,它测试软件各个模块之间的接口和交互。
通过模拟真实环境,可以发现模块之间的集成问题,提高软件的稳定性和可靠性。
边界值法设计测试用例的步骤嘿,朋友们!今天咱来聊聊边界值法设计测试用例的那些事儿。
你想啊,这测试就好比是给软件来一场大考,咱得把各种可能的情况都想到了,不能放过任何一个小细节。
那边界值法呢,就像是专门盯着边界线的小侦探。
比如说,咱有个数值范围,就像一个操场,那两边的边界就是跑道的边缘呀。
咱就得重点看看靠近边界的地方,是不是会出啥问题。
咱先得确定边界值,这可不能马虎。
就好像你要去参加比赛,得知道起跑线和终点线在哪儿呀。
然后呢,在边界值上和稍微超出一点点、差一点点的地方都要设计测试用例。
这就好比是在边界线上跳舞,得跳得恰到好处。
举个例子吧,要是有个要求输入年龄的地方,规定是 18 到 60 岁。
那 18 和 60 就是边界呀,咱就得设计 17 岁、18 岁、19 岁,还有 59 岁、60 岁、61 岁的测试用例。
这就像在年龄的边界线上左看看右看看,看看有没有漏洞。
你说要是不这么仔细,万一软件在边界上出了问题,那不就糟糕啦?就好像你走路走到悬崖边,不注意就掉下去啦!这可不行呀!还有啊,边界值法可不仅仅是针对数值哦,对于其他的条件也一样适用。
比如说,有个选项是选男选女,那男和女不就是边界嘛。
咱就得测试选男的时候会咋样,选女的时候又会咋样。
这多重要啊,朋友们!要是测试不全面,等软件上线了出问题,那可就麻烦大了。
到时候用户可不会管你之前有没有认真测试,只会怪软件不好用。
咱得像个细心的小工匠,一点点地打磨,把每个边界都照顾到。
这样才能保证软件像一辆稳稳当当的汽车,在道路上顺畅行驶。
总之啊,边界值法设计测试用例就是要细心、细心再细心。
要把边界当成宝贝一样,好好地研究,好好地测试。
这样才能让我们的软件像坚固的城堡一样,经得起各种考验呀!你们说是不是呢?。
功能测试中的边界值分析技巧功能测试是软件开发过程中的重要环节,通过对软件功能的检测,确保软件在不同情况下的正常运行。
而边界值分析技巧被广泛应用于功能测试中,它能够帮助测试人员准确找出软件的边界问题,以保证系统的稳定性和可靠性。
1. 了解边界值分析边界值分析是一种黑盒测试技术,通过选择测试用例中的边界值以及其附近的值来进行测试。
边界值一般是指输入、输出或者存储值的上下限值。
边界值分析技巧可帮助测试人员发现系统在这些边界值处是否存在问题。
2. 寻找边界值在进行功能测试时,我们需要先对系统的功能进行梳理,找出可能存在边界问题的地方。
以银行系统为例,常见的边界值可能涉及账户余额的上下限、交易金额的范围、密码输入长度的限制等。
3. 确定边界值用例确定了可能存在边界问题的功能点后,我们需要针对这些功能点设计相应的边界值用例。
边界值用例应包括输入边界值、边界值上限、边界值下限以及边界值附近的值。
以密码输入长度为例,边界值用例可以包括密码长度分别为5、6、7、15、16以及17的情况。
4. 执行边界值测试在执行边界值测试时,我们要确保每一个边界值用例都被覆盖到。
对于每个边界值用例,我们需要模拟系统接收到的输入,观察系统的反应。
例如,在密码输入长度的测试中,我们可以尝试输入一个长度为5的密码,然后再输入一个长度为6的密码,以此类推,测试系统是否能正确处理这些边界情况。
5. 分析测试结果在分析测试结果时,我们要根据系统的预期行为来判断测试结果的合理性。
如果系统在边界值处出现异常,如密码长度为5和密码长度为6时出现不同行为,那么很可能存在边界问题。
在这种情况下,测试人员需要详细记录问题,并及时反馈给开发团队,以便修复问题。
6. 完善测试策略边界值分析技巧不仅能够帮助发现边界问题,还能够帮助测试人员更好地优化测试策略。
通过分析边界值,我们可以确定哪些功能点更容易出现问题,以便加强针对性测试。
同时,我们也可以根据边界值分析结果,合理分配测试资源,确保对重要功能进行更全面的测试。
掌握软件测试中的边界值测试技巧边界值测试是软件测试中的一种重要技巧,通过测试程序的边界情况,可以有效地发现潜在的缺陷和错误。
本文将介绍软件测试中的边界值测试技巧,以帮助读者更好地掌握这一测试方法。
边界值测试是指在软件测试中,针对输入或输出数据的最小值、最大值以及紧邻边界的值进行测试的方法。
通常情况下,程序对于边界值的处理容易出现错误,而测试边界值可以发现这些错误,提高软件质量。
首先,我们需要注意边界值的选择。
边界值一般包括最小值、最大值和紧邻边界的值。
在选择边界值时,需要根据具体需求和测试场景进行判断,并尽量覆盖所有可能出现的情况。
比如,如果要测试一个接受年龄输入的程序,边界值可以选择最小值为0,最大值为150,以及紧邻边界的值1和149。
其次,针对边界值编写测试用例。
测试用例应该包括输入数据、预期输出以及实际输出,并具有可重复性。
在编写测试用例时,我们可以选择边界值作为输入,并通过对比实际输出和预期输出的差异来判断程序是否正常运行。
此外,还可以选择边界值的中间值进行测试,以覆盖更多的情况。
在测试过程中,需要注意边界值的边缘情况。
边界值的边缘情况是指输入数据恰好等于最小值、最大值或者紧邻边界的情况。
这些边缘情况往往容易被程序忽视,但却是容易出错的地方。
因此,在测试时需要特别关注这些边缘情况,并进行详细的测试。
除了边界值外,还可以结合其他测试技巧进行测试。
例如,结合等价类划分法,将输入数据划分为若干等价类,然后选择代表性的数据进行测试。
这样可以更全面地覆盖不同的情况,提高测试效果。
此外,还可以借助自动化测试工具进行边界值测试。
自动化测试可以提高测试效率和准确性,并能够快速地生成测试报告。
在选择自动化测试工具时,需要根据实际需求和测试场景进行选择,确保工具的兼容性和可扩展性。
综上所述,边界值测试是软件测试中一种重要的测试技巧,通过测试程序的边界情况可以发现潜在的缺陷和错误。
在进行边界值测试时,需要选择合适的边界值,并编写相应的测试用例。
软件测试中的边界值测试技巧边界值测试是软件测试中的一项重要技术,它通过测试边界值来检测系统在极限条件下的稳定性和正确性。
在软件开发过程中,边界值测试可以有效地发现程序中的潜在错误,提高软件的质量和可靠性。
边界值测试的核心思想是检测系统在不同边界条件下的行为。
边界值通常包括最小值、最大值、临界值和非法值。
通过针对这些边界值进行测试,可以揭示系统中可能存在的错误。
在进行边界值测试时,需要注意以下几个关键技巧。
要对边界值进行全面的覆盖。
边界值测试要求覆盖系统中的各种边界条件,包括最小值、最大值、临界值和非法值。
在设计测试用例时,需要对这些边界条件进行全面考虑,以确保测试的完整性和准确性。
要对边界值进行正向和反向测试。
正向测试是指测试系统在边界值附近的行为,而反向测试是指测试系统在边界值之外的行为。
这两种测试方法可以相互补充,帮助发现更多的错误。
第三,要结合等价类划分来设计测试用例。
等价类划分是一种常用的测试技术,它将输入数据划分为若干等价类,并选择代表性的测试用例来覆盖这些等价类。
在边界值测试中,可以将边界值作为等价类的代表,以增加测试用例的有效性和覆盖率。
第四,要关注边界值之间的相互关系。
在边界值测试中,不同边界值之间可能存在相互作用的情况,例如一个变量的最小值是另一个变量的最大值。
这种情况下,需要设计针对这种关系的测试用例,以保证系统在复杂情况下的正确性。
要正确处理边界错误。
在边界值测试中,可能会发现系统在边界条件下存在错误。
当发现这些错误时,需要及时进行修复和验证,以确保软件的质量和稳定性。
综上所述,边界值测试是软件测试中一项重要技术,可以帮助揭示系统中的潜在错误,提高软件的质量和可靠性。
在进行边界值测试时,我们需要全面覆盖边界条件、正向和反向测试、结合等价类划分、关注边界值之间的相互关系,并正确处理边界错误。
通过这些技巧,我们可以有效地进行边界值测试,发现系统中可能存在的问题,并及时进行修复和验证。
自动化测试中的边界值测试技巧自动化测试是软件开发过程中必不可少的环节,其中边界值测试是测试中的一种关键技巧。
通过测试软件系统的输入和输出边界情况,能够有效地发现潜在的问题和错误。
本文将介绍自动化测试中的边界值测试技巧,并分享一些实用的方法和经验。
一、边界值测试的重要性边界值测试是一种有效的测试技巧,它能够帮助发现系统在输入和输出边界情况下可能存在的问题。
在软件开发过程中,很多错误和缺陷往往出现在边界情况下,例如输入的最小值和最大值、参数的边界条件等。
通过边界值测试,可以对这些边界情况进行覆盖,减少问题的发生。
二、边界值测试的技巧1. 边界值分析:边界值测试的第一步是进行边界值分析。
对于每一个输入和参数,确定其合法的最小值、最大值,以及超出边界的值。
根据具体情况,可以选择测试最小值、最大值、边界值相等的情况,以及超出边界的情况。
2. 等价类划分:在进行边界值测试时,可以将输入和参数划分为若干等价类。
每个等价类包含一组具有相同测试要求的输入和参数。
然后,选择每个等价类中的边界值进行测试。
这样可以有效地减少测试用例的数量,提高效率。
3. 错误处理测试:边界值测试不仅要覆盖正常的边界情况,还要测试错误处理的能力。
例如,对于输入值超过最大值的情况,系统应该能够正确地给出错误提示并进行处理。
通过对错误处理的测试,可以发现系统在边界情况下可能存在的问题。
4. 边界值组合测试:在进行边界值测试时,还可以考虑多个参数的组合情况。
例如,系统的输入参数有两个边界值,可以采用所有边界值组合的方式进行测试。
这样可以更加全面地发现问题和错误。
三、实用案例分析以下是一些常见的边界值测试案例,供参考:案例一:用户注册功能在用户注册功能中,常见的边界值测试包括用户名长度的最小值和最大值、密码长度的最小值和最大值等。
根据具体情况,可以选择测试边界值相等的情况,以及超出边界的情况。
例如,如果用户名的最小长度是3,最大长度是20,可以分别测试长度为3、20和超过20的情况。
软件测试的策略和方法软件测试是指对软件系统或应用程序进行验证、检验和评估的过程,以发现其中的错误和缺陷并提供改进和修复的方法。
测试的目的是确保软件系统能够如预期地工作,以满足用户和业务需求。
为达到这一目的,测试人员需要采取一些策略和方法,以确保测试的质量和有效性。
下面将介绍一些软件测试的策略和方法。
一、测试策略测试策略是测试的规划、设计和执行过程中的指导方针。
它包括测试目标、范围、资源、时间安排、测试级别、测试方法和质量标准等方面的内容。
测试策略的制定应该基于软件产品的特性、需求和风险,以确保测试能够覆盖这些方面,并有效地发现并报告缺陷。
以下是一些常见的测试策略:1. 风险导向测试风险导向测试是根据软件产品的特性和预期使用场景,确定测试范围和测试重点的策略。
它主要考虑的是哪些方面可能会造成最大的影响和损失,以便优先进行测试。
这样可以帮助测试人员提前发现和修复潜在的缺陷,减少风险和损失。
2. 静态测试静态测试指的是对软件开发过程中的文档、代码和设计等进行分析和评估的测试方法。
它包括代码审查、需求审查、设计审查等方式。
静态测试能够通过早期发现潜在缺陷,提高软件质量和效率。
3. 动态测试动态测试是指运行软件系统或应用程序进行检验和验证的测试方法。
它可以分为黑盒测试和白盒测试。
黑盒测试主要验证软件的功能是否符合需求和用户期望;白盒测试则更加关注软件的内部机制和代码执行的正确性。
4. 自动化测试自动化测试是指利用测试工具和脚本等方式,对软件系统或应用程序进行自动化测试的方法。
自动化测试可以加快测试效率,减少测试成本,并提高测试的精确性。
二、测试方法测试方法是测试人员进行测试操作的具体手段和步骤。
测试方法应该根据不同测试对象和测试场景进行选择和应用,以确保测试的准确性和有效性。
以下是一些常见的测试方法:1. 边界值分析边界值分析是一种针对输入、输出和中间值的测试方法。
它可以检验在软件边界值附近的输入、输出和中间值,以发现潜在的逻辑错误和边界问题。
第19卷第2期2007年2月计算机辅助设计与图形学学报JO U RNAL OF COM PU T ER AI DED DESIGN &COM PU T ER GRA PHI CS V ol 19,No 2Feb ,2007收稿日期:2006-01-20;修回日期:2006-11-09 基金项目:国家自然科学基金(60473032);教育部科学技术重点项目(105018);中国科学院软件研究所计算机科学国家重点实验室开放课题基金(S YSKF0605) 赵瑞莲,女,1964年生,博士,教授,主要研究方向为软件测试、软件可靠性 董红霞,女,1976年生,硕士,主要研究方向为软件测试、软件可靠性一种有效的边界测试点选取策略赵瑞莲1) 董红霞1,2)1)(北京化工大学计算机科学系 北京 100029)2)(中国科学院软件研究所计算机科学国家重点实验室 北京 100080)(rlzhao@mail buct edu cn)摘要 借鉴组合逻辑电路固定型故障的诊断原理,提出一种软件边界测试点选取策略 根据RSDIM U 容错软件需求规范开发出52个测试用例,同时采用边界值分析、健壮性测试等边界值测试方法设计了2组测试用例,对34个版本的RSDIM U 程序和429个变异体进行了测试 实验结果表明:该方法是一种有效的边界测试点选取策略,可以克服测试的盲目性,降低测试成本,明显地提高故障覆盖程度 关键词 边界测试点;测试数据生成;RSDIM U ;变异体中图法分类号 T P311 5An Effective Strategy for Selecting Boundary Test PointsZhao Ruilian 1) Dong H ongx ia 1,2)1)(Department of Comp uter Science,Beij ing Univ ersity of Chemical T echnology Beij ing 100029)2)(State K ey L aboratory of Compu ter Scie nc e ,I nstitute of S o f tw are ,Chinese A cade my of S ciences,Beij ing 100080)Abstract By using the principle of stuck at fault diagnosis in com binational logic circuits,this paper pre sent a strategy to select boundary test points for software system,52test cases were developed according to the RSDIMU specification 2boundary test suites w ere designed by adopting boundary value analysis and robustness testing techniques 34RSDIMU program versions and 429mutants w ere tested by these test suites Experimental results show that the proposed strateg y is effective in softw are testing for conquering test blindness,reducing test cost and improving fault coverag eKey words boundary test point;test data generation;RSDIMU ;m utants 测试数据生成是软件测试的核心与关键[1 2]边界是特别容易出现故障的地方 美国陆军对其软件进行了仔细分析研究,发现有相当一部分故障是由边界值引起的 研究表明:针对边界附近的处理,设计专门的测试用例,常常可以取得较好的测试效果[3] 现有的边界值测试方法主要有边界值分析、健壮性测试、最坏情况测试和健壮最坏情况测试等几种,但这些方法或者认为软件失效是由一个故障的出现而引发,从而可能会遗漏一些常见的软件故障;或者因生成的测试用例数太多,测试成本太高,缺乏可操作性,在实际软件测试中很少使用 本文借鉴数字系统成熟的测试理论及故障诊断原理,提出了一种软件边界测试点选取策略,并开发了一个相应的测试数据自动生成工具 针对航天飞行器导航系统惯性测量单元(redundant strapped dow n inertial measurement unit,RSDIMU )的需求规范,生成了52个测试用例,同时采用边界值分析、健壮性测试等边界值测试方法设计了2组测试用例,对香港中文大学开发的34个版本的RSDIMU 程序和429个变异体进行了测试 在经过验收测试的34个版本的RSDIM U 程序中,用本文方法开发的52个边界测试用例,又发现了7个软件故障,并且检测到了所有429个变异体中的故障 与现有的几种边界测试方法比较,不仅生成的测试用例数少,测试成本低,而且具有较高的故障检测能力,可以从整体上提高软件测试的质量和效率1 常用的边界值测试方法人们从长期的测试经验得知,大量的故障往往发生在输入域或输出域的边界附近 边界值测试是一种常用的功能测试方法,主要包括以下4种[3]:1)边界值分析 利用输入变量的最小值min 、稍大于最小值min+、正常值nom 、稍小于最大值max-和最大值max 来设计测试用例,即通过使所有变量取正常值,只使一个变量分别取min,min+,nom,max-和max 对于一个含n 个输入变量的程序,边界值分析测试需要设计4n +1个测试用例 一个二输入变量程序的边界值分析测试点选取原则如图1a 所示图1 边界值测试方法2)健壮性测试 边界值分析的一种扩展,主要关注系统超过极值时的表现 例如,当物理量超过其最大值时会出现什么情况?如果是飞机机翼的仰角超过其最大值,则飞机可能失控;如果是公共电梯的负荷能力超过其最大值,则可能出现可怕的情形 所以,健壮性测试除了考虑输入变量的min,min+,nom,max-和max 之外,还要考虑极值外的值,即一个稍大于最大值的值max+和一个稍小于最小值的值min- 对于一个含有n 个输入变量的程序,健壮性测试需要设计6n +1个测试用例 一个二输入变量程序的健壮性测试点选取原则如图1b 所示3)最坏情况测试 使用边界值分析测试的5个元素min,min+,nom,max -和m ax 集合进行笛卡儿积 对于一个含有n 个输入变量的程序,最坏情况测试将产生5n个测试用例 显然,边界值分析测试用例是最坏情况测试用例的真子集 一个二输入变量程序的最坏情况测试点选取原则如图1c 所示4)健壮最坏情况测试 对要求高可靠性的系统,可采用健壮最坏情况测试,这种测试使用健壮性测试的7个元素m in -,m in,min+,nom ,max -,max 和max +集合进行笛卡儿积 对于一个含有n 个输入变量的程序,健壮最坏情况测试将产生7n 个测试用例 健壮性测试用例是健壮最坏情况测试用例的真子集 一个二输入变量程序的健壮最坏情况测试点选取原则如图1d 所示边界值分析和健壮性测试基于一种在软件可靠性理论中称为 单故障 的假设,这种假设认为,软件失效是由单个故障的发生引起的 有研究表明,20%~40%的软件故障是由某个系统参数引发的,而又有20%~40%的软件故障是由系统中某2个参数的相互作用而引发[4] 因此,根据边界值分析和健壮性测试方法设计的测试用例显然会遗漏一些常见的软件故障 最坏情况测试和健壮最坏情况测试是一种基于 多故障 假设的测试方法,它认为软件失效是由2个(或多个)故障同时发生引起的,但其测试成本很高,分别需要开发5n和7n个测试用例,可操作性差,常用在物理变量有大量的交互作用和软件失效代价极高的场合为克服现有边界测试数据生成方法的弱点,本文探讨一种新的更适用的边界测试点选取策略2 边界测试点选取策略假设被测软件系统有n 个输入变量,分别记作x 1,x 2,!,x n ,并假设这些变量是相互独立的,即某个变量的具体取值不会影响其他变量的取值,输出变量为y 1,y 2,!,y m ,实现功能F ,即F:(x 1,x 2,!,x n ∀y 1,y 2,!,y m ) 定义1 对于 x i (i =1,2,!,n),都有一对应的取值范围Dx i 程序所有输入变量x i (i =1,2,!,n )取值范围Dx i 之笛卡儿乘积,构成其定义域D [5],即D =Dx 1#Dx 2#!#Dx n ={(x 1,x 2,!,x n )| x 1∃Dx 1, x 2∃Dx 2,!, x n ∃Dx n };其中每一点x (x ∃D)称为程序的一个输入n 元输入变量(x 1,x 2,!,x n )表示一个输入向量,所有n 维输入向量的集合称为输入空间,记为E ,则域D 是输入空间E 的一个子集定义2 设输入空间E (x 1,x 2,!,x n )可以定义距离 如果对于域D 中的每一点x =(x 1,x 2,!,252计算机辅助设计与图形学学报2007年x n )都存在一个正数 ,使得|x i |% (i =1,2,!,n)成立,则称域D 是有界的 对于有界域D ,如果在点q (q ∃D)的任意小的邻域N (q )内,既有D 中的点,也有D 外的点,即存在点q &,q ∋(q ,满足q &∃N (q ))D 并且q ∋!N (q ))D ,则称点q 为域D 的边界点 所有域D 的边界点构成其边界定义3 域D 在x i (i =1,2,!,n)轴上的投影D |x i ={x i ∃X i |∀(x 01,!, xi-1,x i ,x 0i+1,!,x 0n )∃D}是一维空间X i 的子集,其最小 最大值是边界点,分别用x i min 和x i m ax 表示,则有x i min %x i %x i max如果用逻辑值0和1分别表示输入变量x i 的最小值和最大值,则有0%x i %1,即D &i ={0%x i %1},i =1,!,n ,则D &1#D &2#!#D &n =(0%x 1%1,0%x 2%1,!,0%x n %1)构成一个n 维立方体 从逻辑输入值考虑,被测软件系统的功能可以用一个n 输入的与门来表示,如图2所示图2 n 输入与门借助于数字系统成熟的测试理论及思想来指导软件测试数据生成,目前已有一些研究成果问世[6]类似于数字系统的组合逻辑电路和时序逻辑电路,软件系统也可分为组合软件和时序软件定义4 一个软件系统,如果它的输出只与一次操作输入有关,而与过去的输入无关,则称为组合软件;否则称为时序软件 实际应用中的许多软件属于组合软件,如U N IX 环境下的ls 命令可列出目录的内容并打印有关文件的信息,实现该命令的程序就是一个组合软件 当然,也有许多软件不是组合软件,而属于时序软件,如铁路车站联锁软件,一次开放信号的操作能否真正实现,还取决于当前站场的状态 本文主要针对组合软件进行测试数据生成方法的探讨,若无特别说明,所指软件系统即为组合软件系统固定型故障是一种常用的数字系统故障模型,主要是指组合逻辑电路中某一根信号线上信号的不可控性,即在系统运行过程中永远固定在某一个值上 定义5 数字系统中,如果信号固定在逻辑高电平上,则称为固定1故障;如果信号固定在逻辑低电平上,则称为固定0故障根据组合逻辑电路的故障诊断原理,对于一个n 输入的与门,为检测其输入端的故障可以用输入矢量(0,1,!,1),(1,0,1,!,1),!,(1,1,!,0,1)和(1,1,!,1,0)来测试,其中每个输入矢量还可检测出输出端的固定1故障 为了检测输出端的固定0故障,还需要增加一个输入矢量(1,1,!,1),则共需n +1个测试用例[7]一个含n 个输入变量(x 1,x 2,!,x n )的软件,如果变量x i ∃[x i min ,x i max ]为真,则测试输入应考虑x i 取最小 最大值,即分别取x i min 和x i max 如果x i ∃[x i mi n ,x i max ]为假,则测试输入应考虑x i 取最小 最大值之外的点,即分别取x i mi n - 和x i ma x + , 为一小偏移量( >0) 根据组合逻辑电路的故障诊断原理,对于n 维输入变量,测试输入可分别设计为(x 1max ,x 2max ,!,x n max )(x 1min - ,x 2max ,!,x n max )(x 1max + ,x 2max ,!,x n max )(x 1max ,x 2min - ,!,x n max )(x 1max ,x 2max + ,!,x n max )!(x 1max ,x 2max ,!,x n min - )(x 1max ,x 2max ,!,x n max + )对称地,有(x 1min ,x 2min ,!,x n min )(x 1min - ,x 2min ,!,x n min )(x 1max + ,x 2min ,!,x n min )(x 1min ,x 2min - ,!,x n min )(x 1min ,x 2max + ,!,x n min )!(x 1min ,x 2min ,!,x n min - )(x 1min ,x 2min ,!,x n max + )共4n +2个 仔细分析这4n +2个测试输入,都是在域D 的边界上或边界外取值 为对域D 内部的处理进行检测,需要再增加一些测试输入 本文重点探讨边界测试数据选取原则,故 取一很小的偏移量,并在域D 边界内侧选取两点,即(x 1min + ,x 2min + ,!,x n m i n + )和(x 1max - ,x 2max - ,!,x n m a x - ) 因此,新的边界测试点共需选取4n +4个 一个二输入变量程序的边界测试点选取原则如图3所示图3 新边界测试点选取原则显然,新的边界测试用例是健壮最坏情况测试用例的真子集,但其测试用例数远小于健壮最坏情况测试用例数7n2532期赵瑞莲等:一种有效的边界测试点选取策略根据测试点选取原则,我们开发了一个测试数据生成器,实现了4n+4个边界测试数据的自动生成,并对RSDIMU容错软件进行了测试分析3 RSDIMU容错软件的边界测试分析3 1 RSDIMU简介根据RSDIMU需求规范说明书,美国宇宙航行局组织4所大学开发了20个版本的RSDIM U程序,并组织航空工业界的专家学者们设计了1200个测试用例,对多版本软件系统的失效率和对软件可靠性的改善等问题进行了详细的分析研究[8] 随后,香港中文大学根据RSDIMU需求规范,按照软件开发的瀑布模型,开发了34个独立的RSDIM U 程序,并对其中的21个版本,根据单元测试、集成测试和验收测试阶段实际检测出的软件故障进行故障注入,形成了429个变异体,每个变异体含有一个程序开发过程中的实际故障[9] 在此基础上研究代码覆盖、变异覆盖以及版本间的相关性等问题[9 10] 表1所示为21个RSDIMU程序的特性以及每个程序版本所产生的变异体数 本文对这34个RSDIMU 程序和429个变异体进行边界测试分析表1 21个RSDIMU程序的特性编号版本号行数函数数目判定数变异体数01011628706062502022361378092103032331515481704041749396472405052623409602606072918359172007082154575851808092161566662009122559465513110151849477322911171768586551712182177696861013201807607821914223253681076231524213190706916264512451238221727145521622151829162743506241931191424827232032191941974202133202227100916平均2234 248 8766 8总数4293 2 RSDIMU边界测试用例的生成RSDIMU需求规范详细地描述了各输入变量的定义域,除去一些描述测量单元几何信息及调整参数的输入变量外,本文考虑RSDIM U系统涉及的主要输入变量linS td,linFailI n[8],raw Lin[8], disp layM ode和nsigTolerance,其定义域分别为[0, 65535],[0,1],[0,4095],[0,99]和[2,7],其中lin FailIn为布尔变量,其余皆为整型变量 布尔数组linFailI n[8]可以看成是一个整型变量,数组raw Lin[8]看成8个变量,则RSDIMU的输入变量数n=12 考虑到其变量皆为整型变量和布尔型变量,故小偏移量 取值为1依据上述信息,新的边界测试点选取策略需开发4n+4=52个测试用例 边界值分析和健壮性测试方法分别需要生成4n+1=49和6n+1=73个测试用例,最坏情况测试和健壮最坏情况测试方法则需分别产生5n=244140625和7n=138********个测试用例,其测试用例数目过大,缺乏可操作性3 3 测试结果分析针对RSDIMU需求规范,现有文献[9]提供的1200个验收测试用例(记为Test1200),根据边界值分析方法生成的49个测试用例(记为Test49),健壮性测试生成的73个测试用例(记为Test73)和用本文方法所开发的52个边界测试用例(记为Test52)共4组测试用例,对34个RSDIMU程序和429个变异体进行测试3 3 1 4组测试用例对34个RSDIMU程序的故障检测结果4组测试用例在通过Test1200验收测试的34个RSDIMU程序中共检测到8个软件故障,发现软件故障的情况如表2所示表2 4组测试用例发现的软件故障测试用例集所发现的故障编号T est1200无T est491,4,5,6T est731,2,3,4,5,6,8T est521,2,3,4,5,7,8根据文献[9]的分类方法,8个软件故障的所属类别及严重程度如表3所示 故障严重程度共分4级,A级故障最严重,B级次之,D级最弱254计算机辅助设计与图形学学报2007年表3 8个软件故障的类别及严重程度故障号版本号模块名称故障类型严重程度113Calilmate赋值 初始化A213Scale校验B313,30,33Scale校验B415,16Fai lure Detecti on算法 方法B516,18Fai lure Detecti on算法 方法B617,18Fai lure Detecti on算法 方法B718Fai lure Detecti on界面 消息B820Fai lure Detecti on算法 方法B8个软件故障的具体描述及简单原因分析如下:故障1 版本13的transin c文件第63行语句inverse[j][i] =det,通过DEBU G分析发现:变量det在输入变量linStd=0时被置为0,导致运行结果与期望结果不同 此语句应为:if(fabs(det)> (1E-6))inverse[j][i] =det故障2 版本13的test c文件第64行有如下代码段:for(i=0;i<8;i++){if(inp rawLin[i]>65536)inp rawL in[i]=inp r aw L in[i]-65536;else if(inp off Raw[j][i]>32768)inp r aw L in[i]=inp raw L in[i]-32768;else if(inp raw L in[i]>16384)inp r aw L in[i]=inp raw L in[i]-16384;!}显然,第2个条件语句if(inp o ff Raw[j][i]> 32768)是一个拷贝错误 inp o f f Raw[j][i]是一个50#8的二维数组,此时j=50,数组超界, inp off Raw[j][i]取变量linStd的值,条件if(inp off Raw[j][i]>32768)成立,故运行结果出错故障3 在RSDIMU需求规范中,要求对12位(二进制)传感器测量值进行处理 因此版本13的test c文件第64行、版本30的s c文件第15行及版本33的Scale c文件第63行的if语句中, >应为 >=故障4 根据RSDIMU需求规范,输入变量lin Std直接参加运算,因此版本15的detectIsolate c文件第34行linStd Volt=(inp ut Var->linS td% 4096) 409 6和版本16的Edge Vector Test c文件第105行temp=inp utVar linStd%4096中, %4096应去掉故障5 当输入变量linS td=0时,测量单元的4个面皆失效,系统应处于非运行状态 但版本16的Edge Vector Test c文件第178行Bad Face()函数只能检测出第一个失效面;版本18的failDe tect c文件第423行f indFailFace()函数中没有对错面的个数进行统计,以致得出错误的系统状态故障6 当输入变量linFailI n[8]不为全0和全1时,程序执行语句edgediff[i]=thr eshold*2 (0%i%5,threshold>0)来识别系统启动前已失效的面;但当输入变量linStd=0时,threshold=0,导致edgedif f[i]=0,结果出错,故应将版本17的failDetect c文件第220行条件语句中的 >改为 >=;版本18的failDetect c文件第192行语句return(edgediff>threshold)中的 >改为 >= 故障7 版本18的failDetect c文件中的f ind FailSensor()函数第610行为下列语句段:if(ex ceedThreshold(fabs(accA[X][0]-linOut[sensor1]),threshold)&&(!linFailIn [sensor1]))result=sensor1;if(ex ceedThreshold(fabs(accA[Y][0]-linOut[sensor2]),threshold)&&(!linFailIn [sensor2]))result=sensor2;return(result);图4 4个测试用例集对变异体中故障的覆盖情况当sensor1和sensor2都失效时,两者的值都应返回,但此时函数只返回sensor2的值,因此结果出错故障8 版本20的evt c文件第145行函数all f aces ok()通过比较边向量关系和变量thresh old的值进行失效面的判断,系统中有6个边向量关系,但函数all f aces ok()只考虑了其中4个,结果出错3 3 2 4组测试用例对429个变异体的检测结果4组测试用例对429个变异体的故障检测情况如图4所示,4组测试用例发现的故障总数分别为303,249,319和429,其故障检测率分别为70 6%, 58%,74 4%和100%2552期赵瑞莲等:一种有效的边界测试点选取策略由图4可知,Test52检测到了所有变异体中的故障 Test52是健壮最坏情况测试用例的真子集,故对于12个变量的健壮最坏情况测试用例也能发现所有429个变异体中的故障,但其测试用例数为712=138********,远大于523 3 3 测试分析与比较边界值分析、健壮性测试、最坏情况测试、健壮最坏情况测试和本文方法分别需要设计4n+1,6n +1,5n,7n和4n+4个测试用例,其中最坏情况测试和健壮最坏情况测试的测试用例数高达5n和7n,当输入变量较多时,缺乏可操作性边界值分析、健壮性测试和本文边界测试用例集在通过T est1200验收测试的34个版本的RS DIM U程序中,分别又发现了4,7和7个软件故障 分析发现故障的测试用例可以看出,输入变量取min,min+1,nom,max,max-1和max+1的数目分别为4,1,1,1,1和5 对于RSDIMU程序,测试输入取max+1值时发现软件故障的概率最高,这与整型数在内存中表示有关 若用n位二进制表示整型数,其最大值%2n-1,则max+1是一个超过极值的特殊值,发现故障的能力较强 针对RS DIM U需求规范设计的1200个验收测试用例(800个功能测试用例和400个随机测试用例)并没有对输入域边界附近赋予足够的关注,因此遗漏了一些软件故障 可见,边界值测试确实是一种有效的测试方法4组测试用例集在429个变异体中发现的故障总数分别为303,249,319和429 综合考虑这4组测试用例的个数、可操作性、执行时间和故障检测效果,显而易见,本文方法测试效果最好4 结论及进一步的工作软件测试是保证软件质量、提高软件可靠性的主要技术手段 边界是特别容易出现故障的地方,对输入域边界附近赋予更多的关注,设计专门的测试用例,以检测输入域边界附近的处理,可有效地提高故障覆盖率,取得良好的测试效果本文提出的边界测试点选取策略根据输入变量的边界值设计测试用例,测试点数只与程序输入变量的维数有关,与路径数无关,仅为4n+4个,测试成本较低 针对RSDIMU容错软件的需求规范,我们开发出52个边界测试用例,对34个版本的RSDIMU程序和429个变异体进行测试 在经过验收测试的34个版本的RSDIMU程序中又发现了7个软件故障,并且检测到了所有429个变异体中的故障 实验结果表明:本文提出的边界测试点选取策略是一种非常有效的方法,不仅可以克服测试的盲目性,降低测试成本,而且可以明显地提高故障覆盖率,可操作性强 进一步的工作是探讨一种基于程序结构的关键变量自动确定方法,以提高测试数据的生成效率致谢 香港中文大学计算机科学与工程学系M ichael R Lyu教授和Cai博士为本文研究提供了诸多支持与帮助,北京化工大学计算机科学系张悦同学对本文研究做了大量的分析实验工作,在此表示衷心的感谢!参 考 文 献[1]Alshraideh M,Bottaci L Automatic softw are test data generation for string data using heuristic search with domain specificoperators[C] Proceedi ngs of the3rd W orkshop on UK Software T esting Research,Sheffi eld,2005:137-149[2]H uang Guangyan,Li Xi aow ei Vari able integrity testing of software[J] Journal of Com puter Aided Design&ComputerGraphics,2004,16(11):1584-1589(in Chinese)(黄光燕,李晓维 软件的变量完整性测试方法[J] 计算机辅助设计与图形学学报,2004,16(11):1584-1589)[3]Zhao Ruilian Softw are testing[M] Beijing:Higher EducationPress,2004(in Chinese)(赵瑞莲 软件测试[M] 北京:高等教育出版社,2004) [4]Kuhn D R,Gallo A M S oftw are fault interactions and implications for softw are tes ting[J] IEEE T ransactions on Softw areEngineering,2004,30(6):418-421[5]Korel B Automated softw are test data generation[J] IEEETransactions on Softw are Engineering,1990,16(8):870-879 [6]Xu S hi yi Build in self test for softw are[C] Proceedings of theAsian Test Symposium,Xi∗an,2003:220-223[7]Yang S hiyuan Fault di agnosis and reliability design of digitalsystem[M] Beijing:Tsinghua U niversity Press,2000(in Chinese)(杨士元 数字系统的故障诊断与可靠性设计[M] 北京:清华大学出版社,2000)[8]Eckhardt D E,Caglavan A K,et al An experimental evaluation of softw are redundancy as a strategy for improving reliabi lity[R] Hampton:Langley Research Center,1990[9]Lyu M ichael R,Huang Zubin,Sze Sam K S,et al An empirical study on testing and fault tolerance for softw are reliability engineering[C] Proceedings of the14th International Symposi um on Softw are Reliability Engi n eering,Denver,2003:119-130[10]Cai Xia,Lyu M ichael R An empirical study on reliability modeling for diverse softw are sys tems[C] Proceedings of the15thInternati onal Symposium on Softw are Reliabi lity Engineering,Rennes and Sai nt M alo,2004:125-136256计算机辅助设计与图形学学报2007年。