changes to folder structure
This commit is contained in:
@@ -1,40 +0,0 @@
|
||||
\chapter{Strukturen in der Softwareentwicklung}
|
||||
|
||||
Software modelliert Teile der Welt. Informationen, Zusammenhänge und Abläufe werden abgebildet.
|
||||
|
||||
|
||||
\section{Verschiedene Arten von Strukturen}
|
||||
Es ist möglich die Softwareentwicklung an zwei Achsen zu trennen. Dadurch ergibt sich die in der folgenden Tabelle gezeigte Einteilung.
|
||||
\begin{table} [ht]
|
||||
\centering
|
||||
\begin{tblr}{
|
||||
vline{2} = {-}{},
|
||||
hline{2} = {-}{},
|
||||
}
|
||||
& Teamintern & Teamübergreifend \\
|
||||
Code & Daten und Funktionen & Externe APIs \\
|
||||
Menschen & Hierarchie, Prozesse & Verhalten, Domänenexperten
|
||||
\end{tblr}
|
||||
\caption{Strukturkategorien}
|
||||
\label{tab:Auswertungskategorien}
|
||||
\end{table}
|
||||
|
||||
\section{Weitere Einschränkungen}
|
||||
|
||||
Auch das Nutzerverhalten kann bestimmte Strukturen vorgeben, da diese ein immer gleiches Verhalten erwarten. Auch wenn einige Abläufe optimiert oder umstrukturiert werden können, ist es nicht immer sinnvoll dies zu tun, da dann ggf. Nutzer neu geschult werden müssen.\cite{fiveLines.2023}
|
||||
|
||||
\chapter{Arten, wie Code Verhalten spiegelt}
|
||||
\section{Verhalten im Kontrollfluss}
|
||||
Die erste und wohl einfachste Möglichkeit, Verhalten im Code abzubilden, ist der Kontrollfluss. Dieser zeichnet sich durch die Verwendung von Kontrolloperatoren, Methodenaufrufen und der Zeilenabfolge aus.\cite{wikibook}
|
||||
|
||||
\begin{lstlisting}[language=TypeScript, caption={TypeScript-Code}, label=lst:typescript]
|
||||
function helloWorld() {
|
||||
console.log("Hallo, Welt!");
|
||||
}
|
||||
|
||||
helloWorld();
|
||||
let y: number = 2;
|
||||
|
||||
y = y + 1;
|
||||
console.log(y);
|
||||
\end{lstlisting}
|
||||
16
Bestandteile/sicherheit.tex
Normal file
16
Bestandteile/sicherheit.tex
Normal file
@@ -0,0 +1,16 @@
|
||||
\chapter{Sicherheit gewinnen, ohne den Code zu verstehen}
|
||||
\section{Sicherheit durch Tests}
|
||||
\section{Sicherheit durch Handwerkskunst}
|
||||
\section{Sicherheit durch Werkzeuge}
|
||||
\lipsum[1] % Dummy text
|
||||
|
||||
\begin{wrapfigure}{r}{0.4\textwidth}
|
||||
\centering
|
||||
\includegraphics[width=0.35\textwidth]{Bilder/screenshotWebstorm} % Replace with your image file
|
||||
\caption{Screenshot WebStorm Refactoring-Tools \cite{webstorm.2024}}
|
||||
\end{wrapfigure}
|
||||
|
||||
\lipsum[2-4] % More dummy text
|
||||
\section{Sicherheit durch formale Verifikation}
|
||||
\section{Sicherheit durch Fehlertoleranz}
|
||||
aa
|
||||
30
Bestandteile/strukturImCode.tex
Normal file
30
Bestandteile/strukturImCode.tex
Normal file
@@ -0,0 +1,30 @@
|
||||
\chapter{Strukturen in der Softwareentwicklung}
|
||||
Bevor man sich mit den Strukturen in der Softwareentwicklung auseinandersetzen kann, ist es wichtig, sich erneut vor Augen zu führen, was Software eigentlich ist.\\
|
||||
"\emph{Software modelliert einen Teil der Welt. Die Welt - und unser Verständnis davon - entwickelt sich, und unsere Software muss sich entwickeln, um ein akkurates Modell zu sein.}" \cite{fiveLines.2023}\\
|
||||
Das heißt also, dass Code verschiedenste Gegebenheiten aus der Realität abbildet. Darunter zählen Informationen, Zusammenhänge und ganze Abläufe. Zusammen ergibt sich dadurch eine Struktur, ein wiedererkennbares Muster, welches sich sowohl in der echten Welt als auch in der Software finden lässt.
|
||||
\section{Verschiedene Arten von Strukturen}
|
||||
|
||||
Es gibt verschiedene Bereiche in der Softwareentwicklung, in denen Struktur eine Rolle spielt. Es ist möglich diese Bereiche an zwei Achsen einzuteilen. Zum einen gibt es einige Faktoren welche den Menschen, also die Softwareentwickler betreffen. Auf der anderen Seite befindet sich der tatsächliche Code. Um die Einteilung sinnvoll zu gestalten, teilt die andere Achsen anhand des Wirkungsbereiches der Strukturen ein. \cite{fiveLines.2023}
|
||||
Die folgende Tabelle zeigt das Ergebnis der Einteilung.
|
||||
|
||||
|
||||
\begin{table} [ht]
|
||||
\centering
|
||||
\begin{tblr}{
|
||||
vline{2} = {-}{},
|
||||
hline{2} = {-}{},
|
||||
}
|
||||
& Teamintern & Teamübergreifend \\
|
||||
Code & Daten und Funktionen & externe APIs \\
|
||||
Menschen & Hierarchie, Prozesse & Verhalten, Domänenexperten
|
||||
\end{tblr}
|
||||
\caption{Strukturkategorien \cite{fiveLines.2023} (korrigierte Form)}
|
||||
\label{tab:Auswertungskategorien}
|
||||
\end{table}
|
||||
|
||||
|
||||
Melvin E. Conway stellt bereits 1968 Beobachtungen an, dass es eine gewisse Symmetrie zwischen der Arbeitsweise von Entwicklerteams und den Zusammenhängen der tatsächlichen Systemen gibt. \cite{conway.1968}
|
||||
Diese Aussage wurde von Harvard Wissenschaftlern bestätigt. \cite{maccormack.2012}
|
||||
\section{Weitere Einschränkungen}
|
||||
|
||||
Auch das Nutzerverhalten kann bestimmte Strukturen vorgeben, da diese ein immer gleiches Verhalten erwarten. Auch wenn einige Abläufe optimiert oder umstrukturiert werden können, ist es nicht immer sinnvoll dies zu tun, da dann ggf. Nutzer neu geschult werden müssen.\cite{fiveLines.2023}
|
||||
131
Bestandteile/verhaltenImCode.tex
Normal file
131
Bestandteile/verhaltenImCode.tex
Normal file
@@ -0,0 +1,131 @@
|
||||
\chapter{Arten, wie Code Verhalten spiegelt}
|
||||
Im nächsten Teil wird beleuchtet, wie Verhalten im Code abgebildet werden kann. Dabei gibt es grundlegend drei verschiedene Arten. Diese werden im folgenden anhand eines einfachen Beispiels erläutert. Des Weiteren soll auf die Erzeugung von Endlosschleifen eingegangen werden, wie Clausen feststellt, einen Sonderfall darstellen. \cite{fiveLines.2023}
|
||||
\begin{tcolorbox}[colback=gray!20!white, colframe=gray!75!black, title=Beispielverhalten]
|
||||
Es soll bis zu einer bestimmten ganzen Zahl abwechselnd „gerade“ und „ungerade“ in der Konsole ausgegeben werden. „0“ wird hierbei als gerade angesehen.\\
|
||||
Dieses Verhalten ist am von Clausen genutzten Beispiel (FizzBuzz) nachempfunden und so weit wie möglich vereinfacht, um weiterhin alle nötigen Besonderheiten zu veranschaulichen.\cite{fiveLines.2023}
|
||||
\end{tcolorbox}
|
||||
|
||||
\section{Verhalten im Kontrollfluss}
|
||||
Die erste und wohl einfachste Möglichkeit, Verhalten im Code abzubilden, ist der Kontrollfluss. Dieser zeichnet sich durch die Verwendung von Kontrolloperatoren, Methodenaufrufen und der Zeilenabfolge aus. \cite{fiveLines.2023}
|
||||
In folgender Abbildung kann man bla sehen (\ref{fig:Kontrollfluss})
|
||||
\begin{figure}[ht]
|
||||
\begin{subfigure}[t]{0.30\textwidth}
|
||||
\centering
|
||||
\begin{minipage}[t]{\linewidth}
|
||||
\begin{minted}[linenos=false]{typescript}
|
||||
const i = 0;
|
||||
while (i < 5) {
|
||||
foo(i);
|
||||
i++;
|
||||
}
|
||||
\end{minted}
|
||||
\end{minipage}
|
||||
\caption{Kontrolloperatoren}
|
||||
\label{fig:Kontrolloperatoren}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[t]{0.30\textwidth}
|
||||
\centering
|
||||
\begin{minipage}[t]{\linewidth}
|
||||
\begin{minted}[linenos=false]{typescript}
|
||||
function loop(i: number) {
|
||||
if (i < 5) {
|
||||
foo(i);
|
||||
loop(i + 1);
|
||||
}
|
||||
}
|
||||
\end{minted}
|
||||
\end{minipage}
|
||||
\caption{Methodenaufrufe}
|
||||
\label{fig:Methodenaufrufe}
|
||||
\end{subfigure}
|
||||
\hfill
|
||||
\begin{subfigure}[t]{0.30\textwidth}
|
||||
\centering
|
||||
\begin{minipage}[t]{\linewidth}
|
||||
\begin{minted}[linenos=false]{typescript}
|
||||
foo(0);
|
||||
foo(1);
|
||||
foo(2);
|
||||
foo(3);
|
||||
foo(4);
|
||||
\end{minted}
|
||||
\end{minipage}
|
||||
\caption{Zeilenabfolge}
|
||||
\label{fig:Zeilenabfolge}
|
||||
\end{subfigure}
|
||||
\caption{Beispiele für Code im Kontrollfluss \cite{fiveLines.2023}}
|
||||
\label{fig:Kontrollfluss}
|
||||
\end{figure}
|
||||
|
||||
Der Unterschied dieser Unterkategorien wird bei der Betrachtung des Aufrufs „foo(i)“ und dessen Werthereingabe deutlich. Bei \ref{fig:Kontrolloperatoren} wird mithilfe des „while“ Operators die Funktion aufgerufen und die Eingabe erhöht.\\ Das mittlere Beispiel zeigt die Verwendung einer rekursiven Methode, um das Verhalten darzustellen. Der Eingabeparameter dient hier als Wert für den Funktionsaufruf.\\ Das letzte Beispiel \ref{fig:Zeilenabfolge} zeigt das gleiche Verhalten durch einfache Aufrufe. Hier wird die Funktion mit Wert im Klartext aufgerufen.
|
||||
|
||||
\subsection{Eigenes Beispiel}
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\begin{minted}{typescript}
|
||||
function istGerade(n: number) {
|
||||
for(let i = 0; i <= n; i++) {
|
||||
if(i % 2 == 0) {
|
||||
console.log("Gerade");
|
||||
} else {
|
||||
console.log("Ungerade");
|
||||
}
|
||||
}
|
||||
}
|
||||
\end{minted}
|
||||
\caption{Beispiel im Kontrollfluss}
|
||||
\label{fig:KontrollflussIstGerade}
|
||||
\end{figure}
|
||||
\section{Verhalten in der Struktur der Daten}
|
||||
\subsection{Eigenes Beispiel}
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\begin{minted}{typescript}
|
||||
interface Zahl{
|
||||
istGerade(): void;
|
||||
}
|
||||
|
||||
class GeradeZahl implements Zahl{
|
||||
constructor(private count: number) {}
|
||||
istGerade() {
|
||||
console.log("Gerade");
|
||||
if(this.count != 0) {
|
||||
new UngeradeZahl(this.count - 1).istGerade();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class UngeradeZahl implements Zahl{
|
||||
constructor(private count: number) {}
|
||||
istGerade() {
|
||||
console.log("Ungerade");
|
||||
if(this.count != 0) {
|
||||
new GeradeZahl(this.count - 1).istGerade();
|
||||
}
|
||||
}
|
||||
}
|
||||
\end{minted}
|
||||
\caption{Beispiel in einer Datenstruktur}
|
||||
\label{fig:KontrollflussIstGerade}
|
||||
\end{figure}
|
||||
|
||||
\section{Verhalten in den Daten}
|
||||
\subsection{Eigenes Beispiel}
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
\begin{minted}{typescript}
|
||||
const daten: (() => void)[] = [
|
||||
() => console.log("Gerade"),
|
||||
() => console.log("Ungerade")
|
||||
];
|
||||
|
||||
function istGerade(n: number) {
|
||||
for(let i = 0; i <= n; i++) {
|
||||
daten[i % daten.length]();
|
||||
}
|
||||
}
|
||||
\end{minted}
|
||||
\caption{Beispiel in einer Datenstruktur}
|
||||
\label{fig:KontrollflussIstGerade}
|
||||
\end{figure}
|
||||
BIN
Bilder/screenshotWebstorm.png
Normal file
BIN
Bilder/screenshotWebstorm.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
@@ -7,11 +7,29 @@
|
||||
isbn = {9783836292245},
|
||||
pages = {311--333}
|
||||
}
|
||||
@online{wikibook,
|
||||
title = {Generating Bibliographies with biblatex and biber},
|
||||
organization = {Wikibooks},
|
||||
date = {2016},
|
||||
urldate = {2016-03-07},
|
||||
url = {https://en.wikibooks.org/wiki/LaTeX/Generating_Bibliographies_with_biblatex_and_biber},
|
||||
keywords = {untrusted},
|
||||
@article{conway.1968,
|
||||
title={How do committees invent},
|
||||
author={Conway, Melvin E},
|
||||
journal={Datamation},
|
||||
volume={14},
|
||||
number={4},
|
||||
pages={28--31},
|
||||
year={1968}
|
||||
}
|
||||
@article{maccormack.2012,
|
||||
title={Exploring the duality between product and organizational architectures: A test of the “mirroring” hypothesis},
|
||||
author={MacCormack, Alan and Baldwin, Carliss and Rusnak, John},
|
||||
journal={Research policy},
|
||||
volume={41},
|
||||
number={8},
|
||||
pages={1309--1324},
|
||||
year={2012},
|
||||
publisher={Elsevier}
|
||||
}
|
||||
@misc{webstorm.2024,
|
||||
author = {s.r.o, JetBrains},
|
||||
title = {WebStorm, Version 232.10203.14},
|
||||
howpublished = {Screenshot},
|
||||
year = {2024},
|
||||
note = {Verfügbar unter: \url{https://www.jetbrains.com/de-de/webstorm/}}
|
||||
}
|
||||
Binary file not shown.
@@ -14,8 +14,25 @@
|
||||
\usepackage{enumerate}
|
||||
\usepackage{csquotes}
|
||||
\usepackage{tabularray}
|
||||
\usepackage{listings}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{caption}
|
||||
\captionsetup[wrapfigure]{format=plain, justification=justified, singlelinecheck=false}
|
||||
|
||||
\usepackage{wrapfig}
|
||||
|
||||
\usepackage{tocbibind}
|
||||
|
||||
\usepackage{subcaption}
|
||||
|
||||
\definecolor{bg}{rgb}{0.95,0.95,0.95}
|
||||
|
||||
\usepackage{minted}
|
||||
\setminted{
|
||||
fontsize=\footnotesize,
|
||||
linenos,
|
||||
bgcolor=bg,
|
||||
}
|
||||
\usepackage{tcolorbox}
|
||||
|
||||
% Kopfzeile
|
||||
\usepackage[headsepline,manualmark]{scrlayer-scrpage}
|
||||
@@ -28,54 +45,6 @@
|
||||
% Seitenspiegel
|
||||
\usepackage[left=25mm,right=20mm,top=25mm,bottom=25mm]{geometry}
|
||||
|
||||
\definecolor{codegreen}{rgb}{0,0.6,0}
|
||||
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
|
||||
\definecolor{codepurple}{rgb}{0.58,0,0.82}
|
||||
\definecolor{codeorange}{rgb}{1,0.5,0}
|
||||
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
|
||||
|
||||
\renewcommand{\lstlistingname}{Code-Beispiel}
|
||||
|
||||
\lstdefinelanguage{TypeScript}{
|
||||
sensitive=true,
|
||||
morecomment=[l]{//},
|
||||
morecomment=[s]{/*}{*/},
|
||||
morestring=[b]",
|
||||
keywords=[1]{let, const, break, case, catch, class, const, continue, debugger, default, delete, do, else, enum, export, extends, finally, for, function, if, import, in, instanceof, new, return, super, switch, this, throw, try, typeof, var, void, while, with},
|
||||
keywordstyle=[1]\color{blue},
|
||||
keywords=[2]{true, false, null,console},
|
||||
keywordstyle=[2]\color{codepurple},
|
||||
keywords=[3]{string, number, boolean, any, void},
|
||||
keywordstyle=[3]\color{codeorange}\bfseries,
|
||||
identifierstyle=\color{black},
|
||||
commentstyle=\color{gray}\textit,
|
||||
stringstyle=\color{codegreen},
|
||||
morestring=[b]',
|
||||
morestring=[b]`,
|
||||
}
|
||||
|
||||
|
||||
\lstdefinestyle{mystyle}{
|
||||
backgroundcolor=\color{backcolour},
|
||||
commentstyle=\color{codegreen},
|
||||
keywordstyle=\color{blue},
|
||||
numberstyle=\tiny\color{codegray},
|
||||
stringstyle=\color{codepurple},
|
||||
basicstyle=\ttfamily\footnotesize,
|
||||
breakatwhitespace=false,
|
||||
breaklines=true,
|
||||
captionpos=b,
|
||||
keepspaces=true,
|
||||
numbers=left,
|
||||
numbersep=5pt,
|
||||
showspaces=false,
|
||||
showstringspaces=false,
|
||||
showtabs=false,
|
||||
tabsize=2
|
||||
}
|
||||
|
||||
\lstset{style=mystyle}
|
||||
|
||||
% Literatur
|
||||
\usepackage[backend=biber, %% Hilfsprogramm "biber" (statt "biblatex" oder "bibtex")
|
||||
style=numeric, %% Zitierstil (siehe Dokumentation, bitte mit Betreuer absprechen)
|
||||
@@ -89,6 +58,7 @@
|
||||
% Grafiken
|
||||
\usepackage{graphicx} % Grafiken einfügen (pdf,png - aber jpg vermeiden)
|
||||
\graphicspath{{./Bilder/}} % Pfad zu den Bildern
|
||||
\usepackage{lipsum} % For placeholder text, you can remove this and add your text
|
||||
|
||||
% Tabellen
|
||||
\usepackage{booktabs} % bessere Gestaltung von Tabellen
|
||||
@@ -97,7 +67,9 @@
|
||||
% Koma-Script Kompatibilität
|
||||
\usepackage{scrhack}
|
||||
|
||||
|
||||
% 1.5 Zeilenabstand
|
||||
\usepackage{setspace}
|
||||
\onehalfspacing
|
||||
|
||||
% Das Dokument selbst mit seinen Bestandteilen
|
||||
% --------------------------------------------
|
||||
@@ -113,12 +85,16 @@
|
||||
\listoftables % Tabellenverzeichnis
|
||||
\clearpage
|
||||
% ----------------------------------------------
|
||||
\clearpairofpagestyles % Leere bestehende Kopf- und Fußzeilen
|
||||
\cfoot*{\pagemark} % Seitenzahl unten in der Mitte
|
||||
\mainmatter % die einzelnen Kapitel, bei Bedarf weitere *.tex Dateien erzeugen und hier einbinden
|
||||
\input{./Bestandteile/main}
|
||||
\input{./Bestandteile/strukturImCode}
|
||||
\input{./Bestandteile/verhaltenImCode}
|
||||
\input{./Bestandteile/sicherheit}
|
||||
% ----------------------------------------------
|
||||
\backmatter
|
||||
|
||||
\printbibliography
|
||||
\printbibliography[heading=bibintoc]
|
||||
|
||||
\input{./Bestandteile/erklaerung} % Erklärungen - Unterschreiben nicht vergessen!
|
||||
|
||||
|
||||
Reference in New Issue
Block a user