diff --git a/plantuml/gilded-rose.png b/plantuml/gilded-rose.png new file mode 100644 index 00000000..3f79be92 Binary files /dev/null and b/plantuml/gilded-rose.png differ diff --git a/plantuml/gilded-rose.puml b/plantuml/gilded-rose.puml new file mode 100644 index 00000000..1d36cb1d --- /dev/null +++ b/plantuml/gilded-rose.puml @@ -0,0 +1,72 @@ +@startuml + +skinparam backgroundColor transparent + +start +note left + Do this for each item in the list. + An item has a name, a sell in value and a quality value +end note + +if (not "Aged Brie" and not "Backstage passes to a TAFKAL80ETC concert") then (yes) + if (quality > 0) then (yes) + if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower quality with 1; + else (no) + endif + else (no) + endif +else (no) + if (quality < 50) then (yes) + :increase quality with 1; + if ("Backstage passes to a TAFKAL80ETC concert") then (yes) + if (sell in < 11) then (yes) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif + else (no) + endif + if (sell in < 6) then (yes) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif + else (no) + endif + else (no) + endif + else (no) + endif +endif + +if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower sell in with 1; +else (no) +endif + +if (sell in < 0) then (yes) + if (not "Aged Brie") then (yes) + if (not "Backstage passes to a TAFKAL80ETC concert") then (yes) + if (quality > 0) then (yes) + if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower quality with 1; + else (no) + endif + else (no) + endif + else (no) + :lower quality with quality; + endif + else (no) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif + endif +else (no) +endif + +stop + +@enduml diff --git a/plantuml/history/01_lower-both-values.puml b/plantuml/history/01_lower-both-values.puml new file mode 100644 index 00000000..8fa637bc --- /dev/null +++ b/plantuml/history/01_lower-both-values.puml @@ -0,0 +1,12 @@ +@startuml + +skinparam backgroundColor transparent + +start + +:lower quality with 1; +:lower sell in with 1; + +stop + +@enduml diff --git a/plantuml/history/02_sell-by-passed.puml b/plantuml/history/02_sell-by-passed.puml new file mode 100644 index 00000000..3b2c317d --- /dev/null +++ b/plantuml/history/02_sell-by-passed.puml @@ -0,0 +1,17 @@ +@startuml + +skinparam backgroundColor transparent + +start + +:lower quality with 1; +:lower sell in with 1; + +if (sell in < 0) then (yes) + :lower quality with 1; +else (no) +endif + +stop + +@enduml diff --git a/plantuml/history/03_quality-never-negative.puml b/plantuml/history/03_quality-never-negative.puml new file mode 100644 index 00000000..b2b9ed7e --- /dev/null +++ b/plantuml/history/03_quality-never-negative.puml @@ -0,0 +1,24 @@ +@startuml + +skinparam backgroundColor transparent + +start + +if (quality > 0) then (yes) + :lower quality with 1; +else (no) +endif + +:lower sell in with 1; + +if (sell in < 0) then (yes) + if (quality > 0) then (yes) + :lower quality with 1; + else (no) + endif +else (no) +endif + +stop + +@enduml diff --git a/plantuml/history/04_aged-brie.puml b/plantuml/history/04_aged-brie.puml new file mode 100644 index 00000000..7b74e874 --- /dev/null +++ b/plantuml/history/04_aged-brie.puml @@ -0,0 +1,32 @@ +@startuml + +skinparam backgroundColor transparent + +start + +if (not "Aged Brie") then (yes) + if (quality > 0) then (yes) + :lower quality with 1; + else (no) + endif +else (no) + :increase quality with 1; +endif + +:lower sell in with 1; + +if (sell in < 0) then (yes) + if (not "Aged Brie") then (yes) + if (quality > 0) then (yes) + :lower quality with 1; + else (no) + endif + else (no) + :increase quality with 1; + endif +else (no) +endif + +stop + +@enduml diff --git a/plantuml/history/05_quality-max-50.puml b/plantuml/history/05_quality-max-50.puml new file mode 100644 index 00000000..69cc86d0 --- /dev/null +++ b/plantuml/history/05_quality-max-50.puml @@ -0,0 +1,38 @@ +@startuml + +skinparam backgroundColor transparent + +start + +if (not "Aged Brie") then (yes) + if (quality > 0) then (yes) + :lower quality with 1; + else (no) + endif +else (no) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif +endif + +:lower sell in with 1; + +if (sell in < 0) then (yes) + if (not "Aged Brie") then (yes) + if (quality > 0) then (yes) + :lower quality with 1; + else (no) + endif + else (no) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif + endif + else (no) +endif + +stop + +@enduml diff --git a/plantuml/history/06_sulfuras.puml b/plantuml/history/06_sulfuras.puml new file mode 100644 index 00000000..25350c1d --- /dev/null +++ b/plantuml/history/06_sulfuras.puml @@ -0,0 +1,47 @@ +@startuml + +skinparam backgroundColor transparent + +start + +if (not "Aged Brie") then (yes) + if (quality > 0) then (yes) + if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower quality with 1; + else (no) + endif + else (no) + endif +else (no) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif +endif + +if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower sell in with 1; +else (no) +endif + +if (sell in < 0) then (yes) + if (not "Aged Brie") then (yes) + if (quality > 0) then (yes) + if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower quality with 1; + else (no) + endif + else (no) + endif + else (no) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif + endif +else (no) +endif + +stop + +@enduml diff --git a/plantuml/history/07_backstage-passes.puml b/plantuml/history/07_backstage-passes.puml new file mode 100644 index 00000000..5d6f2fa3 --- /dev/null +++ b/plantuml/history/07_backstage-passes.puml @@ -0,0 +1,68 @@ +@startuml + +skinparam backgroundColor transparent + +start + +if (not "Aged Brie" and not "Backstage passes to a TAFKAL80ETC concert") then (yes) + if (quality > 0) then (yes) + if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower quality with 1; + else (no) + endif + else (no) + endif +else (no) + if (quality < 50) then (yes) + :increase quality with 1; + if ("Backstage passes to a TAFKAL80ETC concert") then (yes) + if (sell in < 11) then (yes) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif + else (no) + endif + if (sell in < 6) then (yes) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif + else (no) + endif + else (no) + endif + else (no) + endif +endif + +if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower sell in with 1; +else (no) +endif + +if (sell in < 0) then (yes) + if (not "Aged Brie") then (yes) + if (not "Backstage passes to a TAFKAL80ETC concert") then (yes) + if (quality > 0) then (yes) + if (not "Sulfuras, Hand of Ragnaros") then (yes) + :lower quality with 1; + else (no) + endif + else (no) + endif + else (no) + :lower quality with quality; + endif + else (no) + if (quality < 50) then (yes) + :increase quality with 1; + else (no) + endif + endif +else (no) +endif + +stop + +@enduml diff --git a/plantuml/readme.md b/plantuml/readme.md new file mode 100644 index 00000000..9c577adb --- /dev/null +++ b/plantuml/readme.md @@ -0,0 +1,22 @@ +# PlantUML +This UML refactoring exercise is aimed at less technical people like analysts, testers and other non-programmers. The key takeaway message is clarifying the need for continuous refactoring to people who do not code on a daily basis. + +## Running and rendering +If you want to get started quickly, just copy the contents of `plantuml/gilded-rose.puml`, and paste it in https://www.planttext.com/ + +Several alternatives are available to render PlantUML, see https://plantuml.com/running. + +## Syntax +For the syntax of activity diagrams in PlantUML, please refer to https://plantuml.com/activity-diagram-beta + +## Workshop +You can run this exercise as a workshop. + +During this workshop, you start off with a presentation explaining the domain, while filling out the testcases found under `plantuml/workshop`. After that, participants are invited to refactor the UML Activity Diagram, using the examples that were discovered during the presentation. +[The google slides can be found here](https://docs.google.com/presentation/d/1kkRnVQjZELcfuGoFXaiSY_HxbO4lPQnSgHRGQZIH2nU/edit?usp=sharing). + +## History +If you want to illustrate how this activity diagram got to this state, you can show the requirements and the files under the /history directory. These individual files show the evolution of the activity diagram. + +## Original state +![The original activity diagram](./gilded-rose.png) diff --git a/plantuml/workshop-materials/testcases.pdf b/plantuml/workshop-materials/testcases.pdf new file mode 100644 index 00000000..be311e2d Binary files /dev/null and b/plantuml/workshop-materials/testcases.pdf differ