Changes for page Scrum

Last modified by pmeyer on 2025/09/12 04:57

edited by Pascal Meyer
on 2025/07/29 03:50
Change comment: Uploaded new attachment "velo.JPG", version {1}
edited by Pascal Meyer
on 2025/07/29 03:44
Change comment: There is no comment for this version

Summary

Details

insert_drive_file Page properties
Content
... ... @@ -1,319 +1,3 @@
1 -= Scrum - Ein kurzer Überblick =
1 += =
2 2  
3 -**Was ist Scrum und warum brauchen wir das im SWP?**
4 -
5 -* Scrum ist einer von mehreren agilen Projektmanagement-Ansätzen und insbesondere für die Softwareentwicklung geeignet
6 -* Wird benötigt, um die Entwicklung des im SWP geforderten Produkts im Rahmen eines vernünftig strukturierten Projektmanagements umzusetzen
7 -
8 -**Charakteristika:**
9 -
10 -* Selbst-organisierende Teams
11 -* Scrum-Projekte schreiten in Serien von Sprints voran
12 -* Typische Sprintdauer beträgt 2-4 Wochen → //Im SWP haben sich 2-3 Wochen bewährt//
13 -* Konstante Dauer führt zu einem besseren Rhythmus
14 -* Produkt wird während des Sprints entworfen, kodiert und getestet
15 -* Es gibt Zeiten, in denen man in keinem Sprint ist, sondern einen neuen Sprint vorbereitet
16 -* Anforderungsanalyse sollte grundsätzlich vor allen Sprints erfolgen
17 -* Anforderungen sind als Listeneinträge im Product Backlog festgehalten (Hinweis: Das Backlog kann mehr als nur die Anforderungen enthalten, d.h. nicht jeder Eintrag im Backlog entspricht einer Anforderung.)
18 -* Im SWP "kleine iterative Wasserfälle" → Anforderung, Design, Kodierung, Test
19 -
20 -**Rahmen:**
21 -
22 -* **Rollen:**
23 -** **Product Owner**
24 -*** Definiert Product-Features
25 -*** Bestimmt Auslieferungsdatum und Inhalt
26 -*** Akzeptiert oder weist Arbeitsergebnisse zurück
27 -*** Im SWP der Tutor in Absprache mit Marco und das Team
28 -** **Scrum Master**
29 -*** Repräsentiert das Management gegenüber dem Projekt
30 -*** Verantwortlich für die Einhaltung von Scrum-Werten und -Techniken
31 -*** Beseitigt Hindernisse
32 -*** Stellt sicher, dass das Team vollständig, funktional und produktiv ist
33 -*** Unterstützt die enge Zusammenarbeit zwischen allen Rollen und Funktionen
34 -*** Schützt das Team vor äußeren Störungen
35 -*** Im SWP ein spezielles Mitglied der Gruppe, welches trotzdem auch mitentwickelt
36 -** **Entwicklungs-Team**
37 -*** Typischerweise 5-9 Personen
38 -*** Funktionsübergreifend
39 -**** QS, Programmierer, UI-Designer, etc.
40 -*** Mitglieder sollen Vollzeitmitglieder sein
41 -*** Teams organisieren sich selbst
42 -*** Mitgliedschaft kann nur zwischen Sprints verändert werden
43 -* **Meetings:**
44 -** **Sprint Planning**
45 -*** Sprint Priorisierung
46 -**** Product Backlog analysieren und auswerten
47 -**** Sprint-Ziel festlegen
48 -*** Planung
49 -**** Entscheiden, wie man das Sprint-Ziel erreichen kann (Design)
50 -**** Sprint Backlog (Tasks) aus Product Backlog (User Stories/Features) erstellen
51 -***** Team wählt Einheiten, zu deren Implementierung es sich verpflichten kann, aus dem Product Backlog aus
52 -*** Sprint Backlog schätzen (Planning Poker, Magic Estimation, etc.)
53 -*** Sprint-Ziel
54 -**** Kurze Angabe dessen, worauf sich die Arbeiten während des Sprints fokussieren
55 -**** Wichtig! Wird gerne unterschätzt
56 -**** Hilft, das Ziel im Auge zu behalten
57 -** **Sprint Review​​​​​​​**
58 -*** Das Team präsentiert, was es während eines Sprints erreicht hat
59 -*** Typischerweise in Form einer Demo mit neuen Features oder der zugrunde liegenden Architektur
60 -*** Das ganze Team nimmt teil!
61 -** **Sprint Retrospektive​​​​​​​**
62 -*** Regelmäßig prüfen, was gut und was nicht so gut funktioniert
63 -*** ca. 15-30 min lang
64 -*** Nach jedem Sprint
65 -*** Das gesamte Team kommt zusammen und diskutiert, wie es sich verbessern möchte
66 -*** Methode hierfür bspw: Starfish (siehe Bild)
67 -*** Weitere Methoden für die Retrospektiven finden sich z.B. hier: [[https:~~/~~/retromat.org/>>url:https://retromat.org/]]
68 -** **Tägliches Scrum-Meeting (Daily)​​​​​​​​​**
69 -*** Wöchentliches Treffen startet mit Scrum-Meeting
70 -*** Am Ende der Sitzung Verteilung neuer Aufgaben (jeder hat mindestens ein Ticket)
71 -*** Im Weekly werden keine Lösungen diskutiert, dies kann im weiteren Verlauf der Sitzung passieren
72 -* **Artefakte:**
73 -** **Product Backlog**
74 -*** Die Anforderungen für das finale Produkt
75 -*** Eine Liste aller gewünschten Projektarbeiten
76 -*** Eigentlich immer mehr, als im aktuellen Sprint gebraucht wird
77 -*** Im SWP: Zu Beginn füllen und später ergänzen
78 -*** Vom Product Owner priorisiert
79 -*** Zu Beginn des Sprints repriorisiert
80 -** **Sprint Backlog**
81 -*** Team-Mitglieder wählen Tasks aus (Arbeit wird nie zugewiesen)
82 -*** Aber**:**
83 -**** Im SWP hat jeder am Ende einer Sitzung eine Aufgabe!
84 -**** Im Zweifelsfall durch Zuweisung...
85 -*** Jedes Team-Mitglied kann Tasks hinzufügen, löschen oder ändern (basierend auf dem aktuellen Ziel)
86 -*** Wenn Arbeit unklar ist, definieren Sie erstmal einen Task mit größerer Schätzung und erstelle Unteraufgaben, sobald die Arbeit klarer wird
87 -*** Definieren Sie für die Tickets eine Definition of Done ([[https:~~/~~/www.scrum-events.de/was-ist-die-definition-of-done-dod.html>>url:https://www.scrum-events.de/was-ist-die-definition-of-done-dod.html]])
88 -** **Produktinkrement**​​​​​​​
89 -
90 -= Scrum im Detail =
91 -
92 -== Scrum-Prozess ==
93 -
94 -Nachdem die Produktvision definiert wurde, wird das Product Backlog erstellt und vom
95 -Product Owner //(hier: gesamtes Team im Softwareprojekt)// verwaltet. Aus dem Sprint
96 -Planning resultiert das Sprint Backlog, welches im Sprint durch das Entwicklungsteam
97 -//(hier: Scrum Master gehört zum Entwicklungsteam und programmiert mit)// abgearbeitet
98 -wird. Der Scrum Master sorgt dafür, dass das Entwicklungsteam ungestört arbeiten
99 -kann. Täglich //(hier: wöchentlich)// trifft er sich im Daily Scrum mit dem Team. Nach
100 -dem Sprint wird ein Produktinkrement an den Auftraggeber //(hier: an das gesamte//
101 -//Team)// ausgeliefert und in einem Sprint Review näher erläutert. Anschließend wird eine
102 -Sprint Retrospektive durchgeführt, in der das Team die Zusammenarbeit reflektieren kann.
103 -
104 -== Product Backlog ==
105 -
106 -Ein Product Backlog ist eine priorisierte Anforderungsliste für das von dem Auftraggeber
107 -gewünschte Softwareprodukt. Diese ist nie vollständig und zu jederzeit anpassbar. Der
108 -Product Owner //(hier: das gesamte Team)// ergänzt das Backlog stetig und hat in den
109 -meisten Fällen bereits User Stories für den nächsten Sprint geplant. Aus diesem Grund
110 -sind in dem Backlog nicht alle für das komplette Produkt relevanten Anforderungen
111 -zu finden, weil sich von Sprint zu Sprint immer wieder neue Anforderungen ergeben
112 -oder alte verworfen werden. Es ist auch möglich, dass sich die Prioritäten ändern. Der
113 -Product Owner //(hier: das gesamte Team)// verwaltet das Backlog, allerdings muss es für
114 -alle Mitglieder des Scrum Teams ersichtlich sein.
115 -
116 -=== **Der Nutzen eines gepflegten/priorisierten Product Backlogs** ===
117 -
118 -Priorisiert:
119 -
120 -* Um die für das Projekt wertvollsten Stories am Anfang zu bearbeiten
121 -* So kann schnell ein funktionierendes Spiel entwickelt werden
122 -* Am Ende ist dann noch genug Zeit für feinere Anpassungen
123 -* Kann die Arbeit im Projekt erleichtern
124 -
125 -Gepflegt:
126 -
127 -* Wichtig für ein effizientes, übersichtliches Arbeiten
128 -
129 -=== **Unterschiede Product Backlog vs. Sprint Backlog** ===
130 -
131 -* Product Backlog ist nie vollständig und zu jederzeit anpassbar
132 -* Sprint Backlog kann nur unter bestimmten Voraussetzungen angepasst werden
133 -
134 -== Sprint Planning ==
135 -
136 -Nachdem das Product Backlog initial gefüllt und das Sprint-Ziel festgelegt wurde, kann
137 -das Planning beginnen. Das Sprint Planning ist wichtig, weil der Product Owner und
138 -das Entwicklungsteam //(hier: das gesamte Team)// sich so einig über die zu bearbeitenden
139 -User Stories werden können. In diesem Meeting wird gemeinsam mit dem Team, dem
140 -Scrum Master und dem Product Owner der Sprint vorbereitet.
141 -
142 -=== **Ablauf eines Plannings (Checkliste)** ===
143 -
144 -✓ Sprint-Ziel festlegen
145 -✓ Anhand des Sprint-Ziels die passenden User Stories aus dem Product Backlog suchen
146 -✓ Die vorhandenen Schätzungen der User Stories überprüfen und ggf. anpassen
147 -✓ Nicht geschätzte User Stories schätzen
148 -✓ (nicht im ersten Sprint) Velocity heranziehen und schauen, wie viele Story Points im letzten Sprint erledigt wurden
149 -✓ Die gleiche Anzahl an Story Points in das Sprint Backlog ziehen
150 -✓ User Stories in Tasks aufsplitten
151 -✓ Alle Teammitglieder suchen sich Aufgaben aus, die sie bearbeiten möchten
152 -✓ Sprint starten
153 -
154 -=== **Die dazugehörigen Elemente eines Sprint Plannings** ===
155 -
156 -* Sprint-Ziel
157 -* Schätzen von Aufwänden
158 -* Product Backlog
159 -* Velocity
160 -
161 -== Schätzen von Aufwänden ==
162 -
163 -Es sollte aus mehreren Gründen geschätzt werden. Zum einen bekommen alle Teammitglieder
164 -einen Einblick in den Inhalt aller User Stories, bevor angefangen wird, sie
165 -umzusetzen. Dies schärft das Verständnis für das Produkt. Zum anderen findet das
166 -Schätzen im besten Fall mit dem gesamten Team statt, wodurch dieses Meeting eine
167 -teamgeistfördernde Aktivität ist. Ein weiterer Vorteil ist, dass jede Person im Team weiß,
168 -worum es in der Story geht, sodass jede Person jede Aufgabe bearbeiten kann. Außerdem
169 -können so in Diskussionen Probleme oder zusätzliche Informationen identifiziert werden,
170 -wenn eine User Story beispielsweise in kleinere sinnvolle Einheiten aufgeteilt werden
171 -kann. Die Einheit, in der zumeist geschätzt wird, nennt sich "Story Points".
172 -
173 -=== **Ablauf der Aufwandsschätzung (Checkliste)** ===
174 -
175 -✓ Auf eine Werteskala einigen (Fibonacci oder T-Shirt Größen) (siehe Abschnitt "Vorschlag für eine Werteskala zum Schätzen")
176 -✓ Auf eine Schätzmethode einigen (siehe Abschnitt "Der Ablauf vom Planningpoker")
177 -✓ Eine Referenzstory bestimmen, anhand dessen geschätzt werden soll
178 -✓ Definition of Done bei der Schätzung mit einbeziehen
179 -✓ Geschätzte Story Points den jeweiligen Stories hinzufügen
180 -
181 -=== **Der Ablauf vom Planningpoker** ===
182 -
183 -* Jedes Teammitglied hat einen Satz Karten, auf dem eine zuvor bestimmte Werteskala abgebildet ist (online abwandelbar, siehe Abschnitt "Tools, um online zu schätzen")
184 -* Stories werden vorgestellt
185 -* Es dürfen Fragen zu den Stories gestellt werden, falls etwas unklar ist
186 -* Danach legt jedes Teammitglied eine Karte mit einem Wert verdeckt auf den Tisch
187 -* Hat jede Person eine Karte abgelegt, werden diese umgedreht
188 -* Ziel: Team einigt sich auf einen Wert
189 -* Weichen die Werte auf den Karten stark voneinander ab, besteht offenbar Diskussionsbedarf
190 -* Nach der Diskussion geht es in eine zweite Runde, bis sich das Team einigen konnte und alle offenen Fragen zu der Story geklärt sind
191 -
192 -=== **Vorschlag für eine Werteskala zum Schätzen** ===
193 -
194 -* Nur wenige Zahlen auswählen (bspw. 1,2,3,5,8)
195 -* Wenn in T-Shirt-Größen geschätzt wird, dann jeder Größe eine Zahl zuweisen, sodass das Burndown- und Velocity-Chart genutzt werden kann
196 -
197 -[[~[~[image:/SPB/softwareprojekt-wiki_all/-/wikis/uploads/78f387122adf2a44d3b92efa743d3446/tshirtfibo.JPG~|~|alt="tshirtfibo.JPG"~]~]>>path:/SPB/softwareprojekt-wiki_all/-/wikis/uploads/78f387122adf2a44d3b92efa743d3446/tshirtfibo.JPG]]
198 -
199 -=== **Definition eines Velocity Charts** ===
200 -
201 -Hat das Team schon mindestens einen Sprint hinter sich, kann der nächste Sprint auf
202 -Basis der Velocity aufgebaut werden. Die Velocity steht für die Geschwindigkeit des
203 -Teams. Das bedeutet, dass ermittelt wird, wie viele Story Points das Entwicklungsteam
204 -in dem vorherigen Sprint geschafft hat. Aufgrund dieser Information kann der darauf
205 -folgende Sprint genauer geplant werden, indem sich das Team nur auf die Anzahl der
206 -vorher erledigten Story Points committet. Die Abbildung zeigt ein solches Velocity Chart.
207 -Die x-Achse zeigt die bisherige Anzahl an Sprints und die y-Achse die Story Points, die
208 -in einem Sprint erledigt wurden. Es ist zu sehen, dass beispielsweise im zweiten Sprint
209 -15 Story Points geschafft wurden, jedoch im dritten Sprint nur fünf. Ab dem dritten
210 -Sprint kann eine Verbesserung der Geschwindigkeit des Teams wahrgenommen werden.
211 -
212 -[[~[~[image:/SPB/softwareprojekt-wiki_all/-/wikis/uploads/3bb28351d712bbf3e9ad6360fd85bc6a/velo.JPG~|~|alt="velo.JPG"~]~]>>path:/SPB/softwareprojekt-wiki_all/-/wikis/uploads/3bb28351d712bbf3e9ad6360fd85bc6a/velo.JPG]]
213 -
214 -=== **Definition eines Burndown Charts** ===
215 -
216 -Eine Möglichkeit zur Überprüfung des Fortschritts während eines Sprints ist die Erstellung
217 -eines Burndown Charts. Es zeigt die bereits erledigten Story Points auf Basis
218 -der verbleibenden Zeit an. Somit kann schnell gesehen werden, ob Verzögerungen oder
219 -Probleme auftreten und falls dies der Fall ist, kann ein Meeting einberufen werden,
220 -damit über die Probleme gesprochen wird. Die Abbildung zeigt ein
221 -Burndown Chart. Auf der x-Achse sind die Arbeitstage zu sehen und auf der y-Achse
222 -die noch zu erledigenden Story Points für den Sprint. Es ist zu sehen, dass das Team
223 -bisher einen guten Fortschritt hat, weil der Graph bisher stetig abfällt.
224 -
225 -[[~[~[image:/SPB/softwareprojekt-wiki_all/-/wikis/uploads/a5dbbbeddb36c2545d5748bfef5124c2/burnd.JPG~|~|alt="burnd.JPG"~]~]>>path:/SPB/softwareprojekt-wiki_all/-/wikis/uploads/a5dbbbeddb36c2545d5748bfef5124c2/burnd.JPG]]
226 -
227 -== Daily Scrum ==
228 -
229 -Täglich //(hier: wöchentlich)// treffen sich das Entwicklungsteam und der Scrum Master
230 -zu einem Meeting. Es ist ein sehr kurzes Treffen, welches immer zur gleichen Zeit am
231 -gleichen Ort stehend stattfindet. Zumeist stehend, damit es bewusst kurz gehalten wird.
232 -Das Treffen sollte nicht länger als 15 Minuten dauern. Jedes Teammitglied beantwortet
233 -drei Fragen:
234 -
235 -1. Was habe ich gestern gemacht?
236 -1. Was werde ich heute tun?
237 -1. Gibt es Hindernisse, die mir im Weg stehen?
238 -
239 -Durch das Daily Scrum werden Probleme sichtbar, die für den Scrum Master von großer
240 -Bedeutung sind, da er hierdurch eventuelle Impediments wahrnehmen und anschließend
241 -beseitigen kann. Außerdem ist dieses Treffen für das Team wichtig, um sich gegenseitig
242 -zu informieren und nach eventuell benötigter Hilfe zu suchen. Damit dieses Treffen
243 -möglichst effektiv ist, sollten sich die Teammitglieder darauf vorbereiten und vorher
244 -überlegen, was gestern bearbeitet wurde und was heute erledigt wird. Der Scrum
245 -Master sorgt in diesem Meeting dafür, dass die anderen Teammitglieder nicht den Fokus
246 -verlieren. Außerdem achtet er auf die Zeit, sodass diese eingehalten wird.
247 -
248 -== Definition of Done/Definition of Ready ==
249 -
250 -=== **Definition of Done** ===
251 -
252 -Während eines Sprints beginnen die Entwickler erst eine neue Story, wenn die vorherige
253 -abgeschlossen ist. Damit alle Teammitglieder und der Product Owner //(hier: das gesamte//
254 -//Team)// das gleiche Verständnis für "fertig" haben, gibt es die Definition of Done. Diese
255 -umfasst eine Sammlung bestimmter Kriterien, die erfüllt sein müssen, damit eine
256 -Story als "fertig" gilt. Sie ist eine Forderung seitens des Product Owners an das
257 -Entwicklungsteam //(hier: seitens des Teams)//, welche, ebenso wie die Definition of Ready,
258 -verhandelt wird. Die Kriterien der Definition of Done sammelt das Team gemeinsam
259 -mit dem Product Owner //(hier: ohne den Product Owner)// bei einem separaten Treffen.
260 -
261 -==== **Nutzen einer Definition of Done** ====
262 -
263 -* Wenn keine Definition of Done vorhanden ist, kann es schnell zu einem Impediment führen, da kein klares Ende einer Story in Sicht ist
264 -* Jedes Teammitglied ist dazu verpflichtet, diese Definition of Done einzuhalten
265 -* Wenn sie nicht eingehalten wird, kann es am Ende des Projekts zu sehr viel Stress führen, wodurch viel Zeit verloren geht für bspw. Feinheiten
266 -* Sollte direkt am Anfang erstellt werden, damit das Team sich dahingehend weiterentwickeln und lernen kann
267 -
268 -=== **Definition of Ready** ===
269 -
270 -Eine Definition of Ready ist eine Sammlung von Forderungen von dem Entwicklungsteam
271 -an den Product Owner //(hier: innerhalb des Teams)//, wie eine User Story beschrieben
272 -sein muss, damit das Entwicklungsteam ungestört und ohne Hindernisse arbeiten kann.
273 -Über diese Forderungen verhandelt das Team mit dem Product Owner //(hier: das Team//
274 -//handelt die Punkte untereinander aus)// und das Ergebnis ist die Definition of Ready.
275 -Beispielsweise kann das Team eine Form vorgeben, wie der Titel der Story geschrieben
276 -sein soll oder dass Akzeptanzkriterien enthalten sein müssen und in welcher Form.
277 -Das Team muss überprüfen, ob die Kriterien in den User Stories eingehalten wurden.
278 -Wurden sie nicht eingehalten, können große Verzögerungen entstehen.
279 -
280 -=== **Unterschiede zwischen Definition of Done und Definition of Ready** ===
281 -
282 -* Definition of Done beschreibt, wann eine User Story fertig bearbeitet wurde
283 -* Definition of Ready beschreibt, wann eine User Story fertig beschrieben wurde
284 -
285 -== Sprint Review ==
286 -
287 -Am Ende eines Sprints findet das Sprint Review statt (siehe [[Sprint-Review mit Jira>>url:https://confluence.swl.informatik.uni-oldenburg.de/spaces/SWP/pages/691404828/Sprint-Review+mit+Jira]]). Bei diesem Treffen werden
288 -die Sprint-Ergebnisse allen Interessierten präsentiert. Dazu gehören beispielsweise der
289 -Auftraggeber oder andere Stakeholder //(hier: mit dem gesamten Team und ggf. dem//
290 -//Tutor)//. Der Scrum Master bereitet dieses Meeting vor, indem er die Interessenten über
291 -dieses Treffen informiert, des Weiteren moderiert er die Sitzung. Die Vorstellung der
292 -Ergebnisse wird von den Teammitgliedern //(hier: inkl. dem Scrum Master, da auch//
293 -//der Scrum Master im Softwareprojekt programmiert)// vorbereitet. Nachdem der Scrum
294 -Master das Meeting eröffnet hat, erklärt er kurz das Sprint-Ziel und die User Stories,
295 -die abgeschlossen wurden. Dann präsentiert das Entwicklungsteam die Ergebnisse.
296 -
297 -=== **Mehrwert eines Reviews** ===
298 -
299 -* Dient dazu, allen Teammitgliedern zu zeigen, was in dem Sprint bearbeitet wurde
300 -* Alle Teammitglieder bleiben auf dem neuesten Stand
301 -* Es kann dadurch verhindert werden, dass Teammitglieder abgehängt werden, sollte deshalb regelmäßig durchgeführt werden
302 -* Tutor wird über den Fortschritt informiert und kann bei Bedarf Tipps oder Hinweise geben, sodass verhindert werden kann, dass die Studierenden in eine komplett falsche Richtung laufen
303 -
304 -== Sprint Retrospektive ==
305 -
306 -Während einer Retrospektive kann das Entwicklungsteam die Zusammenarbeit reflektieren,
307 -Missmut äußern und Vorschläge für Verbesserungen sammeln. Das Ziel einer
308 -Retrospektive ist der kontinuierliche Verbesserungsprozess innerhalb des Teams. Ein
309 -gut funktionierendes Team kann qualitativ hochwertige Produkte liefern. Eine Retrospektive
310 -muss von einem Scrum Master gut vorbereitet werden. Der Scrum Master
311 -moderiert dieses Treffen
312 -
313 -Beispiele für Retrospektiven finden sich z.B. hier: [[https:~~/~~/dzone.com/articles/7-formats-for-great-team-retrospectives?edition=703410>>url:https://dzone.com/articles/7-formats-for-great-team-retrospectives?edition=703410]]
314 -
315 -Video zur Sprintretrospektive und die Verwendung in Jira [[1080p>>url:https://swl.informatik.uni-oldenburg.de/swp/video/Jira/Sprint-Retrospektive.mp4]]
316 -
317 -[[~[~[image:/SPB/softwareprojekt-wiki_all/-/wikis/uploads/26a515caf8f128ae250a0240aea01531/Unbenannt2.JPG~|~|alt="Unbenannt2.JPG"~]~]>>path:/SPB/softwareprojekt-wiki_all/-/wikis/uploads/26a515caf8f128ae250a0240aea01531/Unbenannt2.JPG]]
318 -
319 319  
attach_file tshirtfibo.JPG
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.PascalMeyer
Size
... ... @@ -1,1 +1,0 @@
1 -20.8 KB
Content info
attach_file velo.JPG
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.PascalMeyer
Size
... ... @@ -1,1 +1,0 @@
1 -25.3 KB
Content info