Simulationsbasierte Qualitätssicherung für Software Systeme

Simulationsbasierte Qualitätssicherung für Software Systeme

Aus der Sicht eines Projektmanagers, der ein Software-Projekt leitet, ist es wichtig verschiedene Implementationsstrategien, die den Entwicklungsprozess vorantreiben und verbessern, in Betracht zu ziehen. Es existieren mehrere Faktoren, die den Software-Entwicklungs-Prozess und die damit verbundene Qualität des geschaffenen Produkts beeinflussen. Der Manager muss die Ressourceneinteilung (inklusive der Anzahl und Aufgaben der Entwickler) planen, welche technischen Grundlagen zu verfolgen sind und wie viel Zeit in die verschiedenen Projektphasen wie Design, Implementation und Test investiert werden soll. Entscheidungen, die die möglichen Richtungen im Projekt betreffen, müssen mit den erwarteten Resultaten und Anforderungen übereinstimmen.

Wir möchten ein Tool für die Simulation von Software-Entwicklungsprozessen schaffen, das Entscheidungshilfen für Manager bereitstellt. Alternativen und Lösungswege können simuliert werden, was uns erlaubt, die beste Alternative für die Prävention von möglichen Problemen durch Änderung der Vorgehensweise zu identifizieren. Die Simulation soll zum Beispiel berücksichtigen, mehr Zeit fürs Testen aufzuwenden, Teile der Software-Architektur zu ändern oder Parameter, die die Arbeit innerhalb des Entwickler-Teams beeinflussen. Somit lassen sich verschiedene Entwicklungsstrategien simulieren.

Software Evolution und Prognose

Mit der Einführung des Begriffs Software Evolution und der Veröffentlichung von Lehmans Gesetzen der Software Evolution begann die Erforschung sich stetig ändernder Software. Diese Veränderungen werden verursacht durch die sich stetig ändernden Entwicklungs- und Einsatzumgebungen, an die sich eine Software anpassen muss. Die Verfügbarkeit von großen Open-Source Projekten und den zugehörigen Software Versionen, sowie von der Historie von Versionsmanagementsystemen, Issue-Tracking Systemen und Mailing-Listen ist ein großer Vorteil beim Untersuchen von Software Evolution.

Durch das Mining dieser Softwarearchive kann man viel über den laufenden Entwicklungsprozess und die Auslöser für Codeveränderungen sowie das Verhalten der am Projekt arbeitenden Entwickler erfahren. Basierend auf den Resultaten des Mining-Prozesses werden wir das beobachtete Entwicklerverhalten in unserer Simulation berücksichtigen. Für die Voraussage der Evolution von Software ist es üblich sich Techniken des Maschinellen Lernens und statistischer Verfahren zu bedienen. Als Ergebnis dieser Stufe werden Prognose-Regeln formuliert, die in Kombination mit dem Verhalten der beteiligten Entwickler die Grundlage für den Simulationsprozess bildet.

Simulation des Software-Entwicklungsprozesses

Die Entwicklung von realen Software Systemen ist häufig gleichermaßen komplex und divers sein, auch wenn der zugrundeliegende Prozess sich als einheitlich herausstellt. Unser Simulationsmodell basiert auf den Daten, die wir aus unterschiedlichen Open-Source Projekten extrahiert haben. Im Modell gibt es verschiedene Parameter, die simuliert werden sollen, z.B. Management-Entscheidungen, alternative Software-Architekturen, die Zusammensetzung des Entwicklerteams und mögliche Teststrategien. Durch das Ändern dieser Parameter können wir die Auswirkungen von alternativen Abläufen simulieren und somit andere mögliche Parameterkonstellationen anbieten, die zu höherer Qualität der Software führen.

Zusätzliche Simulationsparameter sind die Anzahl und der Typ der Agenten und Artefakte, die Verhaltenseigenschaften der Agenten sowie die Eigenschaften der Artefakte. Das Ergebnis der Simulation wird mittels Metriken für den Feature-Umfang und die Qualität der entstandenen Artefakte gemessen.

Agentenbasierte Modellierung

Agentenbasierte Modellierung und Simulation modelliert Systeme, die auf interagierenden Individuen basieren (Agenten). Dieser Ansatz ist sehr flexibel und erlaubt uns komplexe Systeme zu beschreiben: Das Wachstum der Komplexität kann hierbei z.B. implizit durch die Agenten modelliert werden. Das Verhalten wir als eine Abfolge von durch die Agenten ausgeführten Aktivitäten modelliert, was wiederum Auswirkungen und Veränderungen auf die Artefakte hat, an denen sie arbeiten. Die Artefakte repräsentieren passive Entitäten, die zum Software System gehören wie z.B. Quelltext.

Wir benutzen ein fein granulares Meta-Model zur Modellierung von Agenten und Artefakte. Wenn man Software Evolution als eine Menge von Menschen betrachtet, die mit den sich ändernden Anforderungen auf der Außenseite und mit der Komplexität des Systems im Inneren kämpfen, ist es unser Ansatz, Software Evolution vom Ausgangspunkt menschlichen Verhaltens zu modellieren. Die Agenten besitzen also individuelles Verhalten, welches aus Beobachtungen von realem Verhalten abgeleitet wurde. Die Agenten können Entwickler, Tester und User sein, die autonome und proaktive Individuen repräsentieren. Sie kommunizieren untereinander und arbeiten auf den Artefakten, die z.B. Source Code-Dateien und Tickets darstellen. User können neue Features anfragen, Tester erstellen Bug Reports und Entwickler schreiben Code und Dokumentation. Die Entwickler können zudem durch ihre Umgebung sowie durch persönliche Komponenten beeinflusst werden. Andere mögliche Faktoren für die Produktivität der Entwickler kann deren Erfahrung und Kompetenz sein.

Fallstudien

Um die Anwendbarkeit unserer Resultate zu validieren und zudem die festgelegten Prognose-Regeln zu überprüfen, simulieren wir die Evolution von verschiedenen Open-Source Projekten nach. Einerseits gibt es die Open-Source Projekte, die uns als Trainingsmenge dienen, von der wir schließlich unser Modell erlernen. Die dabei erhaltenen Resultate werden mit den realen Verläufen bei der Software Entwicklung verglichen, Unterschiede werden analysiert und darauf abgestimmt das Simulationsmodell angepasst. Andererseits werden wir andere Projekte untersuchen, die wir nicht für den Bau unseres Modells benutzt haben, um die Allgemeingültigkeit unserer Ergebnisse sicherzustellen.

Durch das Ändern der Simulationsparameter erforschen wir verschiedene Evolutionsszenarien. Darüber hinaus stellt dies mögliche Alternativen für die Zusammensetzung der beeinflussenden Faktoren und Entscheidungen im Softwareentwicklungsprozess bereit. Zum Beispiel könnte sich bei der Simulation herausstellen, dass die Anwendung einer anderen Teststrategie eine erstrebenswertere Ausgabe verursacht. Weiterhin wollen wir die minimale Anzahl von Simulationsparametern und Projekteigenschaften bestimmen, die zu einer geeigneten Simulation führen.

Antragstellende Wissenschaftler

Veröffentlichungen

2016

  • V. Honsel, S. Herbold and J. Grabowski. Learning from Software Project Histories: Predictive Studies Based on Mining Software Repositories, European Conference on Machine Learning and Principles and Practice of Knowledge Discovery (ECML-PKDD)  2016 - NEKTAR Track.
  • D. Honsel, V. Honsel, M. Welter, S. Waack and J. Grabowski. Monitoring Software Quality by Means of Simulation Methods, 10th International Symposium on Empirical Software Engineering and Measurement (ESEM), 2016.
  • V. Honsel, S. Herbold and J. Grabowski. Hidden Markov Models for the Prediction of Developer Involvement Dynamics and Workload, 12th International Conference on Predictive Models and Data Analytics in Software Engineering (PROMISE 2016).

2015

  • V. Honsel, D. Honsel, J. Grabowski and S. Waack. Developer Oriented and Quality Assurance Based Simulation of Software Processes, Proceedings of the Seminar Series on Advanced Techniques & Tools for Software Evolution (SATToSE) 2015.
  • V. Honsel, Statistical Learning and Software Mining for Agent Based Simulation of Software Evolution, Doctoral Symposium at the 37th International Conference on Software Engineering (ICSE 2015), Florence, Italy.
  • V. Honsel, D. Honsel, S. Herbold, J. Grabowski and S. Waack; Mining Software Dependency Networks for Agent-Based Simulation of Software Evolution, The 4th International Workshop on Software Mining, 2015.

2014

2013