一种场景敏感的高效错误检测方法
食品安全中的微生物污染控制与检测方法

食品安全中的微生物污染控制与检测方法肉眼看不到的微生物,却能引发食品安全事件,已经成为众所周知的事实。
食品安全中的微生物污染,一直是困扰着我们的难题。
如何控制和检测微生物污染,是食品科学家和生产商们所关注的重点问题。
一、微生物污染对食品安全的危害微生物污染,是指在生产或存储过程中,食品被细菌、病毒、蛋白质和真菌等微生物污染。
微生物的原生态环境,是在自然界中存在的,而微生物的繁殖能力极强,一旦污染了食品,就会形成食源性疾病。
微生物污染所带来的食品安全危害,主要表现在以下几个方面:1.食品腐败致病:在食品中,许多细菌会繁殖腐败,会产生刺鼻的气味和有害物质,从而影响到人们的身体健康。
2.食源性传染病:由于食品可能污染肉类、禽蛋、乳制品和海鲜等,所以在生产和销售过程中,不符合规范的操作和管理会引发严重的食源性传染病,如肠炎、流感等。
3.食品化学污染:在生产或保存过程中,食品可能受到农药、化肥等化学物质的污染,而且这些化学物质的毒性很强,容易引发癌症等慢性病。
二、微生物污染控制的关键在食品生产和销售过程中,要避免微生物污染,控制食品安全风险,是关键所在。
摆脱微生物污染的方法很多,我们简单罗列以下几点:1.操作规范:生产厂家必须严格执行符合规范的操作标准,以保证生产线的卫生。
2.食品质量控制:生产厂家应该加强对原料的质量控制,并选择符合规范的供应商。
3.食品保鲜:合理储存食品可以避免微生物的繁殖。
保持食品的新鲜度,有效保证食品的安全。
4.生产设备清洁:所使用的设备应该保持清洁,并且经常进行消毒,保证食品的卫生。
三、微生物污染检测方法如何快速和准确地检测微生物污染,一直是食品安全检测技术工作者们努力的方向。
目前,常用的微生物检测方法主要包括:1.传统培养法:通过样本培养和直接检验来寻找微生物的繁殖区域,可以判断微生物的数量和种类。
2.PCR技术:PCR技术是一种高效而敏感的检测方法。
基于PCR技术,可以快速检测到食品中微生物的DNA信息。
马赛克检测报告

马赛克检测报告1. 简介马赛克检测是一种用于保护个人隐私的技术,通过对图像中的敏感信息进行模糊处理,使得这些信息对于观看者来说不可辨识。
本文将介绍马赛克检测的原理、应用场景以及一些常见的检测方法。
2. 马赛克检测原理马赛克检测的基本原理是通过对图像中指定区域进行像素值的修改,使得该区域的内容变得模糊不清。
这种模糊处理可以采用不同的方式实现,常见的方法包括:•块状马赛克:将敏感区域划分为较小的块状区域,然后将每个块状区域的像素值替换为相同的像素值,从而实现模糊效果。
•均值马赛克:计算敏感区域内像素的均值,然后将该区域的所有像素值替换为均值,以达到模糊效果。
3. 马赛克检测的应用场景马赛克检测在很多场景中都有广泛的应用,其中包括但不限于以下几个方面:3.1 个人隐私保护在一些公开场合,如新闻报道、社交媒体等,为了保护个人隐私,不希望个人的面部或其他敏感信息被暴露出来,可以使用马赛克技术对这些信息进行模糊处理。
3.2 监控视频处理监控视频中可能包含一些敏感信息,如身份证号码、银行卡号等。
为了防止这些信息被不法分子利用,可以使用马赛克技术对这些信息进行模糊处理,以保护个人隐私。
3.3 数据共享在一些数据共享的场景中,可能需要对某些敏感信息进行处理,以满足数据分享的隐私要求。
马赛克技术可以帮助实现对敏感信息的模糊处理,保护用户隐私。
4. 马赛克检测方法4.1 基于像素值分析马赛克检测方法中最简单的一种是基于像素值分析的方法。
这种方法通过对图像中的像素值进行分析,判断是否存在需要模糊处理的敏感信息。
一旦检测到敏感信息,就对相应区域进行模糊处理。
4.2 基于模板匹配另一种常见的马赛克检测方法是基于模板匹配的方法。
这种方法通过事先准备好的模板,与图像中的区域进行匹配,如果存在匹配的情况,则说明该区域可能包含敏感信息,需要进行模糊处理。
4.3 基于深度学习随着深度学习技术的发展,越来越多的马赛克检测方法开始使用深度学习模型进行处理。
一种场景敏感的高效错误检测方法

E — ma i l : j o s @i s c a s . a c . c n h t t p : # ww w. j o s . o r g , c n
T e l / Fa x : +8 6 . 1 0 — 6 2 5 6 2 5 6 3
实施不 同开销 的检 测雇 不降低精度的 同时最 小化检 测开销 . 设计 了一个 多项 式时间复杂度 的流敏 感、域敏 感和上
下文敏感的场景分析 以进行分类, 并基 于程序依赖信 息识 别触发场景, 仅 对必要 的触发 场景实施路径敏 感的检 测. 为
上述方法 实现 了一种原型 系统~一Mi n e r v a . 通 过使 用空指针 引用错误检 测为实例研 究以及 总代码规模超过 2 9 0万
一
种场景 敏感 的高效错误检 测方 法
衷 璐 洁1 , 2 , 3霍 玮 ,李 龙 ,李 丰 ,冯 晓 兵 ,张 9 l 庆
f 中国科学 院 计算技 术研究所 计算 机体系 结构 国家 重点实验 室, 北京 1 0 0 1 9 0 ) ( 首都 师范大 学 信息 工程学 院, 北京 1 0 0 0 8 9 ) ( 中国科学 院大学, 北 京 1 0 0 0 4 9 ) f 中 国科学 院 信息工 程研究所 第五研 究室, 北 京 1 0 0 0 9 3 ) 通讯作 者:衷璐洁, E— ma i l : z h o n g l u j i e @i 0 0万行的应用验证, 用例 实验结果表 明, Mi n e r v a的平 均检测 时间比当前先进水平的路径敏
感检测 工具 C l a n g — s a和 S a t u n 分别快 3倍 和 4 r 6倍. 而 Mi n e r v a的误报 率仅 为 2 4 %, 是C l a n g . s a和 S a t u r n误报率 的
pcr在法医学中的应用原理

PCR在法医学中的应用原理1. 引言PCR(聚合酶链反应)是一种重要的生物分子检测方法,广泛应用于法医学领域,用于鉴定和分析犯罪现场的DNA证据。
本文将介绍PCR在法医学中的应用原理,包括PCR反应的基本原理、在法医学中的应用场景和技术优势。
2. PCR反应的基本原理PCR反应是利用DNA聚合酶(Taq聚合酶)复制DNA分子的过程,它包括三个主要的步骤:变性、退火和延伸。
2.1 变性在PCR反应开始时,DNA模板被加热至高温(通常为94-98摄氏度),使其双链结构解开,形成两个单链的DNA模板。
2.2 退火然后,在退火温度下(通常为50-65摄氏度),引物(primer)结合到DNA 模板上。
引物是一段长度为10-30个碱基的DNA片段,它能够与要扩增的DNA 序列的两端相互配对。
引物的配对使得DNA聚合酶能够在引物的上游和下游之间合成新的DNA链。
2.3 延伸DNA聚合酶在延伸温度下(通常为72摄氏度)合成新的DNA链。
它将引物作为起始点,依据DNA模板上的碱基序列合成互补的DNA链。
这个过程会循环多次,每次循环都会复制目标DNA序列,形成指数级增加的DNA产物。
3. PCR在法医学中的应用场景PCR在法医学中被广泛应用,以鉴定和分析犯罪现场的DNA证据。
下面列举了一些常见的应用场景:3.1 犯罪嫌疑人的DNA比对当法医学调查需要鉴定犯罪嫌疑人与犯罪现场留下的DNA证据是否匹配时,PCR可以用于扩增并比对DNA样本。
通过PCR扩增目标基因区域,然后使用聚合酶链反应产生的DNA产物与犯罪现场提取的DNA进行比对。
如果两者的DNA序列相似,嫌疑人就可能与犯罪有关。
3.2 父子亲子鉴定PCR也可以用于进行父子亲子鉴定。
在这种情况下,调查人员通常会收集父母和孩子的DNA样本,然后利用PCR扩增一些特定的基因区域,比对这些区域的DNA序列,以确定是否存在亲子关系。
3.3 受限性片段长度多态性(RFLP)分析RFLP是一种PCR的衍生技术,在法医学中也有应用。
一种基于H.264视频传输的错误检测方法

Ke r s H. 6 v d o c mmu ia in;e r rd t c i n;e r r l c t n y wo d : 2 4; i e o nc t o ro e e t o r o o a i o
Vo _ 6 No 6 l2 , .
De .2 6 c 00
一
种基 于 H. 6 视频传输 的错误检测方法 24
刘 志 强
( 桂林 电子科技大学 信息与通信学院 ,广西 桂林 5 10 ) 4 0 4
摘
要: 在误码发生严重 的信道中进行视频 通信 , 要求解码器具有强的错误检测定位和错误隐藏能力 。 传统的基于
smuain ts sd n n t eJ 8 lto m fH. 6 .Co a e t h y tx b s dED e h iu ,ti e i lt e ti o eo h M 6pa fr o 2 4 o mp r dwi t es n a — a e h tc nq e hsn w
语法 (y tx 的检测方法低的检测率和定位率极大地影 响了错误隐藏的效果 。通过借助数字水印技术 , S na ) 将改进的 迫偶标识法( E 应用到H. 6 编解码 系统 , F W) 24 用来错误检 测和 定位 , 并在H. 6 2 4的J 8 平 台上进行了试验。 M 6 结果 表 明, 同等应用环境下 , 在 与传统 的基于 语法的检测方 法相 比, 方案不但切 实可行 , 该 而且错误检测 率和定位率均
LI Zh — i n U i qa g
( h o fI fr t na d C mmu i t n E gn e ig,Gul ie st fE e to i Te h oo y  ̄ o l n o ma i n o o o nc i n ie rn ao in Uny r i o lcr nc c n lg ・Gul 4 0 4 i y i n 5 1 0 ,Chn ) i i a
单大气环境拉曼探测方法敏感性与效率对比

单大气环境拉曼探测方法敏感性与效率对比随着环境污染的不断加剧和人们对空气质量的关注度日益提高,对于大气环境中污染物的准确、快速检测成为了一项迫切需要解决的问题。
在现代科技的支持下,已经出现了多种大气环境拉曼探测方法,并且在实际应用中取得了一定的成果。
本文将对常见的拉曼探测方法的敏感性与效率进行对比分析,从而为大气环境污染物的监测提供参考依据。
首先,我们来看一下常见的大气环境拉曼探测方法有哪些。
目前,常见的方法有拉曼散射光谱(Raman scattering spectra)、表面增强拉曼光谱(Surface-enhanced Raman spectroscopy, SERS)以及拉曼探测结合其他方法的综合应用。
这些方法在特定的应用场景下,都能够对大气环境中的污染物进行有效检测。
接下来,我们将重点关注这些方法的敏感性。
敏感性是衡量一种检测方法对目标物质检测能力的重要指标,也是评价探测方法优劣的重要依据。
拉曼散射光谱作为最常见的拉曼探测方法之一,它通过分析被检测物质的光散射光谱来获得相关信息。
由于拉曼散射的散射强度非常微弱,因此在实际应用中,对于低浓度污染物的检测能力相对较弱。
而SERS则通过将被检测物质吸附在表面增强剂上,通过表面增强效应来提高散射信号强度,从而提高检测灵敏度。
因此,相对于传统的拉曼散射光谱,SERS在低浓度污染物的检测方面具有明显的优势。
在比较敏感性的基础上,我们再来分析这些方法的效率。
效率是指探测方法所需的时间和资源,以及对样品的处理过程等因素对整个检测过程的影响程度。
在这方面,拉曼散射光谱相对于SERS具有一些优势。
由于拉曼散射光谱无需对样品进行额外的处理和准备过程,因此可以快速获得检测结果。
而SERS由于需要将样品吸附在表面增强剂上,因此在样品处理过程上相对较耗时。
此外,SERS还对表面增强剂的选择和制备方法有较高的要求,对于大规模应用可能存在成本较高的问题。
除了敏感性和效率外,我们还需要考虑到这些探测方法的适用范围。
脱敏训练方法
脱敏训练方法1. 什么是脱敏训练?脱敏训练是一种通过模拟真实场景来提高人们对于敏感信息的处理能力的训练方法。
在现实生活中,我们经常会面临各种敏感信息,例如个人隐私、商业机密等。
因此,对于这些信息的处理能力变得尤为重要。
脱敏训练可以帮助人们在真实情境下锻炼自己的处理能力,提高对敏感信息的识别和处置水平。
2. 脱敏训练的重要性在当今信息爆炸的时代,个人隐私和商业机密等敏感信息面临着越来越大的威胁。
一旦这些信息泄露,将会给个人和组织带来严重的损失。
因此,提高对敏感信息的处理能力成为了一项非常重要的技能。
通过脱敏训练,人们可以加强对于各种情景下敏感信息的辨识能力,并学习如何正确、高效地处置这些信息。
同时,脱敏训练还可以帮助人们培养保护个人隐私和商业机密的意识,从而减少信息泄露的风险。
3. 脱敏训练的方法脱敏训练可以采用多种方法,下面将介绍几种常见的脱敏训练方法。
3.1 模拟真实情境脱敏训练最重要的一点是模拟真实情境。
通过模拟真实场景,可以帮助人们更好地理解和应对各种敏感信息。
例如,在企业内部可以组织模拟演习,模拟员工接到客户电话时如何处理敏感信息;在学校可以开展模拟考试,考察学生在面对试卷上的个人信息时的处理能力等等。
3.2 提供案例分析除了模拟真实情境外,提供案例分析也是一种常见的脱敏训练方法。
通过分析真实案例,可以帮助人们理解不同情况下应该如何处理敏感信息。
例如,在培训课程中可以提供各种行业内发生过的信息泄露案例,并引导学员进行分析和讨论,从而加深对于敏感信息处理的理解。
3.3 知识普及与技能培训除了模拟情境和案例分析外,还可以通过知识普及和技能培训来提高对敏感信息的处理能力。
例如,组织专门的培训课程,向员工介绍个人隐私保护法律法规、信息安全管理制度等相关知识,并提供相应的技能培训,如如何使用加密软件、如何设置密码等。
通过这些方式,可以帮助人们更好地掌握保护敏感信息的方法和技巧。
4. 脱敏训练的效果评估为了评估脱敏训练的效果,可以采用以下几种方法:•考试评估:组织脱敏知识考试,测试学员对于脱敏知识的掌握程度。
【CN109829429A】基于YOLOv3的监控场景下的安防敏感物品检测方法【专利】
(51)Int .Cl . G06K 9/00(2006 .01) G06K 9/62(2006 .01)
(10)申请公布号 CN 109829429 A (43)申请公布日 2019.05.31
( 54 )发明 名称 基于YOLOv3的监控场景下的安防敏感物品
检测方法 ( 57 )摘要
步骤S46、采用随机梯度下降方法,计算卷积神经网络更新后的权重值、偏置值; 步骤S47、训练迭代到10000次后,将学习率调整为10-4,继续训练; 步骤S48、迭代到50000次后停止训练,保存训练好的模型。 7 .根据权利要求1所述的基于YOLOv3的监控场景下的安防敏感物品检测方法,其特征 在于,在所述步骤S5中,通过如下步骤进行安防敏感物品的检测: 步骤S51、提取监控视频中的每一帧作为输入图像; 步骤S52、将输入图像切割成互有重叠的4块小图 ; 步骤S53 、YOLOv3 神经网络模型将输入的 每一张 小图 调整成448*448大小 ,并 平均划分 成7*7=49个网格,每个网格的大小为64*64; 步骤S54 、对于每个网 格 ,预 测2个边界 框 ,每个边界 框包含5个预 测量以 及5个类 别概 率; 步骤S55、通过步骤S54预测出的7*7*2个目标窗口 ,根据阈值筛选置信度低于设定阈值 的窗口 ,接着利用非极大值抑制去除冗余窗口 ,分别求得4张小图中物品的所在位置 ; 步骤S56、将4张小图中检测到物品的坐标进行坐标变换,再进行一次非极大值抑制,去 除4张小图中重复检测到的物品坐标信息。
其中 ,第一行采 用总方误差来当作位置预 测的 损失函数 ,第二行采 用根号总方误差来 当作宽度和高度的损失函数,第三行和第四行对置信度confidence用SSE作为损失函数,第 五行用SSE作类别概率的损失函数;式中的S2表示网格数,式中取7×7;B表示每个单元格预 测框的个数,式中取3;λcoord=5,λnoobj=0 .5, 表示物品是否出现在网格单元i中, 表 示单元网格i中的第j个边界框预测到正确类别;
动态阈值计算
动态阈值计算引言:在信息处理和数据分析领域,动态阈值计算是一种常用的方法,用于根据数据的变化来自适应地设定阈值。
通过动态阈值计算,可以更准确地检测异常值、识别异常行为,并提高系统的可靠性和安全性。
本文将介绍动态阈值计算的原理、应用场景以及一些常见的计算方法。
一、动态阈值计算的原理动态阈值计算的核心思想是根据数据的实时变化来动态地调整阈值,以适应不同情况下的数据分布。
传统的固定阈值方法在处理多变的数据时往往无法满足实际需求,而动态阈值计算则可以根据数据的变化自动调整阈值,提高算法的准确性和适应性。
二、动态阈值计算的应用场景1. 异常检测:在监控系统中,通过动态阈值计算可以检测出异常事件,如网络攻击、设备故障等。
通过实时监测数据的变化,并根据数据的分布情况调整阈值,可以提高异常检测的准确性。
2. 识别异常行为:在行为分析和安全监控中,动态阈值计算可以帮助识别异常行为,如用户登录异常、交易异常等。
通过对用户行为和交易数据进行实时监测,并根据数据的变化来自适应地设定阈值,可以提高识别异常行为的能力。
3. 数据质量控制:在数据分析和数据清洗中,动态阈值计算可以用于控制数据的质量。
通过实时监测数据的变化,并根据数据的分布情况设定合适的阈值,可以排除异常数据,提高数据的准确性和可信度。
三、常见的动态阈值计算方法1. 移动平均法:该方法通过计算一定时间窗口内数据的平均值来动态调整阈值。
通过不断更新平均值,可以自适应地跟踪数据的变化,提高阈值的准确性。
2. 指数加权移动平均法:该方法在移动平均法的基础上引入了指数加权因子,通过给予最近的数据更大的权重来快速响应数据的变化。
指数加权移动平均法可以更加敏感地追踪数据的变化,适用于快速变化的场景。
3. 基于统计分析的方法:该方法通过对历史数据进行统计分析,如均值、方差等,来计算动态阈值。
通过分析数据的分布情况和历史数据的统计特征,可以自适应地设定阈值,提高算法的准确性。
大数据分析中的异常检测与故障定位方法比较与实验结果分析
大数据分析中的异常检测与故障定位方法比较与实验结果分析随着大数据时代的到来,大数据分析成为企业和组织决策的重要工具。
然而,由于大数据的规模和复杂性,异常检测和故障定位变得愈发困难。
为了解决这个问题,大量的异常检测和故障定位方法被提出,并在实践中得到了广泛应用。
本文将对几种常见的大数据分析中的异常检测和故障定位方法进行比较,并对实验结果进行分析。
首先,我们将介绍几种常用的异常检测方法。
孤立森林是一种基于树结构的异常检测方法,它通过构建一棵随机的二叉搜索树来划分数据,并根据数据点在树中的路径长度来判断其是否为异常。
局部异常因子(LOF)是另一种常用的异常检测方法,它通过比较每个数据点与其邻域数据点之间的密度来确定其异常程度。
聚类离群点检测是一种结合聚类和异常检测的方法,它首先对数据进行聚类,然后根据数据点与其所属聚类的关系来判断其是否为异常。
接下来,我们将比较这些异常检测方法的优缺点。
孤立森林方法的优点是计算效率高,在处理大规模数据时具有优势。
然而,它对于高维数据的处理效果不理想。
LOF方法可以有效地处理多维数据,并且可以在不预先设置参数的情况下进行异常检测。
但是,LOF方法的计算复杂度很高,对于大规模数据的处理效率较低。
聚类离群点检测方法可以克服前两种方法的缺点,并且可以识别出具有不同异常程度的离群点。
然而,聚类离群点检测方法对于数据点之间的关系假设较为敏感,如果数据存在多个聚类,则可能导致误判。
在实验部分,我们采用了一个具有真实场景的大数据集来验证这些异常检测方法的性能。
我们选择了一个包含数百万条记录的网络日志数据集作为实验对象。
首先,我们使用不同的异常检测方法对数据集进行异常检测,并将检测结果与真实异常进行对比。
然后,我们计算了每种方法的准确率、召回率和F1值来评估其性能。
实验结果表明,聚类离群点检测方法具有较高的准确率和召回率,但在F1值上稍逊于孤立森林方法。
LOF方法在准确率和F1值上表现也较好,但召回率相对较低。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件学报ISSN 1000-9825, CODEN RUXUEW E-mail: jos@Journal of Software,2014,25(3):472−488 [doi: 10.13328/ki.jos.004419] +86-10-62562563 ©中国科学院软件研究所版权所有. Tel/Fax:∗一种场景敏感的高效错误检测方法衷璐洁1,2,3, 霍玮4, 李龙1, 李丰1, 冯晓兵1, 张兆庆11(中国科学院计算技术研究所计算机体系结构国家重点实验室,北京 100190)2(首都师范大学信息工程学院,北京 100089)3(中国科学院大学,北京 100049)4(中国科学院信息工程研究所第五研究室,北京 100093)通讯作者: 衷璐洁, E-mail: zhonglujie@摘要: 定值-引用类错误是一类非常重要且常见的错误.当前,对这类错误的检测很难同时达到高精度和高可扩展性.通过合理组合敏感和不敏感的检测方法并控制两类方法的实施范围,可以同时达到高检测精度和高可扩展性.提出一种新颖的场景敏感的检测方法,该方法根据触发状态对潜在错误语句分类,识别不同类别语句的触发场景并实施不同开销的检测,在不降低精度的同时最小化检测开销.设计了一个多项式时间复杂度的流敏感、域敏感和上下文敏感的场景分析以进行分类,并基于程序依赖信息识别触发场景,仅对必要的触发场景实施路径敏感的检测.为上述方法实现了一种原型系统——Minerva.通过使用空指针引用错误检测为实例研究以及总代码规模超过290万行,最大单个应用超过200万行的应用验证,用例实验结果表明,Minerva的平均检测时间比当前先进水平的路径敏感检测工具Clang-sa和Saturn分别快3倍和46倍.而Minerva的误报率仅为24%,是Clang-sa和Saturn误报率的1/3左右,并且Minerva未发现漏报已知错误.上述数据表明,所提出的场景敏感的错误检测方法可同时获得高可扩展性和高检测精度.关键词: 定值-引用错误;路径敏感错误检测;错误目标触发场景;场景敏感;程序分析中图法分类号: TP311文献标识码: A中文引用格式: 衷璐洁,霍玮,李龙,李丰,冯晓兵,张兆庆.一种场景敏感的高效错误检测方法.软件学报,2014,25(3):472−488./1000-9825/4419.htm英文引用格式: Zhong LJ, Huo W, Li L, Li F, Feng XB, Zhang ZQ. Efficient scene-sensitive fault detection approach. Ruan JianXue Bao/Journal of Software, 2014,25(3):472−488 (in Chinese)./1000-9825/4419.htmEfficient Scene-Sensitive Fault Detection ApproachZHONG Lu-Jie1,2,3, HUO Wei4, LI Long1, LI Feng1, FENG Xiao-Bing1, ZHANG Zhao-Qing11(State Key Laboratory of Computer Architecture, Institute of Computing Technology, The Chinese Academy of Sciences, Beijing 100190,China)2(Information Engineering College, Capital Normal University, Beijing 100089, China)3(University of Chinese Academy of Sciences, Beijing 100049, China)4(No.5 Research Laboratory, Institute of Information Engineering, Chinese Academy of Sciences, Beijing 100049, China)Corresponding author: ZHONG Lu-Jie, E-mail: zhonglujie@Abstract: Def-Use faults are a very important and common type of faults. The state-of-the-art detection schemes for such faults stillhardly achieve both preciseness and scalability. This paper applies the idea of combining the sensitive and insensitive detectionapproaches and deploying the effective range of the two approaches to achieve both high detection scalability and high precision. The∗基金项目: 国家自然科学基金(61100011, 61202055, 61303053); 国家高技术研究发展计划(863)(2012AA010901); 国家自然科学基金创新研究群体科学基金(60921002)收稿时间: 2012-10-08; 修改时间: 2013-03-20; 定稿时间: 2013-04-07衷璐洁等:一种场景敏感的高效错误检测方法473study results in a new scene- sensitive detection strategy based on a classification scheme on statements that contain potential faults. The key idea is to classify these statements into different categories based on how a potential fault in these statements might be triggered. It uses polynomial flow-, field- and context-sensitive summary based scene analysis to do the classification and identifies triggering scenes based on program dependence information. Different detection schemes with different amount of overheads are then applied to different categories and thus reducing the overall overhead and achieving a higher scalability. The path-sensitive detection schemes are only performed on the necessary triggering scenes. The proposed approach is implemented in a prototype system, called Minerva. Using null pointer dereference fault detection as an example and verifying the approach through applications whose total code size exceed 2.9 million lines (one application exceeds 2 million lines), the experimental results show that the average detection time of Minerva is 3× and 46× faster than the two state-of-the-art path-sensitive detection tools, Clang-sa and Saturn, respectively. The false positive rate of Minerva is 24%, which is also a third of that of Clang-sa and Saturn’s. There is no false negative on the known faults. The results show that the proposed scene-sensitive fault detection approach can achieve both high scalability and high accuracy.Key words: def-use fault; fault detection; sink triggering scene; scene-sensitive; program analysis定值-引用类错误通常很容易发生但较难精确地检测.代表性的定值-引用类错误包括空指针引用、未赋值引用、除零错、缓冲区溢出等.这类错误难以精确检测,是因为这些错误中由错误源到达错误目标的路径往往很长且涉及的路径数众多.不仅规模大的应用程序包含大量的执行路径,即便是小规模的程序,仍有可能具有大量的路径数.例如SPEC CPU2000中的164.gzip,其程序代码规模仅为8 000行,但涉及的路径数却超过了3.49E+11[1].一直以来,高可扩展性和高检测精度都是静态错误检测所追求的目标.为了获得高检测精度,有很多方法采用了路径敏感的检测策略,但这些方法在可扩展性上的不足严重影响了它们的实用性.为了提高可扩展性,一些路径敏感的检测方法引入了需求驱动的策略,但仍然存在这样一些问题:1) 检测的可扩展性提高了,但检测精度却有所降低.例如在Clang-sa[2]中,为了减少开销,它限制了所能处理的路径条件表达式的类型,因此导致了检测精度上的损失;2) 路径敏感的开销仍然很大.如文献[3−7]实施路径敏感检测的范围是整个程序中所有的潜在错误语句,但对于定值-引用类错误而言,潜在错误语句涉及的引用点数量众多,错误触发的场景也更为复杂,对于这样的情形,通常以切片为主要技术的需求驱动策略往往不够有效.我们对OpenSSH[8]和Wireshark[9]等实用程序进行分析后发现:1) 有些错误在每条潜在执行路径上都会被触发; 2) 有些错误在任何潜在执行路径上都不会被触发;3) 有些错误可能在一些但不是全部的执行路径上才会被触发.基于上述发现,我们认为为了保证检测精度,有必要采用路径敏感的检测方法,但是没有必要对所有的潜在错误语句都采用路径敏感的检测方法.如图1所示片段为例,该片段提取自Wireshark[9],一个实际的网络协议分析应用,其代码超过了200万行.从错误源(可能引起错误的变量定值点)到错误目标(可能触发错误的变量引用点)的路径较长(第4行~第36行涉及大量代码,图中…代表省略的代码段).但图中第34行的宏DISSECTOR_ASSERT会阻止潜在的不安全值流向错误目标.这样,第36行在对ie_item变量进行解引用时不安全的值将不会到达.可是对于这样的情形,传统的路径敏感检测方法需要对图中标识为灰色的代码区域中各条潜在执行路径逐一进行路径敏感的分析,产生较长的路径条件约束并进行求解,但事实上,对于该例中的这种情形,如果能够识别宏DISSECTOR_ASSERT中的特殊控制流,即可判别第36行的危险值解引用不会到达,这样可以避免大量冗余的检测开销.同时值得一提的是,类似这样的在值引用之前进行检查的现象,在实际应用程序中并不少见.基于以上分析,我们认为错误检测可以通过组合低开销的路径不敏感方法和高精度的路径敏感方法来同时获得高可扩展性和检测精度.在本文中,我们提出了一个可扩展的、高精度的错误检测框架,它基于潜在错误语句分类进行错误检测.考虑错误是否会被触发的场景,我们将程序中所有的潜在错误语句分为一定触发(must-trigger)、一定不触发(must-not-trigger)和可能触发(trigger-unknown)这3类,同时设计一个多项式时间的流敏感、域敏感和上下文敏感的传播引擎去实施分类.在分类后,对位于潜在错误语句中的不同类别的错误目标应用合适的、高效的检测算法进行处理.对于一定触发和一定不触发的潜在错误语句,通过低开销的路径不敏感方法完成检测;而对于可能触发的潜在错误语句,采用路径敏感的检测方法.通过这样的方式,我们可以实474 Journal of Software 软件学报 V ol.25, No.3, March 2014 现路径敏感与路径不敏感检测的合理组合.由于在一个程序中路径不敏感和路径敏感的检测方法的应用范围是互补的,上述的组合方式在拓展路径不敏感检测有效范围的同时,缩小了路径敏感检测的范围,可以实现总开销的合理调控.Fig.1 A motivating example (from Wireshark)图1 研究动机示例(选自Wireshark)本文贡献如下:1) 提出利用组合路径敏感和不敏感检测的策略,以同时达到错误检测高可扩展性和高检测精度的目标.通过拓广一个程序中路径不敏感检测方法的有效范围,缩小需要进行路径敏感检测的范围.并基于上述想法提出一种场景敏感的检测方法,该方法基于按不同触发场景对程序中潜在错误语句进行分类的思想,将潜在错误语句分为:一定触发、一定不触发和可能触发这3类.通过路径不敏感的方法完成场景分类以及一定触发和一定不触发的潜在错误语句的处理,仅对可能触发的潜在错误语句利用路径敏感的方法进行检测;2) 在开放源码编译器Open64[10]中实现了上述方法的原型系统Minerva,并在应用广泛、超过290万行规模的代码上对Minerva 进行了验证.通过将空指针引用错误检测作为实例研究,验证了场景敏感检测方法的有效性.结果表明,对于本文的实验用例,Minerva 的平均检测时间分别比当前先进水平的路径敏感检测工具Clang-sa 和Saturn 快了约3倍和46倍.平均误报率仅为24%,是Clang-sa 和Saturn 平均误报率的1/3左右,且没有漏报已知错误.第1节介绍术语.第2节阐述场景敏感检测方法的全貌及Minerva 框架,并讨论如何对潜在错误语句进行分类,以及如何基于这样的分类进行相应的检测算法设计.第3节给出场景敏感检测效益模型.第4节是原型系统的实现.第5节给出实验结果,包括实验环境和实验用例.第6节是相关工作.最后对全文进行总结. 3: if (iax _tree ) {4: proto _item *ti , *ie _item =NULL ; 1: static guint32 dissect _ies (tvbuff _t *tvb , guint32 offset, 7: case IAX _IE _DATETIME :8: ... 6: switch (ies _type ) {10: ... 9: case IAX _IE _CAPABILITY : 11: case IAX _IE _APPARENT _ADDR :12: ... 13: switch (apparent _addr _family ) {14: case LINUX _AF _INET :15: ...16: }17: default:18: if (ie _hf !=-1 )19: ...20: else {21: ...22: switch (ies _len ) {23: case 1:25: case 2:26: ... 27: case 4:29: default: 30: ... 31: }32: }34: DISSECTOR _ASSERT (ie _item !=NULL );35: if (!PROTO _ITEM _IS _HIDDEN (ti )) {36: field _info *ie _finfo =PITEM _FINFO (ie _item );38: }39: }37: ... 错误目标错误源33: }24: ... 2: ... proto _tree *iax _tree , iax 2_ie _data *ie _data ) {5: ... 28: ...衷璐洁等:一种场景敏感的高效错误检测方法4751 术语有一类重要的错误,它们通常表现为在变量的定值点分配给变量一个不安全(unsafe)的值,并且这个不安全的值会沿着至少一条执行路径流向该变量的引用点,从而触发一个错误.对这样一类错误,本文称为定值-引用类错误.定值-引用类错误中的引用点被称为错误目标(sink),相应定值点被称为错误源(source).定义1(触发场景). 给定变量v的一个引用点(记作USE(v)),所有沿着控制流路径可以到达该引用点的定值点集合(记作DEFs(v))与给定引用点以及它们之间的路径所构成的控制流子图是一个触发场景.我们用触发场景图(triggering-scene graph,简称TSG)对触发场景进行描述.将变量v的一个引用点USE(v)的TSG记为TSG USE(v)=〈V,E〉,其中,V⊆V CFG,DEFs(v)⊆V,USE(v)∈V,E⊆E CFG,V CFG和E CFG分别表示控制流图CFG的顶点集和边集.定义2(触发状态). 划分3种触发状态:一定触发、一定不触发和可能触发,定义如下:•一定触发(must-trigger)状态:在TSG v上,如果∀s∈DEFs(v),定值s都是不安全的,那么称USE(v)处于一定触发状态;•一定不触发(must-not-trigger)状态:在TSG v上,如果∀s∈DEFs(v):(1)定值s是安全的,或者(2)定值s是不安全的,但从s到USE(v)的值流路径不可行,那么称USE(v)处于一定不触发状态;•可能触发(trigger-unknown)状态:在TSG v上,如果∃s∈DEFs(v),定值s是安全的并且∃s′∈DEFs(v),定值s′是不安全的且s和s′到USE(v)的值流路径可能可行,称USE(v)处于可能触发状态.一般地,若USE(v)有不安全值到达,称USE(v)所在的语句为潜在错误语句.文中场景敏感的错误检测方法是指在执行错误检测时会区分不同的错误目标触发状态,即对每一种错误目标触发状态,场景敏感的错误检测方法会选择最合适开销的方法进行检测;相反地,一个场景不敏感的错误检测方法并不会在检测时区分不同的错误目标触发状态.定值-引用类错误的检测问题本质上是一个广义的定值-引用流分析问题.受数据流分析框架[11]的启发,我们用格值模型描述定值-引用类错误的属性.该模型将定值-引用类错误的检测问题域组织成一个格,称为错误属性格.基于错误属性格的定义,我们将定值-引用类错误的检测问题变换为错误属性格值的计算与传播问题,并将负责错误属性格值计算与传播的部分称为传播引擎(propagation engine,简称PE).定义3(错误属性格). 错误属性格(fault attribute lattice,简称FAL)是一个代数系统,定义为FAL=(V FAL, F intersection,F union),其中,•集合V FAL中的元素是具体错误类型的错误属性格值;•V FAL中的底元素⊥表示初始的错误属性值,顶元素 表示检测到的将要报告的错误属性值;•函数F intersection:V FAL×V FAL→V FAL和F union:V FAL×V FAL→V FAL分别是FAL中的最大下界和最小上界函数,它们实现将错误属性值计算映射为FAL上的格值操作;•FAL上的偏序关系对应错误属性格值的计算规则;•FAL值具有3种属性:安全、一定不安全和可能不安全.其中,安全的FAL值对应一定不触发的状态;一定不安全的FAL值对应一定触发状态;可能不安全的FAL值则需要进一步判断:若值流路径无法到达引用点,则对应一定不触发状态;否则,对应可能触发状态.2 场景敏感的错误检测策略2.1 错误触发场景一般地,错误触发场景通常表现为如图2所示的3种典型形式:(1)对于如图2(a)所示的一定触发场景,无论程序执行哪条从定值点到引用点的路径,都存在源自错误源476Journal of Software 软件学报 V ol.25, No.3, March 2014的不安全值到达错误目标; (2) 对于如图2(b)所示的一定不触发场景,因为在错误目标与错误源之间存在对值进行引用前检查的检查语句,即图中是否不安全?判定框,所以对于错误目标而言值流将不可达.这是一种常见的程序员安全编程习惯:在使用一个值,特别是指针值之前,先去检查该值是否是不安全的,若是不安全的,就会引导程序执行绕过引用点以避免错误的发生.这样的处理方式通常会改变正常的程序控制流,称为特殊控制流(special control flow,简称SCF);(3) 对于如图2(c)所示的可能触发场景,错误源到错误目标的值流是否可行取决于条件(1),而这需要利用路径敏感的分析来判定.(a) (b) (c) Fig.2 Typical sink-triggering scenes图2 典型的错误触发场景我们统计了实验中所有程序内一定触发、一定不触发和可能触发的错误目标的数量,发现只有6%的错误目标是可能触发的,其余均为一定触发或一定不触发的,并且一定不触发的错误目标比例高达73%.这意味着高效的分类算法以及仅对可能触发的错误目标进行路径敏感的检测对达到在不降低精度的情况下提高检测效率的目标而言是有实际应用基础的.2.2 Minerva 检测框架图3给出了Minerva 检测框架的示意图.首先,针对具体的定值-引用类错误创建一种错误属性格(FAL)模型,将错误属性定义为格值,通过这种方式,传播引擎(PE)将错误检测问题变换为FAL 值的计算与传播问题.随后, PE 以一种静态的、路径不敏感但上下文敏感的方式计算程序中的FAL 值,对错误目标进行分类,并根据这些错误目标的FAL 值属性进行如下处理:1)对于那些具有一定不安全属性的错误目标,即无论执行程序中的哪条路径它们都一定会被触发.对于这些错误目标,PE 会将它们归类为一定触发,并直接给出错误报告; 2) 对于那些具有可能不安全属性的错误目标,PE 会进一步判定这些错误目标是否是一定不触发的错误目标:如果是,意味着相应错误目标无论在哪条路径下都不会被触发,PE 将过滤它们;否则,相应的错误目标可能在某些路径上被触发,那么PE 会将它们归类为可能触发的,然后把它们放到一个切片标准工作集中(该工作集在第2.4节进行介绍);3) 最后,切片标准工作集中的每个元素都会被Minerva 选择作为切片种子进行程序切片,然后在切片后的结果程序上实施路径敏感的检测.通过潜在错误语句分类和仅在必要的程序切片结果上实施路径敏感的检测,我们可以避免因为采用统一的路径敏感检测方法处理所有错误目标而产生的不必要开销.错误源: DEF (x ) 错误目标: USE (x )不安全的定值... 错误源: DEF (x ) 错误目标: USE (x )不安全的定值是否不安全?YES NO GoSpecialProcess ( )... ...错误源: DEF (x ) 错误目标: USE (x )不安全的定值路径条件(1)... ... 路径条件(2)安全的定值...衷璐洁等:一种场景敏感的高效错误检测方法477忽略错误报告Fig.3 Minerva detection framework图3 Minerva检测框架2.3 FAL值计算及场景分类2.3.1 FAL值计算Minerva利用PE在错误属性格值计算与传播的过程中找出所有的错误目标.FAL值计算由两部分组成:过程间基于摘要的上下文敏感的FAL值计算和过程内的流敏感和域敏感的FAL值计算.过程间FAL值计算是一个两遍的、基于摘要的上下文敏感的计算过程.给定一个函数,为了使过程间FAL 值的计算更加准确,我们将函数的输入和输出参数分别建模为引用输入(Use_In)和定值输出(Def_Out).其中,引用输入用于建模函数的输入参数,通常包括形式参数和全局量.定值输出用于建模函数的输出参数,通常包括返回值和函数的副作用.过程间上下文敏感的FAL值计算由3部分组成:将调用点处上下文错误属性格值传入给引用输入(Map(ActualIn_VAL(cs),Use_In(cs)))、函数体内的格值计算(Intra_Compute(f cs_callee))以及将定值输出的错误属性格值传出给主调函数中调用点处(Map(DefOut_V AL(cs),Actual_Out(cs))).其中,ActualIn_ V AL(cs)是在调用点cs处传入函数f cs_callee的错误属性格值,Use_In(cs)是f cs_callee的引用输入,DefOut_V AL(cs)是在调用点cs由函数f cs_callee传出的错误属性格值,Actual_Out(cs)是在调用点cs处被函数f cs_callee返回值修改的变量或在函数f cs_callee中修改的全局量.Map(V AL,V)表示将错误属性格值集合V AL中的元素映射到变量集合V中对应变量.过程内FAL值计算Intra_Compute(f)是流敏感和域敏感的,计算过程基于SSA(静态单赋值)形式对函数中的语句逐条进行遍历.2.3.2 错误目标触发场景分类算法错误目标的场景分类在FAL值的计算与传播过程中完成.如果一个引用点被发现具有不安全的FAL值, PE将会进一步判定其是否为一定不安全或可能不安全的FAL值.如果它是一定不安全的FAL值,Minerva将会标识其为一定触发的错误目标,然后报告错误.否则,PE会继续判断它是否是一定不触发的,这种判定在USTSG 上完成.PE会进行一定不触发的模式识别.图2(b)描述了常见的一定不触发模式,它们通常由一条检查语句和一个SCF构成.图4相应给出了图2(b)中GoSpecialProcess()可能出现的一些情形:根据改变控制流的方式,分为直接改变控制流和间接改变控制流两类,前者常常直接执行return或exit,而后者通常将控制流改变语句包含在一个包装(wrapper)函数或宏中.图5给出了实际程序中为避免空指针引用或缓冲区溢出错误程序员编写的一些检查语句和SCF代码片段,其中,图5(a)、图5(b)是针对空指针引用而写的代码,图5(a)在指针变量b为空指针时,会启用宏YY_FATAL_ERROR进行正常控制流改变;而图5(b)在ap_server_root_relative函数的返回值为空时,直接return以改变正常的程序控制流.图5(c)则是为了防止缓冲区溢出所编写的一些处理代码,其中,程序员通过条件t==tag+tagbuf_len来判断是否到达了缓冲区边界,如果到达就提前终止控制流以避免其后可能发生的缓冲区溢出错误.478 Journal of Software软件学报 V ol.25, No.3, March 2014DEF(p);…if (IsUnsafe(p))GoSpecialProcess();…USE(p);GoSpecialProcess ():(1)直接控制流改变return; or exit(…);等(2)间接控制流改变2.1)包装(Wrapper)函数THROW(…)FATAL_ERROR(…) MEMORY_ERROR(…) … 2.2)宏XXX_ASSERT …Fig.4 Typical form of GoSpecialProcess() 图4 GoSpecialProcess()的常见形式b=(YY_BUFFER_STATE)Matealloc(…); if (!b)YY_FATAL_ERROR(…); fspec=ap_server_root_relative(…);if (!fspec) {ap_log_error(…);return NULL;}if (t==tag+tagbuf_len){*t=EOS;return NULL;}(a) 空指针引用SCF(选自Wireshark) (b) 空指针引用SCF(选自Apache) (c) 缓冲区溢出SCF(选自Apache)Fig.5 SCF code segments example图5 实际SCF代码片段示例为了更进一步验证危险值判断现象存在的普遍性,我们调研和分析了大量的实际应用程序源码(超过18000KLOC),包括OpenSSH,Wireshark,Linux-kernel等.结果发现,在我们的统计用例中,约每1 000行就有8行的空指针引用检查语句和6行的缓冲区溢出下标范围检查语句.具体的统计数据参见表1.Table 1 The number of unsafe value checking statements表1危险值检查语句数统计程序规模(KLOC)危险值检查语句数空指针缓冲区溢出Sendmail 115 ≥1082 ≥233Openssh 155 ≥631 ≥88Apache 268.9 ≥964 ≥208Wine 1905 ≥2600 ≥122Wireshark 2383 ≥1642 ≥311Linux-Kernal 13500 ≥133993 ≥126867在此值得一提的是,许多研究者在他们的研究中加入了对程序特征的考虑,例如在Ngo等人[12]的研究中,他们通过识别具有不同特征的4种模式来识别不可行的路径.在本文中,我们将对特殊的程序特征的考虑加入到了错误检测的工作中.算法1给出了进行场景分类的算法,该算法在分类的同时检测一定触发的错误目标并识别一定不触发的错误目标.该算法通过区分不安全的FAL值的属性来完成场景分类.一般地,一定不触发的错误目标的识别方法是在USTSG中检查一个给定错误目标相对于错误源的所有控制节点(第7行~第11行),且只关注与错误相关的条件,例如寻找是否存在如图2(b)所示的检查语句.如果存在,则继续查找是否存在SCF.如果SCF也被找到了,那么当前的错误目标将会排除,因为它是一个一定不触发的错误目标(第8行~第10行).否则,检查下一个控制节点以继续寻找检查语句和SCF.如果在所有的控制节点中都没有发现检查语句和SCF,那么就将当前错误目标标识为可能触发的.在算法1中,我们将可能触发的错误目标及其错误源一并放入切片标准工作集中(第12行~衷璐洁等:一种场景敏感的高效错误检测方法479第14行).算法1. 错误目标的检测与排除.1. Procedure Detection_and_Exclusion(f)2. For each s in f3. If (s中的一个引用点具有不安全的FAL值) Then4. If (FAL值具有一定不安全属性) Then5. 报告该错误;6. Else7. For each s的控制节点8. If (检查语句和SCF成功匹配) Then9. 过滤当前引用点;10. End If11. End For12. If (在所有控制节点中均没有成功匹配) Then13. 将当前引用点及其定值点加入到一个切片标准工作集中;14. End If15. End If16. End If17. End For18. End2.4 可能触发错误的检测2.4.1 方法描述对于算法1所生成的包含所有可能触发的错误目标的工作集,需要使用路径敏感的信息进行判定.为了有效降低路径敏感的检测开销,在实施路径敏感检测前,先进行以可能触发的错误目标为切片种子的程序切片以获得最小的路径敏感检测输入集.可能触发的错误目标程序切片由两个阶段组成:一个是准备阶段,在该阶段,PE收集所有可能触发的错误目标,为路径敏感检测阶段做准备;另一个是路径敏感检测阶段,为了缩小检测范围,我们仅对错误目标工作集中的可能触发的错误目标而不是程序中所有的潜在错误语句进行路径敏感的检测.并且对于切片标准工作集中的每一个错误目标,我们也不是在全程序范围内进行检查,而是仅检查那些与该错误目标及相应错误源相关的语句.上述两种做法可以极大地减小路径敏感检测的输入集.需要指出的是,对于可能触发的错误检测,我们依据控制流图(CFG)和SSA上的值流信息就可以进行切片,没有必要再去构造程序依赖图(PDG),这样可以进一步减少开销.2.4.2 可能触发错误目标切片(trigger-unknown sink slicing,简称TUSS)为了提取那些可能影响错误源、被错误源影响以及影响错误目标的语句,在算法2中,我们首先对错误目标实施后向切片获得语句集合S BT,随后对错误源实施前向切片得到语句集合S FS,之后求这两个集合的交集S TS.然后对错误源实施后向切片,最后将其结果与S TS求并集,所得结果即为所求.该算法中,DoBackSlicing(x,y)表示以y为切片标准对x实施后向切片,DoForwardSlicing(x,y)表示以y为标准对x实施前向切片.集合S path-sensitive-detection是TUSS算法的输出,该集合是针对错误检测而言处于可能触发状态的潜在错误语句最相关的语句集合,在后面的工作中我们将对它们实施路径敏感的检测,换言之,该集合是Minerva中路径敏感检测部分的输入.算法2. 可能触发错误目标制导切片.1. Procedure TUSS(P,Workset SlicingCriteria)2. For each (S source,S sink) in Workset SlicingCriteria。