分为两类吧,基础语法检测类,目前基本上的代码检测都能搞定语法检测,错误判断,调用下,写个脚本让计算机自动执行即可,生成报告 程序优化隐藏bug类,需要给计算机上人工智能了
如何自动产生测试 case? 由于是基于统计的诊断,我们需要先构建足够多的测试用例,这个过程当然最好也由程序自动完成。事实上,grammar-based 的测试在检验编译器正确性方面有相当长的历史,DBMS 社区也采用类似的方法来验证数据库的功能性。比如:微软的 SQL Server 团队开发的 RAGS 系统对数据库进行持续的自动化测试,还有社区比较出名的 SQLSmith 项目等等。今年 TiDB Hackathon 的另一个获奖项目 sql-spider 也是实现类似的目的。
这里我们暂时采用 PingCAP 开源的随机测试框架 go-randgen 实现 SQL fuzzing,它需要用户写一些规则文件来帮助生成随机的 SQL 测试用例。规则文件由一些 SQL 语法表达式组成。randgen 每次从 query 开始随机游走一遍 SQL 表达式的语法树,生成一条 SQL,产生一条像下图红线这样的路径。
我们将每个语法表达式生成正确与错误用例的比例作为它的颜色值,绘制出 SQLFuzz 的展示页面。通过该页面,就可以比较容易地看出哪条表达式更容易产生错误的 SQL。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。