一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

测试用例生成装置、测试用例生成方法和测试用例生成程序与流程

2021-10-30 03:36:00 来源:中国专利 TAG:测试 生成 装置 程序 方法


1.本发明涉及测试用例生成装置、测试用例生成方法和测试用例生成程序。尤其涉及自动生成嵌入式软件的测试用例的测试用例生成装置、测试用例生成方法和测试用例生成程序。


背景技术:

2.在汽车和工业机器人这样的控制设备中,搭载有用于进行各种控制的嵌入式实时软件。如果这样的软件误动作,将导致危及生命的事故。因此,需要在出厂前实施充分的测试。例如,在面向汽车的功能安全标准iso26262和面向飞机的功能安全标准do

178c中,要求按照每个测试工序确定应采用的测试方法这样的测试要件,按照这些测试要件来实施测试。作为单体测试的测试要件的例子,根据等价划分或边界值分析来生成测试用例,由此以包含要求的方式执行测试。此外,同时要求该测试用例包含测试对象软件的源代码构造。作为源代码构造,以记述有处理的各命令行或if语句和for语句这样的分支部位为基准。使用的基准根据测试对象软件而不同。将该基准称作构造包含基准。在将命令行作为构造包含基准的情况下,测量命令包含率,该命令包含率表示通过测试用例执行了测试对象软件中包括的多少代码。在将if语句这样的分支作为构造包含基准的情况下,测量分支包含率,该分支包含率表示是否执行了代码中包括的全部分支目的地。如果命令包含率或分支包含率足够高,则判断为测试充分。
3.在嵌入式实时软件中,通常具有初始状态、执行状态和结束准备状态这样的多个状态。在这样的软件中,仅输入1次测试用例无法包含源代码构造。有时需要输入多次测试用例。在此,将测试对象软件的执行单位称作步。例如,输入1次测试用例为1步。
4.近年来,嵌入式实时软件的源代码变得大规模且复杂化。因此,手动生成满足软件的要求规格并包含源代码构造的涉及多步的测试用例的工时增加成为问题。
5.在专利文献1中公开有使用有限模型检查自动生成单体测试用的多步的测试用例以应对工时增加的方法。
6.在专利文献2中,在用于分析脆弱性的输入值生成中,除了使用符号执行的方法以外,还公开有使用白盒模糊测试(white

box fuzzing)这样的非符号执行的方法。
7.在专利文献3中公开有如下方法:在进行每个模块的基于符号执行的路径分析之后,使用各模块的信息求多个模块的合成执行路径。
8.现有技术文献
9.专利文献
10.专利文献1:日本特开2014

063415号公报
11.专利文献2:日本特开2016

167262号公报
12.专利文献3:日本特开2017

204164号公报


技术实现要素:

13.发明要解决的课题
14.在专利文献1的方法中,使用有限模型检査对是否能够生成从第1次起至达到预先设定的最大步数为止依次满足测试要件的测试用例进行分析。而且,在存在未包含的要求或分支的情况下,增加步数而反复进行测试用例生成用的分析。在该方法中,存在如下课题:当步数增加时有限模型检查对象的状态数量增加,因此,测试用例生成时间有可能未收敛于实用时间内。
15.在专利文献2的方法中,组合有限模型检查这样的基于符号执行的测试用例生成和白盒模糊测试这样的基于非符号执行的测试用例生成双方。由此,能够在使用基于高速的非符号执行的生成方法尽可能地包含包含对象的基础上,使用基于可靠的符号执行的生成方法包含残留的包含对象,削减全部测试用例生成时间。但是,由于在步数增加的情况下进行步数的分析和生成,因此,残留有测试用例生成时间随着步数的增加而增加的课题。
16.在专利文献3的方法中,在按照每步提取出执行路径之后,将跨步保存的变量的信息关联起来,由此缩短测试用例生成时的涉及全部步骤的执行路径的提取时间。但是,作为用于生成测试用例的分析对象的执行路径的尺寸增加与步数相应的量,因此,与其他方法同样,测试用例生成时间有可能未收敛于实用时间内。
17.这样,以往的方法无法应用于将如嵌入式实时软件那样输入在步间变化的软件作为对象的涉及多步的测试用例的生成。
18.本发明的目的在于,削减涉及多步的测试用例的生成所需的时间。
19.用于解决课题的手段
20.本发明的测试用例生成装置生成被输入到每次被输入值时执行1步处理的程序的测试用例,该测试用例由被输入到依次执行的i(i为2以上的整数)步处理的各个处理的测试用例输入个数的值构成,其中,该测试用例生成装置具有:
21.存储器,其存储数据;
22.生成控制部,在所述存储器存储有作为从1步到(i

1)步的测试用例的第(i

1)测试用例的情况下,该生成控制部选择使用所述第(i

1)测试用例来生成作为从1步到i步的测试用例的第i测试用例的第1生成方式;以及
23.测试生成部,其按照所述第1生成方式,在保持着基于所述第(i

1)测试用例的执行的(i

1)步的结束时刻的内部状态的状态下,生成执行第i步的测试用例,通过连结所述第(i

1)测试用例和所述第i步的测试用例,生成所述第i测试用例并存储到所述存储器。
24.发明效果
25.在本发明的测试用例生成装置中,即使在步数增加的情况下,也首先仅执行1步的基于非符号执行或符号执行的测试用例生成。因此,能够削减涉及多步的基于非符号执行或符号执行的测试用例的生成所需的时间。
附图说明
26.图1是示出实施方式1的测试用例生成装置的结构的框图。
27.图2是示出实施方式1的测试用例生成装置的动作的流程图。
28.图3是示出实施方式1的测试用例生成装置的动作的流程图。
29.图4是示出实施方式1的测试用例生成装置的动作的流程图。
30.图5是示出实施方式1的测试对象软件的程序的图。
31.图6是示出实施方式1的测试对象软件的程序中包括的包含部位的图。
32.图7是示出用于生成实施方式1的测试用例生成装置的函数生成部生成的1步的测试用例的测试用例生成用函数的图。
33.图8是示出用于使用实施方式1的测试用例生成装置的函数生成部生成的1步的测试用例来生成第2步的测试用例的测试用例生成用函数的图。
34.图9是示出用于生成实施方式1的测试用例生成装置的函数生成部生成的2步的测试用例的测试用例生成用函数的图。
35.图10是示出用于使用实施方式1的测试用例生成装置的函数生成部生成的2步的测试用例来生成第3步的测试用例的测试用例生成用函数的图。
36.图11是示出实施方式1的变形例的测试用例生成装置的结构的框图。
具体实施方式
37.以下,使用附图来说明本发明的实施方式。另外,在各图中,对相同或相应的部分标注有相同标号。在实施方式的说明中,对相同或相应的部分适当省略或简化说明。
38.实施方式1
39.***结构的说明***
40.参照图1,说明本实施方式的测试用例生成装置100的结构。
41.测试用例生成装置100是计算机。测试用例生成装置100具有处理器910,并且具有存储器920和输入输出装置930这样的其他硬件。处理器910经由信号线而与其他硬件连接,对这些其他硬件进行控制。
42.作为功能要素,测试用例生成装置100具有程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160。另外,将非符号生成部150和符号生成部160也称作测试生成部170。各功能要素通过软件来实现。
43.处理器910是执行测试用例生成程序的装置。测试用例生成程序是实现程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的功能的程序。处理器910例如是cpu。“cpu”是central processing unit(中央处理单元)的缩写。
44.存储器920是存储测试用例生成程序的装置。存储器920例如是ram、闪存或它们的组合。“ram”是random access memory(随机存取存储器)的缩写。存储器920还存储有测试对象软件的程序、测试对象软件的规格信息以及生成的测试用例这样的信息。
45.输入输出装置930与被用户操作以向测试用例生成程序输入数据的输入设备和将从测试用例生成程序输出的数据显示到画面的显示器连接。输入设备例如是鼠标、键盘、触摸面板或者它们中的若干个或全部的组合。显示器例如是lcd。“lcd”是liquid crystal display(液晶显示器)的缩写。显示器特别用于显示测试生成部170生成的测试用例。
46.测试用例生成程序由处理器910从存储器920读入,并由处理器910执行。存储器920不仅存储有测试用例生成程序,还存储有os。“os”是operating system(操作系统)的缩写。处理器910在执行os的同时执行测试用例生成程序。另外,测试用例生成程序的一部分
或全部也可以被组入到os。
47.测试用例生成程序和os也可以存储到辅助存储装置。辅助存储装置例如是hdd、闪存或它们的组合。“hdd”是hard disk drive(硬盘驱动器)的缩写。在测试用例生成程序和os存储到辅助存储装置的情况下,被加载到存储器920并由处理器910执行。
48.测试用例生成装置100也可以具有代替处理器910的多个处理器910。这些多个处理器910分担执行测试用例生成程序。各个处理器910例如是cpu。
49.被测试用例生成程序利用、处理或输出的数据、信息、信号值和变量值存储到存储器920、辅助存储装置或处理器910内的寄存器或者高速缓冲存储器。
50.也可以将程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150、符号生成部160和测试生成部170的各部的“部”改写成“处理”、“过程”或者“工序”。此外,也可以将程序取得处理、包含对象提取处理、生成控制处理、函数生成处理、非符号生成处理、符号生成处理和测试生成处理的“处理”改写成“程序”、“程序产品”或“记录有程序的计算机能读取的记录介质”。
51.测试用例生成程序使计算机执行将上述各部的“部”改写成“处理”、“过程”或者“工序”的各处理、各过程或者各工序。此外,测试用例生成方法是通过测试用例生成装置100执行测试用例生成程序来进行的方法。
52.测试用例生成程序也可以存储到计算机能读取的记录介质来提供。此外,测试用例生成程序也可以作为程序产品来提供。
53.测试用例生成装置100可以由1台计算机构成,也可以由多台计算机构成。在由多台计算机构成测试用例生成装置100的情况下,程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的功能分散到各计算机中来实现。
54.***功能的说明***
55.在此,参照图1来说明本实施方式的测试用例生成装置100的动作概要。测试用例生成装置100的动作相当于本实施方式的测试用例生成方法。
56.测试用例生成装置100生成被输入到每次被输入值时执行1步处理的程序20的测试用例23。测试用例23由被输入到依次执行的i(i为2以上的整数)步处理的各个处理的测试用例输入个数的值构成。另外,即使测试用例仅是1步(即i=1),也能够应用本实施方式。
57.程序取得部110经由存储器920或输入输出装置930从外部读入测试对象软件的程序20、规格信息和最大步数的信息。
58.包含部位提取部120从程序20的源代码中提取通过测试而包含的包含部位21。
59.生成控制部130判定存储器920是否存储有作为从1步到(i

1)步的测试用例的第(i

1)测试用例。在存储有第(i

1)测试用例的情况下,生成控制部130选择使用第(i

1)测试用例来生成作为从1步到i步的测试用例的第i测试用例的第1生成方式m1。此外,在存储器920没有存储第(i

1)测试用例的情况下,生成控制部130选择生成从1步到i步的各个测试用例的第2生成方式m2。
60.这样,生成控制部130判定测试用例生成对象步骤,对选择该步骤中的测试用例生成方式这样的测试用例生成过程进行控制。
61.函数生成部140根据生成控制部130决定的测试用例的生成方式,保持步间的状态
并生成调用测试对象软件的程序的测试用例生成用函数22。函数生成部140也称作测试用例生成用函数生成部。函数生成部140以第i测试用例包含没有被第1测试用例~第(i

1)测试用例包含的包含部位即未包含部位的方式,生成包括测试用例生成条件和程序的调用的测试用例生成用函数22。
62.函数生成部140按照第1生成方式m1,使用第(i

1)测试用例来生成测试用例生成用函数22,该测试用例生成用函数22生成作为从1步到i步的测试用例的第i测试用例。
63.此外,函数生成部140按照第2生成方式m2,在保持着基于第(i

1)测试用例的执行的(i

1)步的结束时刻的内部状态的状态下,生成测试用例生成用函数22,该测试用例生成用函数22分别生成从第1步到第i步的测试用例。
64.在这里的说明中,“i步的测试用例”或“在i步中生成的测试用例”是指从1步到i步的i步测试用例输入值。此外,将从1步到i步的i步测试用例输入值也称作第i测试用例。同样,从1步到(i

1)步的测试用例输入值也称作第(i

1)测试用例。
65.此外,“第i步的测试用例”是指以i步为对象的1步测试用例输入值。
66.测试生成部170按照第1生成方式m1,在保持着基于第(i

1)测试用例的执行的(i

1)步的结束时刻的内部状态的状态下,生成执行第i步的测试用例。然后,测试生成部170通过连结第(i

1)测试用例和第i步的测试用例,生成第i测试用例并存储到存储器920。或者,测试生成部170按照第2生成方式m2,使用测试用例生成用函数来生成从第1步到第i步的各个测试用例。然后,测试生成部170通过连结从第1步到第i步的测试用例,生成第i测试用例并存储到存储器920。这样,测试生成部170使用测试用例生成用函数21来生成第i测试用例。
67.此外,测试生成部170具有:非符号生成部150,其通过非符号执行来生成测试用例;以及符号生成部,其通过符号执行来生成测试用例。测试生成部170在选择第1生成方式m1时,通过非符号生成部150生成第i测试用例。然后,测试生成部170通过执行使用了由非符号生成部150生成的第i测试用例的测试,判定是否存在未包含部位。在存在未包含部位的情况下,测试生成部170以包含未包含部位中的至少任意一个的方式,由符号生成部160生成第i测试用例。然后,测试生成部170将由符号生成部160生成的第i测试用例存储到存储器920。此外,测试生成部170在按照第1生成方式m1利用第(i

1)测试用例生成了第i测试用例的情况下,舍弃所利用的第(i

1)测试用例。
68.非符号生成部150根据程序取得部110读入的规格信息,随机地生成作为测试用例候选的输入值。然后,函数生成部140使用生成的函数保持步间的状态并提取包含包含对象的输入并决定为测试用例。非符号生成部150也称作基于非符号执行的测试生成部。
69.此外,符号生成部160根据程序取得部110读入的规格信息,使用函数生成部140生成的函数保持步间的状态并通过有限模型检查方法生成测试用例。符号生成部160也称作基于符号执行的测试生成部。
70.***动作的说明***
71.接着,参照图2~图4说明本实施方式的测试用例生成装置100的动作的详细内容。
72.在步骤s1中,程序取得部110读入测试对象软件的程序20、规格信息和最大步数的信息。然后,进入步骤s2。规格信息和最大步数能够由使用者根据软件规格手动设定。此外,规格信息和最大步数能够根据以确定的形式记述的规格来自动设定。规格信息包括测试对
象软件的程序20的输入变量的信息。
73.在步骤s2中,包含部位提取部120按照要使用的包含基准,提取测试对象软件的程序中包括的包含部位,设这些包含部位为未包含而进入步骤s3。在执行测试时使用分支作为包含基准而测量分支包含率的情况下,包含部位提取部120提取分支部位。例如,如果是if语句,则提取判定为“真”的情况和判定为“假”的情况这2个部位作为包含对象。另外,步骤s2与步骤s3之间没有依存关系,因此,能够调换执行顺序或并行地执行。
74.在步骤s3中,生成控制部130将变量i设定为1,进入步骤s4。
75.在步骤s4中,生成控制部130判定变量i的值是否比最大步数大或者是否存在包含部位。在变量i的值比最大步数大的情况下,测试用例生成对象的步骤结束,因此,生成控制部130结束处理。如果变量i的值为最大步数以下但不存在未包含的包含部位,则生成控制部130判定为不需要测试用例生成,结束处理。在除此以外的情况下,进入步骤s5。
76.在步骤s5中,生成控制部130确认是否存在(i

1)步中生成的测试用例。在存在的情况下,进入步骤s6。在不存在的情况下,进入步骤s17。
77.在步骤s6中,非符号生成部150连结在(i

1)步中生成的测试用例和根据在步骤s1中读入的规格信息而随机地生成的第i步的测试用例候选。然后,非符号生成部150将连结而成的测试用例设为i步的测试用例候选,进入步骤s7。
78.在步骤s7中,函数生成部140将非符号生成部150生成的i步的测试用例候选作为输入,生成执行i步的测试用例生成用函数。该函数是用于保持各步结束时的内部状态并执行i步的测试对象软件的程序的下一步的函数。
79.在步骤s8中,非符号生成部150将在步骤s6中生成的i步的测试用例候选作为输入,保持步间的状态并执行i步的测试对象软件的程序。然后,非符号生成部150确认是否包含未包含的包含部位。在包含有未包含的包含部位的情况下,非符号生成部150将该i步的测试用例候选作为i步的测试用例存储到存储器920,进入步骤s9。
80.在步骤s9中,非符号生成部150从包含部位中排除在步骤s8中决定的i步的测试用例已包含的部位,进入步骤s10。
81.在步骤s10中,生成控制部130判定是否存在未包含的包含部位。如果不存在未包含的包含部位,则生成控制部130判断为不需要测试用例生成,结束处理。在除此以外的情况下,进入步骤s11。
82.在步骤s11中,函数生成部140取得在(i

1)步中生成的测试用例,作为测试对象软件的程序的从1步到(i

1)步的输入。然后,函数生成部140使用在(i

1)步中生成的测试用例,生成用于通过有限模型检查求出包含未包含的包含部位的第i步的测试用例的测试用例生成用函数,进入步骤s12。
83.在步骤s12中,符号生成部160使用在步骤s11中生成的测试用例生成用函数,保持步间的状态并执行有限模型检查,试行生成第i步的测试用例,进入步骤s13。
84.在步骤s13中,符号生成部160在步骤s12中生成了测试用例的情况下,连结在步骤s11中使用的(i

1)步中生成的测试用例和在步骤s12中生成的第i步的测试用例。然后,符号生成部160将连结而成的测试用例作为i步的测试用例存储到存储器920,进入步骤s14。
85.在步骤s14中,符号生成部160从包含部位中排除由在步骤s12中生成的测试用例已包含的部位,进入步骤s15。
86.在步骤s15中,生成控制部130在步骤s8或步骤s13中将i步的测试用例存储到存储器920的情况下,从存储器920中排除该测试用例的生成中使用的(i

1)步的测试用例。
87.在步骤s16中,生成控制部130判定是否存在包含部位。如果不存在未包含的包含部位,则生成控制部130判断为不需要测试用例生成,结束处理。在除此以外的情况下,进入步骤s17。
88.在步骤s17中,非符号生成部150根据在步骤s1中读入的规格信息,随机地生成i步的测试用例候选,进入步骤s18。
89.在步骤s18中,函数生成部140取得非符号生成部150生成的i步的测试用例候选。然后,函数生成部140生成用于保持各步结束时的内部状态并执行i步的测试对象软件的程序的下一步的测试用例生成用函数。
90.在步骤s19中,非符号生成部150取得在步骤s17中生成的i步的测试用例候选。非符号生成部150将i步的测试用例候选作为输入,保持步间的状态并执行i步的测试对象软件的程序,确认是否包含未包含的包含部位。在包含有未包含的包含部位的情况下,将该i步的测试用例候选作为i步的测试用例存储到存储器920,进入步骤s20。
91.在步骤s20中,非符号生成部150从包含部位中排除在步骤s19中决定的i步的测试用例已包含的部位,进入步骤s21。
92.在步骤s21中,生成控制部130判定是否存在包含部位。如果不存在未包含的包含部位,则生成控制部130判断为不需要测试用例生成,结束处理。在除此以外的情况下,进入步骤s22。
93.在步骤s22中,函数生成部140生成用于通过有限模型检查求出包含测试对象软件的程序的未包含的包含对象的i步的测试用例的测试用例生成用函数,进入步骤s23。
94.在步骤s23中,符号生成部160使用在步骤s22中生成的测试用例生成用函数,保持步间的状态并执行有限模型检查,试行生成i步的测试用例,进入步骤s24。
95.在步骤s24中,符号生成部160在步骤s23中生成了测试用例的情况下,将该测试用例作为i步的测试用例存储到存储器920,进入步骤s25。
96.在步骤s25中,符号生成部160从包含部位中排除由在步骤s23中生成的测试用例包含的部位,进入步骤s26。
97.在步骤s26中,生成控制部130将变量i加1,进入步骤s4。
98.在以上的测试用例生成处理中,步骤s6~步骤s15的处理是在存在第(i

1)测试用例的情况下使用第(i

1)测试用例来生成第i测试用例的第1生成方式m1的例子。
99.步骤s6~步骤s9的处理是通过非符号执行来生成第i测试用例的处理。步骤s11~步骤s15的处理是通过在步骤s6~步骤s9的处理中也具有未包含部位的情况下执行的符号执行来生成第i测试用例的处理。
100.此外,步骤s17~步骤s25的处理是在不存在第(i

1)测试用例的情况下通过生成从1步到i步的各个测试用例来生成第i测试用例的第2生成方式m2的例子。
101.步骤s17~步骤s20的处理是通过非符号执行生成第i测试用例的处理。步骤s22~步骤s25的处理是通过在步骤s17~步骤s20的处理中也具有未包含部位的情况下执行的符号执行来生成第i测试用例的处理。
102.此外,步骤s6~步骤s26的一系列处理为按照第1生成方式在使用第(i

1)测试用
例而生成的第i测试用例中也具有未包含部位的情况下的处理。此时,从步骤s17起成为按照第2生成方式生成全部步的测试用例并再次生成第i测试用例的处理。
103.在存在多个在(i

1)步中生成的测试用例的情况下,针对在(i

1)步中生成的测试用例分别进行从步骤s7~步骤s15。这些步骤也可以依次进行或者并列进行。此外,当使用在(i

1)步中生成的多个测试用例而生成的多个i步的测试用例仅包含相同的包含部位的情况下,也可以将其中任意一个作为i步的测试用例存储到存储器920。
104.非符号生成部150也可以针对1个(i

1)步的测试用例生成多个第i步的测试用例候选,作为多个i步的测试用例候选。
105.生成控制部130也可以在预先判断出能够在哪个步骤中包含包含部位之后,执行步骤s5~步骤s25。例如,在步骤s4与步骤s5之间,使用其他方法提取在步骤s2中提取出的包含部位中的在i步中能够包含的包含部位。然后,在步骤s10、步骤s16和步骤s21中,也可以判断是否没有在该i步中能够包含的包含部位中的未包含部位。
106.在本实施方式中,符号生成部160使用有限模型检查来试行生成测试用例。但是,符号生成部160也可以使用协同测试这样的基于其他符号执行的测试用例生成方法。
107.在本实施方式中,非符号生成部150随机地生成值作为测试用例候选。但是,非符号生成部150也可以使用遗传算法或其他机器学习这样的除了符号执行以外的测试用例生成方法。此外,该生成方法也可以使用(i

1)步的测试用例的值。
108.接着,使用具体例对测试用例生成装置100的动作进行说明。
109.图5是示出本实施方式1的测试对象软件的程序20的一部分的图。在以下的例子中,使用图5所示的测试对象软件的程序的一部分。而且,使用分支包含作为执行测试时的构造包含基准。此外,在以下的说明中,括号内的步骤与图2~图4的步骤对应。
110.程序取得部110读入测试对象软件的程序、规格信息和最大步数(步骤s1)。在本例子中,仅读入1个函数func,但也可以是多个函数或多个文件的集合。规格信息包括测试对象软件的程序的输入变量siga的信息。最大步数设定为4。输入变量的数量取决于测试对象软件的程序,也可以是多个。
111.当读入这些信息时,包含部位提取部120从测试对象软件的程序中搜索各if语句的“真”和“假”的分支作为应包含的分支部位而提取总计7个部位(步骤s2)。而且,设包含部位提取部120未包含提取出的部位。图6用p1~p7表示针对图5所示的程序应包含的分支部位。
112.生成控制部130将变量i设定为1(步骤s3)。然后,变量i的值是比最大步数4小的1,并且包含部位p1~p7为未包含,因此,判断为需要生成测试用例(步骤s4)。接着,生成控制部130确认是否存在之前的步中生成的测试用例。由于在第1步中不存在之前的步,因此判断为无测试用例(步骤s5)。
113.非符号生成部150根据规格信息针对输入变量siga生成随机的值50作为1步的测试用例候选(步骤s17)。
114.函数生成部140将作为测试用例候选的值50作为siga的输入,生成执行1步的测试对象软件的程序的测试用例生成用函数(步骤s18)。
115.非符号生成部150执行测试用例生成用函数,确认是否包含未包含的包含部位(步骤s19)。其结果是,由于包含p1、p7,因此,将50作为1步的测试用例存储到存储器920。然后,
从包含部位中排除已包含的包含部位p1和p7(步骤s20)。
116.由于存在p2~p6作为包含部位,因此,生成控制部130进入下一处理(步骤s21)。
117.函数生成部140生成用于通过有限模型检查求出包含测试对象软件的程序的未包含的包含部位21的1步的测试用例的测试用例生成用函数(步骤s22)。
118.图7是生成的测试用例生成用函数22的例子。
119.符号生成部160使用图7的函数执行有限模型检查,试行生成1步的测试用例(步骤s23)。在此,由于不存在第1步中能够包含的包含部位,因此,没有生成新的1步的测试用例(步骤s24、s25)。
120.接着,生成控制部130进入下一步骤i=2(步骤s26)。然后,确认依然未达到最大步数而存在未包含的分支p2~p6。因此,生成控制部130确认是否存在在1步中生成的测试用例。在此,由于存在50作为在1步中生成的测试用例,因此,进入利用该在1步中生成的测试用例的测试用例生成(步骤s5)。
121.非符号生成部150通过非符号执行将第2步的测试用例候选随机地生成为值50(步骤s6)。非符号生成部150使用1步的测试用例50,将输入变量siga的第1步的值设为50,连结作为第2步的测试用例候选的值50而设为2步的测试用例候选(50、50)。
122.函数生成部140生成将测试用例候选(50、50)作为siga的输入来执行2步的测试对象软件的程序的测试用例生成用函数(步骤s7)。
123.非符号生成部150以使用测试用例生成用函数在执行完成1步时保持状态并执行第2步的方式保持步间的状态并执行。然后,非符号生成部150确认是否包含未包含的包含部位p2~p6(步骤s8)。其结果是,在第2步中,值为50并且包含包含部位p2,因此,作为2步的测试用例将(50、50)存储到存储器920,并且从包含部位中排除p2(步骤s9)。
124.由于存在p3~p6作为包含部位,因此,生成控制部130进入下一处理(步骤s10)。
125.函数生成部140使用1步的测试用例的值50作为第1步的测试用例,生成用于通过有限模型检查求出包含未包含的包含部位的第2步的测试用例的测试用例生成用函数(步骤s11)。
126.图8是生成的测试用例生成用函数22的例子。
127.符号生成部160使用图8的函数以保持第1步的状态并检查2步的方式执行有限模型检查,试行生成第2步的测试用例(步骤s12)。其结果是,生成如包含包含部位p3那样的小于10的值(例如0),作为第2步的测试用例即第2步的输入变量siga的值。因此,符号生成部160将(50、0)作为2步的测试用例存储到存储器920,并且从包含部位中排除p3(步骤s13、s14)。
128.生成控制部130从存储器中排除2步的测试用例的生成中使用的1步的测试用例50(步骤s15)。其结果是,存储器920上仅存在2步的测试用例(50、50)和(50、0)作为测试用例。接着,由于存在包含部位p4~p6,因此,生成控制部130进入下一处理(步骤s16)。
129.非符号生成部150生成随机的值(0、0)作为2步的测试用例候选(步骤s17)。
130.函数生成部140将测试用例候选(0、0)作为siga的输入来生成执行2步的测试对象软件的程序的测试用例生成用函数(步骤s18)。
131.非符号生成部150以使用测试用例生成用函数在执行完成1步时保持状态并执行第2步的方式保持步间的状态并执行(步骤s19)。非符号生成部150确认是否包含未包含的
包含部位。但是,在该情况下,由于不会包含未包含的包含部位,因此,舍弃该测试用例候选(0、0)(步骤s20、s21)。
132.由于依然存在包含部位p4~p6,因此,生成控制部130进入下一处理。
133.函数生成部140生成用于通过有限模型检查求出包含未包含的包含部位的2步的测试用例的测试用例生成用函数(步骤s22)。
134.图9是生成的测试用例生成用函数22的例子。
135.符号生成部160使用图9的函数以保持第1步的状态并检查2步的方式执行有限模型检查,试行生成2步的测试用例(步骤s23)。其结果是,例如生成(150、0)作为如包含包含部位p6那样的2步的测试用例。因此,符号生成部160将该(150、0)存储到存储器920,并且从包含部位中排除p6(步骤s24)。
136.接着,生成控制部130进入下一步骤i=3(步骤s26)。然后,确认依然未达到最大步数而存在未包含的分支p4和p5。因此,确认是否存在2步中生成的测试用例。在此,由于存在(50、50)、(50、0)、(150、0)作为2步中生成的测试用例,因此,进入利用该(50、50)、(50、0)、(150、0)的测试用例生成(步骤s4、s5)。
137.非符号生成部150使用2步的测试用例(50、50)、(50、0)、(150、0),与第2步的情况同样,随机地生成第3步的测试用例候选。然后,非符号生成部150使用第3步的测试用例候选生成3步的测试用例候选(步骤s6)。将该3步的测试用例候选例如设为(50、50、50)、(50、0、50)、(150、0、50)。
138.函数生成部140将测试用例候选(50、50、50)、(50、0、50)、(150、0、50)作为siga的输入来生成执行3步的测试对象软件的程序的测试用例生成用函数(步骤s7)。
139.非符号生成部150使用测试用例生成用函数来保持步间的状态并执行(步骤s8)。即,非符号生成部150以在执行完成1步时保持状态并执行第2步、在执行完成2个步骤时保持状态并执行第3步的方式保持步间的状态并执行。然后,非符号生成部150确认是否包含未包含的包含部位p4和p5。其结果是,虽然它们都能够包含包含部位p4,但是,在此将其中的1个(50、50、50)作为3步的测试用例存储。然后,非符号生成部150从包含对象中排除p4(步骤s8、s9)。
140.由于存在p5作为包含部位,因此,生成控制部130进入下一处理(步骤s10)。
141.函数生成部140使用2步的测试用例作为第1步和第2步的测试用例来生成测试用例生成用函数(步骤s11)。函数生成部140生成用于通过有限模型检查求出包含未包含的包含部位p5的第3步的测试用例的测试用例生成用函数。在此,2步的测试用例是(50、50)、(50、0)、(150、0)。
142.图10是使用2步的测试用例(50、50)的测试用例生成用函数22的例子。
143.例如,在图10所示的测试用例生成用函数中,在执行第1步之后不进行初始化而继续调用第2步。因此,在执行完成第2步后的测试对象函数func使用的全局变量或者静态变量的值未被变更的状态下,进入第2步的函数func的处理。因此,例如,进行符号执行的测试生成部170在第1步的函数func的分析之后,进行第2步的未初始化的函数func的分析。这样的动作为在保持内部状态的基础上生成测试用例的动作。
144.符号生成部160使用图10的函数以保持第1步和第2步的状态并检查3步的方式执行有限模型检查,试行生成第3步的测试用例(步骤s11)。其结果是,生成如包含包含部位p5
的小于30的值(例如0),作为第3步的输入变量siga的值。因此,测试生成部将(50、50、0)作为3步的测试用例存储到存储器920,并且从包含部位中排除p5(步骤s13、s14、s15)。
145.接下来,生成控制部130从存储器920中排除3步的测试用例的生成中使用的2步的测试用例(50、50)。其结果是,存储器920上存在(50、0)、(150、0)、(50、50、50)、(50、50、0)作为测试用例。然后,由于不存在更多的包含部位,因此,生成控制部130判断为不需要测试用例生成,结束处理(步骤s16)。
146.如上所述,本实施方式的测试用例生成装置100对每次被输入值时执行1步处理的软件进行分析,生成为了测试软件而输入的值的序列作为测试用例。
147.在存在(i

1)步的测试用例的情况下,生成控制部130选择使用(i

1)步的测试用例来生成测试用例的方法。此时,生成控制部在保持着基于该测试用例执行的(i

1)步结束时刻的内部状态的基础上,选择生成第i步的测试用例的方法。在不存在(i

1)步的测试用例的情况下,生成控制部选择用于生成从1步到i步的测试用例的测试用例生成方法。
148.函数生成部140根据生成控制部选择出的测试用例生成方法,生成包括测试用例生成条件和测试对象软件的程序的调用的测试用例生成用函数。
149.测试生成部170根据生成控制部130选择出的测试用例生成方法,组合符号执行或者符号执行和非符号执行,使用测试用例生成用函数保持步间的状态并生成测试用例。在利用(i

1)步的测试用例而生成了第i步的测试用例的情况下,舍弃所利用的(i

1)步的测试用例。
150.***本实施方式的效果说明***
151.在本实施方式的测试用例生成装置中,在需要涉及多步的测试用例生成的情况下,首先,使用上次步骤的测试用例生成结果来试行基于非符号执行的测试用例生成和基于符号执行的测试用例生成。由此,在本实施方式的测试用例生成装置中,在第3步中,仅使用在2步中生成的测试用例在保持着第2步结束时刻的内部状态的状态下进行1步的分析就具有如下的效果。即,能够在基于非符号执行的测试用例生成和基于符号执行的测试用例生成中分别包含1个包含部位,结束测试用例生成。在上述具体例中,第2步结束时刻的内部状态是mode=1和sub_mode=2。即,仅在保持着mode=1和sub_mode=2的状态下进行1步的分析,就能够在基于非符号执行的测试用例生成和基于符号执行的测试用例生成中分别包含1个包含部位,结束测试用例生成。
152.另外,在不使用本实施方式的方法的情况下,需要以全部3步的路径为对象试行生成测试用例。因此,在基于非符号执行的测试用例生成中,该测试用例候选变得庞大,生成需要时间,并且在基于符号执行的测试用例生成中,3步的路径分析和满足该3步的路径分析的值的提取需要时间。
153.此外,在本实施方式的测试用例生成装置中,在i=2时,在使用1步的测试用例生成结果而进行测试用例生成之后,尽管实际上在第2步中能够包含,但残留有未包含的包含部位p6。在本实施方式的测试用例生成装置中,与此相对,通过进行涉及1步到2步的基于符号执行的测试用例生成,生成了可包含p6的测试用例。这样,组合使用(i

1)步的测试用例来生成i步的测试用例的方法和遍及全部i步的生成测试用例的方法,由此能够可靠地生成包含在i步中能够包含的部位的测试用例。
154.此外,在本实施方式的测试用例生成装置中,在i=2时,使用1步的测试用例来生
成测试用例,确认包含包含对象并作为2步的测试用例存储到存储器920。此外,作为测试用例存储到存储器920,并且删除已使用的1步的测试用例。由此,能够删除包括包含对象的冗余的测试用例并削减测试用例总数,能够削减输出期待值的研究以及测试执行时间这样的测试工时。
155.***其他结构***
156.<变形例1>
157.在本实施方式中,程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的功能通过软件来实现。作为变形例,程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的功能也可以通过硬件来实现。
158.图11是本实施方式变形例的测试用例生成装置100的结构图。
159.测试用例生成装置100具有电子电路909、存储器920和输入输出装置930这样的硬件。
160.电子电路909是实现程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的功能的专用的电子电路。
161.具体而言,电子电路909是单一电路、复合电路、程序化的处理器、并行程序化的处理器、逻辑ic、ga、asic或fpga。ga是gate array(门阵列)的缩写。asic是application specific integrated circuit(专用集成电路)的缩写。fpga是field

programmable gate array(现场可编程门阵列)的缩写。
162.程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的功能可以通过1个电子电路来实现,也可以分散到多个电子电路中实现。
163.作为另一变形例,也可以通过电子电路来实现程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的一部分功能,通过软件来实现剩余的功能。
164.此外,作为另一变形例,也可以通过固件来实现程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的一部分或全部功能。
165.处理器和电子电路分别也称作处理线路。即,在测试用例生成装置100中,程序取得部110、包含部位提取部120、生成控制部130、函数生成部140、非符号生成部150和符号生成部160的功能通过处理线路来实现。
166.在以上的实施方式1中,设测试用例生成装置的各部为独立的功能块进行了说明。但是,测试用例生成装置的结构也可以不是上述的实施方式的结构。测试用例生成装置的功能块只要能够实现在上述实施方式中说明的功能即可,可以是任意的结构。此外,测试用例生成装置也可以是由多个装置而不是1个装置构成的系统。
167.此外,也可以组合实施实施方式1中的多个部分。或者,也可以实施这些实施方式中的一部分。此外,也可以作为整体或部分地任意组合实施这些实施方式。
168.即,在实施方式1中,能够实现各实施方式的自由组合、或各实施方式的任意结构要素的变形或各实施方式中的任意结构要素的省略。
169.另外,上述实施方式本质上只是优选的例示,并不意图限制本发明的范围、本发明的应用物的范围和本发明的用途的范围。上述实施方式能够根据需要进行各种变更。
170.标号说明
171.20:程序;21:包含部位;22:测试用例生成用函数;23:测试用例;100:测试用例生成装置;110:程序取得部;120:包含部位提取部;130:生成控制部;140:函数生成部;150:非符号生成部;160:符号生成部;170:测试生成部;909:电子电路;910:处理器;920:存储器;930:输入输出装置;m1:第1生成方式;m2:第2生成方式。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜