问题标签 [graphwalker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
121 浏览

java - 我正在使用图形助行器工具。我想知道在这个工具中两个子边缘可以并行执行

如果它们是父边A,两个子边B和C。如果B和C的条件都为真,则可以并行执行。我正在使用 REST API 来执行它。

0 投票
0 回答
356 浏览

java - 如何将 YED 制作的图形用于 Graphwalker 项目?

我一直很困惑如何让我的代码使用graphwalker遍历基于模型的测试图。

我使用 yEd 构建了一个图形 (e2e.graphml),并将该文件复制到我在 Eclipse 中的项目中。我还为每个边和顶点创建了一个包含方法的接口。接下来,我为我的接口创建了一个实现类,其中我提供了在遍历该边或顶点时需要执行的少量功能。接下来,我执行了如下功能测试:

在这里,MODEL_PATH 是我用来提供 yEd 文件的位置或路径的变量。每当我运行此测试时,都不会遍历任何边或顶点,并且错误日志如下:

它在生成路径时出错。如果我以错误的方式实施某些事情,请提供帮助。谢谢!!

0 投票
1 回答
77 浏览

testing - 什么是测试中的需求覆盖率?

我在看graphwalker,它是一个基于模型的测试工具。它创建了一个类似于有向图的模型,并使用生成器和停止条件在该图上行走,例如:

random(edge_coverage(100))//随机覆盖图,直到所有边都被选中(100%)

random(vertex_coverage(100))//随机覆盖图,直到所有顶点都被选中(100%)

还有另一个停止条件,称为 requirements_coverage: usage random(requirement_coverage(100))

从网站上的描述中可以看出:

requirements_coverage(一个整数,表示所需需求覆盖率的百分比)

停止条件是一个百分比数字。在执行期间,当达到遍历需求的百分比时,测试将停止。如果需求被遍历了不止一次,在计算百分比覆盖率时,它仍然计为 1。

这些遍历的需求到底是什么?

0 投票
1 回答
130 浏览

java - 如何递归调用 Java 函数并获取派生类的版本(antlr 4 walker)

我继承了一个 Antlr 4 解析器(在 Java 中),它使用侦听器方法,但有一些需要特殊情况的 walker。

背景资料:

当您在 Antlr (v4) 中编写解析器语法时,它会为您生成一些 Java 类,一个用于您的每个解析器非终端。这些是类,例如: PowerShellParser.ForEachObjectStatementContext对于定义 a 的解析器规则ForEach Statement。对于合理大小的语法,您实际上会获得数十个(通常接近 100 个类)。它们是 Java 类层次结构的一部分,如下所示:

并且 antlr 还生成了一个“侦听器”模式,以便轻松定义这些不同代码位的语义。此模式由上述类树和两个可以更改的默认实现的函数组成。walker功能和功能listener。正常的 walker 函数会做以下事情,调用监听器的“enter(t)”函数,递归遍历树中的孩子,并调用监听器的 exit(t) 函数。

https://github.com/antlr/antlr4/blob/master/runtime/Java/src/org/antlr/v4/runtime/tree/ParseTreeWalker.java的原始 antlr 代码 大致如下所示:

现在,在侦听器中,您编写如下代码:

对于所有具有您关心的语义的类,依此类推。您可以忽略其中一些功能,默认情况下不执行任何操作。

这适用于“表达式”,因为如果您将代码放在退出函数中,您将获得一种自下而上评估表达式的好方法,基本上是免费的。

但是,这样的遍历不适用于 if 语句或 for 循环等。因为您不想盲目地遍历每个节点。

因此,编写我继承的代码的人修改了 walker 代码,如下所示。它可以工作,但它有这一层 if 语句,当我添加更多类型的语句时,我必须不断扩展。我希望对 walker 的递归调用像侦听器代码一样工作,调用与树中非终端类的“类型”匹配的版本,而不必在 if 语句中列出它们。在我的书中,检查对象的类型是一种“气味”。你应该只用正确的签名编写代码,它应该被调用。但这不会像 walker 调用侦听器并传递对象时那样在递归调用中发生。而且,我想知道如何解决它。


所以。因此我原来的问题:

然而,当 walker 递归地在孩子身上调用自己时,它不会选择特殊情况版本,并且作者必须插入代码来检查类型并调用正确的类型。需要此代码中的 ifs 做错了什么: