班级博客网站模板,贸易公司介绍模板,云和网站建设,整站优化系统厂家导论
主要概念:
soundcompletePL领域概述
动手学习
本节无 文章目录 导论1. PL(Programming Language) 程序设计语言1.1 程序设计语言的三大研究方向1.2 与静态分析相关方向的介绍与对比静态程序分析动态软件测试形式化(formal)语义验证(verification) 2. 静态分析:2.1莱斯…导论
主要概念:
soundcompletePL领域概述
动手学习
本节无 文章目录 导论1. PL(Programming Language) 程序设计语言1.1 程序设计语言的三大研究方向1.2 与静态分析相关方向的介绍与对比静态程序分析动态软件测试形式化(formal)语义验证(verification) 2. 静态分析:2.1莱斯定理(Rice‘s Theorem):2.2 perfect,sound(ness), complete(ness)2.3 静态分析的目标 3. 静态分析的应用与前景4. 静态分析的步骤 1. PL(Programming Language) 程序设计语言
1.1 程序设计语言的三大研究方向 #mermaid-svg-GvZiUO3BuPfjhc0Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GvZiUO3BuPfjhc0Y .error-icon{fill:#552222;}#mermaid-svg-GvZiUO3BuPfjhc0Y .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GvZiUO3BuPfjhc0Y .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GvZiUO3BuPfjhc0Y .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GvZiUO3BuPfjhc0Y .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GvZiUO3BuPfjhc0Y .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GvZiUO3BuPfjhc0Y .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GvZiUO3BuPfjhc0Y .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GvZiUO3BuPfjhc0Y .marker.cross{stroke:#333333;}#mermaid-svg-GvZiUO3BuPfjhc0Y svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GvZiUO3BuPfjhc0Y .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GvZiUO3BuPfjhc0Y .cluster-label text{fill:#333;}#mermaid-svg-GvZiUO3BuPfjhc0Y .cluster-label span{color:#333;}#mermaid-svg-GvZiUO3BuPfjhc0Y .label text,#mermaid-svg-GvZiUO3BuPfjhc0Y span{fill:#333;color:#333;}#mermaid-svg-GvZiUO3BuPfjhc0Y .node rect,#mermaid-svg-GvZiUO3BuPfjhc0Y .node circle,#mermaid-svg-GvZiUO3BuPfjhc0Y .node ellipse,#mermaid-svg-GvZiUO3BuPfjhc0Y .node polygon,#mermaid-svg-GvZiUO3BuPfjhc0Y .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GvZiUO3BuPfjhc0Y .node .label{text-align:center;}#mermaid-svg-GvZiUO3BuPfjhc0Y .node.clickable{cursor:pointer;}#mermaid-svg-GvZiUO3BuPfjhc0Y .arrowheadPath{fill:#333333;}#mermaid-svg-GvZiUO3BuPfjhc0Y .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GvZiUO3BuPfjhc0Y .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GvZiUO3BuPfjhc0Y .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GvZiUO3BuPfjhc0Y .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GvZiUO3BuPfjhc0Y .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GvZiUO3BuPfjhc0Y .cluster text{fill:#333;}#mermaid-svg-GvZiUO3BuPfjhc0Y .cluster span{color:#333;}#mermaid-svg-GvZiUO3BuPfjhc0Y div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GvZiUO3BuPfjhc0Y :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Programming Language\n程序设计语言 Theory\n理论 Enviroment\n环境 Application\n应用 语言设计\n类型系统Type System\n语义Semantics和逻辑 编译器Compiler\n运行时系统Runtime system 程序分析Analysis\n程序验证Verification\n程序合成Synthesis 理论: 语言怎么设计, 形式(Formal)逻辑是什么
环境: 语言要运行起来, 就要环境
应用: 保证运行起来要快, 要安全, 要可靠 拓展–语言的分类: 命令式(imperative)编程语言JAVA, C, CPP…函数式(functional)Haskell…逻辑式/声明式 语言没变, 环境变了, 软件越来越大越复杂 拓展阅读: 在 命令式语言 中指令一个一个给出用条件、循环等来控制逻辑指令执行的顺序同时这些逻辑通过程序变量不断修改程序状态最终计算出结果。我觉得尽管 IP 现在都是高级语言了但是本质上并没有脱离那种“类似汇编的通过读取、写入等指令操作内存数据”的编程方式我后面会提及这是源于图灵机以及后续冯诺依曼体系结构一脉的历史选择。国内高等教育中接触的绝大多数编程语言都是 IP 的比如 Java、C、C等。在 函数式语言 中逻辑用函数来表达可以像数据一样抽象起来复杂的逻辑高阶函数可以通过操纵传递、调用、返回简单的逻辑低阶函数和数据来表达没有了时序与状态隐藏了计算的很多细节。不同的逻辑因为没有被时序和状态耦合在一起程序本身模块化更强也更利于不同逻辑被并行的处理同时避免因并行或并发处理可能带来的程序故障隐患这也说明了为什么 FP 语言如 Haskell 在金融等领域高并发且需要避免程序并发错误受到瞩目。逻辑式/声明式语言 抽象的能力就更强了计算细节干脆不见了。把你想表达的逻辑直观表达出来就好了。 如今在数据驱动计算日益增加的背景下LP 中的声明式语言Declarative programming language如 Datalog作为代表开始崭露头角在诸多专家领域开拓应用市场。 1.2 与静态分析相关方向的介绍与对比
静态程序分析
优点在选定的精度下能够保证没有bug。这在教程中会详细介绍。缺点 学术门槛相对高。目前已知国内高校公开的课程资料只有北京大学南京大学国防科大吉林大学的且通俗易懂的教材稀少详细课程及教材链接见本文末尾。作为一门计算机专业的高年级选修课入门和提高都较困难。You tell me.
动态软件测试
优点在工程中被广泛应用并且有效。实现简单便于自动化。缺点 无法保证没有bug。 这是无法遍历所有可能的程序输入的必然结果。在当今的由多核与网络应用带来的并发环境下作用有限。 某个bug可能只在特定情况下发生因而难以稳定地复现。如果你对并发程序的动态测试细节感兴趣可以参考《拧龙头法测试并发程序》。截图来自南京大学《形式化语义》课程资料 形式化(formal)语义验证(verification)
优点由于用数学的方法对程序做了抽象能够保证没有bug。缺点 学术门槛较高学习者必须有良好的数学基础才能入门。验证代价较高一般来说非常重要的项目会使用这一方式保证程序质量。甚至在操作系统这样重要的软件中也并不一定会使用。(截图来自鸿蒙OS直播发布会)
2. 静态分析:
粗略定义: 在程序运行之前就通过分析行为完成一些检验, 无需编译运行
可能的检验: 有无信息泄密, 有无空指针解引用, 有无死代码…
2.1莱斯定理(Rice‘s Theorem): 原话: Any non-trivial property of the behavior of programs in a r.e. language is undecidable 概念解释: r.e.(recursively enumerable递归可枚举): 就是计算机可以识别的语言也就是我们能见到的所有语言non-trivial: 简单理解就是与程序运行时行为有关的性质 人话: 一个正常你见过的编程语言, 没有方法能让你确切知道程序是否有某个和运行时行为相关的性质: 比如对c语言程序来说, 不存在一个方法能确切的告诉你程序里有没有空指针
简单来说, 就是不存在完美(perfect)的静态分析方法
perfect/truth sound complete
2.2 perfect,sound(ness), complete(ness)
Sound: 误报, 能够找全, 但是找的不一定对
Complete: 漏报, 找的全对, 但是不一定找全
一般静态分析追求sound
为什么追求sound而不是complete举例:
抓贼做类比, sound就是先抓嫌疑人, complete就是抓看一眼就是贼的
sound可以保证缩小排查范围, 保证贼就在嫌疑人里, 在嫌疑人中排查, complete做不到, 因为没抓全的贼还是要在全中国的人里排查, 还不如一开始就在全中国一个个排查谁是贼
举例: 一个程序里真实情况是有a, b, c三个地方有空指针
perfect就是报告真实情况: a, b, c三个地方有空指针
Sound就是报告a, b, c, d四个地方有空指针(d不是空指针也就是报错了, 但至少abc报全了)
Complete就是报告a, b两个地方有空指针(虽然ab都报对了, 但是c没有报到, 就是没有报全) 2.3 静态分析的目标
正确性——保证sound
怎样的程序分析是对的:
if input: x 1
else: x 0想要分析x ? x 1 or 0: soundcomplete 正确 x 1 or 0 or 2 or 3: sound 正确 x 1 or -1: 啥也不是 错误 x 1: complete 错误
精确性
能提供更多的信息
当inputTrue, x 1; 当inputFalse, x 0: precise精确的x 1 or 0: imprecise不精确
目标: 保证sound的前提下, 让分析的精确度和速度尽可能高
动态特性: JAVA反射 本地代码可能会影响Sound很难真正的sound
帮助提高程序可靠性, 防止空指针内存泄漏
帮助提高安全性, 防止信息泄密, 注入攻击
编译优化, 死代码消除, 代码移动(code motion)
程序理解, 类型提示
3. 静态分析的应用与前景
人才非常少
学术界: 程序设计语言, 软件工程, 系统, 安全…等任何需要编程的方向,工业界: 每个公司都有专门的软件分析的团队, 去分析本公司的代码质量, 还有专门做分析的公司: GrammarTech, Semmle, Sourcebrella
更具体的比如智能合约安全, 区块链安全, 智能漏洞检测等
程序分析的用途概览
**程序可靠性Program Reliability**想必你应该经历过程序崩溃后报错信息中显示的空指针异常吧是的像这种影响程序可靠性的诸多 bug很多都可以被程序分析在静态时检测出来包括那些可能会导致程序不响应的程序缺陷如内存泄漏。**程序安全性Program Security**程序分析几乎是软件安全必学的内容之一。**编译优化Compiler Optimization**源码中的许多操作在编译时可以转换成更加高效的方式。此外dead code elimination 可以避免永远执行不到的代码编译进程序 code motion 可以将某些表达式移动到其他位置减少重复计算的冗余。**程序理解Program Understanding**程序理解和 IDE 设计非常相关例如调用关系、继承关系、声明类型等信息都需要通过程序分析的方法获取。程序的调试有时也需要程序分析技术的辅助。
4. 静态分析的步骤
abstraction: 把程序抽象化 定义符号over- approximation近似 Transfer function传递函数 ,定义符号之间的转换规则Control flow控制流,
见数据流分析 拓展: 模型检查, 用有限状态自动机(FSM)抽象判断程序属性的技术, 广泛应用于硬件领域, 在软件领域因为状态爆炸(状态太多, 比如几千个变量), 几乎无法应用到大型程序上 近似法: 在没办法得到准确答案时, 用近似法即给出不准确的答案来近似准确答案
文章转载自: http://www.morning.kbqqn.cn.gov.cn.kbqqn.cn http://www.morning.swimstaracademy.cn.gov.cn.swimstaracademy.cn http://www.morning.tmnyj.cn.gov.cn.tmnyj.cn http://www.morning.jpydf.cn.gov.cn.jpydf.cn http://www.morning.cpmwg.cn.gov.cn.cpmwg.cn http://www.morning.bpmft.cn.gov.cn.bpmft.cn http://www.morning.qgtbx.cn.gov.cn.qgtbx.cn http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn http://www.morning.mmxt.cn.gov.cn.mmxt.cn http://www.morning.zcfmb.cn.gov.cn.zcfmb.cn http://www.morning.rmxk.cn.gov.cn.rmxk.cn http://www.morning.qszyd.cn.gov.cn.qszyd.cn http://www.morning.qpqwd.cn.gov.cn.qpqwd.cn http://www.morning.ggmls.cn.gov.cn.ggmls.cn http://www.morning.lbfgq.cn.gov.cn.lbfgq.cn http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn http://www.morning.dpqwq.cn.gov.cn.dpqwq.cn http://www.morning.bpxmw.cn.gov.cn.bpxmw.cn http://www.morning.lssfd.cn.gov.cn.lssfd.cn http://www.morning.sjqml.cn.gov.cn.sjqml.cn http://www.morning.lsxabc.com.gov.cn.lsxabc.com http://www.morning.wjplm.cn.gov.cn.wjplm.cn http://www.morning.wqtzs.cn.gov.cn.wqtzs.cn http://www.morning.kjcll.cn.gov.cn.kjcll.cn http://www.morning.kdrly.cn.gov.cn.kdrly.cn http://www.morning.thxfn.cn.gov.cn.thxfn.cn http://www.morning.ygwyt.cn.gov.cn.ygwyt.cn http://www.morning.qftzk.cn.gov.cn.qftzk.cn http://www.morning.nccqs.cn.gov.cn.nccqs.cn http://www.morning.yydzk.cn.gov.cn.yydzk.cn http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.c7512.cn.gov.cn.c7512.cn http://www.morning.lrwsk.cn.gov.cn.lrwsk.cn http://www.morning.bflwj.cn.gov.cn.bflwj.cn http://www.morning.jfnbh.cn.gov.cn.jfnbh.cn http://www.morning.nkrmh.cn.gov.cn.nkrmh.cn http://www.morning.lngyd.cn.gov.cn.lngyd.cn http://www.morning.srgsb.cn.gov.cn.srgsb.cn http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn http://www.morning.ndmbd.cn.gov.cn.ndmbd.cn http://www.morning.cybch.cn.gov.cn.cybch.cn http://www.morning.rnmdp.cn.gov.cn.rnmdp.cn http://www.morning.clpdm.cn.gov.cn.clpdm.cn http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com http://www.morning.qgkcs.cn.gov.cn.qgkcs.cn http://www.morning.mmqhq.cn.gov.cn.mmqhq.cn http://www.morning.plzgt.cn.gov.cn.plzgt.cn http://www.morning.wtlyr.cn.gov.cn.wtlyr.cn http://www.morning.fswml.cn.gov.cn.fswml.cn http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.bzlsf.cn.gov.cn.bzlsf.cn http://www.morning.thbnt.cn.gov.cn.thbnt.cn http://www.morning.nspzy.cn.gov.cn.nspzy.cn http://www.morning.dljujia.com.gov.cn.dljujia.com http://www.morning.tymnr.cn.gov.cn.tymnr.cn http://www.morning.dwrbn.cn.gov.cn.dwrbn.cn http://www.morning.thmlt.cn.gov.cn.thmlt.cn http://www.morning.qkxt.cn.gov.cn.qkxt.cn http://www.morning.jbmbj.cn.gov.cn.jbmbj.cn http://www.morning.hwycs.cn.gov.cn.hwycs.cn http://www.morning.hmdyl.cn.gov.cn.hmdyl.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.tjkth.cn.gov.cn.tjkth.cn http://www.morning.qfbzj.cn.gov.cn.qfbzj.cn http://www.morning.ntzbr.cn.gov.cn.ntzbr.cn http://www.morning.smmby.cn.gov.cn.smmby.cn http://www.morning.rrms.cn.gov.cn.rrms.cn http://www.morning.zphlb.cn.gov.cn.zphlb.cn http://www.morning.tbkqs.cn.gov.cn.tbkqs.cn http://www.morning.lqljj.cn.gov.cn.lqljj.cn http://www.morning.nckjk.cn.gov.cn.nckjk.cn http://www.morning.nfpct.cn.gov.cn.nfpct.cn http://www.morning.btlsb.cn.gov.cn.btlsb.cn http://www.morning.qghjc.cn.gov.cn.qghjc.cn http://www.morning.24vy.com.gov.cn.24vy.com http://www.morning.mmclj.cn.gov.cn.mmclj.cn http://www.morning.pdmsj.cn.gov.cn.pdmsj.cn http://www.morning.rfqk.cn.gov.cn.rfqk.cn