From 24b9ecebf8504d2f658b22a2e92f39704b24e1ed Mon Sep 17 00:00:00 2001 From: Markus Harrer Date: Fri, 15 Mar 2024 15:27:19 +0100 Subject: [PATCH] add empty version of notebook --- ...Production Coverage Analysis (empty).ipynb | 608 ++++++++++++++++++ 1 file changed, 608 insertions(+) create mode 100644 demos/20240315_BOBKonf_2024/Production Coverage Analysis (empty).ipynb diff --git a/demos/20240315_BOBKonf_2024/Production Coverage Analysis (empty).ipynb b/demos/20240315_BOBKonf_2024/Production Coverage Analysis (empty).ipynb new file mode 100644 index 0000000..1cc4861 --- /dev/null +++ b/demos/20240315_BOBKonf_2024/Production Coverage Analysis (empty).ipynb @@ -0,0 +1,608 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Production Coverage Analysis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Take a look at the raw dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic,PetclinicInitializer,0,124,0,0,0,24,0,8,0,8\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic.model,NamedEntity,3,10,0,0,1,4,1,3,1,3\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic.model,Specialty,0,3,0,0,0,1,0,1,0,1\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic.model,PetType,0,3,0,0,0,1,0,1,0,1\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic.model,Vets,14,0,2,0,4,0,3,0,2,0\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic.model,Visit,0,29,0,0,0,12,0,7,0,7\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic.model,BaseEntity,0,17,0,2,0,5,0,5,0,4\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic.model,Person,0,17,0,0,0,7,0,5,0,5\r\n", + "JaCoCo Coverage Report,org.springframework.samples.petclinic.model,Owner,50,88,4,6,14,26,7,12,3,11\r\n" + ] + } + ], + "source": [ + "!head ../dataset/jacoco.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read in data from a usage measurement using JaCoCo" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PACKAGECLASSLINE_MISSEDLINE_COVERED
0org.springframework.samples.petclinicPetclinicInitializer024
\n", + "
" + ], + "text/plain": [ + " PACKAGE CLASS LINE_MISSED \\\n", + "0 org.springframework.samples.petclinic PetclinicInitializer 0 \n", + "\n", + " LINE_COVERED \n", + "0 24 " + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "coverage = pd.read_csv(\"../dataset/jacoco_demo.csv\")\n", + "coverage.head(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculate new measures needed for analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PACKAGECLASSLINE_MISSEDLINE_COVEREDlinesratio
0org.springframework.samples.petclinicPetclinicInitializer024241.0
1org.springframework.samples.petclinic.modelNamedEntity1450.8
2org.springframework.samples.petclinic.modelSpecialty0111.0
3org.springframework.samples.petclinic.modelPetType0111.0
4org.springframework.samples.petclinic.modelVets4040.0
\n", + "
" + ], + "text/plain": [ + " PACKAGE CLASS \\\n", + "0 org.springframework.samples.petclinic PetclinicInitializer \n", + "1 org.springframework.samples.petclinic.model NamedEntity \n", + "2 org.springframework.samples.petclinic.model Specialty \n", + "3 org.springframework.samples.petclinic.model PetType \n", + "4 org.springframework.samples.petclinic.model Vets \n", + "\n", + " LINE_MISSED LINE_COVERED lines ratio \n", + "0 0 24 24 1.0 \n", + "1 1 4 5 0.8 \n", + "2 0 1 1 1.0 \n", + "3 0 1 1 1.0 \n", + "4 4 0 4 0.0 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coverage['lines'] = coverage['LINE_COVERED'] + coverage['LINE_MISSED']\n", + "coverage['ratio'] = coverage['LINE_COVERED'] / coverage['lines']\n", + "coverage.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set up data for explorative analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PACKAGECLASSLINE_MISSEDLINE_COVEREDlinesratio
fqn
org.springframework.samples.petclinic.PetclinicInitializerorg.springframework.samples.petclinicPetclinicInitializer024241.0
org.springframework.samples.petclinic.model.NamedEntityorg.springframework.samples.petclinic.modelNamedEntity1450.8
org.springframework.samples.petclinic.model.Specialtyorg.springframework.samples.petclinic.modelSpecialty0111.0
org.springframework.samples.petclinic.model.PetTypeorg.springframework.samples.petclinic.modelPetType0111.0
org.springframework.samples.petclinic.model.Vetsorg.springframework.samples.petclinic.modelVets4040.0
\n", + "
" + ], + "text/plain": [ + " PACKAGE \\\n", + "fqn \n", + "org.springframework.samples.petclinic.Petclinic... org.springframework.samples.petclinic \n", + "org.springframework.samples.petclinic.model.Nam... org.springframework.samples.petclinic.model \n", + "org.springframework.samples.petclinic.model.Spe... org.springframework.samples.petclinic.model \n", + "org.springframework.samples.petclinic.model.Pet... org.springframework.samples.petclinic.model \n", + "org.springframework.samples.petclinic.model.Vets org.springframework.samples.petclinic.model \n", + "\n", + " CLASS \\\n", + "fqn \n", + "org.springframework.samples.petclinic.Petclinic... PetclinicInitializer \n", + "org.springframework.samples.petclinic.model.Nam... NamedEntity \n", + "org.springframework.samples.petclinic.model.Spe... Specialty \n", + "org.springframework.samples.petclinic.model.Pet... PetType \n", + "org.springframework.samples.petclinic.model.Vets Vets \n", + "\n", + " LINE_MISSED LINE_COVERED \\\n", + "fqn \n", + "org.springframework.samples.petclinic.Petclinic... 0 24 \n", + "org.springframework.samples.petclinic.model.Nam... 1 4 \n", + "org.springframework.samples.petclinic.model.Spe... 0 1 \n", + "org.springframework.samples.petclinic.model.Pet... 0 1 \n", + "org.springframework.samples.petclinic.model.Vets 4 0 \n", + "\n", + " lines ratio \n", + "fqn \n", + "org.springframework.samples.petclinic.Petclinic... 24 1.0 \n", + "org.springframework.samples.petclinic.model.Nam... 5 0.8 \n", + "org.springframework.samples.petclinic.model.Spe... 1 1.0 \n", + "org.springframework.samples.petclinic.model.Pet... 1 1.0 \n", + "org.springframework.samples.petclinic.model.Vets 4 0.0 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coverage['fqn'] = coverage['PACKAGE'] + \".\" + coverage['CLASS']\n", + "coverage = coverage.set_index(\"fqn\")\n", + "coverage.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create a visualization for exploration" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Production Coverage Hotspots" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import hotspotsviz\n", + "hotspotsviz.create(coverage, \"ratio\", \"lines\", \".\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Group by packages to explore mean coverage on a higher level" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LINE_MISSEDLINE_COVEREDlinesratio
PACKAGE
org.springframework.samples.petclinic024241.000000
org.springframework.samples.petclinic.model33751087.390476
org.springframework.samples.petclinic.repository.jdbc15001500.000000
org.springframework.samples.petclinic.repository.jpa721282.766234
org.springframework.samples.petclinic.service216180.888889
org.springframework.samples.petclinic.util1713300.541667
org.springframework.samples.petclinic.web40751154.478662
\n", + "
" + ], + "text/plain": [ + " LINE_MISSED LINE_COVERED \\\n", + "PACKAGE \n", + "org.springframework.samples.petclinic 0 24 \n", + "org.springframework.samples.petclinic.model 33 75 \n", + "org.springframework.samples.petclinic.repositor... 150 0 \n", + "org.springframework.samples.petclinic.repositor... 7 21 \n", + "org.springframework.samples.petclinic.service 2 16 \n", + "org.springframework.samples.petclinic.util 17 13 \n", + "org.springframework.samples.petclinic.web 40 75 \n", + "\n", + " lines ratio \n", + "PACKAGE \n", + "org.springframework.samples.petclinic 24 1.000000 \n", + "org.springframework.samples.petclinic.model 108 7.390476 \n", + "org.springframework.samples.petclinic.repositor... 150 0.000000 \n", + "org.springframework.samples.petclinic.repositor... 28 2.766234 \n", + "org.springframework.samples.petclinic.service 18 0.888889 \n", + "org.springframework.samples.petclinic.util 30 0.541667 \n", + "org.springframework.samples.petclinic.web 115 4.478662 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grouped_by_packages = coverage.groupby(\"PACKAGE\").sum()\n", + "grouped_by_packages" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualize coverage distribution over all packages" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Wmaenp40b94cPz8/EhISOH78OP7+/ri5udG6desK/bYUP7bMzEySkpK4du0aDx48eGwej+Pn58dvv/3G6tWrCQoKAgrf+ODk5KQOkSjO19eXatWq8f7775OSksK3336r/g4VN2vWLA4ePMhPP/1EQEAAtWrVonfv3kDh72x8fDzDhw/n9OnTnD17lrCwsCprrBNCCCGEEC+OSjUsTJ8+nYiICLp3707//v3Zv38/w4YNo1q1avTs2ZPo6GidJ2+Ps2DBAt555x0GDBhAq1atOH/+PHv37qVmzZpl7rN06VJcXV3p0aMHnp6edOjQgaZNm+rMW5Cdna2Om9fT0+P69ev4+/vj6OhI37596datGzNnzlS3r1GjBpMnT8bX1xdXV1eMjY3ZtGlTZYqmQszNzdmxYwdJSUm4uLjw0UcfMW3aNACd+CsqJCSEmjVr0r59e3r27ImXlxetWrV66jibN29ObGws6enpdOrUiZYtWzJ16lTq1aunbqPRaNReCZ06dVL3s7CwoGXLljrjp3v37s2nn37KokWLePXVV1m1ahXh4eElhktU5Hj79u1Lly5dOHfuHFA4V4f2Rsbc3JwffvgBb29vHB0d+fjjj1myZAndunUDYO3atdy4cYOWLVsyYMAA9VWnVcHe3h4fHx+8vb35xz/+wWuvvcbnn39e5vazZ89m2rRpzJ8/n6ZNm+Ll5cWOHTto1KgRUPh0e8qUKTRv3pzOnTujp6enUyeLHreWv78/9+7do23btowYMYJRo0YxePBgdX14eDj+/v5MmDCBJk2a8H//938cO3ZMfcrdvn17hg4dSr9+/ahduzYLFy4ECl8V+s9//pPhw4fj5OTEoEGDdF7bWNUel19aWho5OTnlplGROgwwYcIETp48ScuWLZk9ezZLlizBy8sL+O8rGmvWrEnnzp3VuT6+/vproGK/LUW98847vPXWW7z55pvUrl2bjRs3PjaPxzE3N+edd97B1NRUveG/e/cuaWlp5OXllbqPqakpO3bsICUlhZYtW/LRRx/xySeflLrtggULGDNmDK+//jrZ2dls375d7fHh6OjIvn37OHXqFG3btsXV1ZVvvvmG6tWrVyh2IYQQQgjx96FRKjHgtnHjxsydO5f+/fsDhU/GOnTowP3799HT03tmQZbnzp071K9fnyVLlpTZ06E8ERERjB07lps3b1Z9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qVSpkrHnjKOjI3Z2dmZOV/bNmDGDvn374uLiQm5uLnFxcSQkJLBp0yZzRyvzKlWqVGwuD3t7e5ydnTXHx32YPHky/fv3x9XVlXPnzhEWFkZOTg4BAQHmjmYRJk6cSMeOHZk/fz6DBw/mxx9/ZNmyZSxbtszc0SxGQUEB0dHRBAQEUK6cLqFvR60iIiKP1ZAhQ8jKymLOnDlkZmby9NNP89VXX+nOyX3Ys2cPzzzzjPF50djigIAAYmJizJTKchT9xKm3t7fJ8ujoaE3EdR/Onj3LsGHDyMzMxNHRkRYtWrBp0yZ69epl7mjyJ/fLL7/wwgsvcOHCBapWrUqHDh3YuXOn/m7cp7Zt27Ju3TqmT5/OnDlzqF+/PpGRkfj5+Zk7msXYunUrGRkZBAUFmTtKmWUoLCwsNHcIEREREREREbFMmmNBREREREREREpMhQURERERERERKTEVFkRERERERESkxFRYEBEREREREZESU2FBREREREREREpMhQURERERERERKTEVFkRERERERESkxFRYEBEREREREZESU2FBREREREREREpMhQURERERERERKTEVFkRERERERESkxP4PRcVDmdjVmRsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "grouped_by_packages[['ratio']].plot(kind=\"barh\", figsize=(8,2));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Conclusion\n", + "..." + ] + } + ], + "metadata": { + "hide_input": false, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + }, + "toc": { + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "toc_cell": false, + "toc_position": {}, + "toc_section_display": "block", + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}