CN104424097B - 一种程序日志检测方法、推荐方法及各自对应的装置 - Google Patents

一种程序日志检测方法、推荐方法及各自对应的装置 Download PDF

Info

Publication number
CN104424097B
CN104424097B CN201310379397.5A CN201310379397A CN104424097B CN 104424097 B CN104424097 B CN 104424097B CN 201310379397 A CN201310379397 A CN 201310379397A CN 104424097 B CN104424097 B CN 104424097B
Authority
CN
China
Prior art keywords
program
statement
daily record
variable
measured
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.)
Expired - Fee Related
Application number
CN201310379397.5A
Other languages
English (en)
Other versions
CN104424097A (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.)
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Original Assignee
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
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 Huawei Technologies Co Ltd, Institute of Computing Technology of CAS filed Critical Huawei Technologies Co Ltd
Priority to CN201310379397.5A priority Critical patent/CN104424097B/zh
Publication of CN104424097A publication Critical patent/CN104424097A/zh
Application granted granted Critical
Publication of CN104424097B publication Critical patent/CN104424097B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种程序日志检测方法及装置,包括:获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,第一条件为该变量被执行定值操作后确定的定值可到达至少一条待测日志输出语句所在程序点,该程序点为可达程序点,第二条件为该变量在至少一个可达程序点处的待测日志输出程序语句中被引用;如果是,确定待测日志输出语句有效,否则,确定待测日志输出语句失效,实现了对程序中的日志输出语句检测的目的。本发明还公开了一种程序日志推荐方法及装置,实现了辅助用户为缺少或者无日志输出语句的程序推荐有效新日志输出语句的目的。

Description

一种程序日志检测方法、推荐方法及各自对应的装置
技术领域
本发明涉及程序日志领域,特别涉及一种程序日志检测方法、推荐方法及各自对应的装置。
背景技术
在程序中添加日志输出语句是一种常用的辅助诊断程序错误的手段。借助有效的日志输出语句可以提高程序错误诊断率。
目前,在程序中添加的日志输出语句主要由程序开发人员在开发过程中书写。但是,即使是具备良好编程素养的开发人员,其书写的日志也可能是有瑕疵的,经常导致在程序运行出错后修改或补充日志输出语句。
而且,在程序运行出错后才发现日志不足对程序开发、调试过程带来了不良影响,降低了日志输出语句在程序中所起的辅助诊断错误的作用。
发明内容
有鉴于此,本发明实施例的主要目的在于提供一种程序日志检测方法、推荐方法及各自对应的装置以实现对已有日志输出语句进行检测以及推荐有效的新日志输出语句的目的。
为了解决以上技术问题,本发明实施例采取的技术方案是:
第一方面,本发明实施例提供了一种程序日志检测方法,所述方法包括:
获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;
判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后确定的定值可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;
如果是,确定所述待测日志输出语句有效,否则,确定所述待测日志输出语句失效。
在第一方面的第一种可能的实现方式中,所述判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件包括:
通过采用符号执行过程并调用约束求解工具确定所述程序语句中的可行路径;
根据所确定的可行路径判断每个在所述期望涵盖的程序语句中被执行定值操作的变量的定值是否可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,且在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用。
在第一方面的第二种可能的实现方式中,所述判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件包括:
针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
如果所述比例在日志相对强度范围内,确定所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;
如果所述比例未在日志相对强度范围内,确定所述程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,在计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,还包括:
针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具,查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
第二方面,本发明实施例提供了一种程序日志检测装置,所述装置包括:
检测获取单元:用于获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;
检测判断单元:用于判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后确定的定值可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;
检测确定单元:用于如果检测判断单元判断结果为是,确定所述待测日志输出语句有效,否则,确定所述待测日志输出语句失效。
在第二方面的第一种可能的实现方式中,判断可行路径子单元:用于通过采用符号执行过程并调用约束求解工具确定所述程序语句中的可行路径;
判断日志语句子单元:用于根据所确定的可行路径判断每个在所述期望涵盖的程序语句中被执行定值操作的变量的定值是否可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为可达程序点,且在至少一个所述可达程序点处的待测日志输出程序语句中被引用。
在第二方面的第二种可能的实现方式中,所述检测判断单元包括:
查找子单元:用于针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算子单元:用于计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
比例判断子单元:用于如果所述比例在日志相对强度范围内,确定所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;如果所述比例未在日志相对强度范围内,确定所述程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述检测判断单元还包括:
排除子单元:用于在计算子单元计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
第三方面,本发明实施例提供了一种程序日志推荐方法,所述方法包括:
获取期望涵盖的程序语句;
提取期望涵盖的程序语句中的至少一个程序点;
提取出与所述程序点对应的变量,所述变量包括在所述程序点处活跃的变量,和/或者,用户在所述程序点处指定的变量;
将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量;
判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后确定的定值可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;
如果是,推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。
在第三方面的第一种可能的实现方式中,所述获取期望涵盖的程序语句包括:
如果所述程序中已存在日志输出语句,针对每个在所述程序语句中被执行定值操作的变量,判断该变量的定值是否可到达至少一条已存在的日志输出语句所在程序点,其中,所述至少一条已存在的日志输出语句所在程序点为该变量的可达已存程序点,且该变量在至少一个该变量的可达已存程序点处的日志输出程序语句中被引用,如果否,将该执行定值操作的程序语句纳入期望涵盖的程序语句;
如果所述程序中不存在日志输出语句,将所述程序中的所有程序语句纳入期望涵盖的程序语句。
在第三方面的第二种可能的实现方式中,还包括:
如果期望涵盖的程序语句中被执行定值操作的变量不满足第一条件和/或者不满足第二条件,提取新程序点,返回到提取出与所述程序点对应的变量的步骤。
结合第三方面的第一种可能的实现方式至第二种可能的实现方式中的任一种,在第三种可能的实现方式中所述判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件包括:
针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
如果所述比例在日志相对强度范围内,确定所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;
如果所述比例未在日志相对强度范围内,确定所述程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
结合第三方面的第三种可能的实现方式,在第四种可能的实现方式中,在计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,还包括:
针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具,查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
结合第三方面第三种可能的实现方式,在第五种可能的实现方式中,如果所述比例在日志相对强度范围内,还将所述比例作为日志相对强度范围的下限,更新所述日志相对强度范围;
所述推荐在所述待测日志输出语句所在程序点插入待测日志输出语句包括:
将该待测日志输出语句所在程序点及被该待测日志输出语句引用的变量记录在一条日志推荐提示中;
判断是否还继续进行推荐检测;
如果是,提取新程序点,返回到提取出与所述程序点对应的变量的步骤;
如果否,反馈最后记录的一条日志推荐提示。
在第三方面第六种可能的实现方式中,还包括:
如果已根据所述推荐在程序中插入了日志输出语句,将所述程序中所有程序语句作为期望涵盖的程序语句,将所述程序中所有日志输出语句作为待测日志输出语句,并判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,如果不满足,返回到获取期望涵盖的程序语句的步骤。
第四方面,本发明实施例提供了一种程序日志推荐装置,所述装置包括:
程序语句获取单元:用于获取期望涵盖的程序语句;
推荐位置提取单元:用于提取所述期望涵盖的程序语句中的至少一个程序点;
推荐变量提取单元:用于提取出与所述程序点对应的变量,所述变量包括在所述程序点处活跃的变量,和/或者,用户在所述程序点处指定的变量;
待测日志获取单元:用于将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量;
推荐判断单元:用于判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后确定的定值可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;
推荐确定单元:用于如果推荐判断单元判断结果为是,推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。
在第四方面的第一种可能的实现方式中,所述程序语句获取单元:用于如果所述程序中已存在日志输出语句,针对每个在所述程序语句中被执行定值操作的变量,判断该变量的定值是否可到达至少一条已存在的日志输出语句所在程序点,其中,所述至少一条已存在的日志输出语句所在程序点为可达已存程序点,且该变量在至少一个所述可达已存程序点处的日志输出程序语句中被引用,如果否,将该执行定值操作的程序语句纳入期望涵盖的程序语句;如果所述程序中不存在日志输出语句,将所述程序中的所有程序语句纳入期望涵盖的程序语句。
在第四方面的第二种可能的实现方式中,还包括:
重新推荐单元:用于如果期望涵盖的程序语句中被执行定值操作的变量不满足第一条件或者不满足第二条件,提取新程序点,重新触发推荐变量提取单元。
结合第四方面的第一种可能的实现方式至第二种可能的实现方式中的任一种,所述推荐判断单元包括:
查找子单元:用于针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算子单元:用于计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
比例判断子单元:用于如果所述比例在日志相对强度范围内,确定所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;如果所述比例未在日志相对强度范围内,确定所述程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
结合第四方面的第三种可能的实现方式,在第四种可能的实现方式中,所述推荐判断单元还包括:
排除子单元:用于在计算子单元计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具,查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
结合第四方面第三种可能的实现方式,在第五种可能的实现方式中,所述比例判断子单元:还用于如果所述比例在日志相对强度范围内,将所述比例作为日志相对强度范围的下限,更新所述日志相对强度范围;
所述推荐确定单元包括:
推荐记录子单元:用于将该待测日志输出语句所在程序点及被该待测日志输出语句引用的变量记录在一条日志推荐提示中;
继续判断子单元:用于判断是否还继续进行推荐检测;
继续确定子单元:用于如果继续判断子单元判断结果为是时,提取新程序点,重新触发推荐变量提取单元;
反馈推荐子单元:用于如果继续判断子单元判断结果为否时,反馈最后记录的一条日志推荐提示。
在第四方面第六种可能的实现方式中,还包括:
综合检测单元:用于如果已根据所述推荐在程序中插入了日志输出语句,将所述程序中所有程序语句作为期望涵盖的程序语句,将所述程序中所有日志输出语句作为待测日志输出语句,并判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,如果不满足,重新触发程序语句获取单元执行。
可见本发明具有如下有益效果:
程序中有效的日志输出语句应该将被执行定值操作的变量在被更新之前输出,使用户根据输出的值确定执行该定值操作的程序语句是否正确,根据这一原则,本发明实施例提供的程序日志检测方法在获取程序中需要检测的待测日志输出语句所在程序点、被待测日志输出语句引用的变量、以及期望涵盖的程序语句之后,判断程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为所述变量的定值可到达所述待测日志输出语句中的至少一条日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为可达程序点,所述第二条件为所述变量在至少一个所述可达程序点处的待测日志输出程序语句中被引用,从而可以判断出期望涵盖的程序语句中每个被执行定值操作的变量是否在被更新之前可被待测日志输出语句输出,如果确定判断结果为是,则可以确定待测日志输出语句有效,否则则可以确定待测日志输出语句失效,从而实现了检测日志输出语句是否有效的目的。
另外,本发明实施例提供的程序日志推荐方法在在获取期望涵盖的程序语句、提取期望涵盖的程序语句中的至少一个程序点之后,提取出与所述程序点对应的变量,将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量,从而可以判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行定值操作后确定的定值可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用,如果是,则可以推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句,从而实现了辅助用户为缺少或者无日志输出语句的程序推荐有效的新日志输出语句的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的程序日志检测方法的流程图之一;
图2是本发明实施例提供的程序日志检测方法涉及的程序语句示例图;
图3是本发明实施例提供的程序日志检测方法的流程图之二;
图4是本发明实施例提供的程序日志检测装置的结构示意图;
图5是本发明实施例提供的程序日志推荐方法的流程图之一;
图6是本发明实施例提供的程序日志推荐方法的流程图之二;
图7是本发明实施例提供的程序日志推荐装置的结构示意图。
具体实施方式
为使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明实施例作进一步详细的说明。
为了实现对已有日志输出语句的检测,本发明实施例提供了如下的程序日志检测方法。
参见图1,示出了本发明实施例提供的程序日志检测方法的流程图之一。在该实施例中,可以以程序中的所有已有日志输出语句作为待测日志输出语句,也就是将所有已有日志输出语句作为检测对象,也可以以程序中的某一条日志输出语句作为待测日志输出语句,也就是将该一条日志输出语句作为检测对象,等等,具体可以根据实施需要进行设置,在本发明中并不进行限制。该方法可以包括:
S110、获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;
其中,程序中的日志输出语句通常为日志打印语句,例如“fprintf(fp,"Node%dis shutdown after waiting%d seconds\n",busy?nid:last_nid,end_tm-start_tm)”。
其中,程序点指程序中相邻的两条程序语句之间的位置,对于日志输出语句来说,日志输出语句所在程序点指的是该日志输出语句与位于其之前的相邻语句之间的位置。
其中,被待测日志输出语句引用的变量指的是在该待测日志输出语句所打印的表达式中包含的变量。
S120、判断所述程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后确定的定值可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;
为了使第一条件及第二条件更加易于理解,结合图2所示一代码片段进行说明:
例如,图2所示的代码片段中程序语句201“chunk=null”包含了对变量chunk的定值操作,由于程序语句201“chunk=null”与待测日志输出语句202“fprintf(fp,"…",chunk)”所在程序点存在可行路径,且变量chunk的定值从程序语句201“chunk=null”到待测日志输出语句202“fprintf(fp,"…",chunk)”所在程序点处一直未被更新,可见,变量chunk的定值null可到达该待测日志输出语句202。因此,程序语句201“chunk=null”中被执行定值操作的变量chunk满足第一条件,由于变量chunk同时在该待测日志输出语句202中被引用,因此,程序语句201“chunk=null”中被执行定值操作的变量chunk同时满足第二条件;
再见图2所示的代码片段中程序语句203“chunk=malloc(…)”中包含了对变量chunk的定值操作,虽然程序语句203“chunk=malloc(…)”与待测日志输出语句204“fprintf(fp,"…",chunk)”所在程序点存在可行路径,但变量chunk的定值从程序语句203“chunk=malloc(…)”到待测日志输出语句204所在程序点之前已被程序语句205“free(chunk)”处更新,可见,变量chunk的定值malloc(…)不能够到达该待测日志输出语句204。因此,程序语句203“chunk=malloc(…)”中被执行定值操作的变量chunk不满足第一条件。
S130、如果是,确定所述待测日志输出语句有效,否则,确定所述待测日志输出语句失效。
本发明人发现当程序语句中被执行定值操作的变量满足第一条件且满足第二条件,即被执行定值操作的变量的定值可到达至少一条日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,且在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用时,该变量的值在变化之前可被日志输出语句输出,根据输出的值可以确定执行该定值操作的程序语句是否有效。也就是说,被执行定值操作的变量满足第一条件且满足第二条件的程序语句可被日志输出语句有效检查。因此,本发明实施例在获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句之后,判断程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,如果是,则可以确定待测日志输出语句实现了对期望涵盖的所有程序语句的有效检查,否则,可以确定待测日志输出语句未能对期望涵盖的所有程序语句有效检查,实现了检测待测日志输出语句是否有效的目的。
在本发明实施例一种可能的实现方式中,通过采用符号执行过程并调用约束求解工具确定所述期望涵盖的程序语句中的可行路径,根据所确定的可行路径判断每个在所述期望涵盖的程序语句中被执行定值操作的变量的定值是否可到达至少一条所述待测日志输出语句所在程序点,该程序点为该变量的可达程序点、且在至少一个该变量的可达程序点处的待测日志输出语句中被引用。
其中,符号执行是指把程序输入部分或全部地用符号替代,这样每执行一条程序语句,就会生成一个对应的符号表达式,如果程序中存在分支或循环,会分别对真假两个分支以及循环的不同次展开生成对应的符号表达式,然后取或运算,生成描述该分支或循环的所有可能行为的逻辑表达式,再通过调用约束求解工具可以得到程序中的可行路径。
下面,结合具体应用场景对该实施方式进行详细介绍。例如,在本发明实施例的一应用场景中,待测日志输出语句Aj为需要检测的日志输出语句,程序中存在其他可到达Aj的日志输出语句,则待测日志输出语句Aj期望涵盖的程序语句为可到达待测日志输出语句Aj的相邻日志输出语句Ai与待测日志输出语句Aj之间可行路径上的程序语句,具体地,可以通过采用符号执行过程并调用约束求解工具确定日志输出语句Ai与待测日志输出语句Aj的可行路径上的程序语句,再判断该可行路径上的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,如果Ai与待测日志输出语句Aj的可行路径上的每个程序语句中被执行定值操作的变量var均满足第一条件且满足第二条件,则待测日志输出语句Aj有效,实现了对该可行路径上的每个被执行定值操作的变量的检查。可以理解的是,如果Ai与待测日志输出语句Aj的可行路径上的某个程序语句中被执行定值操作的变量var不满足第一条件和/或者第二条件,但其在程序中另一待测日志输出语句涵盖的范围内满足第一条件且满足第二条件,则另一日志输出语句实现了对该变量var的检查,待测日志输出语句Aj仍然有效。
在本发明实施例另一种可能的实现方式中,考虑到上述采用符号执行及调用约束求解工具的实现方式存在开销较大的缺陷,又提出了一种近似方案。在该近似方案中,通过计算期望涵盖的程序语句中,所有影响待测日志输出语句引用的变量在待测日志输出语句所在程序点处的定值的可能被执行到的程序语句数量与期望涵盖的程序语句数量的比例来判断程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件。具体地,参见图3示出了该实现方式提供的程序日志检测方法的流程图,该方法可以包括:
S310、获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;
S320、针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
其中,程序切片是一种程序缩减技术,可以指静态的程序后向切片。例如可以利用常规的程序切片工具,输入一个用二元组表示的切片标准<P,V>,其中P是待测日志输出语句所在程序点,V待测日志输出语句中引用的变量,从而利用程序切片工具可以获得以<P,V>为切片标准生成的程序切片,这些程序切片是在程序中影响变量V在P点处的定值的所有可能被执行到的程序语句。这些语句构成了期望涵盖的程序语句的子集,称为期望涵盖的程序语句的程序切片。
需要注意的是,由于程序切片是在期望涵盖的程序语句中影响待测日志输出语句引用的变量在待测日志输出语句所在程序点处的定值的所有可能被执行到的程序语句,因此,这些程序切片不仅包括与待测日志输出语句所在程序点存在可行路径的程序语句,还包括与待测日志输出语句所在程序点虽然不存在可行路径但在程序流程上可能到达的程序语句。由于与待测日志输出语句所在程序点虽然不存在可行路径但在程序流程上可能到达的程序语句数量较少,可以忽略,因此,该方案虽然不如上述符号执行及调用约束求解可行路径的方案精确,但是可以近似准确,而且运算速度较快、在实际中可以满足检测需要。
还需要注意的是,由于在该近似方案中已查程序语句集合包括的是期望涵盖的程序语句中影响待测日志输出语句引用的变量在待测日志输出语句所在程序点处的定值的所有可能被执行到的程序语句,因此,已查程序语句集合中包括两类程序语句:
第一类是其中被执行定值操作的变量满足第一条件且满足第二条件,也就是被有效检查的程序语句;
第二类是其中被执行定值操作的变量不满足第一条件或第二条件,但其中被执行定值操作的变量在上述第一类程序语句中被引用的程序语句;
在该实施例中,虽然第二类语句中被执行定值操作的变量不满足第一条件或第二条件,但是由于其中被执行定值操作的变量在上述第一类程序语句中被引用,所以第一类程序语句中变量的定值受第二类程序语句的变量的值的影响。因此,对第一类程序语句的有效检查能够实现对第二类程序语句的有效检查,因此,可以近似地认为第二类程序语句中被执行定值操作的变量满足第一条件且满足第二条件。因此,可以近似地认为已查程序语句集合中包括的第一类程序语句及第二类程序语句中被执行定值操作的变量均满足第一条件且满足第二条件。
需要说明的是,当所获得的已查程序语句集合中有重复程序语句时,需要排除重复的部分。
S330、计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
S340、如果所述比例在日志相对强度范围内,确定所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;
S350、如果所述比例未在日志相对强度范围内,确定所述程序语句的被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
在该实施例中,预先设置了日志强度范围,如果已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例在日志相对强度范围内,则可以近似地认为所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件,如果不在日志相对强度范围内,则可以认为被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。因此,在该实施例中通过计算期望涵盖的程序语句中,所有影响待测日志输出语句引用的变量在待测日志输出语句所在程序点处的定值的可能被执行到的程序语句数量与期望涵盖的程序语句的规模的比例,可以判断程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件。该近似方案与上述采用符号执行及调用约束求解工具的实现方式比较,计算过程简单,运算量小,效率更高。
在本发明实施例再一可能的实现方式中,考虑到近似方案中所得到的已查程序语句集合中不仅包括与待测日志输出语句所在程序点存在可行路径的程序语句,还包括与待测日志输出语句所在程序点虽然不存在可行路径但在程序流程上可能到达的程序语句。为了能够使该近似方案更加准确,该实现方式中提出,在步骤S320获得已查程序语句集合之后,在计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,可以进一步将与待测日志输出语句所在程序点不存在可行路径的程序语句从已查程序语句集合中排除。具体地,在计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,还可以包括:针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
与程序日志检测方法相对应的,本发明实施例还提供了一种程序日志检测装置。参见图4,示出了本发明实施例提供的程序日志检测装置的流程图。如图所示,该装置可以包括:
检测获取单元410:可以用于获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;
检测判断单元420:可以用于判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行定值操作后确定的定值可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;
检测确定单元430:可以用于如果检测判断单元判断结果为是,确定所述待测日志输出语句有效,否则,确定所述待测日志输出语句失效。
应用该实施例提供的程序日志检测装置,可以由检测获取单元410在获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句之后,由检测判断单元420判断程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,从而检测确定单元430可以根据检测判断单元420的判断结果为是时,确定待测日志输出语句实现了对期望涵盖的所有程序语句的有效检查,否则,可以确定待测日志输出语句未能对期望涵盖的所有程序语句有效检查,实现了检测待测日志输出语句是否有效的目的。
在该程序日志检测装置的一种可能的实现方式中,所述检测判断单元420可以包括:
判断可行路径子单元421:可以用于通过采用符号执行过程并调用约束求解工具确定所述程序语句中的可行路径;
判断日志语句子单元422:可以用于根据所确定的可行路径判断每个在所述期望涵盖的程序语句中被执行定值操作的变量的定值是否可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为可达程序点,且在至少一个所述可达程序点处的待测日志输出语句中被引用。
该实现方式由于采用符号执行过程并调用约束求解工具确定程序语句中的可行路径,根据可行路径判断每个在所述期望涵盖的程序语句中被执行定值操作的变量的定值是否可到达至少一条待测日志输出语句所在程序点、该程序点为可达程序点,且在至少一个所述可达程序点处的待测日志输出语句中被引用,因此检测结果比较准确。
在另一种可能的实现方式中,针对上述采用符号执行及调用约束求解工具的实现方式存在开销较大的缺陷,提出了与上一实现方式不同的近似方案。具体地,在该实现方式中所述检测判断单元420可以包括:
查找子单元423:用于针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算子单元424:用于计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
比例判断子单元425:用于如果所述比例在日志相对强度范围内,确定所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;如果所述比例未在日志相对强度范围内,确定所述程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
在该实现方式中,检测判断单元420还可以包括排除子单元426:可以用于在计算子单元计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
在该实现方式中,由查找子单元423利用程序切片技术获得期望涵盖的程序语句中,所有影响待测日志输出语句引用的变量在待测日志输出语句所在程序点处的定值的可能被执行到的程序语句,即已查程序语句集合中包含的所有程序语句,从而可以由计算子单元424计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例,再由比例判断子单元425判断出比例在日志相对强度范围内,则可以近似地认为所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件,如果不在日志相对强度范围内,则可以认为被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。因此,在该实现方式所采取的近似方案与上述采用符号执行及调用约束求解工具的实现方式比较,计算过程简单,运算量小,效率更高。
另外,本发明实施例还提供了一种程序日志推荐方法。参见图5,示出了本发明实施例提供的程序日志推荐方法的流程图之一。如图所示,该实施例包括:
S510、获取期望涵盖的程序语句;
S520、提取所述期望涵盖的程序语句中的至少一个程序点;
例如,可以通过遍历期望涵盖的程序语句,在每次推荐时自动提取期望涵盖的程序语句中未曾作为待测日志输出语句所在程序点的至少一个程序点,和/或者,提取用户指定的至少一个程序点。
S530、提取出与所述程序点对应的变量,所述变量包括在所述程序点处活跃的变量,和/或者,用户在所述程序点处指定的变量;
S540、将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量;
S550、判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被所述执行定值操作后确定的定值可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;
S560、如果是,推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。
为了满足程序中所有程序语句被日志输出语句有效检查的要求,在根据所述推荐在程序中插入了日志输出语句之后,还可以检测程序中所有日志输出语句是否已有效检查了期望其涵盖的程序语句。具体地,该实施例还可以包括:
S570、如果已根据所述推荐在程序中插入了日志输出语句,则将所述程序中所有程序语句作为期望涵盖的程序语句,将所述程序中所有日志输出语句作为待测日志输出语句,并判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件;
S580、如果不满足,返回到步骤S510继续进行日志推荐;
S590、如果满足,则可以结束推荐流程。
另外,考虑到所推荐的日志输出语句所在程序点实际上可能为程序中已有日志输出语句所在程序点,区别可能仅在于所推荐的日志输出语句引用的变量。因此,在推荐日志输出语句时,可以判断该程序点是否与所述程序中已有日志输出语句所在程序点相同,如果相同,则推荐在该程序点已有日志输出语句中补充待测日志输出语句中引用的变量,如果不相同,则推荐在该程序点插入待测日志输出语句。
在推荐日志输出语句不成功的情况下,本发明实施例还可以获取新的待测日志输出语句程序点,针对新的待测日志输出语句进行日志输出语句的推荐。具体地,该实施例提供的程序日志推荐方法还可以包括步骤S580:
S591、如果步骤S550判断出期望涵盖的程序语句中被执行定值操作的变量不满足第一条件或者不满足第二条件,提取新程序点,返回到步骤S530提取出与所述程序点对应的变量的步骤。
例如,所提取的新程序点可以通过提取期望涵盖的程序语句中未曾作为待测日志输出语句所在程序点的至少一个程序点,和/或者提取用户指定的新程序点实现。
应用该实施例提供的方法,由于在获取期望涵盖的程序语句、提取期望涵盖的程序语句中的至少一个程序点之后,提取出与所述程序点对应的变量,将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量,从而可以判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行定值操作后确定的定值可到达至少一条待测日志输出语句所在程序点,该程序点为可达程序点,所述第二条件为该变量在至少一个所述可达程序点处的待测日志输出语句中被引用,如果是,则可以推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。
例如,可以在户未指定日志输出语句的插入位置(即:程序点)及日志输出语句应引用的变量时,推荐有效的日志输出语句所在程序点及其应引用的变量,可以在用户指定了日志输出语句的插入位置时,推荐在该位置上有效的日志输出语句应引用的变量,可以在用户指定了日志输出语句需要引用的变量时,推荐该日志输出语句应插入的位置,从而实现辅助用户添加有效的新日志输出语句的目的。可见,应用本发明实施例方法推荐的日志输出语句能够提高程序的日志的有效性。
下面,再对本发明实施例提供的程序日志推荐方法的一种可能的实现方式进行详细介绍。参见图6,示出了本发明实施例提供的程序日志推荐方法的流程图之二。如图所示,该实施例包括:
S610、判断程序中是否已存在日志输出语句;
S611、如果所述程序中已存在日志输出语句,针对每个在所述程序语句中被执行定值操作的变量,判断该变量的定值是否可到达至少一条已存在的日志输出语句所在程序点,其中,所述至少一条已存在的日志输出语句所在程序点为可达已存程序点,且该变量在至少一个所述可达已存程序点处的日志输出程序语句中被引用;
S612、如果否,将该执行定值操作的程序语句纳入期望涵盖的程序语句;如果所述程序中不存在日志输出语句,将所述程序中的所有程序语句纳入期望涵盖的程序语句;
由于在上述步骤S610到S612中将程序中被已有日志输出语句有效检查的所有程序语句排除,从而可以在进行日志推荐检测时减少运算量,提高检测速度,尽快补充新日志输出语句。假设被已有日志输出语句有效检查的所有程序语句的集合为Aset,则所获取的期望涵盖的程序语句为
S620、提取所述期望涵盖的程序语句所在的程序点中至少一个程序点和/或者提取用户指定的程序点;
S630、提取出在所述待测日志输出语句所在程序点活跃的变量,和/或者,提取用户在所述待测日志输出语句所在程序点指定的变量;
S640、将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量;
S650、针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
S651、针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具,查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除;
S652、计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
S653、如果所述比例在日志相对强度范围内,确定所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件,执行以下S660到S664的步骤;
S660、将所述比例作为日志相对强度范围的下限,更新所述日志相对强度范围;
S661、将该待测日志输出语句所在程序点及被该待测日志输出语句引用的变量记录在一条日志推荐提示中;
S662、判断是否还继续进行推荐检测;
S663、如果是,提取新程序点,返回到所述步骤S630提取出与所述程序点对应的变量的步骤;
S664、如果否,反馈最后记录的一条日志推荐提示;
可以理解的是,由于在步骤S660中更新了日志相对强度范围,从而可以在返回到所述步骤S630之后,只将比例更高的日志输出语句所在程序点及其引用的变量记录到日志推荐提示中,而且由于在步骤S664中反馈的是最后记录的一条日志推荐提示,所推荐的是比例最高的日志输出语句,可以提高程序中日志输出语句的有效性。
S670、如果已根据最后记录的一条日志推荐提示在程序中插入了日志输出语句,则将所述程序中所有程序语句集合作为期望涵盖的程序语句,将所述程序中所有日志输出语句所在程序点作为待测日志输出语句所在程序点,并针对每条待测日志输出语句执行查找步骤以获得已查程序语句集合,计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例,如果所述比例未在预设的日志综合强度范围内,返回到步骤S610继续进行日志推荐。
需要说明的是,该日志综合强度范围可以为预先设置或者由用户指定(例如,可以预设或指定为[1,1]),在本发明中并不进行限制。并且,在返回到步骤S610时还需将日志相对强度范围恢复为在推荐执行之前系统预设或用户指定的日志相对强度范围(例如,可以预设或指定为[0,1]),以避免在新一轮的日志推荐过程中更新的日志相对强度范围的下限阈值过高而无法再推荐合适的日志输出语句。
S680、如果不满足,返回到步骤S610继续进行日志推荐;
S690、如果满足,结束推荐流程;
S691、如果步骤S652判断出所述比例未在日志相对强度范围内,确定所述程序语句的被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量,提取新程序点,返回到步骤S630提取出与所述程序点对应的变量的步骤。
应用该实施例提供的方法,由于在获取期望涵盖的程序语句时将程序中被已有日志输出语句有效检查的所有程序语句排除,从而可以在进行日志推荐检测时减少运算量,提高检测速度,尽快补充新日志输出语句;由于在判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件时,通过判断所有影响待测日志输出语句引用的变量在待测日志输出语句所在程序点处的定值的可能被执行到的程序语句数量与期望涵盖的程序语句数量的比例是否在日志相对强度范围内实现,降低了运算量,提高了推荐的效率;而且在被待测日志输出语句有效检查的程序语句数量与期望涵盖的程序语句数量的比例在日志相对强度范围内时,更新了日志相对强度范围,从而可以将比例更高的日志输出语句所在程序点及其引用的变量记录到日志推荐提示中,而且反馈的是最后记录的一条日志推荐提示,所推荐的是比例最高的日志输出语句,可以尽量以最少的日志输出语句最大可能的提高程序中日志输出语句的有效性。可见,该实施例提供的方法可以实现高效率的辅助用户添加有效的新日志输出语句的目的。
与程序日志推荐方法相对应的,本发明实施例还提供了一种程序日志推荐装置。参见图7,示出了本发明实施例提供的程序日志推荐装置的结构示意图。如图所示,该实施例包括:
程序语句获取单元710:可以用于获取期望涵盖的程序语句;
推荐位置提取单元720:可以用于提取所述期望涵盖的程序语句中的至少一个程序点;
推荐变量提取单元730:可以用于提取出与所述程序点对应的变量,所述变量包括在所述程序点处活跃的变量,和/或者,用户在所述程序点处指定的变量;
待测日志获取单元740:可以用于将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量;
推荐判断单元750:可以用于判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行定值操作后,确定的定值可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;
推荐确定单元760:可以用于如果推荐判断单元判断结果为是,推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。
可见,应用本发明实施例提供的程序日志推荐装置,由于在程序语句获取单元710获取期望涵盖的程序语句、推荐位置提取单元720提取期望涵盖的程序语句中的至少一个程序点之后,由推荐变量提取单元730提取出与所述程序点对应的变量,由临时插入日志单元740将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量,从而由推荐判断单元750判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,由推荐确定单元760确定推荐判断单元判断结果为是时,推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。可见,应用本发明实施例方法推荐的日志输出语句能够提高程序的日志的有效性。
下面,再对本发明实施例提供的程序日志推荐装置的可能的实现方式进行详细介绍。例如,在该实现方式中,如图7所示:
所述程序语句获取单元710:可以用于如果所述程序中已存在日志输出语句,针对每个在所述程序语句中被执行定值操作的变量,判断该变量的定值是否可到达至少一条已存在的日志输出语句所在程序点,其中,所述至少一条已存在的日志输出语句所在程序点为可达已存程序点,且该变量在至少一个所述可达已存程序点处的日志输出程序语句中被引用,如果否,将该执行定值操作的程序语句纳入期望涵盖的程序语句;如果所述程序中不存在日志输出语句,将所述程序中的所有程序语句纳入期望涵盖的程序语句。
为了使日志输出语句实现对程序中所有程序语句的有效性检查,该装置还可以包括重新推荐单元770:可以用于如果期望涵盖的程序语句中被执行定值操作的变量不满足第一条件或者不满足第二条件,提取新程序点,重新触发推荐变量提取单元730。
在推荐判断单元750运算较快的一种实现方式中,该推荐判断单元750可以包括:
查找子单元751:可以用于针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算子单元752:可以用于计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
比例判断子单元753:可以用于如果所述比例在日志相对强度范围内,确定所述程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;如果所述比例未在日志相对强度范围内,确定所述程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
考虑到查找子单元查找出的已查程序语句集合中的程序语句中包括少量与待测日志输出语句不存在可行路径的程序语句,为了使推荐结果更加准确,所述推荐判断单元750还可以包括排除子单元754:可以用于在计算子单元计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具,查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
为了能够尽量以最少的日志输出语句最大可能的提高程序中日志输出语句的有效性,该装置的比例判断子单元753:还可以用于如果所述比例在日志相对强度范围内,将所述比例作为日志相对强度范围的下限,更新所述日志相对强度范围;且,所述推荐确定单元760可以包括:
推荐记录子单元761:可以用于将该待测日志输出语句所在程序点及被该待测日志输出语句引用的变量记录在一条日志推荐提示中;
继续判断子单元762:可以用于判断是否还继续进行推荐检测;
继续确定子单元763:可以用于如果继续判断子单元判断结果为是时,提取新程序点,重新触发推荐变量提取单元;
反馈推荐子单元764:可以用于如果继续判断子单元判断结果为否时,反馈最后记录的一条日志推荐提示。
综合以上实现方式可见,本发明实施例提供的装置可以实现高效率的辅助用户添加有效的新日志输出语句的目的。
进一步地,本发明实施例还提供一种终端的硬件构成。
至少一个网络接口或者其他通信接口,存储器,和至少一个通信总线,用于实现这些装置之间的连接通信。处理器用于执行存储器中存储的可执行模块,例如计算机程序。存储器可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。
在一些实施方式中,存储器中存储了程序指令,程序指令可以被处理器执行,其中,程序指令用于执行本发明实施例所述的方法,例如:可以包括:
获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行定值操作后确定的定值可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;如果是,确定所述待测日志输出语句有效,否则,确定所述待测日志输出语句失效。
和/或者,
可以包括:获取期望涵盖的程序语句;提取期望涵盖的程序语句中的至少一个程序点;提取出与所述程序点对应的变量,所述变量包括在所述程序点处活跃的变量,和/或者,用户在所述程序点处指定的变量;将每个所提取的程序点各自作为一个待检测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待检测日志输出语句引用的变量;判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行定值操作后确定的定值可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出程序语句中被引用;如果是,推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。
可以理解的是,所述程序指令执行的本发明实施例的方法可以包括本文所述各实施例所述的方法及基于本发明实施例的方法的其他实现方式,这里不再赘述。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备,等等)执行本发明各个实施例或者实施例的某些部分所述的方法。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
而且,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (22)

1.一种程序日志检测方法,其特征在于,包括:
获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;
判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后,确定的定值可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出语句中被引用;
如果是,确定所述待测日志输出语句有效,否则,确定所述待测日志输出语句失效。
2.根据权利要求1所述的方法,其特征在于,所述判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件包括:
通过采用符号执行过程并调用约束求解工具确定所述期望涵盖的程序语句中的可行路径;
根据所确定的可行路径判断每个在所述期望涵盖的程序语句中被执行定值操作的变量的定值是否可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为可达程序点,且在至少一个所述可达程序点处的待测日志输出语句中被引用。
3.根据权利要求1所述的方法,其特征在于,所述判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件包括:
针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
如果所述比例在日志相对强度范围内,确定所述期望涵盖的程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;
如果所述比例未在日志相对强度范围内,确定所述期望涵盖的程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
4.根据权利要求3所述的方法,其特征在于,在计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,还包括:
针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具,查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
5.一种程序日志检测装置,其特征在于,包括:
检测获取单元:用于获取程序中需要检测的待测日志输出语句所在程序点、以及期望涵盖的程序语句;
检测判断单元:用于判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后确定的定值可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出语句中被引用;
检测确定单元:用于如果检测判断单元判断结果为是,确定所述待测日志输出语句有效,否则,确定所述待测日志输出语句失效。
6.根据权利要求5所述的装置,其特征在于,所述检测判断单元包括:
判断可行路径子单元:用于通过采用符号执行过程并调用约束求解工具确定所述期望涵盖的程序语句中的可行路径;
判断日志语句子单元:用于根据所确定的可行路径判断每个在所述期望涵盖的程序语句中被执行定值操作的变量的定值是否可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为可达程序点,且在至少一个所述可达程序点处的待测日志输出语句中被引用。
7.根据权利要求5所述的装置,其特征在于,所述检测判断单元包括:
查找子单元:用于针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算子单元:用于计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
比例判断子单元:用于如果所述比例在日志相对强度范围内,确定所述期望涵盖的程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;如果所述比例未在日志相对强度范围内,确定所述期望涵盖的程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
8.根据权利要求7所述的装置,其特征在于,所述检测判断单元还包括:
排除子单元:用于在计算子单元计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
9.一种程序日志推荐方法,其特征在于,包括:
获取期望涵盖的程序语句;
提取所述期望涵盖的程序语句中的至少一个程序点;
提取出与所述程序点对应的变量,所述变量包括在所述程序点处活跃的变量,和/或者,用户在所述程序点处指定的变量;
将每个所提取的程序点各自作为一个待测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待测日志输出语句引用的变量;
判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后确定的定值可到达至少一条所述待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出语句中被引用;
如果是,推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。
10.根据权利要求9所述的方法,其特征在于,所述获取期望涵盖的程序语句包括:
如果所述程序中已存在日志输出语句,针对每个在所述期望涵盖的程序语句中被执行定值操作的变量,判断该变量的定值是否可到达至少一条已存在的日志输出语句所在程序点,其中,所述至少一条已存在的日志输出语句所在程序点为可达已存程序点,且该变量在至少一个所述可达已存程序点处的日志输出语句中被引用,如果否,将该执行定值操作的程序语句纳入期望涵盖的程序语句;
如果所述程序中不存在日志输出语句,将所述程序中的所有程序语句纳入期望涵盖的程序语句。
11.根据权利要求9所述的方法,其特征在于,还包括:
如果期望涵盖的程序语句中被执行定值操作的变量不满足第一条件和/或者不满足第二条件,提取新程序点,返回到提取出与所述程序点对应的变量的步骤。
12.根据权利要求9-11任一项所述的方法,其特征在于,所述判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件包括:
针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
如果所述比例在日志相对强度范围内,确定所述期望涵盖的程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;
如果所述比例未在日志相对强度范围内,确定所述期望涵盖的程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
13.根据权利要求12所述的方法,其特征在于,在计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,还包括:
针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具,查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
14.根据权利要求12所述的方法,其特征在于,如果所述比例在日志相对强度范围内,还将所述比例作为日志相对强度范围的下限,更新所述日志相对强度范围;
所述推荐在所述待测日志输出语句所在程序点插入待测日志输出语句包括:
将该待测日志输出语句所在程序点及被该待测日志输出语句引用的变量记录在一条日志推荐提示中;
判断是否还继续进行推荐检测;
如果是,提取新程序点,返回到提取出与所述程序点对应的变量的步骤;
如果否,反馈最后记录的一条日志推荐提示。
15.根据权利要求9所述的方法,其特征在于,还包括:
如果已根据所述推荐在程序中插入了日志输出语句,将所述程序中所有程序语句作为期望涵盖的程序语句,将所述程序中所有日志输出语句作为待测日志输出语句,并判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,如果不满足,返回到获取期望涵盖的程序语句的步骤。
16.一种程序日志推荐装置,其特征在于,包括:
程序语句获取单元:用于获取期望涵盖的程序语句;
推荐位置提取单元:用于提取所述期望涵盖的程序语句中的至少一个程序点;
推荐变量提取单元:用于提取出与所述程序点对应的变量,所述变量包括在所述程序点处活跃的变量,和/或者,用户在所述程序点处指定的变量;
待测日志获取单元:用于将每个所提取的程序点各自作为一个待测日志输出语句所在程序点,以及,将每个程序点对应的变量作为该程序点的待测日志输出语句引用的变量;
推荐判断单元:用于判断所述期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,所述第一条件为该变量被执行所述定值操作后确定的定值可到达至少一条待测日志输出语句所在程序点,其中,所述至少一条待测日志输出语句所在程序点为该变量的可达程序点,所述第二条件为该变量在至少一个该变量的可达程序点处的待测日志输出语句中被引用;
推荐确定单元:用于如果推荐判断单元判断结果为是,推荐在所述待测日志输出语句所在程序点插入所述待测日志输出语句。
17.根据权利要求16所述的装置,其特征在于,所述程序语句获取单元:用于如果所述程序中已存在日志输出语句,针对每个在所述期望涵盖的程序语句中被执行定值操作的变量,判断该变量的定值是否可到达至少一条已存在的日志输出语句所在程序点,其中,所述至少一条已存在的日志输出语句所在程序点为可达已存程序点,且该变量在至少一个所述可达已存程序点处的日志输出语句中被引用,如果否,将该执行定值操作的程序语句纳入期望涵盖的程序语句;如果所述程序中不存在日志输出语句,将所述程序中的所有程序语句纳入期望涵盖的程序语句。
18.根据权利要求16所述的装置,其特征在于,还包括:
重新推荐单元:用于如果期望涵盖的程序语句中被执行定值操作的变量不满足第一条件或者不满足第二条件,提取新程序点,重新触发推荐变量提取单元。
19.根据权利要求16-18任一项所述的装置,其特征在于,所述推荐判断单元包括:
查找子单元:用于针对每条待测日志输出语句执行查找步骤,其中所述查找步骤包括:求解期望涵盖的程序语句中,以所针对的待测日志输出语句所在程序点、及在所针对的待测日志输出语句中被引用的变量集合为切片标准获得的程序切片,将所述程序切片纳入已查程序语句集合;
计算子单元:用于计算所述已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例;
比例判断子单元:用于如果所述比例在日志相对强度范围内,确定所述期望涵盖的程序语句中每个被执行定值操作的变量均满足第一条件且满足第二条件;如果所述比例未在日志相对强度范围内,确定所述期望涵盖的程序语句中被执行定值操作的变量中存在不满足第一条件和/或者第二条件的变量。
20.根据权利要求19所述的装置,其特征在于,所述推荐判断单元还包括:
排除子单元:用于在计算子单元计算已查程序语句集合中所有程序语句的数量与期望涵盖的程序语句的数量的比例之前,针对所述已查程序语句集合中的程序语句,采用符号执行过程并调用约束求解工具,查找出已查程序语句集合中所有与待测日志输出语句所在程序点不存在可行路径的程序语句,将该程序语句从所述已查程序语句集合中排除。
21.根据权利要求19所述的装置,其特征在于,所述比例判断子单元:还用于如果所述比例在日志相对强度范围内,将所述比例作为日志相对强度范围的下限,更新所述日志相对强度范围;
所述推荐确定单元包括:
推荐记录子单元:用于将该待测日志输出语句所在程序点及被该待测日志输出语句引用的变量记录在一条日志推荐提示中;
继续判断子单元:用于判断是否还继续进行推荐检测;
继续确定子单元:用于如果继续判断子单元判断结果为是时,提取新程序点,重新触发推荐变量提取单元;
反馈推荐子单元:用于如果继续判断子单元判断结果为否时,反馈最后记录的一条日志推荐提示。
22.根据权利要求16所述的装置,其特征在于,还包括:
综合检测单元:用于如果已根据所述推荐在程序中插入了日志输出语句,将所述程序中所有程序语句作为期望涵盖的程序语句,将所述程序中所有日志输出语句作为待测日志输出语句,并判断期望涵盖的程序语句中每个被执行定值操作的变量是否均满足第一条件且满足第二条件,如果不满足,重新触发程序语句获取单元执行。
CN201310379397.5A 2013-08-27 2013-08-27 一种程序日志检测方法、推荐方法及各自对应的装置 Expired - Fee Related CN104424097B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310379397.5A CN104424097B (zh) 2013-08-27 2013-08-27 一种程序日志检测方法、推荐方法及各自对应的装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310379397.5A CN104424097B (zh) 2013-08-27 2013-08-27 一种程序日志检测方法、推荐方法及各自对应的装置

Publications (2)

Publication Number Publication Date
CN104424097A CN104424097A (zh) 2015-03-18
CN104424097B true CN104424097B (zh) 2017-06-27

Family

ID=52973141

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310379397.5A Expired - Fee Related CN104424097B (zh) 2013-08-27 2013-08-27 一种程序日志检测方法、推荐方法及各自对应的装置

Country Status (1)

Country Link
CN (1) CN104424097B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101576843A (zh) * 2008-05-07 2009-11-11 阿里巴巴集团控股有限公司 一种测试应用程序接口的方法和装置
CN103257919A (zh) * 2012-02-21 2013-08-21 腾讯科技(深圳)有限公司 脚本程序检查方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1567222A (zh) * 2003-07-09 2005-01-19 松下电器产业株式会社 程序生成装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101576843A (zh) * 2008-05-07 2009-11-11 阿里巴巴集团控股有限公司 一种测试应用程序接口的方法和装置
CN103257919A (zh) * 2012-02-21 2013-08-21 腾讯科技(深圳)有限公司 脚本程序检查方法和装置

Also Published As

Publication number Publication date
CN104424097A (zh) 2015-03-18

Similar Documents

Publication Publication Date Title
CN104185840B (zh) 在持续部署流水线中用来优先化多个测试的方法、系统和装置
CN107609135B (zh) 页面元素确定方法及设备、用户行为路径确定方法及装置
CN105389349B (zh) 词典更新方法及装置
US10997184B2 (en) System and method for ranking search results
CN105160252B (zh) 一种结构化查询语言注入攻击的检测方法及装置
US20180189364A1 (en) Method, device, and system for searching key words
CN109376166A (zh) 脚本转换方法、装置、计算机设备及存储介质
US11513794B2 (en) Estimating indirect interface implementation before load time based on directly implemented methods
CN104881608A (zh) 一种基于模拟浏览器行为的xss漏洞检测方法
WO2016115944A1 (zh) 网页质量模型的建立方法及装置
US8572004B2 (en) Space solution search
CN101000628A (zh) 错误超链接检测设备及其方法
CN104346148A (zh) 获取程序性能消耗信息的方法、装置及系统
Walkinshaw et al. Automated comparison of state-based software models in terms of their language and structure
CN103914374B (zh) 基于程序切片和频繁模式提取的代码缺陷检测方法及装置
CN107403251A (zh) 风险检测方法及装置
CN107943873A (zh) 知识图谱建立方法、装置、计算机设备及存储介质
CN103544257B (zh) 网页质量检测方法和装置
CN106650437A (zh) webshell检测方法和装置
CN113449168A (zh) 主题网页数据抓取方法、装置、设备及存储介质
CN102915313B (zh) 网络搜索中的纠错关系生成方法及系统
CN104424097B (zh) 一种程序日志检测方法、推荐方法及各自对应的装置
CN113791837A (zh) 页面处理方法、装置、设备和存储介质
CN109597948A (zh) 访问url链接的方法、系统及存储介质
CN105607990A (zh) 一种空指针崩溃的挖掘方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170627

Termination date: 20200827