Skip to content

Commit db9405d

Browse files
authored
Merge branch 'main' into copilot/add-kiss-principle
2 parents d5f7399 + 77361ee commit db9405d

39 files changed

Lines changed: 8191 additions & 537 deletions

docs/anchors/grasp.adoc

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
= GRASP
2+
:categories: design-principles
3+
:roles: software-developer, software-architect, educator, consultant
4+
:related: solid-principles, gof-design-patterns, clean-architecture, domain-driven-design
5+
:proponents: Craig Larman
6+
:tags: grasp, oop, responsibility-assignment, object-oriented-design, patterns
7+
:tier: 3
8+
9+
[%collapsible]
10+
====
11+
Full Name:: General Responsibility Assignment Software Patterns (or Principles)
12+
13+
Also known as:: GRASP Patterns, Responsibility-Driven Design Guidelines
14+
15+
[discrete]
16+
== *Core Concepts*:
17+
18+
Information Expert:: Assign responsibility to the class that has the information needed to fulfill it
19+
20+
Creator:: Assign responsibility for creating an object to the class that aggregates, contains, or closely uses it
21+
22+
Controller:: Assign responsibility for handling system events to a non-UI class representing the overall system or a use case
23+
24+
Low Coupling:: Assign responsibilities to minimize dependencies between classes, increasing reuse and reducing change impact
25+
26+
High Cohesion:: Assign responsibilities so that classes remain focused, understandable, and manageable
27+
28+
Polymorphism:: Use polymorphic operations to handle variations in type-based behavior instead of conditionals
29+
30+
Pure Fabrication:: Assign a set of responsibilities to an artificial class not representing a domain concept, to achieve low coupling and high cohesion
31+
32+
Indirection:: Assign responsibility to an intermediate object to mediate between other components, reducing direct coupling
33+
34+
Protected Variations:: Identify points of predicted variation and assign responsibilities to create a stable interface around them
35+
36+
37+
Key Proponents:: Craig Larman ("Applying UML and Patterns", 3rd ed., 2004)
38+
39+
[discrete]
40+
== *When to Use*:
41+
42+
* Designing object-oriented systems and deciding where to assign responsibilities
43+
* Improving cohesion and reducing coupling in existing codebases
44+
* Guiding refactoring decisions by evaluating current responsibility assignments
45+
* Teaching foundational object-oriented design principles
46+
47+
[discrete]
48+
== *Related Anchors*:
49+
50+
* <<solid-principles,SOLID Principles>> - Complementary OO design principles for maintainable systems
51+
* <<gof-design-patterns,GoF Design Patterns>> - Patterns that often embody GRASP principles
52+
* <<clean-architecture,Clean Architecture>> - Architectural style that leverages GRASP-based thinking
53+
* <<domain-driven-design,Domain-Driven Design>> - Uses responsibility assignment in the domain model
54+
====

docs/anchors/grasp.de.adoc

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
= GRASP
2+
:categories: design-principles
3+
:roles: software-developer, software-architect, educator, consultant
4+
:related: solid-principles, gof-design-patterns, clean-architecture, domain-driven-design
5+
:proponents: Craig Larman
6+
:tags: grasp, oop, responsibility-assignment, object-oriented-design, patterns
7+
:tier: 3
8+
9+
[%collapsible]
10+
====
11+
Vollständiger Name:: General Responsibility Assignment Software Patterns (oder Principles)
12+
13+
Auch bekannt als:: GRASP-Muster, Richtlinien für verantwortungsgetriebenes Design
14+
15+
[discrete]
16+
== *Kernkonzepte*:
17+
18+
Information Expert:: Weise die Verantwortung der Klasse zu, die die benötigten Informationen besitzt
19+
20+
Creator:: Weise die Verantwortung für die Erzeugung eines Objekts der Klasse zu, die es aggregiert, enthält oder eng damit zusammenarbeitet
21+
22+
Controller:: Weise die Verantwortung für die Behandlung von Systemereignissen einer Nicht-UI-Klasse zu, die das Gesamtsystem oder einen Anwendungsfall repräsentiert
23+
24+
Low Coupling (Geringe Kopplung):: Weise Verantwortlichkeiten so zu, dass Abhängigkeiten zwischen Klassen minimiert werden, um Wiederverwendung zu steigern und Änderungsauswirkungen zu reduzieren
25+
26+
High Cohesion (Hohe Kohäsion):: Weise Verantwortlichkeiten so zu, dass Klassen fokussiert, verständlich und überschaubar bleiben
27+
28+
Polymorphismus:: Nutze polymorphe Operationen, um typbasierte Verhaltensvarianten zu behandeln, anstatt Bedingungsanweisungen zu verwenden
29+
30+
Pure Fabrication:: Weise einer künstlichen Klasse, die kein Domänenkonzept repräsentiert, Verantwortlichkeiten zu, um geringe Kopplung und hohe Kohäsion zu erreichen
31+
32+
Indirektion:: Weise einem Zwischenobjekt die Verantwortung zu, zwischen anderen Komponenten zu vermitteln, um direkte Kopplung zu reduzieren
33+
34+
Protected Variations (Geschützte Variationen):: Identifiziere vorhergesagte Variationspunkte und weise Verantwortlichkeiten zu, um eine stabile Schnittstelle darum herum zu schaffen
35+
36+
37+
Schlüsselvertreter:: Craig Larman ("Applying UML and Patterns", 3. Aufl., 2004)
38+
39+
[discrete]
40+
== *Wann zu verwenden*:
41+
42+
* Entwurf objektorientierter Systeme und Entscheidung über die Zuweisung von Verantwortlichkeiten
43+
* Verbesserung von Kohäsion und Reduzierung von Kopplung in bestehenden Codebasen
44+
* Führung von Refactoring-Entscheidungen durch Bewertung aktueller Verantwortlichkeitszuweisungen
45+
* Vermittlung grundlegender objektorientierter Entwurfsprinzipien
46+
47+
[discrete]
48+
== *Verwandte Anker*:
49+
50+
* <<solid-principles,SOLID Principles>> - Ergänzende OO-Entwurfsprinzipien für wartbare Systeme
51+
* <<gof-design-patterns,GoF Design Patterns>> - Muster, die häufig GRASP-Prinzipien verkörpern
52+
* <<clean-architecture,Clean Architecture>> - Architekturstil, der GRASP-basiertes Denken nutzt
53+
* <<domain-driven-design,Domain-Driven Design>> - Nutzt Verantwortlichkeitszuweisung im Domänenmodell
54+
====

docs/anchors/pert.adoc

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
= PERT
2+
:categories: strategic-planning
3+
:roles: product-owner, business-analyst, team-lead, consultant, educator
4+
:related: moscow, user-story-mapping, impact-mapping
5+
:proponents: D.G. Malcolm, J.H. Roseboom, C.E. Clark, W. Fazar
6+
:tags: pert, project-planning, estimation, schedule, uncertainty, three-point-estimation, critical-path, network-diagram
7+
:tier: 2
8+
9+
[%collapsible]
10+
====
11+
Full Name:: Program Evaluation and Review Technique
12+
13+
Also known as:: Three-Point Estimation, PERT Network Analysis
14+
15+
[discrete]
16+
== *Core Concepts*:
17+
18+
Three-Time Estimation:: Each activity requires three duration estimates: Optimistic (O) — best case if everything goes well; Most Likely (M) — realistic expected duration; Pessimistic (P) — worst case if problems arise
19+
20+
PERT Formula:: Weighted average: *E = (O + 4M + P) / 6* — weights the most likely estimate four times more than the extreme estimates
21+
22+
Standard Deviation:: *σ = (P − O) / 6* — quantifies schedule uncertainty per activity; used to calculate confidence intervals for the project completion date
23+
24+
Network Diagram:: Activities are represented as nodes or arrows in a directed acyclic graph; dependencies between activities are modelled explicitly
25+
26+
Critical Path:: The longest path through the network determines the minimum project duration; any delay on the critical path delays the whole project
27+
28+
Float / Slack:: Time an activity can be delayed without affecting the project end date; activities on the critical path have zero float
29+
30+
Probabilistic Scheduling:: Unlike CPM (which uses single-point estimates), PERT treats duration as a random variable, enabling statistical confidence ranges for milestones
31+
32+
Origin:: Developed in 1958 by D.G. Malcolm, J.H. Roseboom, C.E. Clark, and W. Fazar at Booz Allen Hamilton for the US Navy's Polaris submarine missile programme
33+
34+
Key Proponents:: D.G. Malcolm, J.H. Roseboom, C.E. Clark, W. Fazar ("Application of a Technique for Research and Development Program Evaluation", 1959)
35+
36+
[discrete]
37+
== *When to Use*:
38+
39+
* Estimating effort and schedule for projects with significant uncertainty
40+
* Planning R&D, software development, or any novel work where duration is hard to predict
41+
* Communicating schedule risk and confidence levels to stakeholders
42+
* Identifying the critical path to focus risk management and resource allocation
43+
* Complementing Story Points or T-shirt sizing with a probabilistic time dimension
44+
45+
[discrete]
46+
== *Related Anchors*:
47+
48+
* <<moscow,MoSCoW>>
49+
* <<user-story-mapping,User Story Mapping>>
50+
* <<impact-mapping,Impact Mapping>>
51+
====

docs/anchors/pert.de.adoc

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
= PERT
2+
:categories: strategic-planning
3+
:roles: product-owner, business-analyst, team-lead, consultant, educator
4+
:related: moscow, user-story-mapping, impact-mapping
5+
:proponents: D.G. Malcolm, J.H. Roseboom, C.E. Clark, W. Fazar
6+
:tags: pert, project-planning, estimation, schedule, uncertainty, three-point-estimation, critical-path, network-diagram
7+
8+
[%collapsible]
9+
====
10+
Vollständiger Name:: Program Evaluation and Review Technique (Programmbewertungs- und Überprüfungstechnik)
11+
12+
Auch bekannt als:: Drei-Punkte-Schätzung, PERT-Netzplananalyse
13+
14+
[discrete]
15+
== *Kernkonzepte*:
16+
17+
Drei-Punkte-Schätzung:: Jede Aktivität benötigt drei Dauerschätzungen: Optimistisch (O) — bester Fall, wenn alles reibungslos läuft; Wahrscheinlichst (M) — realistisch erwartete Dauer; Pessimistisch (P) — schlimmster Fall bei auftretenden Problemen
18+
19+
PERT-Formel:: Gewichteter Mittelwert: *E = (O + 4M + P) / 6* — die wahrscheinlichste Schätzung wird viermal stärker gewichtet als die Extremwerte
20+
21+
Standardabweichung:: *σ = (P − O) / 6* — quantifiziert die Terminunsicherheit je Aktivität; wird zur Berechnung von Konfidenzintervallen für den Projektabschlusstermin verwendet
22+
23+
Netzplan:: Aktivitäten werden als Knoten oder Pfeile in einem gerichteten azyklischen Graphen dargestellt; Abhängigkeiten zwischen Aktivitäten werden explizit modelliert
24+
25+
Kritischer Pfad:: Der längste Pfad durch das Netzwerk bestimmt die minimale Projektdauer; jede Verzögerung auf dem kritischen Pfad verzögert das gesamte Projekt
26+
27+
Puffer / Schlupf:: Zeit, um die eine Aktivität verzögert werden kann, ohne den Projektendtermin zu beeinflussen; Aktivitäten auf dem kritischen Pfad haben keinen Puffer
28+
29+
Probabilistische Terminplanung:: Im Gegensatz zur CPM (die Einzelpunktschätzungen verwendet) behandelt PERT Dauern als Zufallsvariablen und ermöglicht statistische Konfidenzintervalle für Meilensteine
30+
31+
Ursprung:: 1958 von D.G. Malcolm, J.H. Roseboom, C.E. Clark und W. Fazar bei Booz Allen Hamilton für das Polaris-U-Boot-Raketenprogramm der US Navy entwickelt
32+
33+
Schlüsselvertreter:: D.G. Malcolm, J.H. Roseboom, C.E. Clark, W. Fazar („Application of a Technique for Research and Development Program Evaluation", 1959)
34+
35+
[discrete]
36+
== *Wann zu verwenden*:
37+
38+
* Aufwands- und Terminschätzung für Projekte mit erheblicher Unsicherheit
39+
* Planung von F&E-, Softwareentwicklungs- oder anderen neuartigen Vorhaben, bei denen Dauern schwer vorherzusagen sind
40+
* Kommunikation von Terminrisiken und Konfidenzwerten gegenüber Stakeholdern
41+
* Identifikation des kritischen Pfads zur gezielten Risikobewältigung und Ressourcenzuteilung
42+
* Ergänzung von Story Points oder T-Shirt-Größen um eine probabilistische Zeitdimension
43+
44+
*Verwandte Anker*:
45+
46+
* <<moscow,MoSCoW>>
47+
* <<user-story-mapping,User Story Mapping>>
48+
* <<impact-mapping,Impact Mapping>>
49+
====
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
= Vertical Slice Architecture (VSA)
2+
:categories: software-architecture
3+
:roles: software-architect, software-developer
4+
:related: clean-architecture, hexagonal-architecture, cqrs
5+
:proponents: Jimmy Bogard
6+
:tags: feature slices, vertical slices, VSA, feature cohesion, CQRS
7+
:tier: 3
8+
9+
[%collapsible]
10+
====
11+
Also known as:: VSA, Feature Slices
12+
13+
[discrete]
14+
== *Core Concepts*:
15+
16+
Vertical slices:: Each feature is organized as an end-to-end slice spanning all layers (request, validation, domain logic, persistence, API)
17+
18+
Feature cohesion:: Code for a feature lives together regardless of technical layer
19+
20+
No horizontal layers:: Avoids traditional layered architecture (controllers, services, repositories) as primary organizing principle
21+
22+
CQRS alignment:: Naturally pairs with Command/Query separation per slice
23+
24+
Thin shared layer:: Minimal shared infrastructure; each slice owns its behavior
25+
26+
Screaming intent:: Folder/namespace structure reflects features, not technical concerns
27+
28+
Independent evolution:: Slices can evolve independently with minimal cross-cutting changes
29+
30+
Reduced coupling:: Changes to one feature rarely affect other features
31+
32+
33+
Key Proponents:: Jimmy Bogard
34+
35+
[discrete]
36+
== *When to Use*:
37+
38+
* Applications with many distinct business features
39+
* When feature teams own end-to-end delivery
40+
* To reduce merge conflicts in large teams
41+
* When traditional layered architecture creates too much coupling across features
42+
43+
[discrete]
44+
== *Related Anchors*:
45+
46+
* <<clean-architecture,Clean Architecture>>
47+
* <<hexagonal-architecture,Hexagonal Architecture (Ports & Adapters)>>
48+
* <<cqrs,CQRS>>
49+
====
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
= Vertical Slice Architecture (VSA)
2+
:categories: software-architecture
3+
:roles: software-architect, software-developer
4+
:related: clean-architecture, hexagonal-architecture, cqrs
5+
:proponents: Jimmy Bogard
6+
:tags: feature slices, vertical slices, VSA, feature cohesion, CQRS
7+
8+
[%collapsible]
9+
====
10+
Auch bekannt als:: VSA, Feature Slices
11+
12+
[discrete]
13+
== *Kernkonzepte*:
14+
15+
Vertikale Schnitte:: Jedes Feature ist als End-to-End-Schnitt organisiert, der alle Schichten umfasst (Request, Validierung, Domänenlogik, Persistenz, API)
16+
17+
Feature-Kohäsion:: Code für ein Feature liegt unabhängig von der technischen Schicht zusammen
18+
19+
Keine horizontalen Schichten:: Vermeidet traditionelle geschichtete Architektur (Controller, Services, Repositories) als primäres Organisationsprinzip
20+
21+
CQRS-Ausrichtung:: Passt natürlich zur Command/Query-Trennung pro Schnitt
22+
23+
Dünne gemeinsame Schicht:: Minimale gemeinsame Infrastruktur; jeder Schnitt besitzt sein eigenes Verhalten
24+
25+
Sprechende Absicht:: Ordner-/Namespace-Struktur spiegelt Features wider, keine technischen Belange
26+
27+
Unabhängige Weiterentwicklung:: Jeder Schnitt kann unabhängig mit minimalen übergreifenden Änderungen weiterentwickelt werden
28+
29+
Reduzierte Kopplung:: Änderungen an einem Feature beeinflussen selten andere Features
30+
31+
32+
Schlüsselvertreter:: Jimmy Bogard
33+
34+
[discrete]
35+
== *Wann zu verwenden*:
36+
37+
* Anwendungen mit vielen verschiedenen Geschäftsfeatures
38+
* Wenn Feature-Teams die End-to-End-Lieferung verantworten
39+
* Um Merge-Konflikte in großen Teams zu reduzieren
40+
* Wenn traditionelle Schichtenarchitektur zu viel Kopplung zwischen Features erzeugt
41+
42+
[discrete]
43+
== *Verwandte Anker*:
44+
45+
* <<clean-architecture,Clean Architecture>>
46+
* <<hexagonal-architecture,Hexagonal Architecture (Ports & Adapters)>>
47+
* <<cqrs,CQRS>>
48+
====

evaluations/generate-report.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
def get_model_display(backend, config):
3737
"""Get exact model display name from config."""
38+
if backend == "claude" and config.get("claude_model"):
39+
return config["claude_model"]
3840
if backend == "openai" and config.get("openai_model"):
3941
return config["openai_model"]
4042
if backend == "mistral" and config.get("mistral_model"):

0 commit comments

Comments
 (0)