SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
网站前端代码扫描工具
    综述
       栗志果
前端扫描工具能做什么?
•   代码规范检查
•   潜在错误检查
•   浏览器兼容性检查
•   安全漏洞检查
一 代码规范检查
• [fatal] 关键字和保留字不能作为变量名
• [error] 所有语句结束带上分号
• [error] 3个条件及以上的条件语句用switch代替if else
• [skip] 正确的缩进,最小缩进单位为4个空格
• [skip] 方法、变量都使用驼峰命名,类使用大驼峰
  (Pascal)命名
• [skip] 非特殊原因必须使用YUI,
  addClass/removeClass/getRegion例外
二 潜在错误检查
•   Bitwise —避免在js中使用位操作符
•   Eqeqeq—推荐使用=== 以及!==
•   Forin — 循环中要对元素有效性做检查
•   Plusplus—禁用++, --操作符等
•   Regexp – 在正则表达式中禁用.操作
•   Strict– 要求函数符合EcmaScript 5's strict
    mode
三 浏览器兼容性检查
• 在 Firefox 中注释内容中如果包含 '-' 字符在某些情况
  下会使该注释解析错误
• Chrome 和 Safari 中标签紧密相邻的行内元素在折行
  显示时存在错误
• IE6 IE7 IE8(Q) 会忽略 OBJECT 和 IFRAME 标签之后的
  空白符
• Safari Chrome 中用 for in 可以遍历出 Date Array
  String 对象中被更新的原型方法
• 各浏览器中 Date 对象的 toLocalString 方法的返回值
  不一致
• IE6 IE7 IE8(Q) 不支持 JSON 对象
代码扫描要不要做
• 效果和代价的问题
• 效果
 – 自动化扫描显著减少人工代码审核的工作量
 – 在开发阶段就能发现规避错误
• 代价
 – 配置和使用代码扫描工具的代价
 – 修复扫描出来问题的代价
 – 整合扫描工具的代价(可选)
代码扫描要怎么做
• 现在的做法
 – 目前中文站采用自主开发的fdlint 做代码扫描
 – 业界采用jshint比较多
 – 浏览器兼容性上多采用 Compability detector
• 现在推荐的做法
 在开发阶段使用jshint自动语法提示,代码提交前用fdlint
 在做扫描,以及compabitlity detector兼容性检查
• 将来的做法
 整合到一个工具里,在开发环境中做得自动语法提示
附录
• Fdlint
  – 中文站自主开发的前端静态扫描工具
  – DSL的扫描规则,相比来说最容易维护和定制
  – ruby 开发,同时支持html css 以及javascript
  – 缺点是不太稳定(notepad上揑件试用时crash
    过两次),目前还不能做到开发过程中语法提
    醒,不提供规则的配置管理界面
• Jshint(http://www.jshint.com/)
  –   用Pratt parser 高效javascript扫描工具,
  –   定制方便,上手极快
  –   规则可扩展
  –   稳定
  –   缺点是添加新的规则比较难,另外叧是针对
      javascript的
• Compatibility
  detector(https://code.google.com/p/co
  mpatibility-detector/)
  – 通过 动态代码检测在早期发现代码的浏览器兼
    容性问题,个人评价目前最靠谱的兼容性问题
    解决方案
  – 目前有40多条规则,有chrome和Firefox揑件
    可用
• Jsaudit
  (https://github.com/pop2008/jsaudit)
  基于jshint的前端代码静态扫描工具,能够
  对潜在错误,编码准则以及兼容性问题进
  行扫描。是第一个也是目前为止唯一一
  个对能够对JavaScript兼容性问题进行静
  态扫描的工具
自动化测试之美
www.webautotest.com

Más contenido relacionado

La actualidad más candente

Agile Taichung sharing Robot Framework 2018/05/19
Agile Taichung sharing Robot Framework 2018/05/19Agile Taichung sharing Robot Framework 2018/05/19
Agile Taichung sharing Robot Framework 2018/05/19Leo Tseng
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能Justin Lin
 
Angular 2 表單的處理與驗證
Angular 2 表單的處理與驗證Angular 2 表單的處理與驗證
Angular 2 表單的處理與驗證Jeff Wu
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Shengyou Fan
 
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰國昭 張
 
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用Jeff Wu
 
RSpec 讓你愛上寫測試
RSpec 讓你愛上寫測試RSpec 讓你愛上寫測試
RSpec 讓你愛上寫測試Wen-Tien Chang
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Will Huang
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能Justin Lin
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定Shengyou Fan
 
Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvementsXinchen Hui
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發俊仁 陳
 

La actualidad más candente (12)

Agile Taichung sharing Robot Framework 2018/05/19
Agile Taichung sharing Robot Framework 2018/05/19Agile Taichung sharing Robot Framework 2018/05/19
Agile Taichung sharing Robot Framework 2018/05/19
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能
 
Angular 2 表單的處理與驗證
Angular 2 表單的處理與驗證Angular 2 表單的處理與驗證
Angular 2 表單的處理與驗證
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
 
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰
 
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
 
RSpec 讓你愛上寫測試
RSpec 讓你愛上寫測試RSpec 讓你愛上寫測試
RSpec 讓你愛上寫測試
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定
 
Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvements
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
 

Destacado

Nirmitee making 2012
Nirmitee making 2012Nirmitee making 2012
Nirmitee making 2012rittomania
 
morning - Portugal
morning - Portugalmorning - Portugal
morning - PortugalAlice Maia
 
Twitter og Facebook - privat eller profesjonell eller begge deler?
Twitter og Facebook - privat eller profesjonell eller begge deler?Twitter og Facebook - privat eller profesjonell eller begge deler?
Twitter og Facebook - privat eller profesjonell eller begge deler?Jannicke Røgler
 
Presentation of the Joint Library of Drammen
Presentation of the Joint Library of Drammen Presentation of the Joint Library of Drammen
Presentation of the Joint Library of Drammen Jannicke Røgler
 
Presentasjon for Utviklingsavdelingen
Presentasjon for UtviklingsavdelingenPresentasjon for Utviklingsavdelingen
Presentasjon for UtviklingsavdelingenJannicke Røgler
 
What difference does it make
What difference does it makeWhat difference does it make
What difference does it makeJannicke Røgler
 
Razonamientomatematico
RazonamientomatematicoRazonamientomatematico
Razonamientomatematicobetcyr
 

Destacado (8)

Nirmitee making 2012
Nirmitee making 2012Nirmitee making 2012
Nirmitee making 2012
 
morning - Portugal
morning - Portugalmorning - Portugal
morning - Portugal
 
Twitter og Facebook - privat eller profesjonell eller begge deler?
Twitter og Facebook - privat eller profesjonell eller begge deler?Twitter og Facebook - privat eller profesjonell eller begge deler?
Twitter og Facebook - privat eller profesjonell eller begge deler?
 
Presentation of the Joint Library of Drammen
Presentation of the Joint Library of Drammen Presentation of the Joint Library of Drammen
Presentation of the Joint Library of Drammen
 
Presentasjon for Utviklingsavdelingen
Presentasjon for UtviklingsavdelingenPresentasjon for Utviklingsavdelingen
Presentasjon for Utviklingsavdelingen
 
What difference does it make
What difference does it makeWhat difference does it make
What difference does it make
 
Razonamientomatematico
RazonamientomatematicoRazonamientomatematico
Razonamientomatematico
 
Pipi.luzu
Pipi.luzuPipi.luzu
Pipi.luzu
 

Similar a 网站前端代码静态检查工具研究

淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发Trinea Trinea
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdfbj_qa
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdfczzz1
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版Kirk Chen
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文Shuyong Lin
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
敏捷测试中的工具实现
敏捷测试中的工具实现敏捷测试中的工具实现
敏捷测试中的工具实现drewz lin
 
调试技术的应用
调试技术的应用调试技术的应用
调试技术的应用延胜 黄
 
深入淺出 autocomplete
深入淺出 autocomplete深入淺出 autocomplete
深入淺出 autocompleteMu Chun Wang
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化丁 宇
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化丁 宇
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)ykdsg
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationnetdbncku
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具taobao.com
 
網頁弱點掃描服務簡報 20120606
網頁弱點掃描服務簡報 20120606網頁弱點掃描服務簡報 20120606
網頁弱點掃描服務簡報 20120606Fionsu
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践Na Lee
 

Similar a 网站前端代码静态检查工具研究 (20)

淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
敏捷测试中的工具实现
敏捷测试中的工具实现敏捷测试中的工具实现
敏捷测试中的工具实现
 
调试技术的应用
调试技术的应用调试技术的应用
调试技术的应用
 
深入淺出 autocomplete
深入淺出 autocomplete深入淺出 autocomplete
深入淺出 autocomplete
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
 
網頁弱點掃描服務簡報 20120606
網頁弱點掃描服務簡報 20120606網頁弱點掃描服務簡報 20120606
網頁弱點掃描服務簡報 20120606
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 

网站前端代码静态检查工具研究

  • 2. 前端扫描工具能做什么? • 代码规范检查 • 潜在错误检查 • 浏览器兼容性检查 • 安全漏洞检查
  • 3. 一 代码规范检查 • [fatal] 关键字和保留字不能作为变量名 • [error] 所有语句结束带上分号 • [error] 3个条件及以上的条件语句用switch代替if else • [skip] 正确的缩进,最小缩进单位为4个空格 • [skip] 方法、变量都使用驼峰命名,类使用大驼峰 (Pascal)命名 • [skip] 非特殊原因必须使用YUI, addClass/removeClass/getRegion例外
  • 4. 二 潜在错误检查 • Bitwise —避免在js中使用位操作符 • Eqeqeq—推荐使用=== 以及!== • Forin — 循环中要对元素有效性做检查 • Plusplus—禁用++, --操作符等 • Regexp – 在正则表达式中禁用.操作 • Strict– 要求函数符合EcmaScript 5's strict mode
  • 5. 三 浏览器兼容性检查 • 在 Firefox 中注释内容中如果包含 '-' 字符在某些情况 下会使该注释解析错误 • Chrome 和 Safari 中标签紧密相邻的行内元素在折行 显示时存在错误 • IE6 IE7 IE8(Q) 会忽略 OBJECT 和 IFRAME 标签之后的 空白符 • Safari Chrome 中用 for in 可以遍历出 Date Array String 对象中被更新的原型方法 • 各浏览器中 Date 对象的 toLocalString 方法的返回值 不一致 • IE6 IE7 IE8(Q) 不支持 JSON 对象
  • 6. 代码扫描要不要做 • 效果和代价的问题 • 效果 – 自动化扫描显著减少人工代码审核的工作量 – 在开发阶段就能发现规避错误 • 代价 – 配置和使用代码扫描工具的代价 – 修复扫描出来问题的代价 – 整合扫描工具的代价(可选)
  • 7. 代码扫描要怎么做 • 现在的做法 – 目前中文站采用自主开发的fdlint 做代码扫描 – 业界采用jshint比较多 – 浏览器兼容性上多采用 Compability detector • 现在推荐的做法 在开发阶段使用jshint自动语法提示,代码提交前用fdlint 在做扫描,以及compabitlity detector兼容性检查 • 将来的做法 整合到一个工具里,在开发环境中做得自动语法提示
  • 8. 附录 • Fdlint – 中文站自主开发的前端静态扫描工具 – DSL的扫描规则,相比来说最容易维护和定制 – ruby 开发,同时支持html css 以及javascript – 缺点是不太稳定(notepad上揑件试用时crash 过两次),目前还不能做到开发过程中语法提 醒,不提供规则的配置管理界面
  • 9.
  • 10. • Jshint(http://www.jshint.com/) – 用Pratt parser 高效javascript扫描工具, – 定制方便,上手极快 – 规则可扩展 – 稳定 – 缺点是添加新的规则比较难,另外叧是针对 javascript的
  • 11.
  • 12.
  • 13. • Compatibility detector(https://code.google.com/p/co mpatibility-detector/) – 通过 动态代码检测在早期发现代码的浏览器兼 容性问题,个人评价目前最靠谱的兼容性问题 解决方案 – 目前有40多条规则,有chrome和Firefox揑件 可用
  • 14.
  • 15. • Jsaudit (https://github.com/pop2008/jsaudit) 基于jshint的前端代码静态扫描工具,能够 对潜在错误,编码准则以及兼容性问题进 行扫描。是第一个也是目前为止唯一一 个对能够对JavaScript兼容性问题进行静 态扫描的工具