程序化防治技术论文(精选7篇)
程序化防治技术论文 第1篇
1对程序化防治技术的诠释
所谓的程序化防治技术就是根据作物主要病虫害发生规律和先后次序, 结合当地土壤、气候, 在GAP标准范围内以马铃薯生育进程为主线, 开展全程有主次的病虫害综合防治技术。首先根据当地马铃薯主要病虫害设计防治程序, 然后按程序开展防治工作。程序化防治技术是“以防为主, 防治并举”植保方针的全面实践和应用。
2按程序开展病虫害防治工作
首先, 把设计好的程序转化成指导防治工作的时间表。然后, 严格按照时间表, 并对照马铃薯生长发育时期开展相应的防治工作。做到马铃薯不同生育时期开展不同重点的病虫害防治。
3马铃薯病虫害程序化防治技术效果
3.1 马铃薯虫害程序化防治技术与常规病虫害防治技术相比防治效果十分显著
在2012年马铃薯晚疫病全国性大流行之年经受住了考验。我们采用陇薯3号脱毒原种为供试材料, 于宕昌县木耳乡西坞村, 同一地块, 统一施肥管理条件下进行了程序化防治技术与常规病虫害防治技术相比试验, 马铃薯发病率见表1。程序化防治技术可实现对马铃薯病虫害整体防控的作用, 防治效果十分显著, 尤其对晚疫病防治作用突出, 常规防治的处理和大田在晚疫病发生后15~20天内地上植株95%以上全部枯死, 而程序化防治的处理和大田地上植株生长茂盛, 直到早霜来临杀死地上茎叶。
3.2 程序化防治技术与常规防治技术相比马铃薯单产水平差异明显
采用程序化防治的马铃薯GAP基地22公顷平均每667m2产3 060kg, 采用常规防治的大田和对照平均每667m2产976.4kg (土壤处理) 和1 103.8kg (地上喷雾) 。见表2。
3防治成本及经济效益核算。
防治成本包括农药和人工投入, 经济效益=平均667m2产单价-防治成本。见表3。
程序化防治技术防治成本是常规防治的4~10倍, 但防治纯收益也是10倍, 每667m2收益4133.3元, 属高投入高产出现代农业的范畴。
说明:市场价商品马铃薯1.6元/100kg, 人工每个50元 (按平均每个人工每天喷雾3亩计算人工) , 辛硫磷1.6元/100g, 甲霜灵锰锌3.5元/100g。
4小结与讨论
4.1 马铃薯病虫害程序化防治技术
“以防为主, 防治并举”植保方针的全面实践和应用。
4.2 该项技术
显著地防治效果与今年特别严重的晚疫病大流行条件是分不开的, 在正常年景条件下会有所下降。
4.3 该项技术
在马铃薯良种繁育和脱毒种薯快繁中具有广泛地应用前景。
摘要:马铃薯程序化防治技术是“以防为主, 防治并举”植保方针的全面实践和应用, 具有对马铃薯病虫害整体防控的作用, 防治效果明显, 经济效益显著。尤其对控制马铃薯流行性病害有较明显的效果。
地质灾害防治报告程序 第2篇
发生一般地质灾害,应及时向市国土资源局上报;发生较大级地质灾害,应当于48小时内上报市国土资源局,同时上报省国土资源厅;发生重大级地质灾害,应当于48小时内上报市国土资源局,同时上报省国土资源厅和国土资源部;发生特大级地质灾害,应当于24小时内上报市国土资源局,同时上报省国土资源厅和国土资源部。
一旦发生地质灾害险情,应立即通知相关人员迅速赶赴现场。
地质灾害等级划分为一般级、较大级、重大级和特大级。
一、一般级
未发生人员死亡且直接经济损失l00万元以下,社会影响不大者。
二、较大级
因灾死亡和失踪10人以下,或直接经济损失100万元以上、1000万元以下,社会影响较大者。
三、重大级
因灾死亡和失踪10人(含10人)以上、30人以下,或直接经济损失l000万元以上、5000万元以下,社会影响严重者。
四、特大级
因灾死亡和失踪30人(含30人)以上,或直接经济损失5000万元以上,社会影响极大者。
藏羊寄生虫病程序化防治模式 第3篇
1 进行划区轮牧
划区轮牧是一种预防寄生虫病的有效途径, 因为虫卵从宿主体内排出后, 到发育成侵袭性幼虫需要一定的时间。但侵袭性幼虫在草场上生存的时间是有限的, 因此, 按照寄生虫的生长规律, 对草场进行合理的划分, 进行轮牧是预防寄生虫病的一项有效措施。
2 注意饮水、圈舍卫生
为防止肝片吸虫病、捻转胃线虫的发生, 不要在潮湿的地方放牧。饮用流水和井水, 禁止饮死水。圈舍要通风向阳, 保持干燥, 粪便要勤出勤垫, 同时要添加饲料, 注重营养, 增强机体的抵抗能力。
3 定期驱虫
3.1 应用药物
阿维菌素是广谱抗虫药, 几乎对所有线虫、外寄生虫及其他节肢动物都有较好的驱杀效果, 具有高效、低毒、安全等特点。在临床应用中, 阿维菌素还具有抗寄生虫药物不可替代的优点:一是通过内服对体内多种寄生虫有防治效果;二是不与其他驱虫药发生交叉抗药性。
3.2 驱虫程序
(1) 每年对羊群驱虫2次, 2~3月份采取幼虫驱虫技术, 阻止“春季高潮”的出现;8~9月份驱虫, 防止成虫“秋季高潮”的出现和减少幼虫的“冬季高潮”。对于寄生虫严重的地区, 在5~6月份可增加1次驱虫, 避免冬、春季发生体表寄生虫病。
(2) 羔羊一般在8~9月份进行首次驱虫, 保护羔羊的正常生长发育。由于断奶前后的幼畜受到营养应激, 易受寄生虫侵害, 此时要进行保护性驱虫。
(3) 母畜在接近分娩时进行产前驱虫, 避免产后在4~8周发生粪便蠕虫卵数“产后升高”。在寄生虫污染严重地区必须在产后3~4周进行驱虫。
3.3 使用剂型与剂量
阿维菌素通常有片剂 (每片5 mg) 和1%针剂两种, 内服片剂, 皮下注射针剂, 0.02 mg/kg体重为推荐剂量。
4 小 结
程序化防治技术论文 第4篇
集安市位于吉林省东南部, 全市面积为3 217 m2, 人口23万, 全市森林覆盖率达到80%以上, 是典型的山区县份, 全市年出栏生猪8万多头, 现有猪场42户, 出栏最多的为2 000头, 属于小型猪场。因各地情况千差万别, 免疫程序也不尽相同。免疫项目过多既浪费人力、财力、物力, 又影响猪的生长, 通过对全市养猪场的调查及多年的探索, 归纳出适合集安市猪场的综合性防治措施。具体讲通过免疫、消毒、隔离、驱虫等措施来达到控制和消灭疫病的目的。
1 制定科学的免疫程序
免疫的原则宜少不宜多, 间隔时间易长不易短。疫苗使用过多既影响猪的生长, 又易造成免疫失败。免疫应注意:一是保证疫苗质量防止失效;二是不要随意加大疫苗剂量;三是必须在猪群健康的情况下免疫, 否则易引起副反应, 造成群体发病;四是在免疫前7天在饲料和饮水中加多种维生素, 减少应激反应, 夏天早、晚免, 冬天中午免;五是一个圈舍一个针头, 千万不能一个针头打到底, 防止交叉感染;六是必须保定好不能打飞针。
1.1 猪瘟的免疫
仔猪20日龄、60日龄各免疫一次。猪瘟兔化弱毒疫苗首免4头份、二免2头份;种用公猪每年3月份、9月份各免疫一次, 剂量4头份。
1.2 伪狂犬病的免疫
4月龄普遍免疫一次, 妊娠母猪在产前一个月, 种公猪春、秋各免疫一次。使用基因缺失疫苗2头份。
1.3 口蹄疫的免疫
40日龄首免高能灭活疫苗1头份, 7日龄后加强免疫一次。每年4月份、8月份各普免一次, 免疫剂量2头份。
1.4 仔猪红痢的免疫
母猪产前一个月注射C型魏氏梭菌苗5 m L。
1.5 猪细小病毒的免疫
后备公母猪在参加配种前一个月肌肉注射猪细小病毒弱毒疫苗1头份。
1.6 其它免疫
猪圆环病毒、乙型脑炎、猪丹毒、猪肺疫、蓝耳病免疫要根据外地及当地疫病的发生、发展和传播情况而定。
2 制定严格的消毒计划
厂区门口设消毒池, 每周更换两次消毒液, 所有进出车辆必须经过消毒池消毒。育肥猪圈舍实行全进全出制。步骤:清扫圈舍、高压冲刷、喷洒消毒、熏蒸消毒、火焰消毒;带猪消毒步骤:进行清扫、用水冲洗、用消毒泵、喷雾器等实施消毒, 选择刺激小毒性低的药物, 同时稀释的浓度不能过高, 过高浪费药物, 过低达不到消毒效果, 如次氯酸盐、过氧乙酸、百菌消、强力消毒灵等交替使用, 每周两次。
3 制定严格的隔离制度
外引进的种猪和仔猪都要先进入隔离舍, 进行隔离观察, 半个月后没有发现异常, 严格消毒后进入正常猪舍饲养, 防止外来细菌病毒的传染, 对发现的病猪要及时进行隔离, 待治疗正常后混群饲养。
4 定期进行药物驱虫
寄生虫对猪的危害是非常大的, 不仅消耗猪体的营养, 还导致免疫力降低, 生长速度下降, 极易发生疾病, 严重影响猪场的经济效益, 定期开展驱虫能促进猪的生长发育, 减少疫病的发生。每年春季三月开展一次驱虫, 使用阿维菌素、阿达咪、丙硫咪唑、伊维菌素等, 阿达咪每50 kg饲料加药物30 g, 连用3 d, 皮下注射伊维菌素0.3 mg/kg, 取得了很好的效果。
5 加强猪场的日常管理
程序化防治技术论文 第5篇
关键词:格尔木,规模养鸡,鸡病防治,成活率,免疫程序
格尔木地区由于海拔高、气候寒冷、干燥等地理气候和养殖传统原因, 鸡的养殖一直没有形成规模, 处于散养状态, 无法满足城市发展需求。面对巨大的市场发展潜力, 我们在市郊郭勒木德镇进行规模养鸡试验, 以此推广养鸡技术, 适度发展养鸡业, 从而不断发展农村新型养殖模式, 为群众增产增效服务。禽病防治成为规模化养鸡成败的关键, 为此, 我们对本地高寒、缺氧、干旱等地理气候和饲料、水质等情况进行综合分析, 探索疫病发生规律, 提出疫病防治技术方案。
1 自然地理概况
格尔木市地处欧亚大陆中心, 青藏高原腹地, 东经93°45′~95°43′、北纬35°11′~37°47′。地区海拔2 677~3 350 m之间。由于西南暖湿气流受到喜马拉雅山、昆仑山和祁连山的层层阻隔难以进入, 从而形成终年极度干燥少雨, 夏天酷暑, 冬天严寒, 四季不分明, 属典型的高原大陆性气候。年均降水量40.2 mm, 年均蒸发量2 736.2 mm, 空气相对湿度33%, 年均温度4.3 ℃, 多年平均日照时数3 095 h, 日照充足, 日照百分率70%, 多年平均风速3.1 m/s, 大风日数22.6 d, 沙尘暴日数16.1 d, 年最大风速4.0 m/s。
2 发病情况及发病特点
(1) 格尔木地区受特殊地理气候影响, 规模养鸡场发病也呈现出比较明显的地域性特点。雏鸡引进后以发生黄白痢、大肠杆菌病为主, 对大正养殖场等四个规模养鸡场的调查发现, 黄白痢发病率高达63%, 大肠杆菌病发病率也很高, 达到15%。
(2) 20 d后的鸡群易发呼吸道疾病, 传染性支气管炎、传染性法氏囊病、传染性喉气管炎发病频率高、病性顽固。尤其是传染性支气管炎一旦发病, 几乎全群发病。
(3) 支原体发病率也较高, 球虫病、马立克氏病也有发病, 但发病率低, 危害程度小。
3 病性分析与防治措施
(1) 传染性疫病不仅发病率高, 而且也是造成鸡死亡的主要病因。发病快、致病率高、造成损失大, 因此做好免疫仍然是本地规模养鸡场疫病防治的重中之重。
(2) 格尔木地区气候干燥, 蒸发量大, 湿度低, 进入格尔木地区的鸡只尤其是雏鸡由于长途运输和应激易患呼吸道疾病, 大风天气更易造成疫病发生和传播。因此要经常性投用土霉素、红霉素、恩诺莎星、环丙沙星等药物, 预防治疗呼吸道疾病, 并通过加强消毒和清洁环境工作来预防细菌性呼吸道疾病发生、发展。鸡舍用消毒药品有过氧醋酸、氯剂、碘剂等。同时, 由于本地空气相对湿度仅为33%, 为防止鸡只尤其是初期引进鸡苗脱水, 要用葡萄糖、补液盐、电解多维生素饮水补液。
(3) 发生传染性呼吸道疾病情况时由于病性顽固, 要全群用药, 为了避免产生耐药性, 要适时改变用药。用酒石酸、泰勒菌素防治支气管炎、喉气管炎。如支气管炎转变为慢性, 则除了用疫苗外, 用大青叶、板蓝根、黄芹等中药配合用药效果很好。
(4) 由于缺氧和盐碱度较大容易引起过量采食造成尿酸盐沉积引发的腹水症, 尤其在冬季发生传染性支气管炎的情况下, 易激发腹水症, 因此要有别于内陆地区少量多次饲喂, 并通过饲料营养成分的调整, 达到机体营养水平, 防治营养代谢性疾病。
(5) 格尔木地区高寒缺氧, 且四季不分明, 冬春季节多风少雨, 气温变化大, 直接关系到对鸡舍温度的有效控制, 以维持鸡正常生长发育体温, 宜采用三层网式鸡笼笼养。定期开通, 保障供氧, 排除废气通过这种办法, 防止氨气中毒等。鸡舍温度保持在35~37℃, 一周后每周下降0.5℃, 直至15~20℃后保持温度状态, 饮水用凉开水, 饮水中加入5%葡萄糖和口服补盐液 (按说明书使用) 。
4 免疫程序
3日龄用以色列夏非特生物药厂肾传支疫苗预防鸡城疫、肾传支、呼吸性传支;7龄用青岛易邦生物药品公司鸡毒支原体活疫苗预防新城疫+传染性支气管炎, 其间湿度保持在60%左右, 空气要保持清洁, 防止污秽;12日龄用青岛易邦苗脱脂奶粉法预防鸡传染性法氏囊, 20日龄进行强化免疫;16日龄用青岛易邦苗点眼预防鸡支原体病;24日龄用陕西绿丰苗刺种预防传染性喉气管炎+鸡痘;18日龄开始用土霉素预防呼吸道、肠道疾病, 药料比5 g/10 kg;28日龄颈部皮下注射禽流感疫苗;35日龄用点鼻、点眼法再次预防新城疫;42日龄用青岛易邦苗预防新城疫+传染性支气管炎。
5 效果分析
程序化防治技术论文 第6篇
本文提出了基于多智能系统(Multi-Agent System,MAS)的变电站程序化操作自动控制序列的生成策略,建立由多个智能体(Agent)协同合作的智能系统,自动识别电网结构和设备的实时状态,智能学习操作规则、生成操作序列、适应接线方式和运行状态的多变性。
1 操作序列智能生成的MAS模型
MAS模型是一个由多个Agent组成的智能分布式系统,多个Agent的活动相对独立,但是Agent之间又相互协作、相互支持,通过竞争、协商、协作来共同完成系统设定的目标。
操作序列智能生成的MAS模型见图1。在MAS模型中包括:①电网信息获取Agent;②专家规则库Agent;③术语库分析Agent;④智能学习Agent。
电网信息获取Agent用于从安全监控和数据采集(SCADA)系统中获取电网的实时数据,从电网模型描述库中获取电网拓扑结构数据,从而可得到电网运行当前状态;专家规则库Agent以规则库内预置的逻辑规则,对操作进行分解,将复杂的操作任务分解为一个个最基础的原子操作(如断路器、隔离开关等),并引入“五防”规则作为基础操作闭锁规范,要求能够对开票操作进行全面的防误检查,从而实现判断当前操作是否可行和如何执行的智能推理;术语分析Agent主要把握操作票生成的用语规范,使之符合电网运行规程,做到“机器可识别”和“人可识别”;智能学习Agent也是重要环节,用于实现规则库的知识更新。
所建立的MAS模型是多层次的,每个Agent下还可以有多个子Agent,用于实现局域范围的分布式功能。电网信息获取Agent下包括设备认知特征分析、状态特征分析、行为特征分析、电网拓扑分析;专家规则库Agent下包括操作任务的分解、防误规则校验。
2 操作序列智能生成方案
在变电站程序化操作序列生成实现方案上,采用并行和串行混合的设计策略,在粗粒度上采用并行控制策略,在细粒度上采用串行控制策略[7,8,9]。这样可以综合利用并行和串行分析策略各自的优点,使整个系统在执行速度和存储资源之间合理地进行平衡。
变电站程序化操作序列智能生成架构图如图2所示。程序化操作序列智能在线生成技术以准确的电网模型为基础,结合设备认知、接线方式识别、运行状态的识别方法以及倒闸操作基本原则,由中心处理机智能生成操作序列,并结合术语库规则形成标准的可识别的序列描述。
程序化操作序列智能生成方案中,基本特征描述数据库、知识模型库、中心处理机功能如下。
1) 基本特征描述数据库:
电网实时数据库包括设备认知特征库,描述各类设备的特征;状态认知特征库,描述设备状态的特征;行为特征库,描述操作行为的特征。电网模型描述库,准确的电网拓扑模型。
2) 知识描述库。
操作描述规则知识库,各类操作的智能解析专家知识库;术语和语句模型库,可定制的术语和语句模型数据库。
3) 程序化操作序列智能生成中心处理机。
其实现操作序列智能生成任务的分解和分配,以及Agent之间的信息交互协同合作。
3 基于MAS模型的推理方法
采用基于MAS模型的推理方法,并结合动态的设备功能原则的识别,使得变电站程序化操作序列的生成能够满足电力系统运行的严格要求,灵活地适应接线方式与运行状态的变化。
以母线运行转冷备用的操作序列生成为例。首先建立MAS模型,将该操作任务分解为多个断路器间隔操作的子任务,再分解为断路器、隔离开关的具体操作,如图3所示。在纵向上,母线、断路器、隔离开关这些Aengt之间存在相互依赖的协作控制,采用深度优先的原则遍历每个子任务;在横向上,同类设备的Agent之间存在个体的差异,在它们之间进行数据信息的统一、交换等,最终将结果展现给用户。
4 操作序列智能生成的实现
生成操作序列时,在变电站一次接线图中,选择操作设备,系统根据选择的操作对象和任务,利用MAS模型的推理方法,结合术语模型,形成最终的程序化操作序列,如图4所示。
例如,主变压器转冷备用这样的跨间隔的组合程序化操作控制序列,通过MAS模型的推理方式,可横向拆解出子任务如下。
1) 子任务1:
按照规程合上停电主变压器的中性点接地隔离开关。
2) 子任务2:
按照规程顺序拉开停电主变压器相应端的主变压器断路器。
3) 子任务3:
按顺序拉开停电主变压器断路器两侧的隔离开关。
4) 子任务4:
按照规程拉开停电变压器中性点接地隔离开关。
当具体到某个变压器操作时,则会根据变压器Agent表现的特性,纵向形成其下级Agent的操作,同时将子任务中的操作具体实例化为操作语句。
5 应用情况
福建厦门电业局在110 kV莲坂变电站进行了程序化操作序列智能生成技术的试点。通过开发应用操作序列的在线智能生成技术,运行人员不必逐站逐项地进行操作拟制,系统可以根据电网结构和运行方式自动生成程序化控制的步骤序列并执行,提高了管理与维护工作效率,减少了人为出错的概率。
应用程序化操作序列智能生成技术的倒闸操作,一方面可减少拟票、审票的时间;另一方面因采用程序化控制序列执行操作,又减少了操作时间。举单条10 kV线路停电为例,本技术应用后,开票、审票时间由原来的35 min减为5 min,而应用程序化控制序列执行操作将原来需要40 min的操作时间减少为2 min,单次操作效能提高了10倍。
6 结语
基于MAS模型的程序化控制的操作序列智能生成技术,使变电站程序化操作不再依赖于某几种固定的接线方式和运行状态,避免了人工编制操作带来的工作量与出错风险,能够提高操作可靠性与工作效率。该项技术的推广应用,对于减员增效,提高电网运行的安全水平具有十分重要的意义。
参考文献
[1]叶锋,沈峻,杨世骅,等.程序化操作在变电站自动化系统中的实现[J].电力系统自动化,2006,30(21):90-94.
[2]郑博明,吴奕,杨洪,等.变电站程序化操作的设计与实现[J].电力系统自动化,2006,30(9):105-107.
[3]王文龙,胡绍谦,汤震宇.程序化操作在变电站中实现的几个关键问题[J].电力系统自动化,2008,32(22):66-68.
[4]罗小莉,吴文瑕,公元.间隔层装置中程序化操作的实现[J].电力自动化设备,2008,28(6):115-117.
[5]李荔芳,李伟新.10kV配电开关站程序化操作控制系统研究应用[J].供用电,2010(5):50-53.
[6]江蕙,蒋衍君,丁泉,等.电力系统程序化控制的设计与实现[J].电气应用,2007,5(4):32-35.
[7]罗朝春,涂光瑜,罗毅,等.基于多Agent的电力市场技术支持系统研究[J].电力系统及其自动化学报,2005,17(3):1-4.
[8]陈琦华,陈少华,杨宜民.多Agent系统及其在电力系统继电保护中的应用[J].电气应用,2005,24(4):51-54.
程序切片技术在程序理解中的应用 第7篇
关键词:程序切片,程序理解,逆向工程
0 引 言
大多数软件系统在开发过后都会经历一个相当长的维护过程。在这个过程中,软件维护人员常常需要根据已知测试结果和反馈得来的BUG进行各类纠错,并且还可能会需要进行修改以致重新设计。实践经验表明,软件开发的绝大部分精力都耗费在对原有系统的维护上面,而不是用于新系统的重新开发。专家估计用于维护的资源和时间已经占到总开发的50%到70%[1],因而需要对其给予高度重视,并对其实现有效调控。
程序理解是从计算机程序中获取有效知识信息的一个重要过程。这些知识信息可以用于程序排错、完善程序、重用程序以及整理文档等很多方面的工作[2]。简单来讲,程序理解就是通过特定的方法和技术来得到一个认知,就是这个程序是“做什么”的以及是“如何做”的。如果对其进行完整、周密的定义,可以将程序理解看作如下的一个任务:以软件维护、升级和再实践为目的,在不同的抽象层次上建立有关基本软件的概念模型,包括从程序代码本身的模型到基本应用领域的模型。基于以上定义,程序理解的基础是要建立软件产品间的直接对应关系,维护人员借助这些对应关系,就可以根据自身拥有的软件系统的相关知识,快速定位到与其存在关联的一系列软件产品,比如,找到实现相应业务逻辑的可执行代码,或者在看到代码以后,了解到这些代码可实现的具体业务逻辑,又或是根据一个业务逻辑,找到与其有关的特定业务逻辑。
但是,程序理解是一个复杂的任务,因其涉及对软件系统不同抽象层次的有效理解及其之间的精确知识匹配。例如,存在于系统问题域和系统实现域之间的巨大“语言差距”就是程序理解的难点之一。程序理解过程的复杂性主要表现在如下几个方面:
(1)具体应用领域与程序设计领域之间的专业鸿沟有待跨越。在理解某一应用领域的程序时,不仅需要程序方面的知识,还需要这一领域的专业知识,专业知识的匮乏必然给程序理解带来相当的理解难度。
(2)软件系统的耦合度非常高。各个功能模块出现了交叉,由此导致程序理解难度的增加。
(3)软件系统的不断升级,导致程序逻辑结构的混乱。
(4)程序理解过程中,缺少必要的源程序说明文档及相关文字材料。
(5)程序理解中,人员的心理因素也是程序理解难度增加的一个不可忽视的影响因素。
1 程序理解模型及工具
1.1 程序理解模型
随着程序理解的发展,现已提出了许多模型[2],这些模型在程序理解过程中发挥着关系全局的重要作用。在程序理解中,采用一种有效的程序理解模型,有助于实现高质量、高成功率的程序理解,下面对程序理解的主要模型进行简单的说明和论述。
(1)自顶向下模型。
程序理解时,采用自顶向下的理解方式,是首先假设已经理解,然后去验证所提出的假设,最后再修改此假设的一个顺序理解过程。这种理解方式需要程序员熟悉该程序应用领域的有关背景知识,然后将这些背景知识和具体程序源代码不断尝试对应的过程。详述此过程就是,将对程序进行假设作为开始,其后在代码中验证该假设是否成立。当初始假设获得验证后,可以精化出附属的子假设,于是这些大、小假设就构成了一个树状结构,并按照深度优先原则,不断地进行着验证的深一层精化。Soloway和Ehrlich已通过经验性研究发现,自顶向下的理解方式常常发生在程序员较为熟悉编写代码的技术和编码风格的时候。
(2)自底向上模型。
假设程序理解人员并不透彻了解具体业务逻辑,此时就需从阅读程序源代码来理解程序,再通过自底向上的方式创建程序控制流抽象,直至建立高层抽象。具体来说,该种理解方式中,程序理解人员会逐行理解程序源码,逐步建立上一层的抽象模型。这些较高层次的抽象表现形式又将组合在一起,提取出更高层次的抽象结果。在这个过程中,语法知识与特定编程语言相关,需要考虑的是程序中的语句和基本单元,而语法知识的积累则有助于程序员形成精神模型。程序的语义知识则与特定语言无关,并随着程序员精神模型的不断建立而渐次获取相应内容,内容所描述的就是程序应用领域的业务知识。大量实验研究表明,当程序员采用这种方法来理解程序时,更多关注的是程序中的结构化信息,同时在脑海中根据这些结构化信息,首先建立程序模型。如程序员将聚焦程序中的控制流程,建立控制流图,又或者集中在程序中的数据上,建立数据流图,再根据数据流图来实现程序理解。
(3)综合模型。
这种模型是自底向上和自顶向下模型的结合,并根据上述模型建立相应的知识库,在知识库的辅助下完成程序理解过程。
1.2 程序理解工具
目前,已经存在多种支持程序理解的软件工具,下面择选较为典型的程序理解软件工具做以分析介绍。
(1)Understand。
是一款分析大型软件工程的有力工具,由Scitool公司开发。该工具能够分析出函数声明或定义、数据结构的定义、交叉引用以及函数的调用图等程序内部信息,并且也可以计算出函数的复杂度和控制语句的嵌套深度。同时Understand还集成了代码编辑器、代码跟踪器和代码分析器,提供了功能强大的用户界面,可将分析结果以各种形式(图形、图表、架构图等)呈现给用户,为程序员进行代码开发、维护、调试提供了更大程度的便利。目前,Understand已能支持C/C++/C#、 Ada、 Java、 FORTRAN、 Delphi 和Jovial等众多编程语言,实现程序理解。
(2)JBPAS。
是由北大青鸟研制开发的一款支持C++语言的程序理解辅助系统,由信息管理器、C++前端分析器及程序分析工具集三大主体部分构成。该系统能够生成OOD(Object-OrientedDesign)文档和Rose文档。C++前端分析器则是通过数据库的概念模型对C++程序源代码展开分析,再将抽取出的程序片段信息保存在数据库中。
(3)BDCom-C++。
是一款支持C++语言的程序理解系统,由信息管理器、信息抽取器和用户界面所组成。该系统以增量式分析技术对程序源代码实现静态分析,信息库则是由增量型数据库组成,同时存储了经由信息抽取器分析后所收集到的程序信息。
(4)Rigi。
是一个可裁剪、可扩展的逆向工程环境的程序理解系统,主要由Rigi-server、Rigi-reverser和Rigi-edit3这三大部分组成。其中,Rigi-server是一个用于存储从源程序代码抽取所得信息的静态信息库;Rigi-reverser是一个支持C、COBOL等程序语言的静态信息解析器;Rigi-edit则是一个交互性的窗口编辑器,通过图形方式展示和操控程序的静态信息。Rigi的一个重要功能就是,可过滤掉用户不感兴趣的信息,但却不支持对程序源代码文本的直接搜索功能的实现。
2 程序切片
2.1 程序切片定义
程序切片概念是由Weiser于1979年在其博士论文中首次提出[3]。Weiser 等人通过对程序源代码的分析以及对控制流程图(CFG)的研究发现,程序的某一输出只与源程序中的部分语句相关,即使删除其它语句也不会影响这一输出结果。这个发现表明,对该输出来说,源程序和删除无关语句后得到的可执行程序在语义上是一致的。Weiser等人即将这种只与某个输出有关的语句段落所构成的程序,称为源程序的一种切片[4]。由数类实践可知,程序切片技术在软件分析、理解、调试、测试、度量、重用、软件质量保证、逆向工程等许多方面已经获得广泛的应用,并获得良好应用效果。
2.2 程序切片分类
目前,程序切片主要分成以下三类,分析如下。
(1)静态切片。
是指在计算程序切片时,不需考虑程序运行时候的具体输入,只是采用静态分析法,对由程序源代码所得到的程序切片展开分析。该切片方法对程序的输入通常不作任何假设,而是要考虑程序中能够执行的所有轨迹,故而计算量较大。静态切片的例子如图1(a)所示。
(2)动态切片。
在考虑特定输入情况下,需要采用动态分析方法计算得到程序的动态切片。因此,动态切片的计算过程依赖于程序的特定输入,计算时需利用程序中的某一特定执行路径,计算工作量也较静态切片小上很多。
(3)条件切片。
由于静态切片得到的切片结果过于宽泛,而动态切片得到的结果又过于精细,因此在计算条件切片时,可增加一个附加条件,只有满足这个条件的输入才能进入分析,这样就很好避免了切片结果过于宽泛和精细问题。条件切片示例如图1(b)所示。
2.3 程序切片工具
(1)Wisconsin。
是一个支持对C程序进行静态切片的实用工具,主要包括三大功能:前向切片、后向切片和消片。同时,还提供生成控制流图和函数调用图等程序相关的设计图。与其他C语言分析工具类似,Wisconsin也会将源程序代码转换为合适的中间代码表示形式,以方便其后的程序切片工作进程。
(2)ChopShop。
是由Carnegie Mellon大学计算机科学学院开发的一种逆向工程工具,能帮助程序员理解还不曾熟悉的C程序代码。该工具采用了一种新算法,即静态程序切片的模块产生机制,藉此而成为一种全新的数据流分析技术。这种算法的采用使得生成结果比标准形式的切片更容易达成逻辑理解。ChopShop完全遵守ANSI标准,可以产生两种形式的切片结果:文本形式和图形化形式,而且还可以对结果进行分析并提供程序语言特性的处理功能。值得一提的是,ChopShop还是首个为过程提供数据抽象机制的程序切片工具。
(3)Ghinsu。
是由Florida大学计算机和信息科学系主体研发,并得到软件工程研究中心(SERC)提供基金赞助的一个项目,在其中集成了众多辅助工具的程序切片系统,可用于软件工程的诸多活动中,重点是在维护活动过程中发挥一些辅助作用。只是迄至目前为止,该系统仅仅支持C语言,并不支持其他语言。
(4)Unravel。
是一个原型程序切片工具,可以对标准 C程序源代码实施静态程序切片。该项目得到美国核控制委员会( NRC)和国家通信系统(NCS)的指定基金的鼎力援助。Unravel可以对程序切片进行组合和逻辑集合操作,通过这些操作可以识别在计算中至少出现一次的代码。这些daima 信息对描述高级集成软件重要且实用,因为包含在这种代码中的一次失败就可能导致软件中多个逻辑构件的故障[5]。
(5)PSS/Ada。
是由杨洪等人设计完成的一个Ada程序的静态切片生成系统。该系统可以对Ada程序进行静态数据依赖分析和控制依赖分析,并可通过这些分析结果得出Ada程序语句间存在的波动效应,相应地生成特殊形式的Ada程序切片。这一切片是从Ada程序中抽取某些语句、并以相同顺序重新组成的个新程序段。PSS/Ada系统是一个可以实现Ada软件的测试、排错、分析、理解和维护的有效工具,在Ada程序的并行性检查、波动性分析、复杂性度量等方面也提供一定层次的支持力度。另外,PSS/Ada系统作为对Ada程序设计支持环境APSE的工具集的扩充,也进一步丰富了Ada软件的开发环境[5]。
3 结束语
作为一种程序理解的方法,程序切片其实就是基于原始程序而构造的一个删减版本,切片计算时,需删减程序中与兴趣点无关的部分,从而能够将关键、分散的变量由原本复杂的程序中提取出来,进而组成新的程序片段。通过对这一片段展开具体分析,可以得到所关注变量与其他变量之间的联系,从而加速实现对程序的全面、精准理解。
参考文献
[1]丁剑洁,鱼滨,侯红.软件维护中程序理解的应用与研究[J].计算机技术与发展.2007(4):218-219.
[2]李莹,张琴燕.程序理解[J].计算机应用研究,2001(6):41-43.
[3]WEISER M.Program slicing[J].IEEE Trans Software Eng,1994,10(4):352-357.
[4]李必信,郑国梁,王云峰,等.一种分析和理解程序的方法——程序切片[J].计算机应用与发展,2000(3):284-285.







