CN108304330B - 内容提取方法、装置和计算机设备 - Google Patents

内容提取方法、装置和计算机设备 Download PDF

Info

Publication number
CN108304330B
CN108304330B CN201810159796.3A CN201810159796A CN108304330B CN 108304330 B CN108304330 B CN 108304330B CN 201810159796 A CN201810159796 A CN 201810159796A CN 108304330 B CN108304330 B CN 108304330B
Authority
CN
China
Prior art keywords
program
program segment
segment
target
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810159796.3A
Other languages
English (en)
Other versions
CN108304330A (zh
Inventor
王杰
祝清鲁
桂宇怀
夏可
周立
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201810159796.3A priority Critical patent/CN108304330B/zh
Publication of CN108304330A publication Critical patent/CN108304330A/zh
Application granted granted Critical
Publication of CN108304330B publication Critical patent/CN108304330B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提出一种内容提取方法、装置和计算机设备,其中,方法包括:运行应用程序之后,依据运行正常时各程序段的第一运行数据,生成程序摘要。进而根据运行异常时各程序段的第二运行数据,与相应程序段的程序摘要之间的符合情况,从各程序段中选择出目标程序段,仅根据目标程序段进行内容提取。相较于现有技术中,针对全部程序段进行内容提取的方式相比,缩小了需进行内容提取的范围,解决了现有技术中需提取内容较多的技术问题。在内容提取之后,就提取的内容还需与程序员用户之间的交互以确认其正确性,通过缩小内容提取范围,也进一步减少的交互次数,提高了故障定位的效率。

Description

内容提取方法、装置和计算机设备
技术领域
本发明涉及计算机技术领域,尤其涉及一种内容提取方法、装置和计算机设备。
背景技术
在程序较为复杂的情况下,程序员编写的程序难免会存在程序缺陷,从而导致无法完成所需逻辑或功能,程序运行时会出现故障。在程序存在这种缺陷时,需要确定存在缺陷的故障点,以便于程序员对故障点进行修复。
现有技术中,通常将程序划分为多个程序段。依据程序段的执行先后顺序,对每一个程序段均进行内容提取,进而对程序员用户进行提问,以确定提取到的内容是否有误。通过这种与程序员用户进行交互的方式,定位故障点。
但现有技术中这种依据程序段之间的执行先后顺序进行内容提取的方式,提取内容较多,进而导致与程序员用户交互次数也较多,故障定位效率较低。
发明内容
本发明提出一种内容提取方法,通过缩小需进行内容提取的程序段范围,在应用程序中,仅部分程序段需要向程序员用户确认正确性,以减少与程序员用户之间的交互次数,提高调试效率。
本发明一方面实施例提出了一种内容提取方法,包括:
运行应用程序,以确定所述应用程序运行正常时的第一输入数据,以及运行异常时的第二输入数据;
根据执行所述第一输入数据时所述应用程序中各程序段的第一运行数据,生成各程序段的程序摘要;所述程序摘要用于指示对应程序段的第一运行数据符合的规律;
将执行所述第二输入数据时各程序段的第二运行数据,与对应程序段的程序摘要进行比对,以确定出所述第二运行数据与对应的程序摘要不相符合的目标程序段;
根据所述目标程序段进行内容提取。
本发明实施例的内容提取方法,运行应用程序之后,依据运行正常时各程序段的第一运行数据,生成程序摘要。进而根据运行异常时各程序段的第二运行数据,与相应程序段的程序摘要之间的符合情况,从各程序段中选择出目标程序段,仅根据目标程序段进行内容提取。相较于现有技术中,针对全部程序段进行内容提取的方式相比,缩小了需进行内容提取的范围,解决了现有技术中需提取内容较多的技术问题。在内容提取之后,就提取的内容还需与程序员用户之间的交互以确认其正确性,通过缩小内容提取范围,也进一步减少的交互次数,提高了故障定位的效率。
本发明又一方面实施例提出了一种内容提取装置,包括:
运行模块,用于运行应用程序,以确定所述应用程序运行正常时的第一输入数据,以及运行异常时的第二输入数据;
生成模块,用于根据执行所述第一输入数据时所述应用程序中各程序段的第一运行数据,生成各程序段的程序摘要;所述程序摘要用于指示对应程序段的第一运行数据符合的规律;
比对模块,用于将执行所述第二输入数据时各程序段的第二运行数据,与对应程序段的程序摘要进行比对,以确定出所述第二运行数据与对应的程序摘要不相符合的目标程序段;
提取模块,用于根据所述目标程序段进行内容提取。
本发明实施例的内容提取装置,运行应用程序之后,依据运行正常时各程序段的第一运行数据,生成程序摘要。进而根据运行异常时各程序段的第二运行数据,与相应程序段的程序摘要之间的符合情况,从各程序段中选择出目标程序段,仅根据目标程序段进行内容提取。相较于现有技术中,针对全部程序段进行内容提取的方式相比,缩小了需进行内容提取的范围,解决了现有技术中需提取内容较多的技术问题。在内容提取之后,就提取的内容还需与程序员用户之间的交互以确认其正确性,通过缩小内容提取范围,也进一步减少的交互次数,提高了故障定位的效率。
本发明又一方面实施例提出了一种计算机设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现前述方面提及的内容提取方法。
本发明又一方面实施例提出了一种计算机可读存储介质,该程序被处理器执行时实现如前述方面提及的内容提取方法。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例所提供的一种内容提取方法的流程示意图;
图2为本发明实施例提供的另一种内容提取方法的流程示意图;
图3为程序执行树的示意图;
图4为本发明实施例提供的一种内容提取装置的结构示意图;
图5为计算机设备与用户端交互的示意图;以及
图6示出了适于用来实现本申请实施方式的示例性计算机设备的框图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
在现有技术中,为了实现程序调试,通常采用算法调试技术。具体来说,在算法调试技术实现过程中,需要与程序员用户进行交互。根据程序员用户确定出的各程序段的正确与否,进行内容提取,根据提取的内容进行故障修复。可以根据程序中不同程序段之间的结构关系,优化各程序段的提问顺序。
现有技术中存在至少两种可能的提问顺序:
其一,根据各程序段的执行先后顺序,依次向程序员用户进行提问,确定各程序段的正确性;
其二,对各程序段采用二分法逐步缩小提问范围,以在一定程度上提高调试效率。
但前述调试方式,尽管存在缩小提问范围的操作,但仅仅是依赖于程序段的结构信息,优化提问顺序。在实际操作过程中,仍需要与程序员用户进行多次交互,才能最终定位故障点,即所需提取的内容。
本发明实施例,通过将程序摘要技术,与调试技术相结合,通过自动生成程序摘要,依赖于程序摘要缩小了需进行内容提取的范围,提高了调试效率。
下面参考附图描述本发明实施例的内容提取方法和装置。
图1为本发明实施例所提供的一种内容提取方法的流程示意图。如图1所示,本实施例可以由计算机设备执行,该计算机设备可以是独立的计算机设备,也可以是分布式的计算机设备,本实施例中对此不作限定。
步骤101,运行应用程序,以确定所述应用程序运行正常时的第一输入数据,以及运行异常时的第二输入数据。
具体地,每一个测试用例具体为一个测试函数,该测试函数指定了输入数据和输出数据。将每一测试用例的输入数据,输入应用程序进行测试,得到应用程序的输出结果。
在输出数据与输出结果相匹配的情况下,确定应用程序通过测试,将该测试用例作为第一测试用例,该第一测试用例的输入数据记为第一输入数据,否则,确定应用程序未通过测试,将该测试用例作为第二测试用例,该第二测试用例的输入数据记为第二输入数据。
需要说明的是,针对大型的软件项目来说会有几个阶段的测试:单元测试、集成测试、在线测试等等,本发明实施例中均是单元测试,即独立测试大型软件系统中的独立功能模块。
步骤102,根据执行第一输入数据时应用程序中各程序段的第一运行数据,生成各程序段的程序摘要。
其中,程序摘要用于指示对应程序段的第一运行数据符合的规律,这个规律是不应当随测试用例中输入数据的改变而改变的。作为一种可能的实现方式,程序摘要可以包括程序不变量关系。程序不变量关系主要包含数值比较关系(>、>=、==、<、<=、!=)、逻辑判断关系(&&、||)以及两者之间的线性组合关系。不同的应用场景下程序不变量关系会有所不同。作为一种可能的实现方式,可以采用Daikon工具生成各程序段的程序摘要。
为了清楚说明程序摘要描述的程序不变量关系,本实施例中,以某一段程序段执行不同测试用例得到的运行数据为示例进行说明,如表1所示:
测试用例 输入数据 输出数据 程序不变量关系
test1 {1,8} {1,8} 1<8
test2 {3,8} {3,8} 3<8
test3 {5,3} {3,5} 3<5
test4 {12,10} {10,12} 10<12
test5 {2,6} {2,6} 2<6
表1各测试用例的运行数据与对应的程序不变量关系
例如,对于表1中程序不变量关系是根据输出数据生成的,输出数据中的第一个数值均小于第二个数值,这种关系是不随输入数据变化而改变的,因此,第一个数值小于第二个数值为该程序段的程序不变量关系。
具体地,本步骤为了保证程序摘要中程序不变量关系的准确性,仅允许根据通过测试时,各程序段的第一运行数据生成该程序摘要。这里的第一运行数据可以不仅包括程序段的输入数据、输出数据,还可以包括输入数据和输出数据的中间数据。
进一步地,在生成各程序段的程序摘要之后,还可以结合程序验证(ProgramVerification)方法对各程序段做完整的功能验证,以获得更精确的程序摘要。
步骤103,将执行第二输入数据时各程序段的第二运行数据,与对应程序段的程序摘要进行比对,以确定出所述第二运行数据与对应的程序摘要不相符合的目标程序段。
具体地,针对每一个第二测试用例,生成该第二测试用例对应的程序执行树。
程序执行树中包括多个节点,该节点用于指示执行第二测试用例时对应程序段的第二运行数据,程序执行树中各节点之间的连接关系,用于指示对应程序段的调用关系。这里的第二运行数据可以不仅包括程序段的输入数据、输出数据,还可以包括输入数据和输出数据的中间数据。
从程序执行树的根节点开始,遍历程序执行树。针对每一个节点,将对应程序段的第二运行数据与该程序段的程序摘要进行比对,从而当第二运行数据与对应的程序摘要不相符合时,该节点及其子节点疑似存在缺陷。进而,将该节点作为目标节点,该目标节点对应的程序段作为目标程序段,以便进行内容提取。
在前述步骤中生成的各程序段的程序摘要,用于指示程序不变参量,需要进一步明确的是,该程序不变参量是由该程序段以及该程序段所调用的其他程序段的功能共同决定的。在程序不变参量正确的情况下,无论运行何种输入数据,该程序段的运行数据均应当符合该程序摘要。若程序段的运行数据不符合该程序摘要,说明该程序段以及该程序段所调用的其他程序段疑似存在缺陷。
在根据程序摘要排除掉部分程序段后,可以仅针对确定出的疑似存在缺陷的程序段位置进行内容提取。
步骤104,根据所述目标程序段进行内容提取。
作为一种可能的实现方式,采用算法调试技术,针对前述步骤中生成的程序执行树,查询程序执行树中目标程序段对应的目标节点,以及该目标节点的各级子节点。请求用户端确认目标节点对应的目标程序段是否有误。
针对用户端返回的不同结果,执行下列的不同操作:
1)在确认结果为目标程序段有误的情况下,若各级子节点对应程序段的第二运行数据与相应程序段的程序摘要相符合,确定目标程序段为故障位置。
2)在确认结果为目标程序段无误的情况下,从各级子节点中,查询第二运行数据与相应程序段的程序摘要不相符合的目标子节点,请求用户端继续确认目标子节点对应程序段是否有误。确认结果为目标子节点对应程序段有误的情况下,若该目标子节点为叶子节点,或者,所述目标子节点下的各级子节点对应程序段的第二运行数据符合相应程序段的程序摘要,确定所述目标子节点对应程序段为故障位置。
由于程序段的运行数据不符合该程序摘要,说明该程序段以及该程序段所调用的其他程序段疑似存在缺陷。因此,在程序员用户确定目标节点对应的目标程序段有误之后,还需要继续就其子节点与程序员交互,以确定子节点均无误,方可确定该目标程序段为故障点,进而对所述目标程序段的内容进行提取。
在一种较为特殊的场景下,存在应用程序未通过第二输入数据,甚至已查询到对应的第二运行数据不符合相应程序摘要的目标节点,但通过与程序员用户交互仍未在程序执行树中查询出有误节点。
针对这种场景,可以基于动态符号执行技术,重新生成各程序段的程序摘要。具体地,在确认结果为所述目标子节点对应程序段无误的情况下,若所述目标子节点为叶子节点,或者,所述目标子节点下的各级子节点对应程序段的第二运行数据均符合相应程序段的程序摘要,对所述第二输入数据进行更新。根据各程序段的第一运行数据,以及执行更新后的第二输入数据时所述应用程序中各程序段的运行数据,重新生成各程序段的程序摘要。其中,更新后的第二输入数据与更新前的第二输入数据相似,且所述应用程序执行更新后的第二输入数据测试通过。
具体来说,在识别有误节点失败(也就是未识别到有误节点)时,动态生成测试用例,替代未通过测试的第二测试用例,以便重新执行前述各步骤。若仍未识别到有误节点,重新动态生成测试用例,如此迭代。
通过该方法,即使最初的测试用例中没有能够通过测试的第一测试用例,或者,由于程序摘要生成准确性原因,导致无法识别出有误节点,也可以通过动态生成测试用例以更新输入数据的方式,实现程序摘要的建立,以及有误节点识别,提高了该方法的通用性和鲁棒性。
本实施例中,采用各输入数据,对应用程序进行测试之后,依据通过测试时各程序段的第一运行数据,生成程序摘要。进而根据未通过测试时各程序段的第二运行数据,与相应程序段的程序摘要之间的符合情况,从各程序段中选择出目标程序段,仅对目标程序段进行内容提取。相较于现有技术中,针对全部程序段进行调试的方式相比,缩小了需进行内容提取的范围,从而减少了在内容提取过程中,与程序员用户之间的交互次数,提高了内容提取的效率。解决了现有技术中内容提取效率较低的技术问题。
为了清楚说明上一实施例,本实施例中采用了生成程序执行树的方式,对应用程序进行算法调试。为了对前述实施例的方法进行进一步说明,图2为本发明实施例提供的另一种内容提取方法的流程示意图。
如图2所示,该内容提取方法具体应用于程序测试,可以包括以下步骤:
步骤201,采用各测试用例,对应用程序进行测试,获取该应用程序执行各测试用例时的程序状态。
其中,该程序状态包括堆中的变量以及栈中的变量等。
步骤202,根据测试程序执行结果,确定通过测试时执行的第一测试用例,以及未通过测试时执行的第二测试用例。
步骤203,根据执行第一测试用例时的程序状态,确定各程序段的输出数据,并据此生成各程序段的摘要。
在一种场景下,若所述第一运行数据用于指示数据类型,例如C语言中的struct结构类型,因为数据类型不能直接比较或者比较的粒度较大,无法直接建立程序摘要。为了解决这一问题,本实施例中采用了静态分析技术,通过调用数据类型对应的无副作用方法函数,从而获取详细的数据信息。
例如:方法函数getField为无副作用的方法函数,而方法函数increase为有副作用的方法函数。因为调用increase会改变应用程序的程序状态。
其中,方法函数getField如下所示:
int getField(){
return field;
}
方法函数increase如下所示:
int increase(){
field++;
return field;
}。
步骤204,根据执行第二测试用例时的程序状态,确定各程序段的输出数据,并据此生成程序执行树。
具体地,已记录了第二测试用例执行时的程序状态,具体根据该程序状态,确定每个程序段的输出数据,并依据此构建对应该第二测试程序的程序执行树。
在程序执行树中,每个节点代表应用程序的一个程序段,每一个程序段作为构成应用程序的一个元素,通过程序段之间的调用关系建立节点之间的连接关系。
需要说明的是,程序段的粒度可以根据缺陷定位的精度进行调整,例如,若需要较高的精度,可以设置语句等较小的粒度;若可以接受较低的精度,可以设置函数或者更大的粒度。
步骤205,将程序执行树的根节点作为当前节点。
从程序执行数的根节点开始,确定各节点对应程序段执行第二测试用例时的输出数据是否符合相应程序段的程序摘要。
步骤206,判断当前节点对应程序段执行第二测试用例时的输出数据是否符合相应程序段的程序摘要,若符合,执行步骤207,若不符合,执行步骤208。
在当前节点对应程序段执行第二测试用例时的输出数据符合相应程序段的程序摘要的情况下,当前节点对应的程序段可以确定正确,从而可以被排除掉,无需进行后续与程序员用户进行交互的过程。在当前节点对应程序段执行第二测试用例时的输出数据不符合相应程序段的程序摘要的情况下,需要对当前节点对应的程序段与程序员用户交互,以确定该程序段是否有误。
这里必须通过与程序员用户交互的方式确定该程序段是否有误,一方面是由于作为测试用例的测试函数不是针对每一个程序段给出了正确的输入数据和输出数据,因此,无法确定第二测试用例执行时,记录到的每一个程序段的输入数据和输出数据是否正确,需要人工辅助进行判断。另一方面,对于程序的测试,导致测试是有限地,不完全的,因此,同样需要人工辅助进行判断。
步骤207,将根节点的下一级子节点更新为当前节点,返回执行步骤206。
步骤208,请求用户端确认当前节点对应的程序段是否有误,若确认有误,执行步骤209,若确认无误,执行步骤207。
步骤209,判断当前节点的各级子节点对应程序段执行第二测试用例时的输出数据与相应程序段的程序摘要是否相符合,若符合执行步骤210,若存在不符合执行步骤211。
步骤210,若各级子节点均确定为与相应程序段的程序摘要相符合,确定当前节点对应的程序段为故障位置。
在一种场景下,父节点与相应程序段的程序摘要不相符合,可能是由于父节点对应程序段存在故障导致的。在另一种场景下,由于程序树根据程序段之间的调用关系生成,因此,父节点与相应程序段的程序摘要不相符合,还可能是由于子节点对应程序段存在故障导致的。前述步骤中,在判断出当前节点对应程序段执行第二测试用例时的输出数据与相应程序段的程序摘要不相符合时,还需要进一步确定各级子节点均与相应程序段的程序摘要相符合,才能够将当前节点对应的程序段确定为故障位置。
步骤211,若至少一级子节点对应程序段执行第二测试用例时的输出数据与相应程序段的程序摘要不符合,将不符合程序摘要的子节点更新为当前节点,返回执行步骤208。
在判断出当前节点对应程序段执行第二测试用例时的输出数据与相应程序段的程序摘要不相符合时,同时存在至少一级子节点与相应程序段的程序摘要也不符合,说明不符合的子节点和当前节点对应程序段疑似为故障点,但无法最终定位。
为了进一步详细说明前述步骤,本实施例中还提供了具体的待调试程序,该应用程序为C++源程序,用于实现整数由小到大排序。具体来说,应用程序通过递归调用sort函数以及insert函数的递归调用实现数组元素排序。其中的insert函数的功能是将值value插入到数组data中。其中,数组data中的元素已经按由小到大排好序,定义的值length用于记录data数组的长度。根据数组data的长度和待插入值value的大小,可以分为以下三种情况:
第一种情况:data数组为空(length==0):直接将value插入数组中返回新的数组;
第二种情况:data数组不为空并且待插入的值value比数组中的第一个元素小时,将value添加到数组的首位,返回新的数组tmp;
第三种情况:data数组不为空并且待插入的值value比数组中的第一个元素大时,用data数组中除了data[0]元素的其余元素构成新的数组,递归调用insert函数将value插入合适的位置获得插入之后的新数组retval,然后将data[0]插入retval的首位。
应用程序中的sort函数通过递归调用,以及通过insert函数对data数组中元素排序,分为两种情况:
第一种情况:如果数组为空(length==0),则无需排序直接返回;
第二种情况:数组不为空,首先将数组中除了data[0]的其余元素先排序得到排序之后的数组retval,再通过insert函数将data[0]插入到已经排好序的数组retval中,形成完整的排序数组后再返回。
本实施例中,提供了用于执行前述功能的待调试程序的代码,如下所示:
Figure BDA0001582597780000091
Figure BDA0001582597780000101
对于应用程序采用预先生成的测试函数进行测试。本实施例中,还提供了用于对前述应用程序进行测试的第一测试用例,即前述应用程序可通过测试的测试用例,该第一测试用例为下列测试函数集合。该集合中的每个测试函数都可以由应用程序正确执行通过,可以利用这些通过测试的测试函数集合来构建程序摘要:
test1{assertEqual({1,10,18},insort({10,1,18},3));}
test2{assertEqual({1,3,8},insort({1,3,8},3));}
test3{assertEqual({1,3,5},insort({1,5,3},3));}
test4{assertEqual({10,12,14},insort({14,12,10},3));}
test5{assertEqual({2,6,9},insort({9,2,6},3));}
基于前述应用程序,以函数为基本单元进行划分,得到九个程序段。根据不同程序段之间的调用关系,生成如图3所示的程序执行树。
在图3所示的程序执行树中,每个节点记录了一个函数调用返回的结果。比如图3中节点1“main={2,1,3}”的含义为:执行函数main的结果是列表{2,1,3}。
从根节点开始,对于图3中每一个节点,根据对应程序段的程序摘要,判断未通过测试时得到的第二运行数据是否满足该程序摘要。能够判断出节点1、节点2、节点3、节点7和节点9均不满足程序摘要,同时,节点4、节点5、节点6和节点8满足程序摘要。如果节点满足程序摘要则继续遍历其子节点,如果不满足则与程序员用户进行交互,请求确认该节点对应程序段执行结果的正确性。最后,定位故障点位置为该节点所有的子节点均满足相应程序段的程序摘要,而该节点自身对应程序段有误。
在图3中,需要与程序员用户交互的节点为节点1、节点2、节点3和节点7,由于节点8满足程序摘要,因此最终定位到节点7为故障点。在定位故障点过程中,一共与程序员用户进行了四次交互(节点1、节点2、节点3和节点7),相比于现有技术中,依次就节点1、节点2、节点3、节点4、节点7和节点8与程序员用户交互的方式相比,以及与最大子树优先提问的方法依次就节点1、节点2、节点3、节点4、节点7和节点8交互均减少了两次交互,有效地降低的程序员用户的负担,提高了调试效率。
下面以节点7为例对生成程序摘要,以及判断是否满足程序摘要的处理过程进行详细说明,其余节点的处理与之类似。对于图3中第七个程序段对应的节点7,采用前述列举的测试函数进行测试,能够基于记录到的输入输出数据,生成前述表1所示的程序不变量关系,根据该程序不变量关系生成第七个程序段的程序摘要:输出列表满足从小到大排序关系。
使用该程序摘要信息,对未通过测试时该第七个程序段的输出数据进行判断可知,该节点7对应的第七个程序段的输出数据不满足程序摘要的约束。通过调试界面显示请求信息,以请求程序员用户确认程序执行树中的节点7对应的第七个程序段是否存在执行错误。
程序员用户查看第七个程序段:
Figure BDA0001582597780000111
Figure BDA0001582597780000121
程序员可以确定第7行语句中的“value<data[0]-1”为错误代码,正确代码应该是“value<data[0]”。在程序员用户通过调试界面内的操作,确认程序执行树中的节点7对应的第七个程序段确实存在执行错误情况下,继续判断节点7的子节点8满足程序摘要,因此,节点7对应的程序段为故障点。
本实施例中,采用各测试用例,对应用程序进行测试之后,依据通过测试时各程序段的第一运行数据,生成程序摘要。进而根据未通过测试时各程序段的第二运行数据,与相应程序段的程序摘要之间的符合情况,从各程序段中选择出目标程序段,仅对目标程序段进行程序调试。相较于现有技术中,针对全部程序段进行调试的方式相比,缩小了需进行程序调试的范围,从而减少了在程序调试过程中,与程序员用户之间的交互次数,提高了程序调试的效率。解决了现有技术中程序调试效率较低的技术问题。
为了实现上述实施例,本发明还提出一种内容提取装置。
图4为本发明实施例提供的一种内容提取装置的结构示意图。
如图4所示,该内容提取装置包括:运行模块41、生成模块42、比对模块43和提取模块44。
运行模块41,用于运行应用程序,以确定所述应用程序运行正常时的第一输入数据,以及运行异常时的第二输入数据。
具体地,运行模块41将每一测试用例的输入数据,输入所述应用程序进行测试,得到所述应用程序的输出结果。在所述输出数据结果正确的情况下,确定所述应用程序通过测试。
生成模块42,用于根据执行所述第一输入数据时所述应用程序中各程序段的第一运行数据,生成各程序段的程序摘要。
其中,程序摘要用于指示对应程序段的第一运行数据符合的规律。
作为一种可能的实现方式,程序段是以语句或函数为基本单元,对所述待测程度进行划分得到的。
具体地,生成模块42具体用于根据各程序段的第一运行数据,确定所述各程序段的程序不变量关系;所述程序不变量关系包括数值比较关系和逻辑判断关系中的一个或多个的线性组合;针对每一个程序段,生成用于描述所述程序不变量关系的程序摘要。
生成模块42还用于若所述第一运行数据用于指示数据类型,调用所述数据类型对应的方法函数获取所述第一运行数据的数据信息。进而,生成模块42根据获取到的数据信息,确定所述各程序段的程序不变量关系,针对每一个程序段,生成用于描述所述程序不变量关系的程序摘要。
比对模块43,用于将执行所述第二输入数据时各程序段的第二运行数据,与对应程序段的程序摘要进行比对,以确定出所述第二运行数据与对应的程序摘要不相符合的目标程序段。
提取模块44,用于对所述目标程序段进行内容提取。
具体地,提取模块44获取所述第二输入数据对应的程序执行树;其中,所述程序执行树中的节点,用于指示执行所述第二输入数据时对应程序段的第二运行数据;所述程序执行树中各节点之间的连接关系,用于指示对应程序段的调用关系。
提取模块44查询所述程序执行树中所述目标程序段对应的目标节点,以及所述目标节点的各级子节点。提取模块44请求用户端确认所述目标节点对应的目标程序段是否有误,在确认结果为所述目标程序段有误的情况下,若各级子节点对应程序段的第二运行数据与相应程序段的程序摘要相符合,确定所述目标程序段为故障位置。
提取模块44请求用户端确认所述目标节点对应的目标程序段是否有误之后,还用于在确认结果为所述目标程序段无误的情况下,从各级子节点中,查询第二运行数据与相应程序段的程序摘要不相符合的目标子节点。提取模块44请求所述用户端继续确认所述目标子节点对应程序段是否有误,在确认结果为所述目标子节点对应程序段有误的情况下,若所述目标子节点为叶子节点,或者,所述目标子节点下的各级子节点对应程序段的第二运行数据符合相应程序段的程序摘要,确定所述目标子节点对应程序段为故障位置。
提取模块44请求所述用户端确认所述目标子节点对应程序段是否有误之后,还用于:在确认结果为所述目标子节点对应程序段无误的情况下,若所述目标子节点为叶子节点,或者,所述目标子节点下的各级子节点对应程序段的第二运行数据均符合相应程序段的程序摘要,对所述第二输入数据进行更新;根据各程序段的第一运行数据,以及执行更新后的第二输入数据时所述应用程序中各程序段的运行数据,重新生成各程序段的程序摘要。
其中,更新后的第二输入数据与更新前的第二输入数据相似,且所述应用程序执行更新后的第二输入数据测试通过。
需要说明的是,前述对方法实施例的解释说明也适用于该实施例的装置,此处不再赘述。
本发明实施例中,采用各输入数据,对应用程序进行测试之后,依据通过测试时各程序段的第一运行数据,生成程序摘要。进而根据未通过测试时各程序段的第二运行数据,与相应程序段的程序摘要之间的符合情况,从各程序段中选择出目标程序段,仅对目标程序段进行内容提取。相较于现有技术中,针对全部程序段进行调试的方式相比,缩小了需进行内容提取的范围,从而减少了在内容提取过程中,与程序员用户之间的交互次数,提高了内容提取的效率。解决了现有技术中内容提取效率较低的技术问题。
为了实现上述实施例,本发明还提出一种计算机设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序包括应用程序和用于对所述应用程序进行调试的调试程序,所述处理器执行所述调试程序时,实现前述实施例的内容提取方法。
作为一种可能的应用场景,图5为计算机设备与用户端交互的示意图,如图5所示,该用户端可以程序员用户可以看到的交互界面,还可以是程序员用户使用的终端。该计算机设备采用各测试用例,对待测程序进行测试之后,依据通过测试时各程序段的第一运行数据,生成程序摘要。进而根据未通过测试时各程序段的第二运行数据,与相应程序段的程序摘要之间的符合情况,从各程序段中选择出目标程序段,仅对目标程序段与用户端交互进行内容提取。相较于现有技术中,针对全部程序段进行调试的方式相比,缩小了需进行内容提取的范围,减少了在内容提取过程中,与程序员用户之间的交互次数,提高了内容提取的效率。解决了现有技术中内容提取效率较低的技术问题。
为了实现上述实施例,本发明还提出一种计算机可读存储介质,当所述存储介质中的指令由处理器被执行时,使得处理器能够执行前述实施例的内容提取方法。
图6示出了适于用来实现本申请实施方式的示例性计算机设备的框图。图6显示的计算机设备12仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry StandardArchitecture;以下简称:ISA)总线,微通道体系结构(Micro Channel Architecture;以下简称:MAC)总线,增强型ISA总线、视频电子标准协会(Video Electronics StandardsAssociation;以下简称:VESA)局域总线以及外围组件互连(Peripheral ComponentInterconnection;以下简称:PCI)总线。
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(Random Access Memory;以下简称:RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图6未显示,通常称为“硬盘驱动器”)。尽管图6中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(Compact Disc Read OnlyMemory;以下简称:CD-ROM)、数字多功能只读光盘(Digital Video Disc Read OnlyMemory;以下简称:DVD-ROM)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本申请所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(Local AreaNetwork;以下简称:LAN),广域网(Wide Area Network;以下简称:WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现前述实施例中提及的方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (12)

1.一种内容提取方法,其特征在于,所述方法包括以下步骤:
运行应用程序,以确定所述应用程序运行正常时的第一输入数据,以及运行异常时的第二输入数据;
根据执行所述第一输入数据时所述应用程序中各程序段的第一运行数据,生成各程序段的程序摘要;所述程序摘要用于指示对应程序段的第一运行数据符合的规律;
将执行所述第二输入数据时各程序段的第二运行数据,与对应程序段的程序摘要进行比对,以确定出所述第二运行数据与对应的程序摘要不相符合的目标程序段;
根据所述目标程序段进行内容提取。
2.根据权利要求1所述的内容提取方法,其特征在于,所述根据所述目标程序段进行内容提取,包括:
获取所述第二输入数据对应的程序执行树;其中,所述程序执行树中的节点,用于指示执行所述第二输入数据时对应程序段的第二运行数据;所述程序执行树中各节点之间的连接关系,用于指示对应程序段的调用关系;
查询所述程序执行树中所述目标程序段对应的目标节点,以及所述目标节点的各级子节点;
请求用户端确认所述目标节点对应的目标程序段是否有误;
在确认结果为所述目标程序段有误的情况下,若各级子节点对应程序段的第二运行数据与相应程序段的程序摘要相符合,对所述目标程序段的内容进行提取。
3.根据权利要求2所述的内容提取方法,其特征在于,所述请求用户端确认所述目标节点对应的目标程序段是否有误之后,还包括:
在确认结果为所述目标程序段无误的情况下,从各级子节点中,查询第二运行数据与相应程序段的程序摘要不相符合的目标子节点;
请求所述用户端继续确认所述目标子节点对应程序段是否有误;
在确认结果为所述目标子节点对应程序段有误的情况下,若所述目标子节点为叶子节点,或者,所述目标子节点下的各级子节点对应程序段的第二运行数据符合相应程序段的程序摘要,对所述目标子节点对应程序段的内容进行提取。
4.根据权利要求2所述的内容提取方法,其特征在于,所述请求所述用户端确认所述目标子节点对应程序段是否有误之后,还包括:
在确认结果为所述目标子节点对应程序段无误的情况下,若所述目标子节点为叶子节点,或者,所述目标子节点下的各级子节点对应程序段的第二运行数据均符合相应程序段的程序摘要,对所述第二输入数据进行更新;
根据各程序段的第一运行数据,以及执行更新后的第二输入数据时所述应用程序中各程序段的运行数据,重新生成各程序段的程序摘要。
5.根据权利要求4所述的内容提取方法,其特征在于,所述更新后的第二输入数据与更新前的第二输入数据相似,且所述应用程序执行更新后的第二输入数据测试通过。
6.根据权利要求1-5任一项所述的内容提取方法,其特征在于,所述根据执行所述第一输入数据时所述应用程序中各程序段的第一运行数据,生成各程序段的程序摘要,包括:
根据各程序段的第一运行数据,确定所述各程序段的程序不变量关系;所述程序不变量关系包括数值比较关系和逻辑判断关系中的一个或多个的线性组合;
针对每一个程序段,生成用于描述所述程序不变量关系的程序摘要。
7.根据权利要求1-5任一项所述的内容提取方法,其特征在于,所述根据执行所述第一输入数据时所述应用程序中各程序段的第一运行数据,生成各程序段的程序摘要,包括:
若所述第一运行数据用于指示数据类型,调用所述数据类型对应的方法函数获取所述第一运行数据的数据信息;
根据获取到的数据信息,生成所述程序摘要。
8.根据权利要求1-5任一项所述的内容提取方法,其特征在于,所述运行应用程序,包括:
将各组输入数据,输入所述应用程序进行测试,得到所述应用程序的输出结果;
在所述输出结果与预设结果相匹配的情况下,确定所述应用程序运行正常,输入的所述输入数据为第一输入数据;
在所述输出结果与预设结果不相匹配的情况下,确定所述应用程序运行异常,输入的所述输入数据为第二输入数据。
9.根据权利要求1-5任一项所述的内容提取方法,其特征在于,所述程序段,是以语句或函数为基本单元,对所述应用程序进行划分得到的。
10.一种内容提取装置,其特征在于,所述装置包括:
运行模块,用于运行应用程序,以确定所述应用程序运行正常时的第一输入数据,以及运行异常时的第二输入数据;
生成模块,用于根据执行所述第一输入数据时所述应用程序中各程序段的第一运行数据,生成各程序段的程序摘要;所述程序摘要用于指示对应程序段的第一运行数据符合的规律;
比对模块,用于将执行所述第二输入数据时各程序段的第二运行数据,与对应程序段的程序摘要进行比对,以确定出所述第二运行数据与对应的程序摘要不相符合的目标程序段;
提取模块,用于根据所述目标程序段进行内容提取。
11.一种计算机设备,其特征在于,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-9中任一所述的内容提取方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-9中任一所述的内容提取方法。
CN201810159796.3A 2018-02-26 2018-02-26 内容提取方法、装置和计算机设备 Active CN108304330B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810159796.3A CN108304330B (zh) 2018-02-26 2018-02-26 内容提取方法、装置和计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810159796.3A CN108304330B (zh) 2018-02-26 2018-02-26 内容提取方法、装置和计算机设备

Publications (2)

Publication Number Publication Date
CN108304330A CN108304330A (zh) 2018-07-20
CN108304330B true CN108304330B (zh) 2021-09-21

Family

ID=62848913

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810159796.3A Active CN108304330B (zh) 2018-02-26 2018-02-26 内容提取方法、装置和计算机设备

Country Status (1)

Country Link
CN (1) CN108304330B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109871307A (zh) * 2018-12-25 2019-06-11 杭州茂财网络技术有限公司 一种精确定位启动时间问题的自动化测试方法
CN113127238B (zh) * 2019-12-30 2024-02-09 北京懿医云科技有限公司 数据库中导出数据的方法及装置、介质和设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5048018A (en) * 1989-06-29 1991-09-10 International Business Machines Corporation Debugging parallel programs by serialization
CN103294596B (zh) * 2013-05-23 2016-11-16 西安电子科技大学 一种基于程序不变量的合约式软件故障预警方法
CN104731696B (zh) * 2013-12-19 2017-10-10 腾讯科技(深圳)有限公司 定位程序代码中bug的方法及相关装置
US10331542B2 (en) * 2016-06-23 2019-06-25 International Business Machines Corporation System and method for detecting and alerting unexpected behavior of software applications
CN107168881A (zh) * 2017-06-07 2017-09-15 成都四象联创科技有限公司 代码异常定位与处理方法

Also Published As

Publication number Publication date
CN108304330A (zh) 2018-07-20

Similar Documents

Publication Publication Date Title
US7017080B1 (en) Method and system for determining a fault tree of a technical system, computer program product and a computer readable storage medium
US9158514B2 (en) Method and apparatus for providing change-related information
US20150370685A1 (en) Defect localization in software integration tests
US8397104B2 (en) Creation of test plans
US6353904B1 (en) Method of automatically generating new test programs for mixed-signal integrated circuit based on reusable test-block templates according to user-provided driver file
US20160342720A1 (en) Method, system, and computer program for identifying design revisions in hardware design debugging
JP2006526842A (ja) 兆候除外付きコードブック相関を使用するシステム管理のための方法および装置
JP7404839B2 (ja) ソフトウェアプログラム不良位置の識別
US20030088810A1 (en) Methods and apparatus for determining software component sizes associated with errors
CN108304330B (zh) 内容提取方法、装置和计算机设备
JP2012150535A (ja) プログラム検証方法及び検証プログラム
JP2015011372A (ja) デバッグ支援システム、方法、プログラム及び記録媒体
US20070245327A1 (en) Method and System for Producing Process Flow Models from Source Code
US20050262399A1 (en) Aggregating and prioritizing failure signatures by a parsing program
CN108153635B (zh) 系统内存边缘测试方法、系统设备及计算机可读存储介质
US6269367B1 (en) System and method for automated identification, remediation, and verification of computer program code fragments with variable confidence factors
CN115858404B (zh) 一种基于eda的图形用户界面的测试系统
CN113392000A (zh) 测试用例执行结果分析方法、装置、设备及存储介质
US11132286B1 (en) Dynamic reordering of test case execution
US6675323B2 (en) Incremental fault dictionary
CN112631852B (zh) 宏检查方法、装置、电子设备和计算机可读存储介质
Paul et al. Redefinition of fault classes in logic expressions
CN109446192B (zh) 数据测试方法及装置
US7689399B1 (en) Automatic extraction of design properties
CN111582347B (zh) 一种故障诊断方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant