From 5bc07bd1a9098e7ec0b7baf7a65addd47475277c Mon Sep 17 00:00:00 2001 From: 0qln <0qln@proton.me> Date: Tue, 1 Sep 2026 12:04:02 +0200 Subject: [PATCH] 3.4.1: Unicorn-Softwareprozess statt eigenem Zustandsdiagramm --- TOOD.md | 2 +- chapters/planning/backlog.tex | 14 ++++++++------ figures/diagrams/ado-workflow.mmd | 10 ---------- figures/diagrams/ado-workflow.pdf | Bin 21029 -> 0 bytes 4 files changed, 9 insertions(+), 17 deletions(-) delete mode 100644 figures/diagrams/ado-workflow.mmd delete mode 100644 figures/diagrams/ado-workflow.pdf diff --git a/TOOD.md b/TOOD.md index 05ef77e..df90581 100644 --- a/TOOD.md +++ b/TOOD.md @@ -16,7 +16,7 @@ screenshots habe ich in figures/screenshots gelegt. - houston architektur - unicorn prozess - etc. -- [ ] "Figure 3.1: Zustände eines Work Items in Azure DevOps" sollte mit dem eigentlichem unicorn prozess bild ersaetzt werden. ich arbeite naehmlich nach dem ganz normalen prozess +- [x] "Figure 3.1: Zustände eines Work Items in Azure DevOps" sollte mit dem eigentlichem unicorn prozess bild ersaetzt werden. ich arbeite naehmlich nach dem ganz normalen prozess - "3.4.1 Entwicklungsprozess" sollte dahingehend auch aktualisiert werden, und nicht *Linus-speziefisch* sein. - [ ] "3.4.2 Schnitt der Product Backlog Items": ein abbild aus dem devops oder eine tabelle mit den PBIs ergaenzen verweisen - [ ] "Figure 3.3: Chronologie der Infrastrukturbeschaffung" sieht komisch aus, die pfeile gehen nach unten Chronologie geht aber nach rechts. sollte gefixed werden. diff --git a/chapters/planning/backlog.tex b/chapters/planning/backlog.tex index c34c30a..de08dc8 100644 --- a/chapters/planning/backlog.tex +++ b/chapters/planning/backlog.tex @@ -3,18 +3,20 @@ \subsection{Entwicklungsprozess} -Die Unicorn Development arbeitet agil mit zweiwöchigen Sprints in Azure DevOps. Jedes Work Item durchläuft den in Abbildung~\ref{fig:ado-workflow} dargestellten Zustandsautomaten. +Die Unicorn Development arbeitet agil mit zweiwöchigen Sprints in Azure DevOps. Der dabei verbindliche Softwareprozess ist im internen XWiki dokumentiert und in Abbildung~\ref{fig:unicorn-process} wiedergegeben. Er beschreibt den vollständigen Weg von der Kundenidee bis zur Abrechnung und ordnet jedem Schritt den Zustand zu, den das zugehörige Work Item in Azure DevOps annimmt. \begin{figure}[H] \centering - \includegraphics[width=0.55\textwidth]{figures/diagrams/ado-workflow.pdf} - \caption{Zustände eines Work Items in Azure DevOps} - \label{fig:ado-workflow} + \includegraphics[width=\textwidth]{figures/worksimple/softwareprozess-unicorns.jpg} + \caption{Softwareprozess der Unicorn Development mit den zugehörigen Work-Item-Zuständen} + \label{fig:unicorn-process} \end{figure} -Ein neues Item steht auf \texttt{New} und wird nach vollständiger Beschreibung zur Freigabe eingereicht (\texttt{To Approve}). Im Approval-Termin prüft das Team die \emph{Definition of Ready}, stellt Rückfragen und schätzt Story Points; danach gilt es als \texttt{Approved} und kann in einen Sprint gezogen werden (\texttt{Committed}). Nach dem Merge wechselt es zu \texttt{Dev Completed}; die Abnahme überführt es nach \texttt{Test Completed}. +Am Anfang steht eine Idee, die festgehalten und als Product Backlog Item ausformuliert wird; das Item steht dabei auf \texttt{New}. Nach der Prüfung der technischen Machbarkeit und der kaufmännischen Abwicklung — Angebot, Annahme, Auftragsbestätigung — geht es in die Freigabe (\texttt{To Approve}). Im Approval-Termin prüft das Team die \emph{Definition of Ready}, stellt Rückfragen und schätzt den Aufwand; danach gilt das Item als \texttt{Approved}. Mit der Sprintplanung wechselt es auf \texttt{Committed} und wird umgesetzt. Ist die Umsetzung abgeschlossen und in den Hauptbranch übernommen, steht es auf \texttt{Dev Completed}. Es folgen das Release ins Testsystem, das Review mit dem Kunden sowie die Tests durch Unicorn Development und Kunde; mit deren Abschluss erreicht das Item \texttt{Test Completed}. Erst danach erfolgt das Release ins Produktivsystem mit anschließender Abnahme; die abschließenden kaufmännischen Schritte — Rechnungsstellung, Abschluss in Kimai, Anpassung der Wartungsgebühr — überführen es nach \texttt{Done}. -Rückfragen im Approval-Termin — insbesondere durch \emph{Timo Walter} — deckten mehrfach Lücken in den Akzeptanzkriterien auf, etwa zur Häufigkeit der Ordnerstrukturprüfung oder zu Namensbeschränkungen. +Das Dokumentenfeature wurde ohne Abweichung nach diesem Prozess bearbeitet. Da es sich um eine Erweiterung des eigenen Produkts Houston und nicht um einen Einzelauftrag handelt, entfielen lediglich die auftragsbezogenen Schritte; alle Freigabe-, Test- und Abnahmestufen wurden regulär durchlaufen. + +Die Freigabestufe erwies sich dabei als wirksam: Rückfragen im Approval-Termin — insbesondere durch \emph{Timo Walter} — deckten mehrfach Lücken in den Akzeptanzkriterien auf, etwa zur Häufigkeit der Ordnerstrukturprüfung oder zu Namensbeschränkungen. \subsection{Schnitt der Product Backlog Items} diff --git a/figures/diagrams/ado-workflow.mmd b/figures/diagrams/ado-workflow.mmd deleted file mode 100644 index fef3165..0000000 --- a/figures/diagrams/ado-workflow.mmd +++ /dev/null @@ -1,10 +0,0 @@ -stateDiagram-v2 - [*] --> New - New --> ToApprove : Linus reicht PBI ein - ToApprove --> Approved : Approval-Team - Approved --> Committed : Sprint-Planung - Committed --> DevCompleted : PR gemerged - DevCompleted --> TestCompleted : Abnahme bestanden - TestCompleted --> [*] - ToApprove --> Removed : Verworfen - Removed --> New : Wiederhergestellt diff --git a/figures/diagrams/ado-workflow.pdf b/figures/diagrams/ado-workflow.pdf deleted file mode 100644 index f38e85112ab110f45543aac50abd1c24c32a9db9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21029 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

;Cd=(rC`LYMG>ZJ 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 cErN>0;*!Lo5^$ktXlZU}$fc_4>hHz{0J5#k