《基于二次定位策略的软件故障定位-宗芳芳.pdf》由会员分享,可在线阅读,更多相关《基于二次定位策略的软件故障定位-宗芳芳.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: Journal of Software,2016,27(8):19932007 doi: 10.13328/ki.jos.004858 http:/ 中国科学院软件研究所版权所有 . Tel: +86-10-62562563 基于二次定位策略的软件故障定位宗芳芳, 黄鸿云, 丁佐华 (浙江理工大学 信息学院 ,浙江 杭州 310018) 通讯作者 : 丁佐华 , E-mail: 摘 要 : 故障定位是软件调试过程中耗力和耗时的活动之一 ,尤其是对规模大和复杂性高的软件 .目前的一些定位技术可分为两类 :基
2、于组件和基于语句 .前者太粗 ,不能准确地定位到地方 ;后者太细 ,运算复杂度过大 .提出一种新技术 ,称为二次定位策略 (double-times-locating,简称 DTL),来定位故障 :第 1次定位 ,从程序中抽象出函数调用图 ,再从函数调用轨迹中建立程序谱 ,最后用基于模型的诊断 (model-based diagnosis,简称 MBD)对可能含有故障的函数进行排序 ;第 2 次定位 ,利用 DStar 定位函数中故障的代码行 .实验结果表明 ,该技术比目前基于统计的方法更有效 . 关键词 : 故障定位 ;函数调用图 ;程序频谱 ;模型诊断 中图法分类号 : TP311 中文引
3、用格式 : 宗芳芳 ,黄鸿云 ,丁佐华 .基于二次定位策略的软件故障定位 .软件学报 ,2016,27(8):19932007. http:/www.jos. 英文引用格式 : Zong FF, Huang HY, Ding ZH. Software fault location based on double-times-locating strategy. Ruan Jian Xue Bao/Journal of Software, 2016,27(8):19932007 (in Chinese). http:/ Software Fault Location Based on Doub
4、le-Times-Locating Strategy ZONG Fang-Fang, HUANG Hong-Yun, DING Zuo-Hua(School of Information Science and Technology, Zhejiang Sci-Tech University, Hangzhou 310018, China) Abstract: Fault localization is a physical and time-consuming activity in the debugging process, especially for the software wit
5、h large size and high complexity. Existing techniques to locate faults can be classified into two categories: component based and statement based. The former is too coarse to locate the accurate place, while the latter is too fine to contain the computation complexity. This paper proposes a new tech
6、nique, called double-times-locating (DTL) strategy, to locate software faults. For the first time locating, it abstracts function call graph from the code, builds program spectrum to abstract function traces, and then uses model-based diagnosis (MBD) to sort with probability possible functions candi
7、dates that have faults. For the second time locating, it uses DStar to locate faults in the functions. Experimental results show that the proposed technique is more effective than the existing statistics based methods. Key words: fault localization; function call graph; program spectrum; model diagn
8、osis 调试不仅仅是费时的、繁琐的、昂贵的 ,而且也是极易出错的14.在各种调试活动中 ,软件故障定位 (简称为故障定位 )已被确定为最昂贵的活动之一5.能够快速地定位故障的根源 ,可以减少测试阶段所花费的时间 .故障定位技术619的发展为未来的程序修复铺平了道路 . 常用的故障定位技术的基本思想可解释如下 :首先定出最有可能的故障部分 (例如程序语句和谓词 ),并对它们进行排序 ;然后 ,根据排列的顺序进行逐一检查 ,直到找到故障的部分为止 .一种好的定位技术应当是把有故障的部分排到更靠前 ,这样 ,故障就能被更快地检查出来 .理想情况下 ,有故障的部分排在第一位 ,不需要程序员的进一步分
9、析 ,故障完全可以自动定位 . 基金项目 : 国家自然科学基金 (61210004, 61170015) Foundation item: National Natural Science Foundation of China (61210004, 61170015) 收稿时间 : 2015-03-19; 修改时间 : 2015-03-28, 2015-04-04; 采用时间 : 2015-05-19 1994 Journal of Software 软件学报 Vol.27, No.8, August 2016 目前 ,主要的故障定位方法有 : 基于频谱的故障的定位 (spectrum-ba
10、sed fault localization)20.该方法通过抽象程序的轨迹 ,使得软件的组件与程序的故障关联起来 . 相似程序谱的故障定位 (nearest neighbor queries)13.该方法假设存在一个失败的程序谱和很多成功的程序谱 ,然后根据距离准则挑选出一个与失败运行最相似的成功运行的程序谱 ,进而比较两个程序谱的不同之处 ,以分离软件故障 .虽然从复杂性的角度来看 ,统计方法非常有吸引力 ,但是不能推理解释多错误导致的失败 .但实际上 ,大多数的程序是有多错误的 . SOBER 的故障定位方法21.该方法对谓词在成功执行和失败执行中的取值模式进行建模 ,然后基于统计学中假
11、设检验的原理 ,量化每个谓词的故障相关性 ,按照谓词怀疑度 (the suspicion degree)的大小审查源代码 ,发现故障的位置 .然而 ,该方法需要足够多的测试用例 . 基于模型的诊断 (model-based diagnosis,简称 MBD)16,17,20,2228.该方法通过逻辑推理和构建行为命题模式来推导软件故障 .该推理方法的主要缺点是 :(1) 模型生成通常是静态的分析 ,因为无法捕捉的动态数据依赖或者条件控制流 ;(2) 生成诊断候选集的代价是呈指数增长的 ,通常禁止使用超过几百行程序24. 然而 ,基于频谱的故障定位较为常用 ,可分为两类 :基于语句和基于组件 .
12、基于语句的故障定位工作有文献11,20,22,23,29,30,基于组件的故障定位工作有文献 16,17. 基于语句的故障定位需要定位到代码行 ,就意味着需要大量的工作去掉与故障的代码行不相关的语句 ,其粒度过于精细 .基于组件的故障定位组件范围很大 (如服务器 ),程序员不能准确地定位具体的位置 ,其粒度又显得过于粗糙 .为了解决这一问题 ,在前人工作的基础上 ,我们提出一种新的故障定位方法 ,即二次定位 (double- times-locating,简称 DTL).第 1 次函数定位 ,第 2 次语句定位 .下面给出我们的方法框架图 .图 1 包含两个部分 :第1 部分叫做函数定位 ,我
13、们把程序中的函数作为组件生成候选集 ,并根据算法计算出候选集的怀疑度进行排序 ,并将怀疑度较大的候选集放到故障定位的集合中 ,准备进行语句定位 ;第 2 部分叫做语句定位 ,我们把候选集中的函数所对应的语句作为组件 ,根据算法计算出语句的怀疑度进行排序 ,逐个检查怀疑度较大的语句 ,直到定位故障语句为止 . Fig.1 Frame of our method 图 1 我们的方法框架图 本文第 1 节描述函数定位的基本原理 .第 2 节描述语句定位的基本原理 .第 3 节用我们的方法对一个例子进行故障定位并分析 .第 4 节给出实验结果及分析 .第 5 节讨论和分析相关工作 .第 6 节是全文的
14、总结 . 1 一次定位函数定位 我们利用工具从程序中生成函数调用图 ,再从函数调用轨迹中建立程序谱 ,将软件的组件与程序的故障关联起来 ,再利用 MBD 的逻辑推理和构建行为命题模式来对函数进行初步定位 .我们分别详细地介绍函数调用图的生成以及函数定位 . 1.1 函数调用图 Doxygen 是一种开源跨平台的 ,可以从一套归档源文件开始 ,生成 HTML 格式的在线类浏览器 ,或离线的MBD 定位函数 程序谱 函数调用图程序 定位语句生成语句集DStar 宗芳芳 等 :基于二次定位策略的软件故障定位 1995 LATEX,RTF参考手册 .Graph Visualization Softwa
15、re(Graphviz)是一个由 AT&T 实验室启动的开源工具包 ,用于绘制 DOT 语言脚本描述的图形 ,它也提供了供其他软件使用的函数库 .我们使用文档生成工具 Doxygen 和图像生成工具 Graphviz 生成函数调用图 ,记为 G. 生成的函数调用图是有向无回路的拓扑结构 ,我们将函数之间的相互关系用拓扑结构进行描述 .图 2 是最常见的函数调用图 .我们知道 ,函数之间常用的调用关系包括顺序、循环、选择方式 .这里我们假设 ,如果函数是错误的 ,那么经过它的测试用例中必然是有错的 .现在我们分析一下顺序调用和循环调用的情况 ,比如 ,函数 F3调用函数 F8 时 ,假如函数 F
16、8 有错 ,函数 F3 的测试用例中 ,如果经过函数 F8 的测试用例是有错的 ,我们就可以把函数 F8 放进函数的候选集中 .选择调用的情况 ,比如 ,函数 F1 调用函数 F4 和函数 F5 时 ,如果只有函数 F4 有错 ,那么函数 F1 的错误测试用例的个数不小于函数 F4 的错误测试用例的个数 ,而且经过函数 F4 的测试用例是有错的 .此时 ,我们就可以把函数 F4 放进函数的候选集中 .我们把具体实现的算法放在第 1 节的算法 1 中实现 . Fig.2 Common function call graph 图 2 常见的函数调用图 1.2 程序谱 假定一个软件系统由 M 个组件
17、 Cj组成 ,其中 j1,.,M,并且存在多个故障 ,记为 C.诊断报告 D=,dk,是一个由诊断候选集 dk构成的有序集合 .程序谱是由参与了系统的特定动态行为的组件构成的集合 ,它统计了系统执行的 N 个测试用例的结果 (成功 /失败 ).我们的行为模型是通过一组涉及计算的组件构成 ,并且不需要详细地描述行为的具体信息 .我们把程序成功 /失败的信息输入到程序谱 .通过实例化程序中每一个组件 ,形成矩阵 A.在 A 中的元素 aij表示组件 Cj是否参与了第 i 个测试用例的执行 :若是 ,则 aij=1;若不是 ,则 aij=0.测试用例的结果 (成功 /失败 )用向量 e表示 .向量
18、e中的元素 ei表示第 i个测试用例的执行结果 :若成功 ,则 ei=0;若失败 ,则 ei=1.因此 ,矩阵 (A,e)就是我们需要的程序谱 . 1.3 定位函数 基于模型的推理方法得到的诊断报告描述了对多个故障候选集 dk的排序 ,例如 D=2,3,1,这意味着组件 C2和 C3有故障 ,或组件 C1有故障 .正如上述描述的基于模型的推理方法 ,我们将这一方法 应用在我们具体的程序模型中 .在前人工作的基础上17,20,23,本文提出以函数作为组件建立程序模型 .本文在逻辑命题方面将每 个组件 Cj定义为 ()jjj inp outhok ok,其中 , ,jjjinp inphok ok
19、 是布尔类型 ,分别代表组件的正确值、组 件的输入变 量和输出变量 .这个模型表达了特定的行为 :假如组件正确并且输入变量的值是正确的 ,那么其输出也是正确的 .为了更清晰地说明这类特定行为 ,该模型没有指定故障的具体行为 .即使组件是错误的和 /或输入值不正确 ,还是可能导致正确的输出 .因此 ,一个程序通过并不意味着经过的组件的正确性 .在函数定位中 ,我们首先把程序中的函数作为组件生成候选集 ,在算法 1 中 ,把函数调用图 G 和程序谱 (A,e)作为输入 ,由第 4 行 第 22 行生成函数候选集 dk;接下来 ,在函数定位过程中 ,计算出候选集的怀疑度进行排序 .现在假定候选集是相
20、互独立的 ,我们利用贝叶斯定理计算候选集 D 的条件概率 : (| )( )(|)()kkkPe d PdPd ePe= . F7 F8 F6 F5 F4 F3 F2 F1 main 1996 Journal of Software 软件学报 Vol.27, No.8, August 2016 其中 ,P(e)是一个标准化常数 ,由所有的 dk定义 ,不需要直接计算 .| |() (1 )kkdMdkPd p p= ,其中 ,M 是组件的个 数 ,|dk|是候选集 dk包含的组件个数 .在本文中 ,我们假定 p=0.01,即程序本身大部分是正确的 . 因为每次执行是独立的 ,因此 , 1(|
21、) ( | )NkikiPe d Pe d=. 其中 ,P(ei|dk)的定义如下 : 1, if are inconsistent( | ) 0, if is unique to ., otherwisekiik k idePe d d e=关于 的定义有很多种 ,本文的定义为 11, 0.1, 1kijkijjijd ajijd ahehe= = =其中 ,hj0,1表示组件 j 正常工作的概率 . 我们可以得出 P(e|dk)关于 hj的表达式 ,通过最大似然估计法计算 max( ( | ),kHPe dH = 其中 ,H=hj0,1| jdk.最后 ,将得到的 P(e|dk),P(dk
22、)带入公式 ,计算出 P(dk|e)进行排序 ,将排序较高的候选集进行语句定位 . 算法 1 中的描述包括两个主要部分 : 第 1 部分 ,我们把程序中的函数作为组件生成的函数 ,调用图 G 和程序谱 (A,e)作为输入 ,生成函数候选 集 D=,dk,:第 1 步 ,我们计算出*| | 1kkLAe= = ,并且把那些函数满足没有调用其他函数、相关系 数最大且 n(vj)=|L|直接放入候选集 dk中 ,并且更新函数集 R 和函数调用图 G;第 2 步 ,对于不满足上述条件的函数 ,存在函数 ncs(vj)/ncf(vj)=0.我们重复第 1 步 ,直到 R 中没有满足条件的函数为止 . 第
23、 2 部分 ,我们通过计算第 1 部分生成的函数候选集 D=,dk,中每个 dk的 P(dk|e)值 ,生成有序的诊断报告 D. 下面我们对算法 1 的时间和空间复杂度进行计算 .算法 1 第 1 部分的时间复杂度就是对每个函数 (M)相似度的计算 ,即 (A,e)的每一行 ,复杂度为 O(NM);第 2 部分诊断报告的时间复杂度为 O(MlogM).所以算法 1 的时间复杂度为 O(M(N+logM).算法 1 的空间复杂度就是我们的方法需要保存函数的候选集 C,空间复杂度为O(2|C|M). 算法 1. 诊断算法 (一次定位算法 ). 输入 :矩阵 (A,e),函数调用图 G. 输出 :诊
24、断报告 D. 1. 2. *| 1kkLAe= 3. D 4. GTOPOLOGICAL-SORT(G) 5. RSORT(H,A,e) 6. while j0) 0.5 0.707 106 78 4 3 y=f1(x); 0.5 0.5 0.54 if (y10) 0.5 0.5 0.55 s=f2(y); /debug 1 0.707 106 78 1 6 else 7 s=f3(y); 0 0 0 8 else 9 y=f4(x); 0.5 0.5 0.5 10 if (y0) 0.5 0.5 0.5 11 s=f5(y); /debug 1 0.707 106 78 1 12 else
25、 宗芳芳 等 :基于二次定位策略的软件故障定位 1999 Table 1 An example (Contiuned) 表 1 例子 (续 ) function()double y, s; Test case 1 Test case 2 Test case 3 Test case 4 T O D13 s=f6(y); 0 0 0 14 Print(“s:”+ s) 0.5 0.707 106 78 4 15 f1(n) 16 if (n=1) 0.5 0.5 0.517 return 1; 0.5 0.5 0.518 return n+f1(n1); 0.5 0.5 0.519 f2(n) 2
26、0 for (int i=2; isqrt(n1); i+) 1 0.707 106 78 1 21 if (n%i!=0) /debug n%i!=0n%i=0 1 0.707 106 78 1 22 return 0; 1 0.707 106 78 1 23 return 1; 24 f3(n) 25 if (n=1) 0 0 0 26 return 1; 27 return n*f3(n1); 28 f4(x) 29 return x*x; 0.5 0.5 0.530 f5(n) 31 int sum=0; 1 0.707 106 78 1 32 if (n0) 1 0.707 106
27、78 1 33 for (int i=1; in; i+) /debug nn+1 1 0.707 106 78 1 34 sum+=i; 1 0.707 106 78 1 35 return sum; 1 0.707 106 78 1 36 f6(x) 37 return 6*x; 0 0 0 Pass/Fail Status F P F P Fig.3 Function call graph of the example 图 3 例子的函数调用图 根据我们的算法 1 得到表 2 函数与测试用例关系表 . Table 2 Relational tables of functions and
28、test cases 表 2 函数与测试用例关系表 F1 F2 F3 F4 F5 F6 测试用例 1 0 0 0 1 1 0 测试用例 2 1 0 1 0 0 0 测试用例 3 1 1 0 0 0 0 测试用例 4 0 0 0 1 0 1 相关系数 T 0.5 1 0 0.5 1 0 相关系数 O 0.5 0.707 0 0.5 0.707 0 相关系数 D 0.5 1 0 0.5 1 0 计算出函数的候选集 d1=1,4,d2=2,5;然后最大化 max( ( | )kHHPed= ,得到 h1=h4=0.5,h2=h5=0;最后 ,由贝叶 斯定理计算 : mainf1f2f3f4f5f6
29、2000 Journal of Software 软件学报 Vol.27, No.8, August 2016 P(d1|e)=h1h4(1h1)(1h4), P(d2|e)=(1h2)(1h5). P(d1|e)=0.9412,P(d2|e)=0.0588,因此 ,函数定位的函数是 f2 和 f5.我们利用算法 2,首先将一次定位的函数 f2和 f5 中所有代码行对应的行号 bj=2023,3135 用数组 B 进行存储 ;然后 ,利用 DStar 方法求出 P(bj=23)=0, P(bj23)=0.70710678;最后 ,我们成功地找到第 1 个错误行 .最好的情况是检查 1 行 ,最
30、坏的情况是检查 8 行 .为了与实验统一 ,我们平均检查的行数是 4.5,小例子可执行的总代码行为 27,那么成功地找到错误行需要检查总代码行的比值为 P(Our_Method)=4.5/27=0.167.我们计算得到 Tarantula,Ochiai,DStar 方法成功地找到错误行需要检查总代码行的比值分别为 :P(Tarantula)=5.5/27=0.204,P(Ochiai)=6.5/27=0.241,P(DStar)=6.5/27=0.241. 4 实验分析 4.1 实验建立 本文使用了经典的 Siemens 数据集进行实验 ,以证明我们方法的有效性 ,见表 3.第 1 列是实验对
31、象的名称 ,第 2 列是每个实验对象的错误版本个数 ,第 3 列是每个实验对象主体的行数 ,第 4 列是测试用例的数量 ,第 5 列是实验对象的版本说明 .其中 ,Siemens 数据集可以从 SIR(http:/sir.unl.edu/content/sir.html)网站上免费获得 .为了证明该方法的有效性 ,我们选择与一些经典的基于频谱的故障定位方法进行比较 . Table 3 Details of the Siemens data set 表 3 Siemens 数据集详细信息 Program Faulty version LOC Test cases Description prin
32、t_tokens 7 472 405 6 Lexical analyzer(词法分析器 ) print_tokens2 10 399 407 1 Lexical analyzer(词法分析器 ) Replace 32 512 554 2 Pattern replacement(模式更换 ) Schedule 9 292 265 0 Priority scheduler(优先级调度 ) Schedule2 10 301 268 0 Priority scheduler(优先级调度 ) Tcas 41 141 157 8 Altitude separation(高度分离 ) tot_info 23
33、 440 105 4 Information measure(信息测度 ) 4.2 经典的基于频谱的故障定位方法介绍 我们现在总结一下基于频谱的故障定位方法 .Jones 等人提出了一种基于代码覆盖的错误定位方法11,31,这种方法首先在程序运行时 ,在成功次数和失败次数的基础上计算语句怀疑度 ;其次 ,根据怀疑度的高低对语句进行排序 ;然后 ,调试人员根据排序表依次检查 ,直到他们找到错误为止 .随后 ,一些研究人员在 Tarantula 公式的基础上 ,对怀疑度公式进行了改进 .Abreu 提出了 Ochiai 错误定位23,定义语句的怀疑度 .而 Ochiai 是来自于分子生物学中的相似
34、系数 .在一个程序中 ,Kulczynski 系数可以定位单个错误或多个错误 .在此基础上 ,Wong 等人提出了 DStar(D*)30.Abreu 等人提出的 Barinel20以语句为粒度 ,应用模型诊断的方法及贝叶斯推理的方法进行错误定位 .为了证明我们方法的有效性 ,本文使用 Tarantula 方法、 Ochiai 方法、 DStar 方法和 Barinel 方法与我们提出的方法进行了比较 ,现在我们分别给出 Tarantula 方法、 Ochiai 方法、 DStar 方法的定义 . Tarantula: ()() ()() .()()() () () ()cfcf ufcfcs
35、cs us cf ufNjNjNjsjNjNjN jNj NjNj+=+ Ochiai: ()() .( () () ( () ()cfcf uf cf csNjsjsqrtNjNj NjNj=+ DStar: 宗芳芳 等 :基于二次定位策略的软件故障定位 2001 3()() .() ()cfuf csNjsjN jNj=+符号的含义 : Ncf(j):通过第 j 行的结果为 fail 的用例总数 . Nuf(j):不通过第 j 行的结果为 fail 的用例总数 . Ncs(j):通过第 j 行的结果为 pass 的用例总数 . Nus(j):不通过第 j 行的结果为 pass 的用例总数
36、. 4.3 实验结果 我们通过对 Siemens 数据集的实验 ,得到一次定位的函数集以及在二次定位中发生故障时需要检查代码行占总行数的比值 ,作为故障定位的有效性值1.在表 4 中 , 一次定位的 “无 ”代表故障没有出现在函数中 . 二次定位的 “0”代表 5 种情况 :第 1 种是故障出现在头文件中 ;第 2 种是故障的原因是缺少代码 ;第 3 种是没有故障的测试用例 ;第 4 种是故障出现在函数声明上 ;第 5 种是故障的代码行是程序未编译 . Table 4 Function sets of the first time fault locating and the effectiv
37、eness values of the second time fault locating 表 4 一次故障定位的函数集及二次定位的有效性值 print_tokens 一次定位 二次定位 print_tokens 一次定位 二次定位 V1 get_token() 0.043 59 V5 get_token() 0.020 512 821 V2 get_token() 0.020 513 V6 无 0 V3 get_token() 0.005 154 639 V7 numeric_case() 0.025 641 V4 无 0 print_tokens2 一次定位 二次定位 print_tok
38、ens2 一次定位 二次定位 V1 get_tokens() 0 V6 is_num_contant 0.337 5V2 get_tokens() 0.455 V7 is_token_end 0.62 V3 get_tokens() 0 V8 is_token_end 0.03V4 get_tokens() 0.417 5 V9 is_token_end 0.02 V5 is_str_contant 0.397 5 V10 is_str_contant 0 replace 一次定位 二次定位 replace 一次定位 二次定位 V1 dodash 0.014 344 V17 esc 0.004
39、 098 V2 dodash 0.010 373 V18 omatch 0.008 197 V3 subline 0.131 148 V19 get_line 0 V4 subline 0.100 41 V20 esc 0.004 098 V5 dodash 0.006 148 V21 get_line,addstr、 makepat 0.192 623 V6 locate 0.024 59 V22 getccl 0.069 672 V7 in_set2 0.006 148 V23 esc 0.014 344 V8 in_set2 0.034 836 V24 omatch 0.006 148
40、V9 dodash 0.036 885 V25 omatch 0.012 295 V10 dodash 0.049 18 V26 omatch 0.004 098 V11 dodash 0.036 885 V27 in_set2 0.502 049 18 V12 无 0 V28 in_set2 0.006 148V13 subline 0.145 492 V29 in_set2 0.006 148 V14 omatch 0.008 197 V30 in_set2 0.006 148 V15 makepat 0.151 639 V31 omatch 0.008 197 V16 in_set2 0
41、.026 639 V32 dodash 0.502 049 18 schedule 一次定位 二次定位 schedule 一次定位 二次定位 V1 find_nth 0.503 289 474 V6 find_nth 0.503 289 474 V2 unlock_process 0.503 289 474 V7 upgrade_process 0.503 289 474 V3 upgrade 0.013 158 V8 upgrade_process 0 V4 upgrade 0.016 447 V9 main 0.503 289 474 V5 upgrade_process 0.503 31
42、1 258 schedule2 一次定位 二次定位 schedule2 一次定位 二次定位 V1 new_job 0 V6 flash 0.624 031V2 get_process 0 V7 get_process 0 V3 get_process 0 V8 put_end 0 V4 get_command 0 V9 finish 0 V5 put_end 0.453 846 V10 get_command 0.193 798 2002 Journal of Software 软件学报 Vol.27, No.8, August 2016 Table 4 Function sets of th
43、e 1st time fault locating and the effectiveness values of the 2nd time fault locating (Contiuned) 表 4 一次故障定位的函数集及二次定位的有效性值 (续 ) print_tokens 一次定位 二次定位 print_tokens 一次定位 二次定位tcas 一次定位 二次定位 tcas 一次定位 二次定位V1 Non_Crossing_Biased_Climb 0.023 077 V22 Non_Crossing_Biased_Climb 0.2 V2 Inhibit_Biased_Climb 0
44、.061 538 V23 Non_Crossing_Biased_Descend 0.207 692V3 alt_sep_test 0.546 154 V24 Non_Crossing_Biased_Descend 0.2V4 Non_Crossing_Biased_Climb 0.015 385 V25 Non_Crossing_Biased_Descend 0.015 385V5 alt_sep_test 0.5 V26 alt_sep_test 0.530 769V6 Own_Below_Threat 0.084 615 V27 alt_sep_test 0.5 V7 initializ
45、e 0.346 154 V28 Inhibit_Biased_Climb 0.084 615V8 initialize 0.438 462 V29 Inhibit_Biased_Climb 0.130 769V9 Non_Crossing_Biased_Descend 0 V30 Inhibit_Biased_Climb 0.130 769V10 Own_Below_Threat, Own_Above_Threat 0.053 846 V31 Non_Crossing_Biased_Climb 0 V11 Own_Below_Threat, Own_Above_Threat 0.053 846
46、 V32 Non_Crossing_Biased_Descend 0 V12 alt_sep_test 0.515 385 V33 initialize 0.392 308V13 无 0 V34 alt_sep_test 0.515 385V14 无 0 V35 Inhibit_Biased_Climb 0.084 615V15 无 0 V36 无 0 V16 initialize 0.3 V37 ALIM 0.023 077V17 initialize 0.269 231 V38 无 0 V18 initialize 0.238 462 V39 Non_Crossing_Biased_Des
47、cend 0.023 077V19 initialize 0.269 231 V40 Non_Crossing_Biased_Climb 0.023 077V20 Non_Crossing_Biased_Climb 0.2 V41 Non_Crossing_Biased_Climb 0.023 077V21 Non_Crossing_Biased_Climb 0.2tot_info 一次定位 二次定位 tot_info 一次定位 二次定位V1 InfoTbl 0 V13 InfoTbl 0.097 561V2 main 0.195 122 V14 main 0.056 911V3 main 0.040 65 V15 gser 0.052 846V4 gct 0.032 52 V16 main 0.040 65V5 main 0.121 951 V17 gct 0.077 236V6 无 0 V18 InfoTbl 0.105 691V7 InfoTbl 0.081 301 V19 无 0 V8 gser 0.024 39 V20 InfoTbl 0.130 081V9 main 0.117 886 V21 无 0 V10 无 0 V22 InfoTbl 0.032 52V11 gser 0.052 846 V23 gct 0.073 171V12 Lgamma 0.09
限制150内