From f31e9d0efceeea539b8e26a4d08e6cca13939741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20D=C3=BCrschmid?= Date: Thu, 16 Sep 2021 10:55:55 -0400 Subject: [PATCH 1/2] Add quality of life scripts --- container.sh | 1 + detect.sh | 1 + scripts/run-container.py | 60 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 container.sh create mode 100644 detect.sh create mode 100644 scripts/run-container.py diff --git a/container.sh b/container.sh new file mode 100644 index 00000000..63a678f5 --- /dev/null +++ b/container.sh @@ -0,0 +1 @@ +pipenv run python scripts/run-container.py experiments/detection/subjects/$1/experiment.yml $2 diff --git a/detect.sh b/detect.sh new file mode 100644 index 00000000..a7d26bbe --- /dev/null +++ b/detect.sh @@ -0,0 +1 @@ +pipenv run python scripts/recover-system.py experiments/detection/subjects/$1/experiment.yml diff --git a/scripts/run-container.py b/scripts/run-container.py new file mode 100644 index 00000000..1d40057e --- /dev/null +++ b/scripts/run-container.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""This script is used to statically recover run-time architectures for entire ROS systems.""" +import argparse +import os +import sys +import tempfile +import typing as t + +from loguru import logger +logger.remove() + +import rosdiscover +import rosdiscover.cli + +import yaml + +from common.config import ( + DetectionExperimentConfig, + ExperimentConfig, + NodeSources, + RecoveryExperimentConfig, + ROSDiscoverConfig, + load_config +) + +def main() -> None: + # remove all existing loggers + stderr_logger = logger.add( + sys.stderr, + colorize=True, + format="{level}: {message}", + level="INFO", + ) + + parser = argparse.ArgumentParser("statically recovers ROS system architectures") + parser.add_argument( + "configuration", + help="the path to the configuration file for this experiment", + ) + parser.add_argument( + "version", + help="buggy or fixed", + ) + args = parser.parse_args() + + experiment_filename: str = args.configuration + version: str = args.version + if not os.path.exists(experiment_filename): + error(f"configuration file not found: {experiment_filename}") + + if not version in ["buggy", "fixed"]: + error(f"version needs to be buggy or fixed") + config = load_config(experiment_filename) + image = config[version]["image"] + os.system(f'docker run -it --rm {image}') + + +if __name__ == "__main__": + main() From 7222f947f210864bb8090b19676240dab924880f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20D=C3=BCrschmid?= Date: Thu, 11 Nov 2021 16:36:17 -0500 Subject: [PATCH 2/2] Add data and jupyter notebook --- results/DataAnalysis.ipynb | 649 ++++++++++++++++++ ...ode model recovery results - autorally.csv | 27 + ...node model recovery results - autoware.csv | 231 +++++++ ...1A node model recovery results - fetch.csv | 95 +++ ...1A node model recovery results - husky.csv | 111 +++ ...ode model recovery results - turtlebot.csv | 109 +++ results/data/RQ1A.csv | 7 + results/data/RQ1Along.csv | 7 + ...Q1B Observed Architecture - Comparison.csv | 51 ++ .../RQ1B Observed Architecture - Models.csv | 22 + ... Architecture - Node-Level Comparision.csv | 89 +++ .../RQ1B Observed Architecture - Summary.csv | 6 + results/data/RQ1Percent.csv | 7 + results/data/RQ1SystemOverview.csv | 6 + results/data/RQ2Agg.csv | 5 + results/data/RQ2Agghw.csv | 5 + results/data/RQ2All.csv | 5 + results/data/RQ2Kind.csv | 6 + results/data/RQ2Kindhw.csv | 6 + results/data/RQ3.csv | 21 + .../RosTopicBugs - RQ3 - Results Table.csv | 21 + 21 files changed, 1486 insertions(+) create mode 100644 results/DataAnalysis.ipynb create mode 100644 results/data/RQ1A node model recovery results - autorally.csv create mode 100644 results/data/RQ1A node model recovery results - autoware.csv create mode 100644 results/data/RQ1A node model recovery results - fetch.csv create mode 100644 results/data/RQ1A node model recovery results - husky.csv create mode 100644 results/data/RQ1A node model recovery results - turtlebot.csv create mode 100644 results/data/RQ1A.csv create mode 100644 results/data/RQ1Along.csv create mode 100644 results/data/RQ1B Observed Architecture - Comparison.csv create mode 100644 results/data/RQ1B Observed Architecture - Models.csv create mode 100644 results/data/RQ1B Observed Architecture - Node-Level Comparision.csv create mode 100644 results/data/RQ1B Observed Architecture - Summary.csv create mode 100644 results/data/RQ1Percent.csv create mode 100644 results/data/RQ1SystemOverview.csv create mode 100644 results/data/RQ2Agg.csv create mode 100644 results/data/RQ2Agghw.csv create mode 100644 results/data/RQ2All.csv create mode 100644 results/data/RQ2Kind.csv create mode 100644 results/data/RQ2Kindhw.csv create mode 100644 results/data/RQ3.csv create mode 100644 results/data/RosTopicBugs - RQ3 - Results Table.csv diff --git a/results/DataAnalysis.ipynb b/results/DataAnalysis.ipynb new file mode 100644 index 00000000..5f3cc820 --- /dev/null +++ b/results/DataAnalysis.ipynb @@ -0,0 +1,649 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "664cfb2f", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "74f8c89c", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import matplotlib.font_manager\n", + "import numpy as np\n", + "import os\n", + "from matplotlib import rc\n", + "#rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})\n", + "rc('font',**{'family':'serif','serif':['mathtime']})\n", + "rc('text', usetex=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d44c985c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['AutoRally', 'Autoware', 'Fetch', 'Husky', 'TurtleBot']\n" + ] + } + ], + "source": [ + "rq1_systems = [\"Husky\", \"AutoRally\", \"Fetch\", \"TurtleBot\", \"Autoware\"]\n", + "rq1_systems.sort()\n", + "print(rq1_systems)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "18c5a89f", + "metadata": {}, + "outputs": [], + "source": [ + "def getData(name):\n", + " return pd.read_csv(f'data/RQ1A node model recovery results - {name.lower()}.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b37eec3a", + "metadata": {}, + "outputs": [], + "source": [ + "def calculate(df, name):\n", + " df_no_crash = df.loc[df['crashed'] == False]\n", + " nodes = len(df_no_crash)\n", + " print(f'{name} has {nodes} nodes that did not crash')\n", + " crashed_nodes = len(df) - len(df_no_crash) \n", + " print(f'{name} crashed in {(1 - len(df_no_crash) / len(df)) * 100}% of the cases')\n", + " api_calls = int(df_no_crash[\"api_calls\"].sum())\n", + " \n", + " unknown_percentage = df_no_crash[\"unknown_api_calls\"].sum() / api_calls * 100\n", + " unknown_nodes_number = len(df.loc[df['unknown_api_calls'] > 0])\n", + " unknown_nodes_percentage = unknown_nodes_number / nodes * 100\n", + " \n", + " print(f'{unknown_nodes_percentage}% of the nodes have at least one unknown API call')\n", + " avg_time_taken = sum(df_no_crash['time_taken']) / len(df_no_crash['time_taken'])\n", + " \n", + " print(f'{name} got {unknown_percentage}% unknowns for API calls (of {api_calls})')\n", + " unreachable_functions = int(df_no_crash[\"unreachable_functions\"].sum())\n", + " unreachable_api_calls = int(df_no_crash[\"unreachable_api_calls\"].sum())\n", + " functions = int(df_no_crash[\"functions\"].sum())\n", + " print(f'{name} has {unreachable_functions} unreachable functions (of {functions}) and {unreachable_api_calls} unreachable API calls')\n", + " df_no_crash[\"unknown_api_calls\"].sum()\n", + " \n", + " return crashed_nodes, unknown_percentage, api_calls, unreachable_functions, unreachable_api_calls, unknown_nodes_number, unknown_nodes_percentage, nodes, functions, avg_time_taken" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "1c35df52", + "metadata": {}, + "outputs": [], + "source": [ + "def process_data(df, name, csv_content, csv_content_, csv_content_2, content): \n", + " crashed_nodes, unknown_percentage,api_calls, unreachable_functions,unreachable_api_calls,unknown_nodes_number, unknown_nodes_percentage,nodes,functions,avg_time_taken = calculate(df, name)\n", + " unreachable_api_calls_percentage = unreachable_api_calls / api_calls * 100\n", + " unreachable_functions_percentage = unreachable_functions / functions * 100\n", + " content+= f\"\\\\newcommand\\\\RQI{name}CrashedNodes{{{crashed_nodes}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}AvgTimeTakenSec{{{avg_time_taken:.3f}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}AvgTimeTakenMin{{{avg_time_taken/60:.3f}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}UnkownPercentage{{{unknown_percentage:.3f}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}NodesUnknownPercentage{{{unknown_nodes_percentage:.3f}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}NodesUnknown{{{unknown_nodes_number}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}APICalls{{{api_calls}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}UnreachableFunctions{{{unreachable_functions}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}Functions{{{functions}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}UnreachableFunctionsPercentag{{{unreachable_functions_percentage}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}UnreachableAPICalls{{{unreachable_api_calls}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}UnreachableAPICallsPercentage{{{unreachable_functions_percentage}}}\\n\"\n", + " content+= f\"\\\\newcommand\\\\RQI{name}Nodes{{{nodes}}}\\n\"\n", + " csv_content += f'{name},{api_calls},{unknown_percentage},{unreachable_functions},{unreachable_api_calls}\\n'\n", + " csv_content_ += f'{name},{api_calls},{unknown_percentage},{nodes},{unknown_nodes_percentage}\\n'\n", + " csv_content_2 += f'{name},{api_calls},{unknown_percentage},{unreachable_functions_percentage:.2f}\\% of {functions},{unreachable_api_calls_percentage}\\n'\n", + " return csv_content, csv_content_, csv_content_2, content" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "bc27799a", + "metadata": {}, + "outputs": [], + "source": [ + "def hist(s, height):\n", + " h = s.hist(bins=50,figsize=(8,height),ylabelsize=15,xlabelsize=15, color = \"black\")\n", + " h.set_frame_on(False)\n", + " return h" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "26543d84", + "metadata": {}, + "outputs": [], + "source": [ + "def histUnknown(df):\n", + " df_no_crash = df.loc[df['crashed'] == False]\n", + " percent_unknown = df_no_crash[\"unknown_api_calls\"] / df_no_crash[\"api_calls\"] * 100\n", + " return hist(percent_unknown, 3)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f433a486", + "metadata": {}, + "outputs": [], + "source": [ + "def histUnknownNZ(df):\n", + " df_no_crash = df.loc[df['crashed'] == False]\n", + " percent_unknown = df_no_crash[\"unknown_api_calls\"] / df_no_crash[\"api_calls\"] * 100\n", + " percent_unknown_no_0 = percent_unknown[percent_unknown > 0] \n", + " return hist(percent_unknown_no_0,1.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "05054f5c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AutoRally has 25 nodes that did not crash\n", + "AutoRally crashed in 3.8461538461538436% of the cases\n", + "16.0% of the nodes have at least one unknown API call\n", + "AutoRally got 13.333333333333334% unknowns for API calls (of 75)\n", + "AutoRally has 4 unreachable functions (of 44) and 10 unreachable API calls\n", + "Autoware has 205 nodes that did not crash\n", + "Autoware crashed in 10.869565217391308% of the cases\n", + "31.70731707317073% of the nodes have at least one unknown API call\n", + "Autoware got 14.729574223245109% unknowns for API calls (of 869)\n", + "Autoware has 50 unreachable functions (of 354) and 74 unreachable API calls\n", + "Fetch has 93 nodes that did not crash\n", + "Fetch crashed in 1.0638297872340385% of the cases\n", + "1.0752688172043012% of the nodes have at least one unknown API call\n", + "Fetch got 1.9417475728155338% unknowns for API calls (of 103)\n", + "Fetch has 3 unreachable functions (of 123) and 7 unreachable API calls\n", + "Husky has 105 nodes that did not crash\n", + "Husky crashed in 4.545454545454541% of the cases\n", + "2.857142857142857% of the nodes have at least one unknown API call\n", + "Husky got 2.666666666666667% unknowns for API calls (of 225)\n", + "Husky has 19 unreachable functions (of 168) and 18 unreachable API calls\n", + "TurtleBot has 105 nodes that did not crash\n", + "TurtleBot crashed in 2.777777777777779% of the cases\n", + "2.857142857142857% of the nodes have at least one unknown API call\n", + "TurtleBot got 17.72151898734177% unknowns for API calls (of 158)\n", + "TurtleBot has 22 unreachable functions (of 161) and 43 unreachable API calls\n", + "All has 504 nodes that did not crash\n", + "All crashed in 5.970149253731338% of the cases\n", + "15.079365079365079% of the nodes have at least one unknown API call\n", + "All got 13.171839515518545% unknowns for API calls (of 1321)\n", + "All has 88 unreachable functions (of 778) and 129 unreachable API calls\n" + ] + }, + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'images/RQ1AHist.pdf'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_6404/1214710436.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 24\u001b[0m \u001b[0mfile\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcsv_content_2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 25\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 26\u001b[1;33m \u001b[0mhistUnknown\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf_all\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'images/RQ1AHist.pdf'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbbox_inches\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'tight'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 27\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 28\u001b[0m \u001b[0mhistUnknownNZ\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf_all\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'images/RQ1AHist_nz.pdf'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbbox_inches\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'tight'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\matplotlib\\figure.py\u001b[0m in \u001b[0;36msavefig\u001b[1;34m(self, fname, transparent, **kwargs)\u001b[0m\n\u001b[0;32m 3013\u001b[0m \u001b[0mpatch\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_edgecolor\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'none'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3014\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3015\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprint_figure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3016\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3017\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mtransparent\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\matplotlib\\backend_bases.py\u001b[0m in \u001b[0;36mprint_figure\u001b[1;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)\u001b[0m\n\u001b[0;32m 2253\u001b[0m \u001b[1;31m# force the figure dpi to 72), so we need to set it again here.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2254\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdpi\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdpi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2255\u001b[1;33m result = print_method(\n\u001b[0m\u001b[0;32m 2256\u001b[0m \u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2257\u001b[0m \u001b[0mfacecolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mfacecolor\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\matplotlib\\backend_bases.py\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 1667\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1668\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1669\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1670\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1671\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\matplotlib\\_api\\deprecation.py\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(*inner_args, **inner_kwargs)\u001b[0m\n\u001b[0;32m 429\u001b[0m \u001b[1;32melse\u001b[0m \u001b[0mdeprecation_addendum\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 430\u001b[0m **kwargs)\n\u001b[1;32m--> 431\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0minner_args\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0minner_kwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 432\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 433\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\matplotlib\\backends\\backend_pdf.py\u001b[0m in \u001b[0;36mprint_pdf\u001b[1;34m(self, filename, dpi, bbox_inches_restore, metadata)\u001b[0m\n\u001b[0;32m 2716\u001b[0m \u001b[0mfile\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfilename\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_file\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2717\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2718\u001b[1;33m \u001b[0mfile\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mPdfFile\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmetadata\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmetadata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2719\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2720\u001b[0m \u001b[0mfile\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnewPage\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwidth\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\matplotlib\\backends\\backend_pdf.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, filename, metadata)\u001b[0m\n\u001b[0;32m 635\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0moriginal_file_like\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 636\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtell_base\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 637\u001b[1;33m \u001b[0mfh\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mopened\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_filehandle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"wb\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreturn_opened\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 638\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mopened\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 639\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\matplotlib\\cbook\\__init__.py\u001b[0m in \u001b[0;36mto_filehandle\u001b[1;34m(fname, flag, return_opened, encoding)\u001b[0m\n\u001b[0;32m 460\u001b[0m \u001b[0mfh\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbz2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mBZ2File\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mflag\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 461\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 462\u001b[1;33m \u001b[0mfh\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mflag\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mencoding\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 463\u001b[0m \u001b[0mopened\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 464\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'seek'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'images/RQ1AHist.pdf'" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "csv_content= \"System,API Calls,Percent of Unknown API Calls,Unreachable Functions,Unreachable API Calls\\n\"\n", + "csv_content_= \"System,API Calls,Percent of Unknown API Calls,Nodes,Percent of Unknown Nodes\\n\"\n", + "csv_content_2= \"System,API Calls,Percent of Unknown API Calls,Nodes,Percent of Unknown Nodes\\n\"\n", + "content= f\"\\\\newcommand\\\\RQINumSystems{{{len(rq1_systems)}}}\\n\"\n", + "\n", + "all_dfs = []\n", + "for name in rq1_systems:\n", + " df = getData(name)\n", + " all_dfs.append(df)\n", + " csv_content, csv_content_, csv_content_2, content = process_data(df, name, csv_content, csv_content_, csv_content_2, content)\n", + "\n", + "df_all = pd.concat(all_dfs).drop_duplicates(subset=['package','node'])\n", + "csv_content, csv_content_, csv_content_2, content = process_data(df_all, \"All\", csv_content, csv_content_, csv_content_2, content)\n", + "with open(f'RQ1_results.tex', 'w') as file:\n", + " file.write(content)\n", + " \n", + "with open('data\\RQ1A.csv', 'w') as file:\n", + " file.write(csv_content) \n", + " \n", + "with open('data\\RQ1Along.csv', 'w') as file:\n", + " file.write(csv_content_) \n", + "\n", + "with open('data\\RQ1Percent.csv', 'w') as file:\n", + " file.write(csv_content_2) \n", + " \n", + "os.makedirs(\"images\")\n", + "histUnknown(df_all).figure.savefig('images/RQ1AHist.pdf', bbox_inches='tight')\n", + "plt.clf()\n", + "histUnknownNZ(df_all).figure.savefig('images/RQ1AHist_nz.pdf', bbox_inches='tight')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa2b81bf", + "metadata": {}, + "outputs": [], + "source": [ + "df_observed = pd.read_csv(f'data/RQ1B Observed Architecture - Summary.csv',index_col=\"Subject\").drop(columns=[\"Case\"])\n", + "df_observed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5cd591ec", + "metadata": {}, + "outputs": [], + "source": [ + "rq2_columnremap = {'# observed':'observed', '# recovered':'recovered', \"# obs ! rec\":\"obs not rec\", \"# rec ! obs\":\"rec not obs\", \"over_approx\":\"overapprox\", \"under_approx\":\"underapprox\"}\n", + "rq2_headers = [\"observed\", \"recovered\", \"overapprox\", \"underapprox\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d0ff9f94", + "metadata": {}, + "outputs": [], + "source": [ + "def to_percent(d):\n", + " return (d * 100) \n", + "def over_approx(x):\n", + " if x['observed'] == 0:\n", + " return 0\n", + " else:\n", + " return to_percent(x['rec not obs'] / x['observed'])\n", + "\n", + "def under_approx(x):\n", + " if x['observed'] == 0:\n", + " return 0\n", + " else:\n", + " return to_percent(x['obs not rec'] / x['observed'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21dbf3ac", + "metadata": {}, + "outputs": [], + "source": [ + "def process_df_rq2(df):\n", + " #df.rename(columns = rq2_columnremap, inplace = True)\n", + " df['overapprox'] = df.apply(lambda x: over_approx(x), axis=1)\n", + " df['underapprox'] = df.apply(lambda x: under_approx(x), axis=1)\n", + " return df\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01177eaf", + "metadata": {}, + "outputs": [], + "source": [ + "df_rq2_all = pd.read_csv(f'data/RQ1B Observed Architecture - Node-Level Comparision.csv')\n", + "df_rq2_all = df_rq2_all.fillna(0)\n", + "df_rq2_all = df_rq2_all[df_rq2_all[\"Subject\"] != 0].copy()\n", + "#df_rq2_all['Subject'] = df_rq2_all.apply(lambda x: x['Subject'].capitalize(), axis=1)\n", + " \n", + "#df_rq2 = df_rq2_all[df_rq2_all[\"Case\"] == \"recovered\"]\n", + "df_rq2_all.rename(columns = rq2_columnremap, inplace = True)\n", + "df_rq2 = df_rq2_all[df_rq2_all[\"Case\"] == \"recovered\"].groupby(by=[\"Subject\", \"Kind\"], as_index=False).sum()\n", + "df_rq2 = process_df_rq2(df_rq2)\n", + "df_rq2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89c3c55a", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "df_rq2_hw_all = pd.read_csv(f'data/RQ1B Observed Architecture - Comparison.csv')\n", + "df_rq2_hw_all = pd.read_csv(f'data/RQ1B Observed Architecture - Comparison.csv')\n", + "df_rq2_hw_all = df_rq2_hw_all.fillna(0)\n", + "df_rq2_hw_all.rename(columns = rq2_columnremap, inplace = True)\n", + "df_rq2_hw_all = df_rq2_hw_all[df_rq2_hw_all[\"Subject\"] != 0].copy()\n", + "#df_rq2_hw_all['Subject'] = df_rq2_hw_all.apply(lambda x: x['Subject'].capitalize(), axis=1)\n", + "#df_rq2 = df_rq2_all[df_rq2_all[\"Case\"] == \"recovered\"]\n", + "df_rq2_hw = df_rq2_hw_all[df_rq2_hw_all[\"Case\"] == \"handwritten\"].groupby(by=\"Subject\", as_index=False).sum()\n", + "\n", + "df_rq2_hw = process_df_rq2(df_rq2_hw)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13ef8c53", + "metadata": {}, + "outputs": [], + "source": [ + "df_rq2_hw_agg = df_rq2_hw_all.groupby(by=[\"Kind\"], as_index=False).sum()\n", + "df_rq2_hw_agg = process_df_rq2(df_rq2_hw_agg)\n", + "df_rq2_hw_agg['Subject'] = \"All\" \n", + "df_rq2_hw_merge = pd.concat([df_rq2_hw, df_rq2_hw_agg.groupby(by=[\"Subject\"], as_index=False).sum()])\n", + "#df_rq2_hw_merge = df_rq2_hw_merge.groupby(by=[\"Subject\"], as_index=False).sum()\n", + "df_rq2_hw_merge = process_df_rq2(df_rq2_hw_merge)\n", + "\n", + "df_rq2_hw_merge.to_csv('data/RQ2Agghw.csv', index = False, columns=[\"Subject\"]+rq2_headers)\n", + "df_rq2_hw_agg.drop(df_rq2_hw_agg[df_rq2_hw_agg.Kind == \"Nodes\"].index).to_csv('data/RQ2Kindhw.csv', index = False, columns=[\"Kind\"]+rq2_headers)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "72ffb34a", + "metadata": {}, + "outputs": [], + "source": [ + "df_rq2_models = pd.read_csv(f'data/RQ1B Observed Architecture - Models.csv')\n", + "df_rq2_models.fillna('',inplace=True)\n", + "df_rq2_models = df_rq2_models.drop_duplicates(subset=['Handwritten Node'])\n", + "df_rq2_models" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b99e9d04", + "metadata": {}, + "outputs": [], + "source": [ + "handwritten_models_total = len(df_rq2_models[\"Handwritten Node\"])\n", + "handwritten_models_core = len(df_rq2_models[df_rq2_models[\"Kind\"] == \"Core\"])\n", + "handwritten_models_simulation = len(df_rq2_models[df_rq2_models[\"Kind\"] == \"Simulation\"])\n", + "handwritten_models_python = len(df_rq2_models[df_rq2_models[\"Reason Used\"] == \"Python\"])\n", + "df_rq2_all" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b6f521c8", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "df_rq2_agg = df_rq2_all.groupby(by=[\"Kind\"], as_index=False).sum()\n", + "df_rq2_agg = process_df_rq2(df_rq2_agg)\n", + "df_rq2_agg['Subject'] = \"All\" \n", + "df_rq2_agg.to_csv('data/RQ2Kind.csv', index = False, columns=[\"Kind\"] + rq2_headers)\n", + "df_rq2_agg" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31109fb2", + "metadata": {}, + "outputs": [], + "source": [ + "df_rq2_merge = pd.concat([df_rq2, df_rq2_agg])\n", + "df_rq2_merge = df_rq2_merge.groupby(by=[\"Subject\"], as_index=False).sum()\n", + "df_rq2_merge = process_df_rq2(df_rq2_merge)\n", + "#df_rq2_merge.rename(columns = rq2_columnremap, inplace = True)\n", + "df_rq2_merge.to_csv('data/RQ2All.csv', index = False)\n", + "df_rq2_merge" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "df59b65d", + "metadata": {}, + "outputs": [], + "source": [ + "rq2_subjects = list(set(df_rq2[\"Subject\"]))\n", + "rq2_subjects.sort()\n", + "rq2_subjects" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb500a08", + "metadata": {}, + "outputs": [], + "source": [ + "rq2_subjects_ = rq2_subjects+[\"All\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9942c2f9", + "metadata": {}, + "outputs": [], + "source": [ + "df_rq_all = df_rq2_merge.groupby(by=\"Subject\").sum()\n", + "df_rq_all['overapprox'] = df_rq_all.apply(lambda x: over_approx(x), axis=1)\n", + "df_rq_all['underapprox'] = df_rq_all.apply(lambda x: under_approx(x), axis=1)\n", + "df_rq_all = df_rq_all.reindex(rq2_subjects+[\"All\"])\n", + "df_rq_all.to_csv('data/RQ2Agg.csv', index = True, columns=rq2_headers )\n", + "df_rq_all" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8afd763f", + "metadata": {}, + "outputs": [], + "source": [ + "content = f\"\\\\newcommand\\\\RQIITotalHandwrittenModels{{{int(handwritten_models_total)}}}\\n\"\n", + "content += f\"\\\\newcommand\\\\RQIITotalHandwrittenModelsCore{{{int(handwritten_models_core)}}}\\n\"\n", + "content += f\"\\\\newcommand\\\\RQIITotalHandwrittenModelsSimulation{{{int(handwritten_models_simulation)}}}\\n\"\n", + "content += f\"\\\\newcommand\\\\RQIITotalHandwrittenModelsPython{{{int(handwritten_models_python)}}}\\n\"\n", + "\n", + "for name in rq2_subjects_:\n", + " overapprox = df_rq_all[\"overapprox\"].iloc[df_rq_all.index == name][name]\n", + " content+= f\"\\\\newcommand\\\\RQII{name}Overapprox{{{overapprox:.3f}}}\\n\"\n", + " underapprox = df_rq_all[\"underapprox\"].iloc[df_rq_all.index == name][name]\n", + " content+= f\"\\\\newcommand\\\\RQII{name}Underapprox{{{underapprox:.3f}}}\\n\"\n", + " handwritten = df_rq_all[\"#handwritten\"].iloc[df_rq_all.index == name][name]\n", + " content+= f\"\\\\newcommand\\\\RQII{name}Handwritten{{{int(handwritten)}}}\\n\"\n", + " recovered = df_rq_all[\"#recovered\"].iloc[df_rq_all.index == name][name]\n", + " content+= f\"\\\\newcommand\\\\RQII{name}Recovered{{{int(recovered)}}}\\n\"\n", + " if (name != \"All\"):\n", + " false_positives = df_rq2_all[df_rq2_all[\"Subject\"] == name][\"# errors recovered\"].max() \n", + " content+= f\"\\\\newcommand\\\\RQII{name}FalsePositives{{{int(false_positives)}}}\\n\"\n", + " \n", + "for name in set(df_rq2_agg[\"Kind\"]):\n", + " name_ = name.replace(\" \", \"\")\n", + " overapprox = list(df_rq2_agg[df_rq2_agg[\"Kind\"] == name][\"overapprox\"])[0]\n", + " content+= f\"\\\\newcommand\\\\RQII{name_}Overapprox{{{overapprox:.3f}}}\\n\"\n", + " underapprox = list(df_rq2_agg[df_rq2_agg[\"Kind\"] == name][\"underapprox\"])[0]\n", + " content+= f\"\\\\newcommand\\\\RQII{name_}Underapprox{{{underapprox:.3f}}}\\n\"\n", + "print(content)\n", + "with open('RQ2_results.tex', 'w') as file:\n", + " file.write(content) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7db8f91d", + "metadata": {}, + "outputs": [], + "source": [ + "df_rq2_all" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5136e38b", + "metadata": {}, + "outputs": [], + "source": [ + "df_rq3 = pd.read_csv(f'data/RosTopicBugs - RQ3 - Results Table.csv').drop(columns=[\"Github commit message\", \"Reason for non recovery\", \"Issue\"])\n", + "df_rq3.fillna('',inplace=True)\n", + "df_rq3 = df_rq3.sort_values(by=['Bug'])\n", + "df_rq3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9435387d", + "metadata": {}, + "outputs": [], + "source": [ + "rq3_numBugs = len(df_rq3)\n", + "content = f\"\\\\newcommand\\\\RQIIINumBugs{{{rq3_numBugs}}}\\n\"\n", + "\n", + "detectInVivo = df_rq3[\"in-vivo\"].value_counts()[\"x\"]\n", + "content+= f\"\\\\newcommand\\\\RQIIIDetectInVivo{{{detectInVivo}}}\\n\"\n", + "\n", + "detectInVitro = df_rq3[\"in-vitro\"].value_counts()[\"x\"]\n", + "content+= f\"\\\\newcommand\\\\RQIIIDetectInVitro{{{detectInVitro}}}\\n\"\n", + "\n", + "detectInVitro = df_rq3[\"in-vitro\"].value_counts()[\"x\"]\n", + "numDetected = detectInVivo + detectInVitro\n", + "content+= f\"\\\\newcommand\\\\RQIIIDetect{{{numDetected}}}\\n\"\n", + "\n", + "detectInTheory = df_rq3[\"in-theory\"].value_counts()[\"x\"]\n", + "content+= f\"\\\\newcommand\\\\RQIIIDetectInTheory{{{detectInTheory}}}\\n\"\n", + "\n", + "undetectable = len(df_rq3) - detectInVivo - detectInVitro - detectInTheory\n", + "content+= f\"\\\\newcommand\\\\RQIIIUndetectable{{{undetectable}}}\\n\"\n", + " \n", + "\n", + "precision_percent = (numDetected) / rq3_numBugs * 100\n", + "content+= f\"\\\\newcommand\\\\RQIIIPrecisionPercent{{{round(precision_percent)}}}\\n\"\n", + "\n", + "precision_incl_theory_percent = (numDetected + detectInTheory) / rq3_numBugs * 100\n", + "content+= f\"\\\\newcommand\\\\RQIIIPrecisionInclTheoryPercent{{{round(precision_incl_theory_percent)}}}\\n\"\n", + "\n", + "\n", + "print(content)\n", + "with open('RQ3_results.tex', 'w') as file:\n", + " file.write(content)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69888fa3", + "metadata": {}, + "outputs": [], + "source": [ + "def bug_link(x):\n", + " bug_id = x[\"Bug\"]\n", + " bug_link = x[\"Link\"]\n", + " result = \"\\href{\"+bug_link+\"}{\"+bug_id+\"}\"\n", + " if x[\"in-vitro\"] == \"x\":\n", + " result = result+\" *\"\n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1152e463", + "metadata": {}, + "outputs": [], + "source": [ + "def detectable(x):\n", + " if x[\"in-vitro\"] == \"x\" or x[\"in-vivo\"] ==\"x\":\n", + " return \"\\checkmark\"\n", + " else:\n", + " return \"\"\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9fcdb982", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "df_rq3_latex = df_rq3.copy()\n", + "df_rq3_latex['detected'] = df_rq3_latex.apply(lambda x: detectable(x), axis=1)\n", + "df_rq3_latex['Bug'] = df_rq3_latex.apply(lambda x: bug_link(x), axis=1)\n", + "df_rq3_latex = df_rq3_latex.replace(\"x\", \"\\checkmark\")\n", + "df_rq3_latex.to_csv('data/RQ3.csv', index = False, columns=[\"Bug\", \"detected\", \"in-theory\", \"Description\"])\n", + "df_rq3_latex" + ] + } + ], + "metadata": { + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/results/data/RQ1A node model recovery results - autorally.csv b/results/data/RQ1A node model recovery results - autorally.csv new file mode 100644 index 00000000..6ced6d9a --- /dev/null +++ b/results/data/RQ1A node model recovery results - autorally.csv @@ -0,0 +1,27 @@ +system,package,node,entrypoint,time_taken,crashed,error_message,functions,statements,api_calls,unknown_api_calls,unreachable_functions,unreachable_api_calls +autorally,imu_3dm_gx4,imu_3dm_gx4,main,37.04647764,FALSE,,1,19,6,0,0,0 +autorally,joy,joy_node,main,28.74134908,FALSE,,2,12,3,0,0,0 +autorally,pointgrey_camera_driver,PointGreyCameraNodelet,pointgrey_camera_driver::PointGreyCameraNodelet::onInit,31.9545497,TRUE,static recovery process failed,,,,,, +autorally,pointgrey_camera_driver,PointGreyStereoCameraNodelet,pointgrey_camera_driver::PointGreyStereoCameraNodelet::onInit,32.53417828,FALSE,,1,10,2,0,0,0 +autorally,pointgrey_camera_driver,pointgrey_camera_node,main,26.57952634,FALSE,,1,1,1,0,0,0 +autorally,pointgrey_camera_driver,pointgrey_stereo_node,main,26.38972651,FALSE,,1,1,1,0,0,0 +autorally,pointgrey_camera_driver,pointgrey_list_cameras,main,28.29762428,FALSE,,1,0,0,0,0,0 +autorally,autorally_core,gpsHemisphereInterface,main,28.71643897,FALSE,,2,17,6,0,0,0 +autorally,autorally_core,ocs,main,110.752852,FALSE,,2,10,8,7,1,8 +autorally,autorally_core,runStop,main,28.79207032,FALSE,,2,5,2,0,0,0 +autorally,autorally_core,xbeeCoordinator,main,55.84223624,FALSE,,4,9,4,1,1,1 +autorally,autorally_core,xbeeNode,main,52.597784,FALSE,,4,11,5,1,1,1 +autorally,autorally_core,ImageRepublisher,autorally_core::ImageRepublisher::onInit,31.32483351,FALSE,,1,2,0,0,0,0 +autorally,autorally_core,StateEstimator,main,77.69470879,FALSE,,2,46,9,0,0,0 +autorally,autorally_core,AutoRallyChassis,autorally_core::AutoRallyChassis::onInit,30.16732858,FALSE,,3,14,5,1,0,0 +autorally,autorally_core,CameraTrigger,autorally_core::CameraTrigger::onInit,29.6960214,FALSE,,1,1,0,0,0,0 +autorally,autorally_core,CameraAutoBalancePtGrey,autorally_core::CameraAutoBalancePtGrey::onInit,32.23864788,FALSE,,1,0,0,0,0,0 +autorally,autorally_core,CameraAutoBalanceFLIR,autorally_core::CameraAutoBalanceFLIR::onInit,30.28305962,FALSE,,1,0,0,0,0,0 +autorally,autorally_core,WheelOdometry,main,27.58844671,FALSE,,2,11,5,0,0,0 +autorally,autorally_control,ConstantSpeedController,autorally_control::ConstantSpeedController::onInit,34.22548161,FALSE,,3,16,3,0,1,0 +autorally,autorally_control,joystickController,main,34.91734803,FALSE,,2,13,4,0,0,0 +autorally,autorally_control,gpsWaypoint,main,34.49188024,FALSE,,2,10,6,0,0,0 +autorally,autorally_control,path_integral_bf,main,113.7350314,FALSE,,1,0,0,0,0,0 +autorally,autorally_control,path_integral_nn,main,108.7799304,FALSE,,1,0,0,0,0,0 +autorally,autorally_control,path_integral_monitor,main,29.47519,FALSE,,2,3,2,0,0,0 +autorally,effort_controllers,simple_bot_hw,main,32.92168444,FALSE,,1,3,3,0,0,0 \ No newline at end of file diff --git a/results/data/RQ1A node model recovery results - autoware.csv b/results/data/RQ1A node model recovery results - autoware.csv new file mode 100644 index 00000000..d6f74f5e --- /dev/null +++ b/results/data/RQ1A node model recovery results - autoware.csv @@ -0,0 +1,231 @@ +system,package,node,entrypoint,time_taken,crashed,error_message,functions,statements,api_calls,unknown_api_calls,unreachable_functions,unreachable_api_calls +autoware,map_file,points_map_loader,main,52.82870771,FALSE,,1,12,7,0,0,0 +autoware,map_file,vector_map_loader,main,42.02924192,FALSE,,1,39,35,0,0,0 +autoware,map_file,points_map_filter,main,92.51567273,FALSE,,3,9,4,0,0,0 +autoware,obj_db,obj_downloader,main,31.38186785,FALSE,,1,2,2,0,0,0 +autoware,obj_db,obj_uploader,main,33.374706,FALSE,,1,4,4,0,0,0 +autoware,obj_db,can_uploader,main,32.9643931,FALSE,,1,2,2,0,0,0 +autoware,pos_db,pos_downloader,main,37.78230302,FALSE,,1,12,2,0,0,0 +autoware,pos_db,pos_uploader,main,35.66623817,FALSE,,1,10,4,0,0,0 +autoware,vector_map_server,vector_map_server,main,47.44666874,FALSE,,29,60,29,0,0,0 +autoware,vector_map_server,vector_map_client,main,37.67047893,FALSE,,1,8,8,0,0,0 +autoware,ymc,g30esli_interface,main,36.25676903,FALSE,,1,10,4,0,0,0 +autoware,as,pacmod_interface,main,46.73198732,FALSE,,2,10,7,0,1,6 +autoware,autoware_driveworks_gmsl_interface,autoware_driveworks_gmsl_interface_node,main,44.99867183,FALSE,,1,0,0,0,0,0 +autoware,autoware_driveworks_gmsl_interface,nodelet_autoware_driveworks_gmsl_interface,gmsl_camera::CameraNodelet::onInit,42.99224429,FALSE,,1,0,0,0,0,0 +autoware,autoware_driveworks_interface,gmsl_interface,main,32.37759631,FALSE,,1,1,1,0,0,0 +autoware,autoware_driveworks_interface,tensorrt_interface,main,31.80082782,FALSE,,1,1,1,0,0,0 +autoware,calibration_camera_lidar,calibration_test,main,77.41402414,FALSE,,2,6,3,1,1,0 +autoware,calibration_camera_lidar,calibration_toolkit,main,148.5722463,TRUE,static recovery process failed,,,,,, +autoware,calibration_camera_lidar,calibration_publisher,main,44.97319612,FALSE,,1,13,4,3,0,0 +autoware,multi_lidar_calibrator,multi_lidar_calibrator,main,79.07323172,FALSE,,1,1,1,0,0,0 +autoware,scan2image,scan2image,main,35.04271411,FALSE,,1,5,5,0,0,0 +autoware,autoware_camera_lidar_calibrator,autoware_camera_lidar_calibration_node,main,53.48361689,FALSE,,2,8,5,3,0,0 +autoware,points2image,points2vscan,main,86.82474477,FALSE,,2,19,1,0,0,0 +autoware,points2image,points2image,main,39.6089959,FALSE,,1,8,5,3,0,0 +autoware,points2image,vscan2image,main,41.59955455,FALSE,,1,7,5,2,0,0 +autoware,points2image,vscan2linelist,main,53.49387617,FALSE,,1,3,3,0,0,0 +autoware,kvaser,can_listener,main,32.2633308,FALSE,,1,0,0,0,0,0 +autoware,kvaser,can_converter,main,36.232288,FALSE,,1,2,2,0,0,0 +autoware,kvaser,can_draw,main,36.49668063,FALSE,,1,3,3,0,0,0 +autoware,garmin,garmin_gps_18x_lvc,main,41.8707496,FALSE,,2,6,3,0,0,0 +autoware,memsic,vg440_node,main,43.92999417,FALSE,,2,7,2,1,0,0 +autoware,analog_devices,adis16470_node,main,37.36749277,FALSE,,2,7,2,0,0,0 +autoware,analog_devices,adxl345_node,main,48.58543099,FALSE,,2,5,2,0,0,0 +autoware,microstrain,3dm_gx5_15_node,main,38.13897138,FALSE,,1,1,1,0,0,0 +autoware,microstrain,3dm_gx5_45_node,main,34.14461029,FALSE,,1,1,1,0,0,0 +autoware,driver,LDMRS_Example,main,467.4389766,FALSE,,1,0,0,0,0,0 +autoware,sick_ldmrs_driver,LDMRS_Example,main,464.6687051,FALSE,,1,0,0,0,0,0 +autoware,sick_ldmrs_driver,sick_ldmrs_node,main,64.1926953,FALSE,,10,13,7,4,8,4 +autoware,sick_ldmrs_tools,sick_ldmrs_object_marker,main,38.84775775,FALSE,,1,3,3,0,0,0 +autoware,sick_ldmrs_tools,sick_ldmrs_filter_layer,main,56.57944567,FALSE,,1,3,3,0,0,0 +autoware,sick_ldmrs_tools,sick_ldmrs_filter_first,main,57.65982277,FALSE,,1,3,3,0,0,0 +autoware,sick_ldmrs_tools,sick_ldmrs_filter_last,main,57.31631371,FALSE,,1,3,3,0,0,0 +autoware,sick_ldmrs_tools,sick_ldmrs_all_layer_assembler,main,77.49374364,TRUE,static recovery process failed,,,,,, +autoware,sick_ldmrs_tools,sick_ldmrs_make_organized,main,56.76811529,FALSE,,1,6,3,0,0,0 +autoware,sick_ldmrs_tools,sick_ldmrs_remove_background,main,57.3603947,FALSE,,1,5,4,0,0,0 +autoware,sick_ldmrs_tools,sick_ldmrs_print_resolution,main,55.10424927,FALSE,,1,2,2,0,0,0 +autoware,lms5xx,lms511_node,main,53.49407388,FALSE,,1,6,2,0,0,0 +autoware,ouster,ouster_ros,main,88.28001286,TRUE,,,,,,, +autoware,rslidar_driver,rslidar_driver,rslidar_driver::DriverNodelet::onInit,116.2278241,FALSE,,4,12,3,1,3,3 +autoware,rslidar_driver,rslidar_node,main,80.77630348,FALSE,,3,3,2,1,2,1 +autoware,rslidar_pointcloud,rslidar_point,rslidar_pointcloud::CloudNodelet::onInit,74.53127954,FALSE,,4,5,3,1,3,3 +autoware,rslidar_pointcloud,rscloud_node,main,76.35388337,FALSE,,3,3,2,1,2,1 +autoware,hokuyo,hokuyo_3d,main,56.57629825,FALSE,,2,11,4,0,0,0 +autoware,velodyne_laserscan,velodyne_laserscan,velodyne_laserscan::LaserScanNodelet::onInit,51.30227586,FALSE,,7,6,4,3,6,4 +autoware,velodyne_laserscan,velodyne_laserscan_node,main,38.70965872,FALSE,,5,5,3,2,4,2 +autoware,velodyne_driver,velodyne_node,main,76.8161472,FALSE,,4,12,3,1,2,1 +autoware,velodyne_driver,driver_nodelet,velodyne_driver::DriverNodelet::onInit,74.19599329,FALSE,,4,10,2,1,3,2 +autoware,velodyne_pointcloud,cloud_node,main,110.0898834,FALSE,,4,6,4,1,2,1 +autoware,velodyne_pointcloud,ringcolors_node,main,104.2999926,FALSE,,2,4,3,0,0,0 +autoware,velodyne_pointcloud,transform_node,main,187.5583,TRUE,static recovery process failed,,,,,, +autoware,vectacam,vectacam_node,main,47.96873569,FALSE,,2,6,3,1,0,0 +autoware,hexacam,hexacam_node,main,39.68821614,FALSE,,2,6,3,0,0,0 +autoware,pointgrey,grasshopper3_camera,main,36.49240415,FALSE,,3,7,1,0,1,0 +autoware,pointgrey,ladybug_camera,main,36.55061628,FALSE,,2,3,1,0,1,0 +autoware,baumer,vlg22c_cam_node,main,35.3392256,FALSE,,1,0,0,0,0,0 +autoware,points2polygon,points2polygon,main,79.00536678,FALSE,,1,6,3,0,0,0 +autoware,points_preprocessor,space_filter,main,54.39991752,FALSE,,2,11,3,1,0,0 +autoware,points_preprocessor,ring_ground_filter,main,54.28570075,FALSE,,2,14,4,3,0,0 +autoware,points_preprocessor,ray_ground_filter,main,80.01160758,FALSE,,1,1,1,0,0,0 +autoware,points_preprocessor,points_concat_filter,main,77.42156614,FALSE,,2,7,4,2,0,0 +autoware,points_preprocessor,cloud_transformer,main,70.51982459,FALSE,,2,7,3,2,0,0 +autoware,points_preprocessor,compare_map_filter,main,71.30691745,FALSE,,2,10,6,0,0,0 +autoware,points_downsampler,voxel_grid_filter,main,59.26234061,FALSE,,1,7,5,1,0,0 +autoware,points_downsampler,ring_filter,main,56.52294636,FALSE,,1,7,5,1,0,0 +autoware,points_downsampler,distance_filter,main,57.62978769,FALSE,,1,7,5,1,0,0 +autoware,points_downsampler,random_filter,main,51.80268779,FALSE,,1,7,5,1,0,0 +autoware,image_processor,image_rotator,main,38.04747984,FALSE,,2,8,3,1,0,0 +autoware,image_processor,image_rectifier,main,37.22725155,FALSE,,2,7,4,2,0,0 +autoware,sync,sync_drivers,main,32.18613619,FALSE,,1,1,1,0,0,0 +autoware,sync,sync_range_fusion,main,30.63443399,FALSE,,1,1,1,0,0,0 +autoware,sync,sync_track,main,29.70662619,FALSE,,1,1,1,0,0,0 +autoware,sync,sync_obj_reproj,main,32.85738197,FALSE,,1,1,1,0,0,0 +autoware,sync,sync_obj_fusion,main,33.43331304,FALSE,,1,1,1,0,0,0 +autoware,sync,time_monitor,main,35.07674821,FALSE,,1,1,1,0,0,0 +autoware,catvehicle,distanceEstimator,main,37.16229113,FALSE,,1,9,4,3,0,0 +autoware,point_cloud_converter,point_cloud_converter_node,main,55.80321867,FALSE,,2,6,5,4,0,0 +autoware,laser_scan_converter,laser_scan_converter_node,main,36.8476523,FALSE,,2,4,3,2,0,0 +autoware,twist_cmd_converter,twist_cmd_converter_node,main,38.12762189,FALSE,,2,4,3,2,0,0 +autoware,sample_data,sample_vector_map,main,37.02357544,FALSE,,1,2,2,0,0,0 +autoware,sample_data,sample_points_map,main,50.66918308,FALSE,,1,2,2,0,0,0 +autoware,sample_data,sample_points_map_update,main,58.51382154,FALSE,,1,3,3,0,0,0 +autoware,sample_data,sample_trajectory,main,36.36007417,FALSE,,1,2,2,0,0,0 +autoware,sample_data,sample_mobility,main,35.74306885,FALSE,,1,3,3,0,0,0 +autoware,fake_drivers,fake_camera,main,43.51354208,FALSE,,1,3,2,0,0,0 +autoware,autoware_bag_tools,nmea2kml,main,66.93464597,FALSE,,1,1,1,0,0,0 +autoware,data_preprocessor,get_Image,main,48.46427061,FALSE,,2,2,2,1,1,2 +autoware,data_preprocessor,get_PCD,main,55.97413523,FALSE,,2,2,2,1,1,2 +autoware,data_preprocessor,get_Depth,main,65.21273356,FALSE,,2,3,3,2,1,3 +autoware,model_publisher,model_publisher,main,60.68514364,FALSE,,1,11,2,1,0,0 +autoware,map_tf_generator,map_tf_generator,main,59.21625421,FALSE,,1,2,2,0,0,0 +autoware,kitti_player,kitti_player,main,60.07675532,FALSE,,1,6,6,0,0,0 +autoware,map_tools,pcd_filter,main,56.27567891,FALSE,,1,0,0,0,0,0 +autoware,map_tools,pcd_binarizer,main,51.63973381,FALSE,,1,0,0,0,0,0 +autoware,map_tools,pcd_arealist,main,50.31855698,FALSE,,1,0,0,0,0,0 +autoware,map_tools,csv2pcd,main,47.65612116,FALSE,,1,0,0,0,0,0 +autoware,map_tools,pcd2csv,main,49.47034369,FALSE,,1,0,0,0,0,0 +autoware,map_tools,map_extender,main,93.64321318,FALSE,,1,4,4,0,0,0 +autoware,map_tools,pcd_grid_divider,main,50.79181574,FALSE,,1,0,0,0,0,0 +autoware,diag_lib,watchdog_node,main,125.2563363,TRUE,static recovery process failed,,,,,, +autoware,fake_autoware_nodes,fake_publisher_node,main,57.39981913,FALSE,,2,3,2,0,0,0 +autoware,fake_autoware_nodes,fake_subscriber_node,main,58.66119346,FALSE,,2,4,3,0,0,0 +autoware,oculus_socket,oculus_sender,main,57.0072823,FALSE,,1,4,4,0,0,0 +autoware,tablet_socket,tablet_receiver,main,40.0181861,FALSE,,1,8,6,0,0,0 +autoware,tablet_socket,tablet_sender,main,34.14628225,FALSE,,1,7,6,0,0,0 +autoware,udon_socket,udon_receiver,main,33.59073092,FALSE,,1,4,1,0,0,0 +autoware,udon_socket,udon_sender,main,41.39462484,FALSE,,1,9,3,0,0,0 +autoware,vehicle_socket,vehicle_receiver,main,38.88552922,FALSE,,1,3,3,0,0,0 +autoware,vehicle_socket,vehicle_sender,main,35.33779256,FALSE,,1,2,2,0,0,0 +autoware,mqtt_socket,mqtt_sender,main,41.12006437,FALSE,,2,8,7,0,0,0 +autoware,mqtt_socket,mqtt_receiver,main,35.90728447,FALSE,,2,3,2,0,0,0 +autoware,state_machine,state_machine,main,53.05780093,FALSE,,2,6,5,0,1,4 +autoware,op_simu,Simu,main,85.82619004,FALSE,,1,0,0,0,0,0 +autoware,way_planner,way_planner,main,102.9971232,FALSE,,2,30,20,0,0,0 +autoware,op_global_planner,op_global_planner,main,86.97681766,FALSE,,2,36,26,0,0,0 +autoware,lane_planner,lane_navi,main,40.80624933,FALSE,,1,15,6,0,0,0 +autoware,lane_planner,lane_rule,main,41.26565743,FALSE,,1,22,11,0,0,0 +autoware,lane_planner,lane_stop,main,42.02865395,FALSE,,1,12,7,0,0,0 +autoware,lane_planner,lane_select,main,72.92896744,TRUE,static recovery process failed,,,,,, +autoware,freespace_planner,astar_navi,main,87.08559654,FALSE,,2,25,7,1,0,0 +autoware,decision_maker,decision_maker_node,main,195.7404787,TRUE,static recovery process failed,,,,,, +autoware,decision_maker,planner_selector_node,main,37.25806415,FALSE,,2,10,10,0,1,9 +autoware,ff_waypoint_follower,ff_waypoint_follower,main,63.78468948,TRUE,static recovery process failed,,,,,, +autoware,op_utilities,op_pose2tf,main,56.44739302,FALSE,,2,5,3,1,0,0 +autoware,op_utilities,op_data_logger,main,81.82119579,TRUE,static recovery process failed,,,,,, +autoware,op_utilities,op_bag_player,main,88.7398251,FALSE,,2,19,7,3,0,0 +autoware,op_local_planner,op_common_params,main,38.97930885,FALSE,,1,1,1,0,0,0 +autoware,op_local_planner,op_trajectory_generator,main,78.17443232,FALSE,,4,45,10,0,0,0 +autoware,op_local_planner,op_trajectory_evaluator,main,80.20629542,FALSE,,4,45,15,0,0,0 +autoware,op_local_planner,op_behavior_selector,main,74.26383259,TRUE,static recovery process failed,,,,,, +autoware,op_local_planner,op_motion_predictor,main,82.3246719,TRUE,static recovery process failed,,,,,, +autoware,lattice_planner,lattice_trajectory_gen,main,43.95889059,FALSE,,1,14,11,0,0,0 +autoware,lattice_planner,lattice_twist_convert,main,42.73541366,FALSE,,1,4,4,0,0,0 +autoware,lattice_planner,lattice_velocity_set,main,58.05230648,TRUE,static recovery process failed,,,,,, +autoware,lattice_planner,path_select,main,37.0118994,FALSE,,1,3,3,0,0,0 +autoware,dp_planner,dp_planner,main,171.7496026,FALSE,,4,79,40,3,0,0 +autoware,waypoint_follower,pure_pursuit,main,89.68281746,FALSE,,2,17,14,0,1,13 +autoware,waypoint_follower,wf_simulator,main,43.72731696,FALSE,,1,17,10,0,0,0 +autoware,waypoint_follower,twist_filter,main,38.96127961,FALSE,,1,4,4,0,0,0 +autoware,waypoint_follower,twist_gate,main,38.90805039,FALSE,,2,15,14,13,0,0 +autoware,astar_planner,velocity_set,main,134.0999271,FALSE,,3,28,18,1,0,0 +autoware,astar_planner,obstacle_avoid,main,93.79574564,FALSE,,3,39,10,0,0,0 +autoware,astar_planner,obstacle_sim,main,87.26350629,TRUE,static recovery process failed,,,,,, +autoware,waypoint_maker,waypoint_loader,main,61.90626902,FALSE,,2,6,5,0,1,4 +autoware,waypoint_maker,waypoint_saver,main,46.85671498,FALSE,,2,10,4,2,0,0 +autoware,waypoint_maker,waypoint_clicker,main,45.7328187,FALSE,,1,15,6,0,0,0 +autoware,waypoint_maker,waypoint_marker_publisher,main,45.96670079,FALSE,,1,10,10,0,0,0 +autoware,waypoint_maker,waypoint_velocity_visualizer,main,47.54275612,FALSE,,2,19,7,0,0,0 +autoware,op_simulation_package,op_car_simulator,main,101.4776319,TRUE,static recovery process failed,,,,,, +autoware,op_simulation_package,op_perception_simulator,main,82.09159197,FALSE,,2,9,5,1,0,0 +autoware,op_simulation_package,op_signs_simulator,main,80.79417936,TRUE,static recovery process failed,,,,,, +autoware,naive_motion_predict,naive_motion_predict,main,52.30098745,FALSE,,2,8,4,0,0,0 +autoware,orb_localizer,orb_mapping,main,54.44707841,FALSE,,2,5,1,0,1,0 +autoware,orb_localizer,orb_matching,main,72.85568693,FALSE,,2,6,1,0,0,0 +autoware,orb_localizer,orb_matching_pf,main,73.19511009,TRUE,static recovery process failed,,,,,, +autoware,orb_localizer,dumpmap,main,30.22965593,FALSE,,1,0,0,0,0,0 +autoware,orb_localizer,orb_mapping_offline,main,51.10199947,FALSE,,1,0,0,0,0,0 +autoware,orb_localizer,map_publisher,main,45.34920718,TRUE,static recovery process failed,,,,,, +autoware,orb_localizer,imgprocx,main,48.76562279,TRUE,static recovery process failed,,,,,, +autoware,gnss_localizer,fix2tfpose,main,43.26292332,FALSE,,1,5,4,0,0,0 +autoware,gnss_localizer,nmea2tfpose,main,55.10189297,FALSE,,2,4,3,0,1,2 +autoware,lidar_localizer,ndt_matching,main,47.51766328,FALSE,,1,19,1,0,0,0 +autoware,lidar_localizer,ndt_mapping,main,48.12292181,FALSE,,1,11,1,0,0,0 +autoware,lidar_localizer,approximate_ndt_mapping,main,46.01164848,FALSE,,1,12,1,0,0,0 +autoware,lidar_localizer,tf_mapping,main,47.48182855,FALSE,,1,6,1,0,0,0 +autoware,lidar_localizer,lazy_ndt_mapping,main,46.62040451,FALSE,,1,9,1,0,0,0 +autoware,lidar_localizer,queue_counter,main,36.04937314,FALSE,,1,3,3,0,0,0 +autoware,lidar_localizer,ndt_matching_tku,main,44.5015248,FALSE,,1,14,1,0,0,0 +autoware,lidar_localizer,ndt_mapping_tku,main,44.4427098,FALSE,,1,13,1,0,0,0 +autoware,lidar_localizer,mapping,main,47.37659927,FALSE,,1,1,1,0,0,0 +autoware,lidar_localizer,ndt_matching_monitor,main,48.10822199,FALSE,,1,1,1,0,0,0 +autoware,lidar_localizer,icp_matching,main,48.67846509,FALSE,,1,11,1,0,0,0 +autoware,autoware_connector,can_status_translator,main,55.40996689,FALSE,,2,12,6,0,1,5 +autoware,autoware_connector,can_odometry,main,57.22867647,FALSE,,2,9,3,0,1,2 +autoware,road_occupancy_processor,road_occupancy_processor,main,81.05281643,FALSE,,1,1,1,0,0,0 +autoware,object_map,laserscan2costmap,main,43.95458907,FALSE,,1,10,3,0,0,0 +autoware,object_map,points2costmap,main,44.80509988,FALSE,,1,1,1,0,0,0 +autoware,object_map,potential_field,main,49.29567775,FALSE,,2,9,1,0,0,0 +autoware,object_map,grid_map_filter,main,62.22796632,TRUE,static recovery process failed,,,,,, +autoware,object_map,wayarea2grid,main,62.92585841,TRUE,static recovery process failed,,,,,, +autoware,vision_klt_track,vision_klt_track,main,46.91017368,FALSE,,2,7,4,2,0,0 +autoware,vision_dummy_track,vision_dummy_track,main,41.14322599,FALSE,,2,4,3,0,0,0 +autoware,vision_beyond_track,vision_beyond_track,main,72.32798675,FALSE,,2,8,4,2,0,0 +autoware,vision_dpm_ttic_detect,vision_dpm_ttic_detect,main,40.61046986,FALSE,,2,13,4,1,0,0 +autoware,vision_darknet_detect,vision_darknet_detect,main,78.61286076,FALSE,,2,11,4,1,0,0 +autoware,vision_ssd_detect,vision_ssd_detect,main,44.53533666,FALSE,,2,8,1,0,0,0 +autoware,vision_segment_enet_detect,vision_segment_enet_detect,main,42.12786426,FALSE,,1,0,0,0,0,0 +autoware,vision_lane_detect,vision_lane_detect,main,40.28643201,FALSE,,1,4,3,1,0,0 +autoware,pixel_cloud_fusion,pixel_cloud_fusion,main,79.65706701,FALSE,,1,1,1,0,0,0 +autoware,range_vision_fusion,range_vision_fusion,main,95.70412101,FALSE,,1,1,1,0,0,0 +autoware,viewers,image_viewer,main,47.9243581,FALSE,,1,4,3,1,0,0 +autoware,viewers,scan_image_viewer,main,44.67232149,FALSE,,1,4,3,1,0,0 +autoware,viewers,scan_image_d_viewer,main,44.38432417,FALSE,,1,6,5,1,0,0 +autoware,viewers,points_image_viewer,main,46.01099093,FALSE,,1,5,3,2,0,0 +autoware,viewers,image_d_viewer,main,45.69574541,FALSE,,1,7,4,3,0,0 +autoware,viewers,points_image_d_viewer,main,46.32787339,FALSE,,1,9,5,4,0,0 +autoware,viewers,vscan_image_viewer,main,42.9932899,FALSE,,1,4,3,1,0,0 +autoware,viewers,vscan_image_d_viewer,main,45.18146679,FALSE,,1,9,5,4,0,0 +autoware,viewers,traffic_light_viewer,main,40.6622861,FALSE,,1,2,2,0,0,0 +autoware,detected_objects_visualizer,visualize_detected_objects,main,62.51501693,FALSE,,2,13,3,2,0,0 +autoware,detected_objects_visualizer,visualize_rects,main,77.3648074,FALSE,,2,8,4,3,0,0 +autoware,lidar_euclidean_cluster_detect,lidar_euclidean_cluster_detect,main,68.20366124,TRUE,static recovery process failed,,,,,, +autoware,lidar_fake_perception,lidar_fake_perception_node,main,146.480631,TRUE,static recovery process failed,,,,,, +autoware,lidar_naive_l_shape_detect,lidar_naive_l_shape_detect,main,95.50431541,FALSE,,2,10,3,0,0,0 +autoware,lidar_svm_detect,lidar_svm_detect,main,65.17902682,FALSE,,2,6,3,1,0,0 +autoware,trafficlight_recognizer,tl_switch,main,44.95809269,FALSE,,2,8,4,3,0,0 +autoware,trafficlight_recognizer,region_tlr,main,52.31144072,FALSE,,1,12,10,2,0,0 +autoware,trafficlight_recognizer,feat_proj,main,56.3859153,FALSE,,1,17,15,2,0,0 +autoware,trafficlight_recognizer,tlr_tuner,main,114.2910586,TRUE,static recovery process failed,,,,,, +autoware,trafficlight_recognizer,roi_extractor,main,44.85036195,FALSE,,1,7,3,1,0,0 +autoware,trafficlight_recognizer,label_maker,main,86.02608097,FALSE,,1,1,1,0,0,0 +autoware,trafficlight_recognizer,region_tlr_ssd,main,47.55264294,TRUE,static recovery process failed,,,,,, +autoware,trafficlight_recognizer,region_tlr_mxnet,main,68.50895676,FALSE,,1,0,0,0,0,0 +autoware,obj_fusion,obj_fusion,main,50.83316239,FALSE,,1,11,8,0,0,0 +autoware,lidar_pf_track,lidar_pf_track,main,42.15296701,FALSE,,2,4,3,0,0,0 +autoware,lidar_imm_ukf_pda_track,imm_ukf_pda,main,140.4030296,TRUE,static recovery process failed,,,,,, +autoware,range_fusion,range_fusion,main,47.7901649,FALSE,,1,7,5,2,0,0 +autoware,lidar_kf_track,lidar_kf_track,main,162.7678965,FALSE,,2,12,6,0,0,0 +autoware,lidar_euclidean_track,lidar_euclidean_track,main,42.52447412,FALSE,,1,6,5,0,0,0 +autoware,lidar_kf_contour_track,lidar_kf_contour_track,main,169.2671907,FALSE,,4,42,21,0,0,0 +autoware,obj_reproj,obj_reproj,main,47.40851033,FALSE,,1,9,7,2,0,0 \ No newline at end of file diff --git a/results/data/RQ1A node model recovery results - fetch.csv b/results/data/RQ1A node model recovery results - fetch.csv new file mode 100644 index 00000000..4e9db60a --- /dev/null +++ b/results/data/RQ1A node model recovery results - fetch.csv @@ -0,0 +1,95 @@ +system,package,node,entrypoint,time_taken,crashed,error_message,functions,statements,api_calls,unknown_api_calls,unreachable_functions,unreachable_api_calls +fetch,octomap,test_raycasting,main,23.28624582,FALSE,,1,0,0,0,0,0 +fetch,octomap,test_iterators,main,23.70105914,FALSE,,1,0,0,0,0,0 +fetch,octomap,test_io,main,25.61528456,FALSE,,1,0,0,0,0,0 +fetch,octomap,test_changedkeys,main,24.12076512,FALSE,,1,0,0,0,0,0 +fetch,octomap,test_scans,main,25.53613056,FALSE,,1,0,0,0,0,0 +fetch,octomap,test_color_tree,main,24.64764874,FALSE,,1,0,0,0,0,0 +fetch,octomap,color_tree_histogram,main,23.36456892,FALSE,,1,0,0,0,0,0 +fetch,octomap,test_mapcollection,main,23.08475443,FALSE,,1,0,0,0,0,0 +fetch,octomap,test_pruning,main,24.87472105,FALSE,,1,0,0,0,0,0 +fetch,octomap,unit_tests,main,23.5497094,FALSE,,1,0,0,0,0,0 +fetch,octomap,graph2tree,main,23.61608971,FALSE,,1,0,0,0,0,0 +fetch,octomap,log2graph,main,24.85571123,FALSE,,1,0,0,0,0,0 +fetch,octomap,binvox2bt,main,24.73595411,FALSE,,1,0,0,0,0,0 +fetch,octomap,bt2vrml,main,25.23439768,FALSE,,1,0,0,0,0,0 +fetch,octomap,edit_octree,main,24.17008907,FALSE,,1,0,0,0,0,0 +fetch,octomap,convert_octree,main,25.57046613,FALSE,,1,0,0,0,0,0 +fetch,octomap,eval_octree_accuracy,main,24.34917857,FALSE,,1,0,0,0,0,0 +fetch,octomap,compare_octrees,main,23.21672235,FALSE,,1,0,0,0,0,0 +fetch,octomap,simple_example,main,24.53584263,FALSE,,1,0,0,0,0,0 +fetch,octomap,normals_example,main,25.18188248,FALSE,,1,0,0,0,0,0 +fetch,octomap,intersection_example,main,25.1804082,FALSE,,1,0,0,0,0,0 +fetch,octomap,octree2pointcloud,main,24.99771885,FALSE,,1,0,0,0,0,0 +fetch,ompl,regression_test,main,56.17930964,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_RigidBodyPlanning,main,27.15694862,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_RigidBodyPlanningWithIK,main,28.97100427,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_RigidBodyPlanningWithControls,main,38.19866506,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_RigidBodyPlanningWithIntegrationAndControls,main,31.86786659,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_RigidBodyPlanningWithODESolverAndControls,main,33.96657267,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_StateSampling,main,31.08607908,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_GeometricCarPlanning,main,31.48191045,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_Point2DPlanning,main,28.68843461,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_HybridSystemPlanning,main,29.91764609,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_KinematicChainBenchmark,main,38.53024748,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_HypercubeBenchmark,main,36.59440324,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_Koules,main,219.8086417,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_PlannerData,main,34.75208744,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_ThunderLightning,main,38.49790709,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_OptimalPlanning,main,35.60250787,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_PlannerProgressProperties,main,30.98720292,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_CForestCircleGridBenchmark,main,34.76493995,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_Diagonal,main,31.51734689,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_VectorFieldConservative,main,30.04021385,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_VectorFieldNonconservative,main,28.52037466,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_ConstrainedPlanningSphere,main,43.0964221,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_ConstrainedPlanningTorus,main,44.11531658,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_ConstrainedPlanningImplicitChain,main,46.63972812,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_ConstrainedPlanningImplicitParallel,main,52.52310676,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_ConstrainedPlanningKinematicChain,main,41.32387736,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_OpenDERigidBodyPlanning,main,27.58533524,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_TriangulationDemo,main,36.53818249,FALSE,,1,0,0,0,0,0 +fetch,ompl,demo_LTLWithTriangulation,main,33.5919906,FALSE,,1,0,0,0,0,0 +fetch,map_server,map_server,main,32.48733837,FALSE,,3,10,4,0,0,0 +fetch,map_server,map_server-map_saver,main,30.3278301,FALSE,,2,3,2,0,0,0 +fetch,map_server,rtest,main,36.08158559,TRUE,static recovery process failed,,,,,, +fetch,fetch_teleop,joystick_teleop,main,38.28686864,FALSE,,7,77,7,0,0,0 +fetch,simple_grasping,basic_grasping_perception,main,83.41819022,FALSE,,2,7,4,0,0,0 +fetch,simple_grasping,grasp_planner_node,main,34.97799851,FALSE,,1,1,1,0,0,0 +fetch,slam_karto,slam_karto,main,64.59502039,FALSE,,3,44,6,0,0,0 +fetch,amcl,amcl,main,42.12683536,FALSE,,10,80,19,0,2,7 +fetch,costmap_2d,costmap_2d_markers,main,28.18948843,FALSE,,1,3,3,0,0,0 +fetch,costmap_2d,costmap_2d_cloud,main,29.27001391,FALSE,,1,4,4,0,0,0 +fetch,costmap_2d,costmap_2d_node,main,37.6511187,FALSE,,1,1,1,0,0,0 +fetch,base_local_planner,point_grid,main,27.33454338,FALSE,,1,0,0,0,0,0 +fetch,navfn,navfn_node,main,37.68016654,FALSE,,3,5,3,0,0,0 +fetch,navfn,navtest,main,23.17370713,FALSE,,1,0,0,0,0,0 +fetch,move_base,move_base_node,main,37.57953621,FALSE,,1,1,1,0,0,0 +fetch,warehouse_ros,warehouse_test_dbloader,main,32.30005989,FALSE,,1,1,1,0,0,0 +fetch,moveit_core,moveit_version,main,22.17404235,FALSE,,1,0,0,0,0,0 +fetch,moveit_core,robot_state_benchmark,main,47.6521981,FALSE,,2,4,0,0,1,0 +fetch,moveit_ros_occupancy_map_monitor,moveit_ros_occupancy_map_server,main,41.68963395,FALSE,,1,2,2,0,0,0 +fetch,moveit_ros_planning,moveit_list_request_adapter_plugins,main,54.7942555,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_planning,demo_scene,main,58.34069448,FALSE,,2,3,2,0,0,0 +fetch,moveit_ros_planning,moveit_print_planning_model_info,main,35.62495143,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_planning,moveit_print_planning_scene_info,main,56.81278983,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_planning,moveit_display_random_state,main,59.98726112,FALSE,,1,2,2,0,0,0 +fetch,moveit_ros_planning,moveit_visualize_robot_collision_volume,main,59.61917004,FALSE,,1,2,2,0,0,0 +fetch,moveit_ros_planning,moveit_evaluate_collision_checking_speed,main,58.86605917,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_planning,moveit_kinematics_speed_and_validity_evaluator,main,48.27102757,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_planning,moveit_evaluate_state_operations_speed,main,43.50336176,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_planning,moveit_publish_scene_from_text,main,59.00187091,FALSE,,1,3,3,2,0,0 +fetch,moveit_ros_planning,test_controller_manager,main,58.53468657,FALSE,,1,1,1,0,0,0 +fetch,moveit_kinematics,benchmark_ik,main,47.2139795,FALSE,,1,1,1,0,0,0 +fetch,moveit_planners_ompl,moveit_ompl_planner,main,66.63984457,FALSE,,3,6,4,0,0,0 +fetch,moveit_planners_ompl,moveit_generate_state_database,main,63.27137713,FALSE,,2,13,1,0,0,0 +fetch,moveit_ros_move_group,move_group,main,62.00375629,FALSE,,3,6,1,0,0,0 +fetch,moveit_ros_move_group,list_move_group_capabilities,main,59.90075006,FALSE,,1,0,0,0,0,0 +fetch,moveit_ros_warehouse,moveit_warehouse_broadcast,main,32.65317597,FALSE,,1,6,6,0,0,0 +fetch,moveit_ros_warehouse,moveit_save_to_warehouse,main,62.35762621,FALSE,,1,4,4,0,0,0 +fetch,moveit_ros_warehouse,moveit_warehouse_import_from_text,main,62.16216933,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_warehouse,moveit_warehouse_save_as_text,main,62.0452287,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_warehouse,moveit_init_demo_warehouse,main,60.0586758,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_warehouse,moveit_warehouse_services,main,30.69379416,FALSE,,1,11,7,0,0,0 +fetch,moveit_ros_planning_interface,demo,main,47.33001306,FALSE,,1,1,1,0,0,0 +fetch,moveit_ros_planning_interface,test_cleanup,main,47.73729154,FALSE,,1,1,1,0,0,0 \ No newline at end of file diff --git a/results/data/RQ1A node model recovery results - husky.csv b/results/data/RQ1A node model recovery results - husky.csv new file mode 100644 index 00000000..01d5f501 --- /dev/null +++ b/results/data/RQ1A node model recovery results - husky.csv @@ -0,0 +1,111 @@ +system,package,node,entrypoint,time_taken,crashed,error_message,functions,statements,api_calls,unknown_api_calls,unreachable_functions,unreachable_api_calls +husky,joint_trajectory_controller,rrbot,main,31.93531429,FALSE,,2,6,5,0,0,0 +husky,joint_trajectory_controller,rrbot_wrapping,main,32.48457419,TRUE,static recovery process failed,,,,,, +husky,move_base,move_base_node,main,36.12134457,FALSE,,1,1,1,0,0,0 +husky,navfn,navfn_node,main,36.15326573,FALSE,,3,5,3,0,0,0 +husky,navfn,navtest,main,22.41968694,FALSE,,1,0,0,0,0,0 +husky,base_local_planner,point_grid,main,28.39425486,FALSE,,1,0,0,0,0,0 +husky,costmap_2d,costmap_2d_markers,main,26.88378409,FALSE,,1,3,3,0,0,0 +husky,costmap_2d,costmap_2d_cloud,main,27.16497489,FALSE,,1,4,4,0,0,0 +husky,costmap_2d,costmap_2d_node,main,33.39065535,FALSE,,1,1,1,0,0,0 +husky,velodyne_pointcloud,cloud_node,main,207.1299994,FALSE,,2,4,3,0,0,0 +husky,velodyne_pointcloud,ringcolors_node,main,104.1199467,FALSE,,2,4,3,0,0,0 +husky,velodyne_pointcloud,transform_node,main,342.62088,TRUE,static recovery process failed,,,,,, +husky,velodyne_laserscan,velodyne_laserscan_node,main,29.84936977,FALSE,,1,1,1,0,0,0 +husky,velodyne_driver,velodyne_node,main,73.52094899,FALSE,,2,10,2,0,0,0 +husky,um7,um7_driver,main,41.05194445,FALSE,,4,27,7,0,1,0 +husky,um6,um6_driver,main,39.9725725,FALSE,,4,29,7,0,0,0 +husky,twist_mux,twist_mux,main,54.43137544,FALSE,,16,20,4,2,6,1 +husky,twist_mux,twist_marker,main,25.96213027,FALSE,,2,4,3,0,0,0 +husky,pointcloud_to_laserscan,laserscan_to_pointcloud_node,main,28.05905321,FALSE,,1,2,1,0,0,0 +husky,pointcloud_to_laserscan,pointcloud_to_laserscan_node,main,26.51344077,FALSE,,1,2,1,0,0,0 +husky,imu_transformer,imu_transformer_nodelet,imu_transformer::ImuTransformerNodelet::onInit,42.88403031,TRUE,static recovery process failed,,,,,, +husky,imu_transformer,imu_transformer_node,main,27.09895385,FALSE,,1,1,1,0,0,0 +husky,tf2_relay,tf2_relay_node,main,26.46679086,FALSE,,1,8,1,0,0,0 +husky,clock_relay,clock_relay_node,main,29.42555491,FALSE,,1,6,1,0,0,0 +husky,message_relay,message_relay_node,main,30.19529221,TRUE,static recovery process failed,,,,,, +husky,robot_localization,ekf_localization_node,main,36.23143521,FALSE,,1,1,1,0,0,0 +husky,robot_localization,ukf_localization_node,main,36.54981001,FALSE,,1,4,1,0,0,0 +husky,robot_localization,navsat_transform_node,main,34.36481367,FALSE,,1,1,1,0,0,0 +husky,robot_localization,robot_localization_listener_node,main,36.11119728,FALSE,,3,4,2,0,0,0 +husky,robot_localization,test_ros_robot_localization_listener_publisher,main,25.08651436,FALSE,,1,3,3,0,0,0 +husky,imu_filter_madgwick,imu_filter_node,main,29.8411683,FALSE,,1,1,1,0,0,0 +husky,amcl,amcl,main,43.21992139,FALSE,,10,80,19,0,2,7 +husky,microstrain_3dmgx2_imu,imu_node,main,34.36937701,FALSE,,4,18,6,3,0,0 +husky,microstrain_3dmgx2_imu,get_id,main,24.00714701,FALSE,,1,0,0,0,0,0 +husky,interactive_marker_twist_server,interactive_marker_twist_server,main,30.27602911,FALSE,,2,15,2,0,0,0 +husky,gmapping,slam_gmapping,main,92.3769332,FALSE,,6,50,10,0,3,4 +husky,gmapping,slam_gmapping_replay,main,99.79603368,FALSE,,6,50,10,0,3,5 +husky,microstrain_mips,GX4-45_Test,main,41.70643818,FALSE,,1,0,0,0,0,0 +husky,microstrain_mips,microstrain_mips_node,main,51.10188869,FALSE,,2,2,2,0,1,1 +husky,microstrain_mips,set_accel_bias_client,main,25.08917385,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_accel_bias_client,main,27.35581939,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_gyro_bias_client,main,26.65538475,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_gyro_bias_client,main,26.7813134,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_hard_iron_values_client,main,25.33321632,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_hard_iron_values_client,main,25.60239238,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,device_report_client,main,24.03624689,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,gyro_bias_capture_client,main,26.31782016,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_soft_iron_matrix_client,main,25.66466638,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_soft_iron_matrix_client,main,26.54084125,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_complementary_filter_client,main,26.93159648,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_complementary_filter_client,main,25.76239071,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_filter_euler_client,main,24.98479406,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_filter_heading_client,main,25.13505794,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_accel_bias_model_client,main,25.2021086,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_accel_adaptive_vals_client,main,26.63881735,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_sensor_vehicle_frame_trans_client,main,26.0380452,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_sensor_vehicle_frame_trans_client,main,27.08568098,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_sensor_vehicle_frame_offset_client,main,27.47939995,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_sensor_vehicle_frame_offset_client,main,26.00465848,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_reference_position_client,main,26.4750973,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_reference_position_client,main,26.06842066,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_coning_sculling_comp_client,main,25.80199298,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_coning_sculling_comp_client,main,26.51657408,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_estimation_control_flags_client,main,27.31862137,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_estimation_control_flags_client,main,27.49997659,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_dynamics_mode_client,main,26.5262861,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_dynamics_mode_client,main,26.47383581,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_basic_status_client,main,25.37998383,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_diagnostic_report_client,main,27.30734632,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_zero_angle_update_threshold_client,main,24.59487592,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_zero_angle_update_threshold_client,main,26.37234598,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_tare_orientation_client,main,26.29068826,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_accel_noise_client,main,27.43264485,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_accel_noise_client,main,27.44725552,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_gyro_noise_client,main,26.33048156,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_gyro_noise_client,main,26.33174441,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_mag_noise_client,main,25.17447951,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_mag_noise_client,main,25.12940902,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_gyro_bias_model_client,main,25.36742771,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_gyro_bias_model_client,main,26.53023033,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_accel_adaptive_vals_client,main,28.43639182,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_mag_adaptive_vals_client,main,24.75378042,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_mag_adaptive_vals_client,main,26.25002205,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,set_mag_dip_adaptive_vals_client,main,24.81570924,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_mag_dip_adaptive_vals_client,main,24.94990259,FALSE,,1,2,2,0,0,0 +husky,microstrain_mips,get_accel_bias_model_client,main,24.58292646,FALSE,,1,2,2,0,0,0 +husky,teleop_twist_joy,teleop_twist_joy_node,main,26.17593151,FALSE,,1,1,1,0,0,0 +husky,lms1xx,LMS1xx_node,main,25.41082029,FALSE,,1,6,2,0,0,0 +husky,joy,joy_node,main,30.33167997,FALSE,,2,12,3,0,0,0 +husky,husky_base,husky_node,main,72.09297137,FALSE,,3,11,2,1,0,0 +husky,ddynamic_reconfigure,fake_dynamic_reconfigure_server,main,29.95060799,FALSE,,2,2,1,0,1,0 +husky,ddynamic_reconfigure,test_bool_dynamic_reconfigure_server,main,28.4622504,FALSE,,2,2,1,0,1,0 +husky,ddynamic_reconfigure,ddynamic_reconfigure_auto_update_test,main,28.36046133,FALSE,,2,2,1,0,1,0 +husky,nmea_comms,nmea_serial_node,main,28.28179368,FALSE,,1,4,1,0,0,0 +husky,nmea_comms,nmea_socket_node,main,28.36609565,FALSE,,1,5,3,0,0,0 +husky,map_server,map_server,main,30.09322378,FALSE,,3,10,4,0,0,0 +husky,map_server,map_server-map_saver,main,27.70531133,FALSE,,2,3,2,0,0,0 +husky,map_server,rtest,main,34.29261829,TRUE,static recovery process failed,,,,,, +husky,serial,serial_example,main,20.96668223,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,autoptr_test,main,20.07644361,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,log_test,main,22.77529851,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,log_plot,main,21.67768779,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,scanstudio2carmen,main,20.68895591,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,rdk2carmen,main,22.0027517,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,configfile_test,main,21.43742684,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,scanmatch_test,main,22.55788341,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,icptest,main,23.82291184,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,gfs2log,main,21.41198342,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,gfs2rec,main,20.70605549,FALSE,,1,0,0,0,0,0 +husky,openslam_gmapping,gfs2neff,main,19.52457083,FALSE,,1,0,0,0,0,0 \ No newline at end of file diff --git a/results/data/RQ1A node model recovery results - turtlebot.csv b/results/data/RQ1A node model recovery results - turtlebot.csv new file mode 100644 index 00000000..c8fc82b1 --- /dev/null +++ b/results/data/RQ1A node model recovery results - turtlebot.csv @@ -0,0 +1,109 @@ +system,package,node,entrypoint,time_taken,crashed,error_message,functions,statements,api_calls,unknown_api_calls,unreachable_functions,unreachable_api_calls +turtlebot,zeroconf_avahi,zeroconf,main,34.64361761,FALSE,,8,18,9,0,0,0 +turtlebot,yocs_virtual_sensor,_node,main,37.0755606,FALSE,,2,17,4,0,0,0 +turtlebot,warehouse_ros,warehouse_test_dbloader,main,33.84876044,FALSE,,1,1,1,0,0,0 +turtlebot,move_base,move_base_node,main,41.48637237,FALSE,,1,1,1,0,0,0 +turtlebot,global_planner,planner,main,42.49995154,FALSE,,3,5,3,0,0,0 +turtlebot,navfn,navfn_node,main,51.8572509,FALSE,,3,5,3,0,0,0 +turtlebot,navfn,navtest,main,24.80429993,FALSE,,1,0,0,0,0,0 +turtlebot,base_local_planner,point_grid,main,55.22543608,FALSE,,1,0,0,0,0,0 +turtlebot,costmap_2d,costmap_2d_markers,main,32.14240838,FALSE,,1,3,3,0,0,0 +turtlebot,costmap_2d,costmap_2d_cloud,main,31.87836943,FALSE,,1,4,4,0,0,0 +turtlebot,costmap_2d,costmap_2d_node,main,40.07634055,FALSE,,1,1,1,0,0,0 +turtlebot,turtlebot_teleop,turtlebot_teleop_joy,main,32.06575465,FALSE,,2,9,3,0,0,0 +turtlebot,turtlebot_navigation,laser_footprint_filter,main,36.33076501,FALSE,,2,6,3,0,0,0 +turtlebot,turtlebot_actions,turtlebot_move_action_server,main,40.97831255,FALSE,,2,7,2,0,0,0 +turtlebot,turtlebot_actions,find_fiducial_pose,main,57.27761912,FALSE,,1,1,1,0,0,0 +turtlebot,stdr_gui,stdr_gui_node,main,994.9194833,FALSE,,13,25,25,9,12,24 +turtlebot,stdr_server,stdr_server_node,main,40.11096385,FALSE,,1,1,1,0,0,0 +turtlebot,stdr_server,load_map,main,35.83754915,FALSE,,1,2,2,0,0,0 +turtlebot,stdr_robot,robot_handler,main,36.27021641,FALSE,,1,1,1,0,0,0 +turtlebot,robot_pose_publisher,src/robot_pose_publisher.cpp,main,22.06013179,TRUE,src/robot_pose_publisher.cpp is not in the CMakeLists.txt of package 'robot_pose_publisher,,,,,, +turtlebot,robot_pose_ekf,robot_pose_ekf,main,81.14040899,FALSE,,3,19,7,0,0,0 +turtlebot,robot_pose_ekf,test_robot_pose_ekf,main,37.75344817,FALSE,,2,3,3,0,1,2 +turtlebot,robot_pose_ekf,test_robot_pose_ekf_zero_covariance,main,37.45302818,FALSE,,2,2,2,0,1,1 +turtlebot,realsense_camera,get_debug_info,main,31.86559278,FALSE,,1,1,1,0,0,0 +turtlebot,realsense_camera,tests_camera_core,main,56.44965759,FALSE,,1,7,7,6,0,0 +turtlebot,realsense_camera,tests_rgbd_topics,main,49.56374027,FALSE,,2,20,14,13,0,0 +turtlebot,gmapping,slam_gmapping,main,76.39285876,FALSE,,6,50,10,0,3,4 +turtlebot,gmapping,slam_gmapping_replay,main,72.39543103,FALSE,,6,50,10,0,3,5 +turtlebot,fake_localization,fake_localization,main,38.71406677,FALSE,,2,14,6,0,0,0 +turtlebot,amcl,amcl,main,45.33230546,FALSE,,10,72,19,0,2,7 +turtlebot,openni2_camera,test_wrapper,main,33.64389358,FALSE,,1,0,0,0,0,0 +turtlebot,openni2_camera,openni2_camera_node,main,32.99386033,FALSE,,1,1,1,0,0,0 +turtlebot,openni2_camera,list_devices,main,26.2697163,FALSE,,1,0,0,0,0,0 +turtlebot,openni2_camera,usb_reset,main,21.28359823,FALSE,,1,0,0,0,0,0 +turtlebot,joy,joy_node,main,35.39097405,FALSE,,2,7,2,0,0,0 +turtlebot,freenect_camera,freenect_node,main,32.14880083,FALSE,,1,1,1,0,0,0 +turtlebot,depthimage_to_laserscan,DepthImageToLaserScanNodelet,depthimage_to_laserscan::DepthImageToLaserScanNodelet::onInit,36.57992609,FALSE,,1,0,0,0,0,0 +turtlebot,depthimage_to_laserscan,depthimage_to_laserscan,main,34.16585954,FALSE,,1,1,1,0,0,0 +turtlebot,astra_camera,astra_camera_node,main,32.83507761,FALSE,,1,1,1,0,0,0 +turtlebot,astra_camera,astra_list_devices,main,26.28740557,FALSE,,1,0,0,0,0,0 +turtlebot,astra_camera,astra_test_wrapper,main,34.28307379,FALSE,,1,0,0,0,0,0 +turtlebot,astra_camera,astra_usb_reset,main,22.72828202,FALSE,,1,0,0,0,0,0 +turtlebot,map_server,map_server,main,35.59817034,FALSE,,3,10,4,0,0,0 +turtlebot,map_server,map_server-map_saver,main,32.23124737,FALSE,,2,3,2,0,0,0 +turtlebot,map_server,rtest,main,34.66167499,TRUE,static recovery process failed,,,,,, +turtlebot,kobuki_keyop,keyop,main,43.9345508,TRUE,static recovery process failed,,,,,, +turtlebot,kobuki_driver,kobuki_velocity_commands,main,24.67659665,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_driver,demo_kobuki_initialisation,main,35.34019892,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_driver,demo_kobuki_sigslots,main,37.24345705,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_driver,demo_kobuki_simple_loop,main,39.1415386,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_driver,version_info,main,35.27526671,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_driver,simple_keyop,main,35.73123152,FALSE,,1,0,0,0,0,0 +turtlebot,openslam_gmapping,gfs_simplegui,main,26.49903857,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,c-tutorial-1-depth,main,24.24651858,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,c-tutorial-2-streams,main,23.82969945,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,c-tutorial-3-pointcloud,main,24.83965142,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-tutorial-1-depth,main,24.06017122,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-tutorial-2-streams,main,22.87770586,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-tutorial-3-pointcloud,main,23.39328354,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-alignimages,main,24.19437547,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-callback,main,24.7577143,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-callback-2,main,24.79314865,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-capture,main,25.65736255,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-config-ui,main,26.34802888,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-enumerate-devices,main,23.80544658,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-headless,main,24.03252192,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-motion-module,main,27.41636969,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-multicam,main,27.00844633,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-pointcloud,main,27.19819905,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-restart,main,26.48354913,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,cpp-stride,main,25.33109217,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,F200-live-test,main,58.59044985,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,LR200-live-test,main,80.47995548,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,R200-live-test,main,81.13989046,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,SR300-live-test,main,52.94933831,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,ZR300-live-test,main,81.62207172,FALSE,,1,0,0,0,0,0 +turtlebot,librealsense,offline-test,main,34.97796265,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,ftdi_scan,main,24.14736302,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,ftdi_kobuki,main,26.31000771,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,ftdi_read_eeprom,main,27.3196976,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,ftdi_write_eeprom,main,27.7386974,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,find_devices,main,26.49713047,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,get_serial_number,main,25.26104384,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,flasher,main,24.9513551,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,reset_device,main,23.62463731,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,overwrite_serial_number,main,26.33568942,FALSE,,1,0,0,0,0,0 +turtlebot,kobuki_ftdi,unflasher,main,23.60009608,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_streams,demo_console_streams,main,25.90603771,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_streams,demo_log_streams,main,24.6990928,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_sigslots,demo_sigslots_manager,main,25.87841807,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_sigslots,demo_sigslots,main,29.20507939,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_devices,demo_serial_timeouts,main,24.15650676,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_threads,demo_thread,main,24.8071499,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_threads,demo_mutex,main,25.27288815,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_containers,demo_container_formatters,main,28.16185904,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_utilities,demo_constructors,main,24.21324883,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_formatters,demo_formatters,main,25.63631217,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_converters,demo_float_converters,main,24.21090244,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_type_traits,ecl_detect_sizes,main,25.17908091,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_time,ecl_time_example_random_number_generator,main,25.80720583,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_time,ecl_time_example_sleep,main,23.25120703,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_time_lite,demo_time_functions,main,23.88748899,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_exceptions,demo_exceptions,main,24.53742143,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_exceptions,demo_exception_tracer,main,25.24064064,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_errors,ecl_demo_errors,main,24.55347713,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_config,ecl_detect_endian,main,27.60332562,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_config,ecl_detect_posix,main,26.79697217,FALSE,,1,0,0,0,0,0 +turtlebot,ecl_command_line,demo_command_line,main,27.81837559,FALSE,,1,0,0,0,0,0 \ No newline at end of file diff --git a/results/data/RQ1A.csv b/results/data/RQ1A.csv new file mode 100644 index 00000000..bd67ff3a --- /dev/null +++ b/results/data/RQ1A.csv @@ -0,0 +1,7 @@ +System,API Calls,Percent of Unknown API Calls,Unreachable Functions,Unreachable API Calls +AutoRally,75,13.333333333333334,4,10 +Autoware,869,14.729574223245109,50,74 +Fetch,103,1.9417475728155338,3,7 +Husky,225,2.666666666666667,19,18 +TurtleBot,158,17.72151898734177,22,43 +All,1321,13.171839515518545,88,129 diff --git a/results/data/RQ1Along.csv b/results/data/RQ1Along.csv new file mode 100644 index 00000000..6aac131e --- /dev/null +++ b/results/data/RQ1Along.csv @@ -0,0 +1,7 @@ +System,API Calls,Percent of Unknown API Calls,Nodes,Percent of Unknown Nodes +AutoRally,75,13.333333333333334,25,16.0 +Autoware,869,14.729574223245109,205,31.70731707317073 +Fetch,103,1.9417475728155338,93,1.0752688172043012 +Husky,225,2.666666666666667,105,2.857142857142857 +TurtleBot,158,17.72151898734177,105,2.857142857142857 +All,1321,13.171839515518545,504,15.079365079365079 diff --git a/results/data/RQ1B Observed Architecture - Comparison.csv b/results/data/RQ1B Observed Architecture - Comparison.csv new file mode 100644 index 00000000..2babc382 --- /dev/null +++ b/results/data/RQ1B Observed Architecture - Comparison.csv @@ -0,0 +1,51 @@ +Subject,Case,Kind,# observed,# recovered,# obs ! rec,# rec ! obs,over_approx,under_approx,# errs observed,# errors recovered,overlap matches,#handwritten,#recovered,# placeholders +AutoRally,all,Nodes,11,12,0,1,0.09090909091,0,6,8,FALSE,8,4,0 +AutoRally,all,Publishers,44,44,0,0,0,0,,,,,, +AutoRally,all,Subscribers,28,29,0,1,0.03571428571,0,,,,,, +AutoRally,all,Providers,37,38,0,1,0.02702702703,0,,,,,, +AutoRally,all,Action Clients,0,0,0,0,NaN,NaN,,,,,, +AutoRally,all,Action Servers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,handwritten,Publishers,39,39,0,0,0,0,,,,,, +AutoRally,handwritten,Subscribers,23,24,0,1,0.04347826087,0,,,,,, +AutoRally,handwritten,Providers,37,38,0,1,0.02702702703,0,,,,,, +AutoRally,handwritten,Action Clients,0,0,0,0,NaN,NaN,,,,,, +AutoRally,handwritten,Action Servers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,recovered,Publishers,5,5,0,0,0,0,,,,,, +AutoRally,recovered,Subscribers,5,5,0,0,0,0,,,,,, +AutoRally,recovered,Providers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +AutoRally,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +,,,,,,,,,,,,,, +Husky,all,Nodes,12,11,2,1,0.08333333333,0.1666666667,2,9,FALSE,8,3,0 +Husky,all,Publishers,22,27,6,11,0.5,0.2727272727,,,,,, +Husky,all,Subscribers,18,20,4,6,0.3333333333,0.2222222222,,,,,, +Husky,all,Providers,43,46,3,6,0.1395348837,0.06976744186,,,,,, +Husky,all,Action Clients,0,0,0,0,NaN,NaN,,,,,, +Husky,all,Action Servers,0,1,0,1,NaN,NaN,,,,,, +Husky,handwritten,Publishers,13,21,2,10,0.7692307692,0.1538461538,,,,,, +Husky,handwritten,Subscribers,12,17,1,6,0.5,0.08333333333,,,,,, +Husky,handwritten,Providers,39,42,3,6,0.1538461538,0.07692307692,,,,,, +Husky,handwritten,Action Clients,0,0,0,0,NaN,NaN,,,,,, +Husky,handwritten,Action Servers,0,1,0,1,NaN,NaN,,,,,, +Husky,recovered,Publishers,7,6,2,1,0.1428571429,0.2857142857,,,,,, +Husky,recovered,Subscribers,4,3,1,0,0,0.25,,,,,, +Husky,recovered,Providers,4,4,0,0,0,0,,,,,, +Husky,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +Husky,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +,,,,,,,,,,,,,, +TurtleBot,all,Nodes,13,14,1,2,0.1538461538,0.07692307692,2,2,TRUE,8,4,0 +TurtleBot,all,Publishers,42,39,5,2,0.04761904762,0.119047619,,,,,, +TurtleBot,all,Subscribers,31,28,5,2,0.06451612903,0.1612903226,,,,,, +TurtleBot,all,Providers,35,34,1,0,0,0.02857142857,,,,,, +TurtleBot,all,Action Clients,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,all,Action Servers,1,1,0,0,0,0,,,,,, +TurtleBot,handwritten,Publishers,31,29,3,1,0.03225806452,0.09677419355,,,,,, +TurtleBot,handwritten,Subscribers,13,12,2,1,0.07692307692,0.1538461538,,,,,, +TurtleBot,handwritten,Providers,31,30,1,0,0,0.03225806452,,,,,, +TurtleBot,handwritten,Action Clients,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,handwritten,Action Servers,1,1,0,0,0,0,,,,,, +TurtleBot,recovered,Publishers,4,5,0,1,0.25,0,,,,,, +TurtleBot,recovered,Subscribers,2,2,1,1,0.5,0.5,,,,,, +TurtleBot,recovered,Providers,4,4,0,0,0,0,,,,,, +TurtleBot,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, \ No newline at end of file diff --git a/results/data/RQ1B Observed Architecture - Models.csv b/results/data/RQ1B Observed Architecture - Models.csv new file mode 100644 index 00000000..e514481f --- /dev/null +++ b/results/data/RQ1B Observed Architecture - Models.csv @@ -0,0 +1,22 @@ +Handwritten Node,Type,Kind,Reason Used +spawn_turtlebot_model,spawner,Simulation,Loads robot model +gazebo_gui,,Simulation, +robot_state_publisher,,Core,Clang parsing issue +gazebo,,Simulation, +cmd_vel_mux,,Core,Reads interfaces from configuration parameters +move_base,,Core,Plugin architecture +spawn_platform,spawner,Simulation,Loads Gazebo Plugins +gazebo_gui,,Simulation, +autorally_state_publisher,,Simulation,Python +gazebo,,Simulation, +autorally_controller,,Simulation,Python +ground_truth_republisher,,Simulation,Python +controller_spawner,spawner,Simulation, +move_base,,Core,Plugin architecture +robot_state_publisher,,Core,Clang parsing issue +gazebo,,Simulation,Complex system +twist_mux,,Core,Reads interfaces from configuration parameters +base_controller_spawner,spawner,Simulation,q +spawn_husky_model,spawner,Simulation,Loads gazebo plugins +gazebo_gui,,Simulation,Complex system +twist_marker_server,,,Uses third party library not processed in source path. \ No newline at end of file diff --git a/results/data/RQ1B Observed Architecture - Node-Level Comparision.csv b/results/data/RQ1B Observed Architecture - Node-Level Comparision.csv new file mode 100644 index 00000000..870c12d6 --- /dev/null +++ b/results/data/RQ1B Observed Architecture - Node-Level Comparision.csv @@ -0,0 +1,89 @@ +Subject,Node,Case,Kind,# observed,# recovered,# obs ! rec,# rec ! obs,over_approx,under_approx,# errs observed,# errors recovered,overlap matches,#handwritten,#recovered,# placeholders +,,,,,,,,,,,,,,, +AutoRally,/joy_node,recovered,Publishers,1,1,0,0,0,0,6,8,FALSE,8,4,0 +AutoRally,/joy_node,recovered,Subscribers,1,1,0,0,0,0,,,,,, +AutoRally,/joy_node,recovered,Providers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/joy_node,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/joy_node,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/autorally_core_manager,recovered,Publishers,1,1,0,0,0,0,,,,,, +AutoRally,/autorally_core_manager,recovered,Subscribers,2,2,0,0,0,0,,,,,, +AutoRally,/autorally_core_manager,recovered,Providers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/autorally_core_manager,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/autorally_core_manager,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/waypointFollower,recovered,Publishers,3,3,0,0,0,0,,,,,, +AutoRally,/waypointFollower,recovered,Subscribers,2,2,0,0,0,0,,,,,, +AutoRally,/waypointFollower,recovered,Providers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/waypointFollower,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/waypointFollower,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/ConstantSpeedController,recovered,Publishers,1,1,0,0,NaN,NaN,,,,,, +AutoRally,/ConstantSpeedController,recovered,Subscribers,2,2,0,0,NaN,NaN,,,,,, +AutoRally,/ConstantSpeedController,recovered,Providers,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/ConstantSpeedController,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +AutoRally,/ConstantSpeedController,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +Husky,/amcl,recovered,Publishers,2,3,0,1,0.5,0,2,5,FALSE,8,4,0 +Husky,/amcl,recovered,Subscribers,3,3,0,0,0,0,,,,,, +Husky,/amcl,recovered,Providers,3,3,0,0,0,0,,,,,, +Husky,/amcl,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +Husky,/amcl,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +Husky,/map_server,recovered,Publishers,2,2,0,0,0,0,,,,,, +Husky,/map_server,recovered,Subscribers,0,0,0,0,NaN,NaN,,,,,, +Husky,/map_server,recovered,Providers,1,1,0,0,0,0,,,,,, +Husky,/map_server,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +Husky,/map_server,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +Husky,/twist_marker_server,recovered,Publishers,3,1,2,0,0,0.6666666667,,,,,, +Husky,/twist_marker_server,recovered,Subscribers,1,0,1,0,0,1,,,,,, +Husky,/twist_marker_server,recovered,Providers,0,0,0,0,NaN,NaN,,,,,, +Husky,/twist_marker_server,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +Husky,/twist_marker_server,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,, +TurtleBot,/bumper2pointcloud,recovered,Publishers,1,1,0,0,NaN,NaN,2,2,TRUE,8,4,0 +TurtleBot,/bumper2pointcloud,recovered,Subscribers,1,1,0,0,NaN,NaN,,,,,, +TurtleBot,/bumper2pointcloud,recovered,Providers,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/bumper2pointcloud,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/bumper2pointcloud,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/depthimage_to_laserscan,recovered,Publishers,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/depthimage_to_laserscan,recovered,Subscribers,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/depthimage_to_laserscan,recovered,Providers,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/depthimage_to_laserscan,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/depthimage_to_laserscan,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/map_server,recovered,Publishers,2,2,0,0,0,0,,,,,, +TurtleBot,/map_server,recovered,Subscribers,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/map_server,recovered,Providers,1,1,0,0,0,0,,,,,, +TurtleBot,/map_server,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/map_server,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/amcl,recovered,Publishers,2,3,0,1,0.5,0,,,,,, +TurtleBot,/amcl,recovered,Subscribers,2,2,1,1,0.5,0.5,,,,,, +TurtleBot,/amcl,recovered,Providers,3,3,0,0,0,0,,,,,, +TurtleBot,/amcl,recovered,Action Clients,0,0,0,0,NaN,NaN,,,,,, +TurtleBot,/amcl,recovered,Action Servers,0,0,0,0,NaN,NaN,,,,,, \ No newline at end of file diff --git a/results/data/RQ1B Observed Architecture - Summary.csv b/results/data/RQ1B Observed Architecture - Summary.csv new file mode 100644 index 00000000..59e16f58 --- /dev/null +++ b/results/data/RQ1B Observed Architecture - Summary.csv @@ -0,0 +1,6 @@ +Subject,Case,#Nodes,#Topics,#Services,#Actions,#Errors +Autorally,Observed,11,101,63,0,6 +Fetch (Pick in place),Observed,10,188,94,12,3 +Fetch (Move and pick),Observed,15,16,,10,2 +Husky,Observed,12,53,53,0,3 +Turtlebot,Observed,13,100,59,1,5 \ No newline at end of file diff --git a/results/data/RQ1Percent.csv b/results/data/RQ1Percent.csv new file mode 100644 index 00000000..24d7fcab --- /dev/null +++ b/results/data/RQ1Percent.csv @@ -0,0 +1,7 @@ +System,API Calls,Percent of Unknown API Calls,Nodes,Percent of Unknown Nodes +AutoRally,75,13.333333333333334,9.09\% of 44,13.333333333333334 +Autoware,869,14.729574223245109,14.12\% of 354,8.51553509781358 +Fetch,103,1.9417475728155338,2.44\% of 123,6.796116504854369 +Husky,225,2.666666666666667,11.31\% of 168,8.0 +TurtleBot,158,17.72151898734177,13.66\% of 161,27.21518987341772 +All,1321,13.171839515518545,11.31\% of 778,9.765329295987888 diff --git a/results/data/RQ1SystemOverview.csv b/results/data/RQ1SystemOverview.csv new file mode 100644 index 00000000..088efcee --- /dev/null +++ b/results/data/RQ1SystemOverview.csv @@ -0,0 +1,6 @@ +System,Stars,Lines of XML,LoC,Bugs +\href{https://github.com/AutoRally/autorally/tree/c2692f2}{AutoRally},638,43455,190340,7 +\href{https://github.com/Autoware-AI/autoware.ai/tree/1.10.0}{Autoware},4985,30771,250509,13 +\href{https://github.com/fetchrobotics/fetch_ros/tree/0.8.3}{Fetch},126,149664,434022,0 +\href{https://github.com/husky/husky/tree/0.4.10}{Husky},264,54699,876405,6 +\href{https://github.com/turtlebot/turtlebot/tree/2.4.2}{TurtleBot},239,1237887,1596546,2 diff --git a/results/data/RQ2Agg.csv b/results/data/RQ2Agg.csv new file mode 100644 index 00000000..a83963b9 --- /dev/null +++ b/results/data/RQ2Agg.csv @@ -0,0 +1,5 @@ +Subject,observed,recovered,overapprox,underapprox +AutoRally,13.0,13.0,0.0,0.0 +Husky,15.0,13.0,6.666666666666667,20.0 +TurtleBot,12.0,13.0,16.666666666666664,8.333333333333332 +All,40.0,39.0,7.5,10.0 diff --git a/results/data/RQ2Agghw.csv b/results/data/RQ2Agghw.csv new file mode 100644 index 00000000..d96e88e6 --- /dev/null +++ b/results/data/RQ2Agghw.csv @@ -0,0 +1,5 @@ +Subject,observed,recovered,overapprox,underapprox +AutoRally,99.0,101.0,2.0202020202020203,0.0 +Husky,64.0,81.0,35.9375,9.375 +TurtleBot,76.0,72.0,2.631578947368421,7.894736842105263 +All,611.0,632.0,10.474631751227497,7.037643207855974 diff --git a/results/data/RQ2All.csv b/results/data/RQ2All.csv new file mode 100644 index 00000000..2e9ea8aa --- /dev/null +++ b/results/data/RQ2All.csv @@ -0,0 +1,5 @@ +Subject,observed,recovered,obs not rec,rec not obs,overapprox,underapprox,# errs observed,# errors recovered,#handwritten,#recovered,# placeholders +All,40.0,39.0,4.0,3.0,7.5,10.0,10.0,15.0,24.0,12.0,0.0 +AutoRally,13.0,13.0,0.0,0.0,0.0,0.0,6.0,8.0,8.0,4.0,0.0 +Husky,15.0,13.0,3.0,1.0,6.666666666666667,20.0,2.0,5.0,8.0,4.0,0.0 +TurtleBot,12.0,13.0,1.0,2.0,16.666666666666664,8.333333333333332,2.0,2.0,8.0,4.0,0.0 diff --git a/results/data/RQ2Kind.csv b/results/data/RQ2Kind.csv new file mode 100644 index 00000000..5b3fb2dd --- /dev/null +++ b/results/data/RQ2Kind.csv @@ -0,0 +1,6 @@ +Kind,observed,recovered,overapprox,underapprox +Action Clients,0.0,0.0,0.0,0.0 +Action Servers,0.0,0.0,0.0,0.0 +Providers,8.0,8.0,0.0,0.0 +Publishers,18.0,18.0,11.11111111111111,11.11111111111111 +Subscribers,14.0,13.0,7.142857142857142,14.285714285714285 diff --git a/results/data/RQ2Kindhw.csv b/results/data/RQ2Kindhw.csv new file mode 100644 index 00000000..ac9a3752 --- /dev/null +++ b/results/data/RQ2Kindhw.csv @@ -0,0 +1,6 @@ +Kind,observed,recovered,overapprox,underapprox +Action Clients,0.0,0.0,0.0,0.0 +Action Servers,2.0,4.0,100.0,0.0 +Providers,230.0,236.0,6.086956521739131,3.4782608695652173 +Publishers,207.0,215.0,12.560386473429952,8.695652173913043 +Subscribers,136.0,140.0,13.23529411764706,10.294117647058822 diff --git a/results/data/RQ3.csv b/results/data/RQ3.csv new file mode 100644 index 00000000..9bf7c155 --- /dev/null +++ b/results/data/RQ3.csv @@ -0,0 +1,21 @@ +Bug,detected,in-theory,Description +\href{https://github.com/AutoRally/autorally/commit/8ae7307299c48266ddf1bfede1c2256bafc94259}{autorally-01} *,\checkmark,,Inconsistent topic names +\href{https://github.com/AutoRally/autorally/commit/d39ac4d75d6865fa5269ff65d1d09dd83c90cc9b}{autorally-02},,\checkmark,Topic name variable ignored +\href{https://github.com/AutoRally/autorally/commit/60a9514dc328744da3e1842639d210b195e6d331}{autorally-03} *,\checkmark,,Incorrect topic remapping +\href{https://github.com/AutoRally/autorally/commit/63106bcaed7306a51c3bb8b4a165f28e3fbaae26}{autorally-04} *,\checkmark,,Incorrect topic remapping +\href{https://github.com/AutoRally/autorally/commit/5366f48da3ff6b19bf493d3aed39f37a02c950e6}{autorally-05},,\checkmark,Incorrect parameter path +\href{https://github.com/Autoware-AI/autoware.ai/commit/c2a090dec2101be2788ecb607102fa9210e24737}{autoware-01},\checkmark,,Inconsistent topic names +\href{https://github.com/Autoware-AI/autoware.ai/commit/84169473a3f72aea8a400464f5b673f3c77c6b8c}{autoware-02},,,Dangling connector +\href{https://github.com/Autoware-AI/autoware.ai/commit/3f29d183761d8799b176b18efc1f34d7ab1fde5c}{autoware-03},,\checkmark,Topic name typo +\href{https://github.com/Autoware-AI/autoware.ai/commit/2fbad6d64f9d71e4b1b5e1de9008ca63f3b44fa1}{autoware-04},,,Inconsistent topic names +\href{https://github.com/Autoware-AI/autoware.ai/commit/37b9feba82e6a6fabfa689fcf9d210c3c8f287f6}{autoware-05},,\checkmark,Inconsistent topic names +\href{https://github.com/Autoware-AI/autoware.ai/commit/a2ab41dafe76579a76ad23f92f8f4992b701433b}{autoware-09},,\checkmark,Topic name typo +\href{https://github.com/Autoware-AI/autoware.ai/commit/939ef1836bcdf0ff2a6c98d1c1ced940b0e242dd}{autoware-10},,,Dangling connector +\href{https://github.com/Autoware-AI/autoware.ai/commit/2a3f292eb451ac946959a3a20490427f0d2f764d}{autoware-11},\checkmark,,Inconsistent topic names +\href{https://github.com/husky/husky/commit/97c5280b151665704f8f8e3beecb3e6e89ea14ae}{husky-01},,\checkmark,Incorrect topic remapping +\href{https://github.com/husky/husky/commit/cd9c5a12ebb733266fb33a32dabefbebef3ffcef}{husky-02} *,\checkmark,,Inconsistent topic names +\href{https://github.com/husky/husky/commit/23c259f3340fbab901d3fe5d8fd6577e99d6e430}{husky-03},,\checkmark,Inconsistent topic names +\href{https://github.com/husky/husky/commit/8e1fd887fa89dc5f8c0d1056b1e6fd6e4c5507d0}{husky-04} *,\checkmark,,Inconsistent topic names +\href{https://github.com/husky/husky/commit/a35c2530a1d17b5c5376f4b0eb9dd022c884da1c}{husky-06} *,\checkmark,,Inconsistent topic names +\href{https://github.com/turtlebot/turtlebot/commit/3e32933c829e308600707a9f971334d13d1cbe19}{turtlebot-01},,\checkmark,Incorrect topic remapping +\href{https://github.com/turtlebot/turtlebot/commit/09dc5f87c81ca66b926dc27bd0d0d2efd9323048}{turtlebot-03},,,Incorrect topic remapping diff --git a/results/data/RosTopicBugs - RQ3 - Results Table.csv b/results/data/RosTopicBugs - RQ3 - Results Table.csv new file mode 100644 index 00000000..78718d87 --- /dev/null +++ b/results/data/RosTopicBugs - RQ3 - Results Table.csv @@ -0,0 +1,21 @@ +Bug,in-vivo,in-vitro,in-theory,Description,Long Description,Github commit message,Reason for non recovery,Issue,Link +autoware-01,x,,,Inconsistent topic names,"Misconfigured topic names: The topics ''point_class"", ""line_class"", and ""vector_class"" ",Fix codes to use map_file messages and old vector_map_info topics ,,,https://github.com/Autoware-AI/autoware.ai/commit/c2a090dec2101be2788ecb607102fa9210e24737 +autoware-02,,,,Dangling connector,"Dangling connector ""odom_pose"". Can't recover because of complex string manipulation.",Fix subscribers which subscribes unused topics,,,https://github.com/Autoware-AI/autoware.ai/commit/84169473a3f72aea8a400464f5b673f3c77c6b8c +autorally-01,,x,,Inconsistent topic names,Rename of publisher /pose_estimate_new instead of /pose_estimate,Fixes state estimator topic remapping.,,,https://github.com/AutoRally/autorally/commit/8ae7307299c48266ddf1bfede1c2256bafc94259 +autorally-02,,,x,Topic name variable ignored,"Constant ""/pose_estimate"" in code instead of the topic name from the parameter",updated autorally_plant to pull state estimate topic name from launch…,AST Merge,https://github.com/rosqual/rosdiscover-evaluation/issues/84,https://github.com/AutoRally/autorally/commit/d39ac4d75d6865fa5269ff65d1d09dd83c90cc9b +autorally-03,,x,,Incorrect topic remapping,The topics camera/left and camera/right were not remapped correctly to left_camera and right_camera,,AST merge issue in-vivo,,https://github.com/AutoRally/autorally/commit/60a9514dc328744da3e1842639d210b195e6d331 +autorally-04,,x,,Incorrect topic remapping,The topic image was not remapped correctly to (arg side)_camera/image_diagnostic,Adds remap for camera driver's /image topic to /(side)_camera/image_diagnostic,Only duplicatable on real robots -- might be able to reproduce it,,https://github.com/AutoRally/autorally/commit/63106bcaed7306a51c3bb8b4a165f28e3fbaae26 +autorally-05,,,x,Incorrect parameter path,Parameter path_topic to /mppi_opponent_controller/... renamed,Fixed a typo in the mppi controller launch file. The mppi controller...,AST merge,https://github.com/rosqual/rosdiscover-evaluation/issues/86,https://github.com/AutoRally/autorally/commit/5366f48da3ff6b19bf493d3aed39f37a02c950e6 +autoware-03,,,x,Topic name typo,"Node ""velocity_set"" is subscribing to topic ""base_waypoint"" instead of ""base_waypoints"" (published by ""lane_select"") since it was renamed",chaged topic name,Build error,Preventing in-vivo:https://github.com/rosqual/rosdiscover-evaluation/issues/744,https://github.com/Autoware-AI/autoware.ai/commit/3f29d183761d8799b176b18efc1f34d7ab1fde5c +autoware-05,,,x,Inconsistent topic names,"topic name was changed to ""/detection/object_tracker/objects"" in config file",Change RTM default topic to match UKF node launch file,Error with ROS configuration in version?,https://github.com/rosqual/rosdiscover-evaluation/issues/65,https://github.com/Autoware-AI/autoware.ai/commit/37b9feba82e6a6fabfa689fcf9d210c3c8f287f6 +autoware-09,,,x,Topic name typo,"The temporary topic name ""image_obj_tracked_"" changed to ""image_obj_tracked""",modify correct topic name in sync,,,https://github.com/Autoware-AI/autoware.ai/commit/a2ab41dafe76579a76ad23f92f8f4992b701433b +autoware-10,,,,Dangling connector,Just a dangling connector. Won't detect.,,,,https://github.com/Autoware-AI/autoware.ai/commit/939ef1836bcdf0ff2a6c98d1c1ced940b0e242dd +autoware-11,x,,,Inconsistent topic names,The waypoint_clicker was subscribing to topic clicked_point instead of initialpose,Fix subscribing topic,,,https://github.com/Autoware-AI/autoware.ai/commit/2a3f292eb451ac946959a3a20490427f0d2f764d +husky-01,,,x,Incorrect topic remapping,The remap from the scan topic for the laserscanner node was incorrect,Corrected the kinect scan topic name so it matches the laser scanner,nodelet.load,https://github.com/rosqual/rosdiscover-evaluation/issues/89,https://github.com/husky/husky/commit/97c5280b151665704f8f8e3beecb3e6e89ea14ae +husky-02,,x,,Inconsistent topic names,"The imu topic name in an xacro file was ""imu/data"" instead of ""imu/data_compass""",RP-248 fix topic name for imu ,,,https://github.com/husky/husky/commit/cd9c5a12ebb733266fb33a32dabefbebef3ffcef +husky-03,,,x,Inconsistent topic names,"The topic ""imu_filtered/data"" was incorrectly referenced as ""imu/data"" in a yaml file", RP-271 Remap imu topic ,recovery relies on object state [fundamental issue!]; libraries issue; complex use of templated classes,https://github.com/rosqual/rosdiscover-evaluation/issues/91,https://github.com/husky/husky/commit/23c259f3340fbab901d3fe5d8fd6577e99d6e430 +husky-04,,x,,Inconsistent topic names,The topic imu/data_compass was renamed to imu/data, update imu topic ,,,https://github.com/husky/husky/commit/8e1fd887fa89dc5f8c0d1056b1e6fd6e4c5507d0 +husky-06,,x,,Inconsistent topic names,Renames topic narrow_scan to scan o connect to amcl,Merge pull request #7 from husky/lidar_navigation,,,https://github.com/husky/husky/commit/a35c2530a1d17b5c5376f4b0eb9dd022c884da1c +turtlebot-01,,,x,Incorrect topic remapping,,add depth argument to configure scan_processing. With this configurat,,,https://github.com/turtlebot/turtlebot/commit/3e32933c829e308600707a9f971334d13d1cbe19 +turtlebot-03,,,,Incorrect topic remapping,Can't recover. Couldn't reproduce roscon for multiple robots.,Fix mapping for Qt teleop,Used in python code and with multiple robots,,https://github.com/turtlebot/turtlebot/commit/09dc5f87c81ca66b926dc27bd0d0d2efd9323048 +autoware-04,,,,Inconsistent topic names,Can't recover. Topic name uses string manipulation.,,,,https://github.com/Autoware-AI/autoware.ai/commit/2fbad6d64f9d71e4b1b5e1de9008ca63f3b44fa1