jQAssistant is a QA tool, which allows the definition and validation of project specific rules on a structural level. It is built upon the graph database Neo4j and can easily be plugged into the build process to automate detection of constraint violations and generate reports about user defined concepts and metrics.

Example use cases:

  • Enforce naming conventions, e.g. EJBs, JPA entities, test classes, packages, Maven modules etc.
  • Validate dependencies between modules of your project
  • Separate API and implementation packages
  • Detect common problems like cyclic dependencies or tests without assertions

Rules are expressed in Cypher - the easy-to-learn query language of Neo4j:

MATCH
  (t:Test:Method)
WHERE NOT
  (t)-[:INVOKES]->(:Assert:Method)
RETURN
  t AS TestWithoutAssertion
Get started here!

News

  • jQAssistant Lunch – December 2021: jMolecules Special with Oliver Drotbohm

    We’re very happy to announce our next lunch session for 02.12.2021, again at 12:00 (CEST)! This time we will have Oliver Drotbohm (Senior Principal Software Engineer at VMware) as our guest! We will talk with him about: Architecturally evident code with jMolecules and – of course – how this interacts with tools like jQAssistant. If…

  • jQAssistant Lunch – November 2021

    We’re in the preparations for our next lunch and you’re invited to join us on 04.11.2021, 12:00 (CEST)! This time our hands-on will cover: Best Practices for creating rules with jQAssistant If you’re interested please register here. And here is the recording from our October lunch session: Introduction to Architecture Decision Records (ADRs) and Validation…

  • jQAssistant Lunch – October 2021

    Only one week to go for our next lunch session: 07.10.2021, 12:00 (CEST)! This time the hands-on will provide an Introduction to Architecture Decisions Records (ADRs) and Validation with jQAssistant. If you’re interested please register here. For those who missed our September lunch: here is the Introduction to Software Analytics using jQAssistant & Jupyter Notebooks…

  • jQAssistant Lunch – September 2021

    Only one week to go for the next lunch session: 02.09.2021, 12:00 (CEST)! This time our hands-on we will give an Introduction to Software Analytics using jQAssistant & Jupyter Notebooks. Interested? Please register here. PS: Here’s the recorded hands-on session about Getting started with jQA, Spring Boot, Maven and SonarQube (German language) from our August…

  • jQAssistant Plugin 1.10.0 for SonarQube Released

    We released an update of the jQAssistant plugin for SonarQube! It comes with the following changes: Upgraded API compatibility to SonarQube 8.9 LTS Recently SonarQube raised their LTS (Long Term Support) version from 7.9 to 8.9. As we’re following the LTS releases we upgrade the jQAssistant plugin to use the according APIs now. Configurable Issue…

  • jQAssistant Lunch – August 2021

    Our next lunch is right ahead – 05.08.2021, 12:00 (CEST)! Beside news and Q&A we will present a hands-on about Integrating jQAssistant into a Spring Boot application. If you want to join please register here. In case you missed our last lunch session, here are the recorded videos:

  • jQAssistant Context Mapper Integration Released

    We’re happy to announce a new plug-in for jQAssistant. From this time on, you can integrate jQAssistant with Context Mapper, which is a modeling framework for Strategic Domain-driven Design. The jqassistant-context-mapper-plugin allows you to scan existing Context Mapper models so that you can query Context Maps, Bounded Contexts, and relationships between Bounded Contexts. Furthermore, it…

  • jQAssistant 1.10.0 released

    jQAssistant 1.10.0 is available now and it comes with the following new features: Java Generics The Java scanner – after a long time – finally supports generic types, e.g. private List<FederationUploadKey> originalKeys; is represented in the graph by (field:Field)-[:OF_GENERIC_TYPE]->(parameterizedType:ParameterizedType), (parameterizedType)-[:OF_RAW_TYPE]->(fieldType:Type{fqn:"java.util.List"}), (parameterizedType)-[:HAS_ACTUAL_TYPE_ARGUMENT{index:0}]->(typeArgument), (typeArgument)-[:OF_RAW_TYPE]->(elementType:Type{fqn:"app.coronawarn.server.common.persistence.domain.FederationUploadKey"}) The graph model has been designed such that it stays as close as…

  • jQAssistant Lunch

    It’s lunch time! We’re setting up monthly live sessions (in German language) where we – the people behind jQAssistant – want to get in closer contact with you, our community. This is on our regular menu: News: What’s new in the jQAssistant universe? All about new releases, features, plugins, etc. from us and our community!…

  • jQAssistant 1.9.1 released

    jQAssistant 1.9.1 is now available and it comes with the following new features: Rules in YAML files Beside Asciidoc and XML files rules now may be written in YAML files as well: concepts: – id: java:Throwable description: Labels types deriving from java.lang.Throwable as "Throwable". source: | match (throwable)-[:EXTENDS*]->(t:Type) where t.fqn = 'java.lang.Throwable' SET throwable:Throwable return…

  • View All »

Back to Top