一.静态代码分析         静态代码分析是一种通过检查代码而不是执行程序来发现源代码中错误的手段.通常可以帮助我们发现常见的编码错误,例如: 语法错误 违反制定的标准编码 未定义的变量 安全性问题 静态代码分析可以通过评估编写的代码来提高代码质量:可以稳定的运行且可以轻松自动化:增加了在源代码中发现漏洞的可能性,从而提高应用安全:由于是针对源码扫描可以在离线的开发环境中完成.但是静态代码分析并不能完全保证编写的代码没有Bug,它也有一些缺点,例如: 误报问题,发现了一个不是错误的错误. 静…
一.语法分析 通过将词法分析获取的Token流按照目标语言的语法进行解析的过程,例如解析函数声明.函数调用.变量声明.各种语句等. 二.Lua语法分析 在写语法分析程序前,先需要了解Lua的语句和语法,然后进行逐个解析. 下面简单列举一下Lua的语句:     1. 函数定义 1 -- 普通的函数声明 2 function demo1() 3 -- <函数体> 4 end 5 -- 类方法 6 function t.demo2(self) 7 -- <函数体> 8 end 9 --…
一.前言 通过前面三篇文章已经初步实现了将Lua源代码文件读取解析成语法树,现在就可以通过得到的语法树进行指定规则的代码扫描检查.下图简单列举了一下单个Lua文件内部的语法关系情况(注意并非真正的类图,也没有列举完全部的节点类型). 二.变量作用域 1 function main() 2 local value = g_total + 1 3 print("value:", value) 4 end 上面的简单代码里有一个g_total的全局变量,它可能来自前面代码块的定义,也有可能来…
一.词法分析 词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程.进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner).词法分析器一般以函数的形式存在,供语法分析器调用. 二.Lua词法分析器 首先需要读取Lua文件中的内容,然后逐字符读取进行判断组合成一个一个的单词.判断单词就需要了解Lua语言中的数据类型,具体如下: 1. 变量标识符 单个字符 例如a = 1中的"…
0.前言 PMD作为开源的静态代码扫描工具有很强的扩展能力,可使用java或xpath定制rule.第一篇从操作上讲解如何定制一个用于扫描xml是否规范的规则.首先我们知道xml格式的文件在java工程里往往用于配置文件,像web的ssm框架里的applicationContext.xml或者是sqlMapConfig.xml等等.在安卓工程里同样会使用xml,本文主要以安卓的配置清单--AndroidManifest.xml做基础来讲解. 1.准备 知识准备:http://www.w3scho…
一.SonarQube静态代码扫描平台 1.1 安装 https://www.sonarqube.org/官网 1.2 下载软件包 https://www.sonarqube.org/downloads/ [root@sonar-server ~]# mkdir /usr/local/sonarc [root@sonar-server ~]# cd /usr/local/sonarc [root@sonar-server sonarc]# wget https://binaries.sonars…
使用OClint进行iOS项目的静态代码扫描 原文链接:http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html 最近需要一个静态分析代码工具,帮助我们发布运行应用前找到代码潜在的问题. 其实对于iOS开发,我们的日常开发上已经用到了这样一个静态分析的工具,那就是 Clang, Clang 是支持C.C++.Objective-C 和 Swift 的一个前端编译工具,他将 OC 或者 Swift 的代码输出抽象语法树(…
Lint和FindBugs一样,都是静态代码扫描工具,区别在于它是Android SDK提供的,会检查Android项目源文件的正确性.安全性.性能.可用性等潜在的bug并优化改进. 下图简单地描述了Lint工具的原理. 在Eclipse中右键工程,在出现的菜单中选择Android Tools中的Run Lint,即可执行Lint测试.结果如图所示. Lint也可以通过命令行的方式对工程进行测试,并同时产生测试报告.在终端中输入: lint apidemos --html apitest.htm…
OClint是针对C, C++及Objective C代码的静态扫描分析工具,而SonarQube是一个开源的代码质量管理平台.本文将实现将OClint的扫描结果导入到SonarQube中,已实现对Objective C代码质量的管理. 操作系统: Mac OS X 10.9 所需工具: SonarQube : sonarqube-4.4 - http://www.sonarqube.org/downloads/ Sonar Runner : sonar-runner-dist-2.4 - ht…
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public HelloA(){//构造函数 } 关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的.2.构造函数的作用是用于给对象进行初始化.3.一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次. 构造代码块 {//构造代码块 }…