{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "_This mini series introduces you to various sources of software data_\n", "\n", "SonarQube is the de facto standard when Java development teams want check the internal software quality of their software systems. It's an easy tools that integrates well into an existing continuous integration landscape. SonarQube is also a huge gold mine with hundreds of metrics and rules that check you code.\n", "\n", "Albeit I'm personally not a big fan of context-free software analysis, we can use the data source from SonarQube to enrich our specific data analysis if needed. Let's have a look at the API that let's us retrieve some data that could help us to improve software systematically." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Key links\n", "* The API documentation can be found: https://sonarcloud.io/web_api/api/issues/search" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | component | \n", "creationDate | \n", "debt | \n", "effort | \n", "flows | \n", "fromHotspot | \n", "hash | \n", "key | \n", "line | \n", "message | \n", "... | \n", "rule | \n", "severity | \n", "status | \n", "tags | \n", "textRange.endLine | \n", "textRange.endOffset | \n", "textRange.startLine | \n", "textRange.startOffset | \n", "type | \n", "updateDate | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "org.springframework.samples:spring-petclinic:b... | \n", "2018-03-07T07:45:21+0100 | \n", "2min | \n", "2min | \n", "[] | \n", "False | \n", "48c1dff4bc3cd8f9b9b8c76f49484c2a | \n", "AWLJtvMj-pl6AHs2EogL | \n", "5 | \n", "Rename this field \"INSTANCE\" to match the regu... | \n", "... | \n", "squid:S3008 | \n", "MINOR | \n", "OPEN | \n", "[convention] | \n", "5 | \n", "42 | \n", "5 | \n", "34 | \n", "CODE_SMELL | \n", "2018-04-15T16:28:40+0200 | \n", "
1 | \n", "org.springframework.samples:spring-petclinic:b... | \n", "2018-03-07T07:45:21+0100 | \n", "20min | \n", "20min | \n", "[] | \n", "False | \n", "48c1dff4bc3cd8f9b9b8c76f49484c2a | \n", "AWLJtvMj-pl6AHs2EogM | \n", "5 | \n", "Make this \"public static INSTANCE\" field final | \n", "... | \n", "squid:S1444 | \n", "MINOR | \n", "OPEN | \n", "[cert, cwe] | \n", "5 | \n", "42 | \n", "5 | \n", "34 | \n", "VULNERABILITY | \n", "2018-04-15T16:28:40+0200 | \n", "
2 | \n", "org.springframework.samples:spring-petclinic:b... | \n", "2018-03-07T07:45:21+0100 | \n", "10min | \n", "10min | \n", "[] | \n", "False | \n", "48c1dff4bc3cd8f9b9b8c76f49484c2a | \n", "AWLJtvMj-pl6AHs2EogN | \n", "5 | \n", "Make INSTANCE a static final constant or non-p... | \n", "... | \n", "squid:ClassVariableVisibilityCheck | \n", "MINOR | \n", "OPEN | \n", "[cwe] | \n", "5 | \n", "42 | \n", "5 | \n", "34 | \n", "VULNERABILITY | \n", "2018-04-15T16:28:40+0200 | \n", "
3 | \n", "org.springframework.samples:spring-petclinic:b... | \n", "2017-11-22T17:54:34+0100 | \n", "5min | \n", "5min | \n", "[{'locations': [{'component': 'org.springframe... | \n", "False | \n", "815a0864eec54976893cbe650dfba48d | \n", "AWLJtvMo-pl6AHs2EogP | \n", "11 | \n", "Remove this unused method parameter \"id\". | \n", "... | \n", "squid:S1172 | \n", "MAJOR | \n", "OPEN | \n", "[cert, misra, unused] | \n", "11 | \n", "60 | \n", "11 | \n", "58 | \n", "CODE_SMELL | \n", "2018-04-15T16:28:40+0200 | \n", "
4 | \n", "org.springframework.samples:spring-petclinic:b... | \n", "2017-11-22T17:54:34+0100 | \n", "15min | \n", "15min | \n", "[] | \n", "False | \n", "eb375774c265dedeefeb29283ceea9bc | \n", "AWLJtvMo-pl6AHs2EogR | \n", "15 | \n", "Either re-interrupt this method or rethrow the... | \n", "... | \n", "squid:S2142 | \n", "MAJOR | \n", "OPEN | \n", "[cwe, multi-threading] | \n", "15 | \n", "39 | \n", "15 | \n", "17 | \n", "BUG | \n", "2018-04-15T16:28:40+0200 | \n", "
5 rows × 22 columns
\n", "\n", " | author | \n", "closeDate | \n", "component | \n", "creationDate | \n", "debt | \n", "effort | \n", "flows | \n", "hash | \n", "key | \n", "line | \n", "... | \n", "severity | \n", "status | \n", "subProject | \n", "tags | \n", "textRange.endLine | \n", "textRange.endOffset | \n", "textRange.startLine | \n", "textRange.startOffset | \n", "type | \n", "updateDate | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "mchung | \n", "NaN | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/... | \n", "2016-11-10T16:11:08+0100 | \n", "5min | \n", "5min | \n", "[] | \n", "ceb3b90ca0cef1868923530915cc87b9 | \n", "AVhO6lMH0AIB2Vhfjr-u | \n", "226.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:jdk | \n", "[convention] | \n", "226.0 | \n", "29.0 | \n", "226.0 | \n", "25.0 | \n", "CODE_SMELL | \n", "2016-11-10T16:11:08+0100 | \n", "
1 | \n", "mchung | \n", "NaN | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/... | \n", "2016-11-10T16:11:08+0100 | \n", "5min | \n", "5min | \n", "[] | \n", "b640fdfabab5d1b62582d4e25d59c606 | \n", "AVhO6lMI0AIB2Vhfjr-v | \n", "386.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:jdk | \n", "[convention] | \n", "386.0 | \n", "25.0 | \n", "386.0 | \n", "14.0 | \n", "CODE_SMELL | \n", "2016-11-10T16:11:08+0100 | \n", "
2 | \n", "duke | \n", "NaN | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/... | \n", "2016-11-10T16:11:08+0100 | \n", "13min | \n", "13min | \n", "[{'locations': [{'component': 'net.java.openjd... | \n", "5eb1048a65cef9f848fe69a1337d77e1 | \n", "AVhO6lSS0AIB2Vhfjr-x | \n", "322.0 | \n", "... | \n", "CRITICAL | \n", "OPEN | \n", "net.java.openjdk:jdk9:jdk | \n", "[brain-overload] | \n", "322.0 | \n", "26.0 | \n", "322.0 | \n", "18.0 | \n", "CODE_SMELL | \n", "2016-11-10T16:11:08+0100 | \n", "
3 | \n", "mchung | \n", "NaN | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/... | \n", "2016-11-10T16:11:08+0100 | \n", "2min | \n", "2min | \n", "[] | \n", "f0130b8994e5c47e50e1a2e79d2a7236 | \n", "AVhO6lSR0AIB2Vhfjr-w | \n", "484.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:jdk | \n", "[convention] | \n", "484.0 | \n", "41.0 | \n", "484.0 | \n", "27.0 | \n", "CODE_SMELL | \n", "2016-11-10T16:11:08+0100 | \n", "
4 | \n", "smarks | \n", "NaN | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/... | \n", "2016-11-10T16:11:08+0100 | \n", "5min | \n", "5min | \n", "[] | \n", "2ebc8d0c1f68c70bb912de5d30f06d41 | \n", "AVhO6myN0AIB2Vhfjr-y | \n", "95.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:jdk | \n", "[convention] | \n", "95.0 | \n", "21.0 | \n", "95.0 | \n", "16.0 | \n", "CODE_SMELL | \n", "2016-11-10T16:11:08+0100 | \n", "
5 rows × 25 columns
\n", "\n", " | author | \n", "closeDate | \n", "component | \n", "creationDate | \n", "debt | \n", "effort | \n", "flows | \n", "hash | \n", "key | \n", "line | \n", "... | \n", "severity | \n", "status | \n", "subProject | \n", "tags | \n", "textRange.endLine | \n", "textRange.endOffset | \n", "textRange.startLine | \n", "textRange.startOffset | \n", "type | \n", "updateDate | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
306 | \n", "vromero | \n", "NaN | \n", "net.java.openjdk:jdk9:langtools:src/jdk.compil... | \n", "2016-11-03T16:10:03+0100 | \n", "10min | \n", "10min | \n", "[] | \n", "1fbe8f7a2d5b0d6eb6e60053c78abe06 | \n", "AVgq2iKqc0c4MVP5bbg7 | \n", "2854.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:langtools | \n", "[cwe] | \n", "2854.0 | \n", "51.0 | \n", "2854.0 | \n", "46.0 | \n", "VULNERABILITY | \n", "2016-11-03T16:10:03+0100 | \n", "
308 | \n", "vromero | \n", "NaN | \n", "net.java.openjdk:jdk9:langtools:src/jdk.compil... | \n", "2016-11-03T16:10:03+0100 | \n", "10min | \n", "10min | \n", "[] | \n", "7835c4aaa972d2ee661a3fb912743535 | \n", "AVgq2iKqc0c4MVP5bbg8 | \n", "2890.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:langtools | \n", "[cwe] | \n", "2890.0 | \n", "42.0 | \n", "2890.0 | \n", "27.0 | \n", "VULNERABILITY | \n", "2016-11-03T16:10:03+0100 | \n", "
716 | \n", "jlahoda | \n", "NaN | \n", "net.java.openjdk:jdk9:nashorn:src/jdk.scriptin... | \n", "2016-10-27T16:10:33+0200 | \n", "10min | \n", "10min | \n", "[] | \n", "fa31896ede321997dd0bc03a6e788f6c | \n", "AVgGm45Ec0c4MVP5YKpW | \n", "81.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:nashorn | \n", "[error-handling] | \n", "81.0 | \n", "42.0 | \n", "81.0 | \n", "27.0 | \n", "VULNERABILITY | \n", "2016-10-27T16:10:33+0200 | \n", "
956 | \n", "ant | \n", "NaN | \n", "net.java.openjdk:jdk9:jdk:src/java.desktop/mac... | \n", "2016-10-14T16:12:15+0200 | \n", "10min | \n", "10min | \n", "[] | \n", "5c5bde86fe26ed1be60a8b58f305bfb5 | \n", "AVfDqqJob6bLTkrkqbLq | \n", "103.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:jdk | \n", "[error-handling] | \n", "103.0 | \n", "55.0 | \n", "103.0 | \n", "40.0 | \n", "VULNERABILITY | \n", "2016-10-14T16:12:15+0200 | \n", "
1015 | \n", "ksrini | \n", "NaN | \n", "net.java.openjdk:jdk9:langtools:src/jdk.javado... | \n", "2016-10-14T16:12:15+0200 | \n", "10min | \n", "10min | \n", "[] | \n", "2dd9b2ef22845fa74d57e565807327fb | \n", "AVfDqktTb6bLTkrkqbKa | \n", "284.0 | \n", "... | \n", "MINOR | \n", "OPEN | \n", "net.java.openjdk:jdk9:langtools | \n", "[cwe] | \n", "284.0 | \n", "30.0 | \n", "284.0 | \n", "19.0 | \n", "VULNERABILITY | \n", "2016-10-14T16:12:15+0200 | \n", "
5 rows × 25 columns
\n", "\n", " | \n", " | type | \n", "
---|---|---|
severity | \n", "component | \n", "\n", " |
BLOCKER | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/classes/com/sun/security/ntlm/NTLM.java | \n", "1 | \n", "
MINOR | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/classes/java/util/concurrent/LinkedTransferQueue.java | \n", "1 | \n", "
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/java/util/concurrent/PriorityBlockingQueue.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/java/util/zip/ZipFile.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:langtools:src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/sun/security/util/AnchorCertificates.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/javax/imageio/ImageIO.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/javax/imageio/spi/ServiceRegistry.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/javax/imageio/stream/FileCacheImageInputStream.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/javax/imageio/stream/FileCacheImageOutputStream.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/applet/Main.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/awt/SunToolkit.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/awt/util/PerformanceLogger.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/font/CreatedFontTracker.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/font/FileFont.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/font/Type1Font.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/print/PrintJob2D.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/print/ServiceDialog.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/unix/classes/sun/awt/X11/InfoWindow.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/unix/classes/sun/print/UnixPrintJob.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/jdk.jlink/share/classes/jdk/tools/jlink/builder/DefaultImageBuilder.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImagePluginStack.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:langtools:src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:langtools:src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/java/io/DeleteOnExitHook.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/com/sun/java/util/jar/pack/UnpackerImpl.java | \n", "1 | \n", "|
net.java.openjdk:jdk9:nashorn:src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/Console.java | \n", "1 | \n", "|
MAJOR | \n", "net.java.openjdk:jdk9:jdk:src/java.httpclient/share/classes/sun/net/httpclient/hpack/Huffman.java | \n", "1 | \n", "
... | \n", "... | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/sun/security/tools/keytool/Main.java | \n", "2 | \n", "|
MINOR | \n", "net.java.openjdk:jdk9:jdk:src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java | \n", "2 | \n", "
net.java.openjdk:jdk9:jdk:src/java.httpclient/share/classes/java/net/http/WSTransmitter.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/jdk.attach/aix/classes/sun/tools/attach/VirtualMachineImpl.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/print/PSPrinterJob.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/jdk.jartool/share/classes/sun/tools/jar/Main.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/jdk.attach/linux/classes/sun/tools/attach/VirtualMachineImpl.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/sun/nio/fs/AbstractWatchService.java | \n", "2 | \n", "|
MAJOR | \n", "net.java.openjdk:jdk9:jdk:src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java | \n", "2 | \n", "
MINOR | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/classes/java/util/concurrent/DelayQueue.java | \n", "2 | \n", "
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/java/util/concurrent/ThreadPoolExecutor.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/jdk/internal/module/SystemModules.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:corba:src/java.corba/share/classes/com/sun/corba/se/impl/naming/pcosnaming/ServantManagerImpl.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/font/SunFontManager.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/java/awt/Font.java | \n", "2 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/java/awt/Desktop.java | \n", "2 | \n", "|
MAJOR | \n", "net.java.openjdk:jdk9:langtools:src/jdk.jshell/share/classes/jdk/jshell/execution/Util.java | \n", "2 | \n", "
MINOR | \n", "net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/javax/swing/TimerQueue.java | \n", "2 | \n", "
net.java.openjdk:jdk9:jdk:src/java.desktop/share/classes/sun/awt/image/OffScreenImageSource.java | \n", "2 | \n", "|
MAJOR | \n", "net.java.openjdk:jdk9:langtools:src/jdk.jshell/share/classes/jdk/jshell/execution/ExecutionControlForwarder.java | \n", "3 | \n", "
MINOR | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/classes/java/util/concurrent/ScheduledThreadPoolExecutor.java | \n", "3 | \n", "
net.java.openjdk:jdk9:jdk:src/java.logging/share/classes/java/util/logging/FileHandler.java | \n", "3 | \n", "|
MAJOR | \n", "net.java.openjdk:jdk9:langtools:src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java | \n", "4 | \n", "
net.java.openjdk:jdk9:jdk:src/java.httpclient/share/classes/java/net/http/AsyncSSLDelegate.java | \n", "4 | \n", "|
MINOR | \n", "net.java.openjdk:jdk9:jdk:src/java.base/aix/classes/sun/nio/ch/AixPollPort.java | \n", "4 | \n", "
net.java.openjdk:jdk9:jdk:src/java.base/linux/classes/sun/nio/ch/EPollPort.java | \n", "4 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/macosx/classes/sun/nio/ch/KQueuePort.java | \n", "4 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.base/share/classes/com/sun/java/util/jar/pack/Driver.java | \n", "5 | \n", "|
net.java.openjdk:jdk9:jdk:src/java.prefs/unix/classes/java/util/prefs/FileSystemPreferences.java | \n", "9 | \n", "|
MAJOR | \n", "net.java.openjdk:jdk9:jdk:src/java.base/share/classes/java/util/concurrent/CompletableFuture.java | \n", "9 | \n", "
80 rows × 1 columns
\n", "