AI测试 精准测试-------函数调用链关系研究

heygrl · 2018年11月08日 · 最后由 思寒_seveniruby 回复于 2018年11月08日 · 598 次阅读

目标:能够通过一段修改过的代码,能推断出测试要回归哪些用例
难点:函数间的调用链关系,代码与用例的对应
大家有研究过的没,求给个思路

共收到 12 条回复 时间 点赞

那要看被测应用开发语言特性了,java可以使用sonarqube分析
研究过一段时间,基本功不扎实,搁置了……

槽神 回复

我们是Android客户端代码,那应该也可以用

腾讯有同学研究出来了,只不过没对外公布过

分析函数调用链有几种经典的做法

  • 语法树分析
  • 编译器数据
  • 运行时插桩或hook

对应的工具可以看看asm jacoco即可。本质上是对覆盖率数据和测试用例进行建模。覆盖率一直依赖被误用为纯数字,其实覆盖率是一个庞大的树结构数据,每个叶子节点与用例之间存在关联关系。根据函数调用关系细化集成测试用例与覆盖率是有很大的价值的。
用好asm jacoco等类似工具的覆盖率统计工具是第一步,分析收集的函数调用链数据并建模分析是第二步,第三步做平台show出来,或者集成到以后的大数据平台。

上次看性能组同事的用一个工具,查看调用链,没有记住啥工具。。。。

感觉第二部就是难点,目前没有现成的可行工具可以拿来直接用么,自己从头开始做有点难度,没搞过算法

hello 回复

我们目前也试用了几个,不过都不好用,要么很慢,要么死循环了

不知楼主是否看过《不测的秘密—精准测试之路》这本书,你上面引用的文章就是其中一篇

Java函数调用链分析,一般会通过静态分析和动态分析两种方法,静态分析的话主要手段是字节码分析了(看JVM 方法调用5个指令的解析),动态就是字节码插桩或者通过apm工具也可以拿到。

静态主要解决的是新增代码的场景,缺点是由于Java语言的一些运行时绑定特性会导致分析的不够精确(静态语言就比较准确了)。
动态就是比较准确了,但是解决不了新增代码这种情况

另外你说的 代码跟用例的关系,不清楚是接口的用例还是功能层面的用例,如果接口层面,通过调用链关系可以匹配到,如果是功能层面,客户端代码还是可以记录下来的,如果服务端代码就难了

调用链分析可以结合增量代码覆盖率做针对性的用例覆盖,同时可以变更影响范围评估

ps: 这个问题算不上AI测试领域吧

以前也试过用org.eclipse.jdt包来分析Java的AST语法树,无奈功力不够深厚,也没做下去。。

workhard 回复

我反倒觉得精准测试的未来就靠机器学习甚至AI了😂
https://testerhome.com/topics/10700

吴宝林 回复

分析字节码更好,因为kotlin scala什么的也会编译为字节码,这样更精准。动态测试只有覆盖率技术,也是基于字节码插桩

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册