From 90b9fdf16909e457b17664e86382f775b655670f Mon Sep 17 00:00:00 2001 From: Manuel Plonski Date: Tue, 3 Mar 2020 18:30:40 +0100 Subject: [PATCH] abend check --- bibliography.bib | 28 ++++++++++++++ build-docker-loop.bat | 11 ++++++ chapters/Automatisierung.tex | 64 ++++++++++++++++++++++++++++++++ chapters/Basis_Anforderungen.tex | 33 ++++++++++++++++ chapters/Einleitung.tex | 17 ++++++--- chapters/Gliederung.tex | 5 --- classicthesis-config.tex | 1 + clean-docker.bat | 3 +- thesis.tex | 13 ++++++- 9 files changed, 160 insertions(+), 15 deletions(-) create mode 100644 build-docker-loop.bat create mode 100644 chapters/Automatisierung.tex create mode 100644 chapters/Basis_Anforderungen.tex diff --git a/bibliography.bib b/bibliography.bib index 702e785..422a5c8 100644 --- a/bibliography.bib +++ b/bibliography.bib @@ -1,6 +1,32 @@ % Encoding: windows-1252 @Comment{jabref-meta: databaseType:bibtex;} + +@inproceedings{royce1987managing, + title={Managing the development of large software systems: concepts and techniques}, + author={Royce, Winston W}, + booktitle={Proceedings of the 9th international conference on Software Engineering}, + pages={328--338}, + year={1987} +} +@inproceedings{bobrovskis2018survey, + title={A Survey of Continuous Integration, Continuous Delivery and Continuos Deployment.}, + author={Bobrovskis, Sergejs and Jurenoks, Aleksejs}, + booktitle={BIR Workshops}, + pages={314--322}, + year={2018} +} + +@article{shahin2017continuous, + title={Continuous integration, delivery and deployment: a systematic review on approaches, tools, challenges and practices}, + author={Shahin, Mojtaba and Babar, Muhammad Ali and Zhu, Liming}, + journal={IEEE Access}, + volume={5}, + pages={3909--3943}, + year={2017}, + publisher={IEEE} +} + @misc{ web:12factor, author = "{Adam Wiggin}", title = "The Twelve-Factor App", @@ -8,6 +34,7 @@ url = "https://12factor.net", note = "[Online; accessed 20-January-2020]" } + @article{article:kumar, author = {Kumar, Divya and Mishra, Krishn}, year = {2016}, @@ -19,6 +46,7 @@ doi = {10.1016/j.procs.2016.03.003} } + @misc{article:puppet, author = {Dr. Nicole Forsgren, Jez Humble, Gene Brown, Alanna Brown, Nigel Kersten}, year = {2017}, diff --git a/build-docker-loop.bat b/build-docker-loop.bat new file mode 100644 index 0000000..1636465 --- /dev/null +++ b/build-docker-loop.bat @@ -0,0 +1,11 @@ +cd C:\Users\handg\git\sa1920 +@echo off +:KillEdge +timeout 1 +taskkill /F /IM MicrosoftEdgeCP.exe +if %errorlevel% NEQ 0 (goto build) else (goto KillEdge) +:build +docker run --rm --volume C:\Users\handg\git\sa1920\:/thesis-template/ thesis-template +thesis.pdf +pause +goto KillEdge \ No newline at end of file diff --git a/chapters/Automatisierung.tex b/chapters/Automatisierung.tex new file mode 100644 index 0000000..2d7cbcd --- /dev/null +++ b/chapters/Automatisierung.tex @@ -0,0 +1,64 @@ +\chapter{Automatisierung im Software-Entwicklungszyklus} +In der Softwareentwicklung gibt es eine Vielzahl von Modellen zur Unterstützung des Softwareentwicklungsprozess. +Wie im ersten Kapitel erwähnt, sollen die Anforderungen so generisch wie möglich formuliert werden. +Um eine größtmögliche Vielzahl verschiedener Modelle abzudecken, abstrahiere ich deren Komponenten aus dem Modell und versuche ihre Funktion möglichst unabhängig von der Methode darzustellen. + +\section{Darstellung des Software-Entwicklungsprozesses} +\label{sec:auto:show} +Bei der Herleitung dieser generischen Sichtweise auf den Software-Entwicklungsprozess habe auf Elemente des Wasserfallmodell aus der Publikation von Royce, Winston W: \textit{\citetitle{royce1987managing}} zurückgegriffen. Auch wenn er selbst dieses Modell als ``riskant und fehlerbehaftet''\cite{royce1987managing} beschreibt und heute andere Methoden sich etabliert haben. +Dabei konzentriere ich mich nur auf die Phasen dieses Modells, unabhängig von der Anordnung, Iteration, ihrem Kontext oder Umfang und auch der Philosophie der jeweiligen Methode. Diese einzelnen Schritte lassen sich in ähnlicher Form in vielen anderen Methoden wiederfinden. + +\subsection*{Projektphasen} +Die Projektphasen des Wasserfallmodells werden in Anforderungsanalyse, Systemdesign, Programmierung, Testing und Betrieb unterschieden. + +\begin{description} + \item[Anforderungsanalyse] + In diese Phase geht es darum, Anforderungen zu sammeln und zu analysieren. Dies geschieht in Form von Texten oder Modellen, die der Strukturierung und Klassifizierung dienen. + + \item[Systemdesign] + Hier wird die Architektur der Module, Schnittstellen und Daten festgelegt, die der Spezifikation aus der Anforderungsanalyse genügen sollen. + + \item[Implementierung] + Die Programmierung mit dem dazugehörige Modultest sind Bestandteil der Entwicklungsphase der Implementierung. + + \item[Softwaretest] + In der Testphase wird ein System oder eine Komponente gegen die zuvor spezifizierten Anforderungen überprüft. Das Testergebnis dient der Behebung von Softwarefehlern um ein fehlerfreies System in Produktion zu übernehmen. + + \item[Betrieb] + Der Betrieb um fasst die Auslieferung und Wartung, Betrieb der Software. +\end{description} + +\section{Automatisierung im Entwicklungsprozess} +\label{sec:auto:auto} +Es gibt verschiedene weit verbreitete Automatisierungspraktiken. Dazu gehören\cite{bobrovskis2018survey}: +\begin{itemize} + \item CI (Continuous Integration) + \item CDE (Continuous Delivery) + \item CD (Continuous Deployment) +\end{itemize} +Die Idee bei Continuous Integration besteht darin, wiederholt (mehrmals täglich) die Software in einer kontrollierten definierten Umgebung automatisiert zu integrieren und zu testen (automated build). Die Tests können den Modul- Integration- und auch den Abnahmetest umfassen. +Durch diese Verfahren können Fehler durch Codeänderungen automatisch erkannt werden, die sonst durch aufwendige, manuelle Testverfahren oder sogar erst im Betrieb erkannt worden wären. +Je nach Umfang kann CI das ganze Volumen von Testszenarien abwickeln und so die Testphase voll automatisiert abdecken.\\ + +\medskip + +Bei dem Continuous Delivery geht es darum, eine neu entwickelte Softwareversion zur Auslieferung bereitzustellen. Die Installation und der Betrieb der Software erfolgt jedoch manuell.\\ + +\medskip +Continuous Deployment erweitert das Continuous Delivery um die automatische Installation und Konfiguration auf dem Zielsystem. +Mit Continuous Deployment werden Komponenten aus der Phase „Betrieb“ automatisiert und das Fehlerrisiko bei der Installation verringert. \\ + +\bigskip +Diese Grundprinzipien können erweitert werden: so lassen sich z.B. mit Hilfe von statischer Codeanalyse automatisiert Fehler oder Sicherheitsprobleme erkennen (CI). +Ein Beispiel für die Erweiterung der Phase „Betrieb“ ist das automatisierte Monitoring von Produktionssystemen, welches z.B. Alarmmeldungen in Fehler- und Problemsituationen erzeugt. + +\medskip +In der Implementierungsphase gibt es ebenfalls Möglichkeiten zur Automatisierung. +Sind die Ergebnisse des Designs in einer geeigneten Form dokumentiert worden (z.B. UML oder Open API), lassen sich Teile des Codes wie Datenmodelle oder Server – Boilercode automatisch generieren. + +\medskip +Für die Phase der Anforderungsanalyse und des Systemdesigns gibt es ebenfalls eine Vielzahl von Tools, welche der Ergebnisdokumentation dienen – sie können die Aktivitäten zur Analyse und Design aber nur unterstützen und nicht automatisieren. + + + + diff --git a/chapters/Basis_Anforderungen.tex b/chapters/Basis_Anforderungen.tex new file mode 100644 index 0000000..0185237 --- /dev/null +++ b/chapters/Basis_Anforderungen.tex @@ -0,0 +1,33 @@ +\chapter{Anforderungen und Eigenschaft an die Ergebnisse} + +Um Qualitätsmerkmale und Anforderungen für eine Vielzahl verschiedener Anwendungsszenarien für CI/CD umsetzbar zu machen, ist es notwendig, sie zunächst sehr universell zu verfassen. +\section*{Anforderungen} + +\begin{itemize} + \item Eine Anforderung darf nicht spezifisch auf eine Programmiersprache (beispielsweise Java, Go, C++) oder eine Systemumgebung ausgerichtet sein. + + \item Ebenso sollte sie unabhängig von Prozessen, eingesetzten Tools und der Systemarchitektur formuliert werden. + + \item Die Qualitätsanforderungen soll dabei so erarbeitet werden, dass eine Umsetzung nicht nur in komplexen Umgebungen wie einem Datencenter möglich ist, sondern auch auf einem einfachen Entwicklungsrechner einen Betrieb ermöglichen kann. + + \item \todo{Überlegen einsetzen}((Auch der Kosten/Nutzenaspekt sollte in der Leistungsanforderung einer CI/CD Systems berücksichtigt werden.xx) + + \item Die Anforderung und Qualität soll nicht an einzelnen Komponenten des CI/CD Systems ausgerichtet werden, sondern an der Funktionsweise des Gesamtsystems. So werden gegebenenfalls positive wie negative Eigenschaften von Tools, wenn sie für sich allein betrachtet werden, ausgeblendet und nur die Gesamtleistung der Pipeline bewertet. + + \item Auch ist die ``zeitlose'' Anwendbarkeit dieser Anforderung eine wichtige Eigenschaft: Die Anforderungen sollte unabhängig von der rasanten Entwicklung auf dem Toolmarkt Bestand haben. + +\end{itemize} + + + + + + + + + + + + + + diff --git a/chapters/Einleitung.tex b/chapters/Einleitung.tex index 24ff045..c5e5fcc 100644 --- a/chapters/Einleitung.tex +++ b/chapters/Einleitung.tex @@ -1,7 +1,8 @@ \chapter{Einleitung} Das Thema der Digitalisierung ist heute nicht mehr wegzudenken, wenn es in den Unternehmen darum geht in der wachsenden Dynamik des Marktes passend zu agieren. Dabei muss auch die Softwareentwicklung sich diesem Trend anpassen und so von zeit- und kostenintensiven Softwareprojekten zu einer agilen Entwicklung mit vollautomatisierten Prozessen umschwenken. -Der moderne Softwareentwicklungsprozess wird immer weiter automatisiert. Hier sind "Continuous Integration" und "Continuous Deployment/Delivery" (CI/CD) schon weit verbreitet. Unter anderem ermöglichen Konzepte wie CI/CD schnellere Entwicklungsgeschwindigkeiten und erhöhen so die Chance, Fehler frühzeitig zu erkennen. +Der moderne Softwareentwicklungsprozess wird immer weiter automatisiert. Hier sind ``Continuous Integration'' und ``Continuous Deployment/Delivery'' (CI/CD) schon weit verbreitet. Unter anderem ermöglichen Konzepte wie CI/CD schnellere Entwicklungsgeschwindigkeiten und erhöhen so die Chance, Fehler frühzeitig zu erkennen.\cite{article:puppet} + \section{Motivation} @@ -19,11 +20,15 @@ Daraus ergibt sich die Fragestellung nach den Qualitätseigenschaften eines CI/C \item Welche Anforderungen stellen sich an eine CI/CD Pipeline mit hoher Qualität? \item Lassen sich Basisanforderungen aufstellen, unabhängig von dem Einsatzgebiet der Pipeline? -\end{itemize} -=> Ziel ist die Ausarbeitung von Anforderungen und Qualitätsmerkmalen an ein CI/CD System, welche die Entwicklungsgeschwindigkeit steigert, ohne die Softwarequalität zu kompromittieren. +\end{itemize} +\newpage +\textbf{ + \noindent Ziel ist die Ausarbeitung von Anforderungen und Qualitätsmerkmalen an ein CI/CD System, welche die Entwicklungsgeschwindigkeit steigert, ohne die Softwarequalität zu kompromittieren. Anforderungen an eine Qualitätsvolle CI/CD Pipeline aufstellen. +} + \section{Vorgehen} - Probleme analysieren, \dots -\section{Anforderungen an das Ergebnis} -Merkmale und Anforderungen sollen \dots sein \ No newline at end of file +In einem ersten Schritt betrachte ich den Softwareentwicklungsprozess und die Automatisierungsmöglichkeiten im Allgemeinen, \todo{brauchen wir hier das noch ?} um dann xxx von CI/CD aufzuzeigen. +Anschließend werden die Vorteile und Probleme unter dem Einsatz von CI/CD erarbeitet, um dann entsprechende Qualitätsmerkmale abzuleiten und Anforderungen an die Tools, Standards und Methoden eines CI/CD Systems zu formulieren. + diff --git a/chapters/Gliederung.tex b/chapters/Gliederung.tex index ab4deb6..074afa5 100644 --- a/chapters/Gliederung.tex +++ b/chapters/Gliederung.tex @@ -1,8 +1,3 @@ -\chapter{Automatisierung im Software-Entwicklungszyklus} -\section{Darstellung des Software-Entwicklungsprozesses} - -\section{Automatisierung im Entwicklungsprozess} -Kurze Einleitung in CI/CD Technik an Cloud Beispiel \chapter{Vorteile/Nachteile von Automatisierung im Entwicklungszyklus} \section{Vorteile} diff --git a/classicthesis-config.tex b/classicthesis-config.tex index 83e72e9..cc16f02 100644 --- a/classicthesis-config.tex +++ b/classicthesis-config.tex @@ -104,6 +104,7 @@ \PassOptionsToPackage{doublespacing}{hdathesis} % options: abbrev exam big wiwi english master \usepackage{hdathesis} + % ******************************************************************** % General useful packages % ******************************************************************** diff --git a/clean-docker.bat b/clean-docker.bat index 1b8ec8b..8580d4b 100644 --- a/clean-docker.bat +++ b/clean-docker.bat @@ -5,5 +5,4 @@ timeout 1 taskkill /F /IM MicrosoftEdgeCP.exe if %errorlevel% NEQ 0 (goto :build) else (goto KillEdge) :build -docker run --rm --volume C:\Users\handg\git\sa1920\:/thesis-template/ thesis-template make --directory /thesis-template/ clean -pause \ No newline at end of file +docker run --rm --volume C:\Users\handg\git\sa1920\:/thesis-template/ thesis-template make --directory /thesis-template/ clean \ No newline at end of file diff --git a/thesis.tex b/thesis.tex index c0728f8..fb7e714 100644 --- a/thesis.tex +++ b/thesis.tex @@ -43,7 +43,7 @@ %************************************************************************* \input{hdathesis-config} \input{classicthesis-config} - +\usepackage{todonotes} %************************************************************************* % Bibliographies %************************************************************************* @@ -74,7 +74,7 @@ %\cleardoublepage\include{frontbackmatter/Foreword} \cleardoublepage\include{frontbackmatter/Declaration} %\cleardoublepage\include{frontbackmatter/AbstractEN} -\cleardoublepage\include{frontbackmatter/AbstractDE} +%\cleardoublepage\include{frontbackmatter/AbstractDE} %\cleardoublepage\include{frontbackmatter/Publications} %\cleardoublepage\include{frontbackmatter/Acknowledgments} \cleardoublepage\include{frontbackmatter/Contents} @@ -85,6 +85,7 @@ %************************************************************************* % Mainmatter %************************************************************************* +\todo{Seitenbeschriftung und Seitenzahlen stimmen noch nicht ganz} \cleardoublepage \pagestyle{scrheadings} \pagenumbering{arabic} @@ -94,10 +95,18 @@ \part{Seminararbeit}\label{pt:thesis} \include{chapters/Einleitung} +\include{chapters/Basis_Anforderungen} + +\clearpage +\include{chapters/Automatisierung} + +\cleardoublepage +\part{Work in Progress}\label{pt:wip} %\part{Gliederung}\label{pt:thesis} \include{chapters/Gliederung} %\include{chapters/examples/chapter02} %\include{chapters/examples/chapter03} +\listoftodos %************************************************************************* % Backmatter %*************************************************************************