目标:能够通过一段修改过的代码,能推断出测试要回归哪些用例
难点:函数间的调用链关系,代码与用例的对应
大家有研究过的没,求给个思路
那要看被测应用开发语言特性了,java 可以使用 sonarqube 分析
研究过一段时间,基本功不扎实,搁置了……
腾讯有同学研究出来了,只不过没对外公布过
分析函数调用链有几种经典的做法
对应的工具可以看看 asm jacoco 即可。本质上是对覆盖率数据和测试用例进行建模。覆盖率一直依赖被误用为纯数字,其实覆盖率是一个庞大的树结构数据,每个叶子节点与用例之间存在关联关系。根据函数调用关系细化集成测试用例与覆盖率是有很大的价值的。
用好 asm jacoco 等类似工具的覆盖率统计工具是第一步,分析收集的函数调用链数据并建模分析是第二步,第三步做平台 show 出来,或者集成到以后的大数据平台。
上次看性能组同事的用一个工具,查看调用链,没有记住啥工具。。。。
不知楼主是否看过《不测的秘密—精准测试之路》这本书,你上面引用的文章就是其中一篇
Java 函数调用链分析,一般会通过静态分析和动态分析两种方法,静态分析的话主要手段是字节码分析了(看 JVM 方法调用 5 个指令的解析),动态就是字节码插桩或者通过 apm 工具也可以拿到。
静态主要解决的是新增代码的场景,缺点是由于 Java 语言的一些运行时绑定特性会导致分析的不够精确(静态语言就比较准确了)。
动态就是比较准确了,但是解决不了新增代码这种情况
另外你说的 代码跟用例的关系,不清楚是接口的用例还是功能层面的用例,如果接口层面,通过调用链关系可以匹配到,如果是功能层面,客户端代码还是可以记录下来的,如果服务端代码就难了
调用链分析可以结合增量代码覆盖率做针对性的用例覆盖,同时可以变更影响范围评估
ps: 这个问题算不上 AI 测试领域吧
以前也试过用 org.eclipse.jdt 包来分析 Java 的 AST 语法树,无奈功力不够深厚,也没做下去。。
分析字节码更好,因为 kotlin scala 什么的也会编译为字节码,这样更精准。动态测试只有覆盖率技术,也是基于字节码插桩
刚好在腾讯里参与这块的研究。
先说结论,我们这边是 jdt 里的 astparser 做的调用链解析,目前除了反射搞不定,基本够用了。精准测试平台也已经跑起来几个了。
但就像思寒说的,我也推荐基于 asm 分析字节码更好,虽然要编译一次,但这样简单容易上手,研究 jdt 还是要花一些时间的。
还以为我们是首创这种方案呢 ,没想到 18 年就有了,javaparser 看来是主流方案
java + kotlin 调用链有小伙伴有方案吗?
原来很久以前你们就在讨论了