Giter Club home page Giter Club logo

sonar-stryker-plugin's Introduction

This repository contains a sonar plugin to report on Stryker, the JavaScript mutation testing framework.

Getting started

As of now the sonar-stryker-plugin is not distributed via any artifact repository. However, it can be installed manually:

Install plugin in sonar qube

  1. Make sure you have git and maven installed locally. Make sure you have a running sonar qube server (or installed locally).
  2. Clone this repository
    git clone [email protected]:stryker-mutator/sonar-stryker-plugin.git
  3. Package the sonar plugin
    cd sonar-stryker-plugin
    mvn package
  4. Copy the target/stryker-sonar-plugin.jar to the downloads folder of your sonar qube instance (for example: /sonarqube-6.2/extensions/downloads)
  5. Restart sonar qube
  6. Log on to the sonar qube web interface, go to 'rules'. Two new rules should be present under language "JavaScript". Enable these rules for the profile of choice:
    • Mutant not covered
    • Mutant survived

Run stryker

Next, setup Stryker in your project. See stryker-mutator.github.io. Make sure to enable the 'event-recorder' reporter. This will record all reporter events and write them to disk (reports/mutation/events by default). Make sure that works before proceeding.

Report survived mutants

Run sonar in your projects folder. This can be done in a number of ways:

  1. Using the sonar-scanner
  2. Using the sonar-maven-plugin
  3. (Other sonar plugins not further explained here)

Make sure you configure the sonar.sources correctly. This should point to the root directory of your source files.

For example (using the sonar-scanner):

# sonar-project.properties
sonar.sources=src

Or (using the sonar-maven-plugin)

<!-- pom.xml -->
<properties>
  <sonar.sources>src</sonar.sources>
</properties>

sonar-stryker-plugin's People

Contributors

mthmulders avatar nicojs avatar simondel avatar wannesvr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sonar-stryker-plugin's Issues

Error in SonarQube 7.9.1

20:08:16.925 ERROR: Error during SonarQube Scanner execution
org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: io.github.strykermutator.StrykerSensor has unsatisfied dependency 'class org.sonar.api.profiles.RulesProfile' for constructor 'public io.github.strykermutator.StrykerSensor(org.sonar.api.config.Settings,org.sonar.api.batch.fs.FileSystem,org.sonar.api.profiles.RulesProfile)' from org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer@26f3d90c:104<[Immutable]:org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer@45d84a20:348<[Immutable]:org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer@4c48fe92:52<|
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:191)
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:110)
at org.picocontainer.injectors.ConstructorInjector.access$100(ConstructorInjector.java:51)
at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:331)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:606)
at org.picocontainer.DefaultPicoContainer.getComponents(DefaultPicoContainer.java:587)
at org.sonar.core.platform.ComponentContainer.getComponentsByType(ComponentContainer.java:290)
at org.sonar.scanner.bootstrap.AbstractExtensionDictionnary.completeScannerExtensions(AbstractExtensionDictionnary.java:82)
at org.sonar.scanner.bootstrap.AbstractExtensionDictionnary.getExtensions(AbstractExtensionDictionnary.java:77)
at org.sonar.scanner.bootstrap.AbstractExtensionDictionnary.getFilteredExtensions(AbstractExtensionDictionnary.java:67)
at org.sonar.scanner.sensor.ModuleSensorExtensionDictionnary.selectSensors(ModuleSensorExtensionDictionnary.java:40)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$0(ModuleSensorsExecutor.java:52)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:52)
at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:82)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:400)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:395)
at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:358)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:141)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:73)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
at com.sun.proxy.$Proxy0.execute(Unknown Source)
at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:171)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:128)
at org.sonarsource.scanner.cli.Main.execute(Main.java:111)
at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
at org.sonarsource.scanner.cli.Main.main(Main.java:61)

Support SonarQube 7.6 and up

This plugin does not support the latest versions of SonarQube. With SonarQube 7.9 LTS being released, we should update it.

There is an error during the scan:

org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: 
io.github.strykermutator.StrykerSensor has unsatisfied dependency 'class org.sonar.api.profiles.RulesProfile' for constructor 'public io.github.strykermutator.StrykerSensor(org.sonar.api.config.Settings,org.sonar.api.batch.fs.FileSystem,org.sonar.api.profiles.RulesProfile)' 
from org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer@5cbe2654:104<
[Immutable]:org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer@3c9168dc:348<
[Immutable]:org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer@535b1ae6:52<|

This deprecated API call was removed in SonarQube 7.6: SonarSource/sonarqube@33851f1

Build fail

Hello,

When I try to build de project with:

  • Java: openjdk version "1.8.0_322"
  • Maven: Apache Maven 3.6.3

The next error is present

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project sonar-stryker-plugin: Fatal error compiling: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x74606204) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x74606204 -> [Help 1]

Workaround

Changue de lombok version

org.projectlombok lombok 1.18.24 provided

Thanks

Jar

Does a JAR of the latest version of this plugin exist anywhere that I can download it?

Background: Trying to use this at the office but when we try to build the artifact, we get maven failures because our in house repository does not contain the this projects deps and/or the versions it requires. If an existing jar doesn't exist, this will require me to go through the paperwork to get all of these deps approved before we can start using sonar-stryker-plugin.

Report Mutation Percentage Coverage Measure

Was able to verify that the plugin captured survived & not covered mutants in our Sonar DB and were viewable on the project dashboard.

Currently the above metrics are reported as issues. However, it would be nice if this plugin also stored a Coverage Measure that captured Mutation Coverage % similar to Line & Condition.

@nicojs @simondel - Any thoughts on whether this could be supported?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.