问题标签 [jqassistant]

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 回答
150 浏览

neo4j - 带有 lambda 表达式和消费者断言的 TestMethods 的 JQassistant 规则

我们的项目很少有单元测试,其中断言作为 lambda 或消费者传递给测试类。示例如下。如何编写密码规则约束,例如识别断言并且不将方法标记为没有断言。当前使用 junit4:TestMethodWithoutAssertion

测试方法 :

在上面的示例中,断言实际上是存在且有效的。但是无法检测到 junit4:AssertMethod 的概念可能是因为它作为消费者存在,而不是在 Test 方法中直接调用。

0 投票
1 回答
233 浏览

maven - 由于错误,跳过 JQAssistant 对特定子模块项目的扫描和分析

当父项目下有多个模块时,如何指示jqassistant不扫描或分析特定模块?这是因为我在执行 jqassistant:scan,analyze with parent pom.xml 时遇到以下错误。但是单独运行时,扫描和分析是成功的。不确定失败的原因。那么有没有办法从 jqassistant scan & analyze 跳过这个模块?

Maven 错误

[错误] 无法在项目 >myXYZProjectIntegrationTests 上执行目标 com.buschmais.jqassistant:jqassistant->maven-plugin:1.3.0:analyze (default-cli):执行目标的默认 cli >com.buschmais.jqassistant:jqassistant- maven-plugin:1.3.0:analyze failed:>为节点[80826]找到多个关系[DECLARES,INCOMING] -> >[Help 1]

Maven调试日志:

[INFO] 应用概念 'customJU:LambdaMethods' 严重性:'MINOR'。

如果任一侧为空,则似乎“合并(方法)-[:DECLARES]->(lambda)”失败。如何在合并之前检查它是否是有效的合并?

0 投票
1 回答
200 浏览

cypher - 如何在 jQAssistant 中找到循环依赖的示例实例?

我发现 dependency:packageCyclesjQAssistant 附带的约束输出很难解释。具体来说,我热衷于找到构成循环依赖的类的示例实例。

鉴于我找到了一个包循环,对于每一对附加包,我需要找到两个连接它们的类。

这是我第一次尝试 Cypher 查询,但仍然缺少一些相关部分:

具体来说,为了真正连接这两个包,这两种类型应该相互关联,DEPENDS_ON如下所示:

对于上述模式,我必须返回两种类型(例如,而不是包)。优选地,单个循环依赖的输出由一个合格的类名列表组成(否则多个不能区分多个循环依赖的类链)。

对于这个特定的目的,我发现 Cypher 非常有限,支持在路径遍历期间识别和收集新的图形模式似乎不是最容易做的事情。此外,尝试为(:Type)节点命名会导致语法错误。

我也搞砸了很多UNWIND,但无济于事。MATCH它可以让你在每个元素的基础上引入新的子句(比如 的元素relationships(nodes)),但我不知道有另一种方法可以消除 unwind 的破坏性影响:移除周围的列表结构,这样多个循环依赖的痕迹相互融合。此外,结果对我来说似乎已经改变了。话虽如此,下面的查询在概念上也非常接近我想要实现但不起作用的目标:

我很欣赏 jQAssistant 中似乎有一些脚本支持。但是,这确实是我最后的手段,因为它肯定比 Cypher 查询更难维护。

换个说法:给定一条路径,我正在寻找一种方法来识别每个元素的子模式,从匹配中投影一个节点,并收集结果。您对如何使用 Cypher 实现这一目标有任何想法吗?


编辑#1:在一个包中,还必须考虑到类型的入站边缘的目标类DEPENDS_ON可能与传出边缘的源类不同。换句话说,结果

  • 同一包的两个类可能是跟踪的一部分
  • 如果要将循环依赖跟踪表示为路径,则必须考虑导航到同一包中的类的弯路。例如(粗体标记包进入/退出的边缘;DEPENDS_ON两种类型之间没有类型的边缘):

-[:DEPENDS_ON]->(:Type)<-[:CONTAINS]-(:Package)-[:CONTAINS]->(:Type)-[DEPENDS_ON]->

使用下图可能会更清楚一些:

示例包周期

显然,“a、b、c”是一个包循环,“TestA、TestB1、TestB2、TestC”是用于证明包级依赖关系的类型级跟踪。

0 投票
1 回答
130 浏览

java - JQAssistant - 是否可以查询注释属性的值?

我们正在考虑根据注释属性的值做一些 JQAssistant 概念/规则。

可以使用 JQAssistant 查询和评估这些值吗?

示例:查找所有具有带有注释的方法的类

0 投票
1 回答
49 浏览

java - 使用 jQAssistant 查找选中/未选中的异常

我正在尝试使用 jqassistant 来查找我的项目中使用的任何已检查异常。有没有办法用 jqa 区分已检查/未检查的异常?

0 投票
2 回答
276 浏览

maven - 使用配置文件和运行服务器在 Maven 构建中集成 jQAssistant

我正在尝试将 jQAssistant 集成到我现有的 Maven 构建中。我有一个 POM 层次结构,但基本上顶级 POM 定义了构建的功能。这就是我<pluginManagement>和我的构建插件一直在使用的地方。我还有一些用于特殊构建的 Maven 配置文件。

因此,我想在构建期间扫描所有类,并将结果汇​​总到正在运行的服务器中,以便在构建所有 Maven 模块后拥有一个完全填充的 Neo4J 数据库。数据库应该包含我的整个代码库。

分析和检查将是一个不同的步骤,我不想在构建 Maven 模块时直接这样做。

我看到的示例都构建了一个本地数据库,然后根据它检查类。据我了解,我必须将服务器作为守护进程运行,然后配置 Maven 插件以使用“bolt”URI 来填充它——对吗?

此外,由于我不想减慢“正常”构建速度,因此我添加了一个 Maven 配置文件来激活 jQAssistant 扫描。但是,这仅适用于我的顶级 POM,但不适用于任何其他 Maven 项目/模块。配置文件的继承是一个正常和预期的 Maven 功能 - 那么我做错了什么?

这是我的父母 POM。为了查看配置文件是否处于活动状态,我还添加了 PMD:

当我mvn clean package -P architecture使用该父 POM 在 Maven 项目上运行时,我看到以下输出,这表明配置文件处于活动状态:

然而,jqassistant-maven-plugin无处可去。

现在,如果我将它添加到我的普通<build>插件中:

mvn clean package然后我看到我的父 POM的以下输出:

但是,在我的 Maven 项目中,我没有看到任何 jQAssistant 输出。

开始mvn help:effective-pom -Parchitecture为父项目和 Maven 模块提供相同的输出:

0 投票
1 回答
98 浏览

maven - jQAssistant - scanInclude Maven 工件

我有一个具有以下结构的项目:

两者之间存在依赖关系,因为项目 A 中的一些类使用来自 Annotations 的自定义注解进行注解。projectA 的 pom 中的当前配置如下所示:

一切正常,但现在我想通过存储库的 URL 将注释用作 Maven 工件,因此我不必手动将其添加到每个项目中。

所以我正在寻找这样的东西:

如果我正确理解了手册(https://buschmais.github.io/jqassistant/doc/1.2.0/),则 scanIncludes 仅适用于目录/文件,但不适用于 URL。

有没有简单的解决方案来做到这一点?

0 投票
2 回答
74 浏览

java - 使用 jQAssistant 确保枚举中的方法存在

我想确保所有枚举都有一个名为findByAttribute.

我可以选择方法

现在我想反转方法选择的条件。我试过NOT EXITS了,但没有用。

0 投票
3 回答
106 浏览

java - 如何将包包含到查询中?

这个问题是如何识别所有实现不扩展某些基类的特定接口的类的延续?.

那里接受的答案建议使用:

这很好用,并给出了符合该条件的类列表。

我唯一的问题是:该接口的名称Action(惊讶)模棱两可。绝对类名com.whatever.foo.bar.Action是。但是,当我将查询更改为使用时,{name:'com.whatever.foo.bar.Action'}我得到一个空结果。

然后我尝试{package:'com.whatever.foo.bar' name:'Action'}了,但这不起作用:

查询中的属性名称之一在数据库中不可用,请确保您没有拼错它,或者当您在应用程序中运行此语句时标签可用(缺少的属性名称是:package

有没有办法将搜索结果减少到我真正关心的那个Action 界面?

0 投票
1 回答
97 浏览

jqassistant - 如何使用 jqassistant 排除个别约束?

背景

我们正在尝试使用jqassistant自动审计合规性检查。与该领域的典型情况一样,存在很多约束,但它们不一定是硬约束。

例如,在软件架构中,违反准则只能导致两种可能的结果:要么必须更改代码以匹配约束,要么必须更改准则,因此必须更改约束。

但是,当您进入合规性时,本质上还有第三种选择:自愿接受违反约束的行为,并说明在这些特定情况下可以违反约束的理由。

一个具体的例子:您计划项目,并且通常有一条规则,您必须执行某些风险管理任务。但是,该项目是一个 2-3 天的小型项目,任何风险的影响都可以忽略不计。因此,运行完整的风险管理流程没有任何意义。

手头的问题

让我们一起来回顾一下jqassistant:有一大堆约束需要验证。但是,在这种情况下,应忽略检查风险管理概览文档是否存在的特定约束。

你怎么做最好?

是否有一些配置参数允许明确排除某些约束?或者,也许我正在以错误的方式思考这一切?

行不通的想法

我知道能够明确指定应使用-constraintsor-groups参数检查的单个或一组约束。但是,使用这些有两个主要缺陷:

  1. 那时可能有很多东西需要重新定义。当我遗漏带有要排除的约束 C 的组时,我需要明确地包含该组中的所有其他约束并重新定义仍包含原始组的所有父组。
  2. 组和约束的集合在别处维护。因此,即使我明确指定了剩余的约束——当其他人向该组添加新约束时,我可能不知道它并且不会对其进行检查。