{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 137,\n \"parent_id\": 135,\n \"slug\": \"normalisierung\",\n \"path\": \"\/qualitaet\/code-hygiene-score\/normalisierung\",\n \"title\": \"Normalisierung\",\n \"description\": \"Wie Rohwerte auf 0-100 normalisiert werden\",\n \"content\": \"\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-25 | <strong>Aktualisiert:<\/strong> 2025-12-27<\/p>\\n<h2>Prinzip<\/h2>\\n<p>Jeder Faktor wird auf <strong>0-100<\/strong> normalisiert:<\/p>\\n<ul>\\n<li><strong>100<\/strong> = Hygienisch einwandfrei<\/li>\\n<li><strong>0<\/strong> = Hygiene-Grenze überschritten<\/li>\\n<\/ul>\\n<p>Lineare Interpolation dazwischen. Keine Sprünge, keine Magie.<\/p>\\n\\n<h2>Normalisierungsformel<\/h2>\\n<p>Für Metriken wo <em>weniger = sauberer<\/em>:<\/p>\\n<pre><code>normalized = max(0, 100 - ((wert - optimal) \/ (grenze - optimal)) × 100)\\n\\nBeispiel LOC:\\n- optimal = 100, grenze = 600\\n- Bei 350 LOC: 100 - ((350-100) \/ 500) × 100 = 50<\/code><\/pre>\\n\\n<h2>Normalisierung pro Faktor<\/h2>\\n\\n<h3>Lines of Code<\/h3>\\n<pre><code>normalize_loc(loc):\\n if loc ≤ 100: return 100 # sauber\\n if loc ≥ 600: return 0 # Grenze\\n return 100 - ((loc - 100) \/ 500) × 100<\/code><\/pre>\\n<table>\\n<tr><th>LOC<\/th><th>Score<\/th><th>Status<\/th><\/tr>\\n<tr><td>80<\/td><td>100<\/td><td>Sauber<\/td><\/tr>\\n<tr><td>200<\/td><td>80<\/td><td>Gepflegt<\/td><\/tr>\\n<tr><td>350<\/td><td>50<\/td><td>Vernachlässigt<\/td><\/tr>\\n<tr><td>500<\/td><td>20<\/td><td>Verschmutzt<\/td><\/tr>\\n<tr><td>600+<\/td><td>0<\/td><td>Kritisch<\/td><\/tr>\\n<\/table>\\n\\n<h3>Methoden-Anzahl<\/h3>\\n<pre><code>normalize_methods(count):\\n if count ≤ 5: return 100\\n if count ≥ 20: return 0\\n return 100 - ((count - 5) \/ 15) × 100<\/code><\/pre>\\n<table>\\n<tr><th>Methoden<\/th><th>Score<\/th><\/tr>\\n<tr><td>5<\/td><td>100<\/td><\/tr>\\n<tr><td>10<\/td><td>67<\/td><\/tr>\\n<tr><td>15<\/td><td>33<\/td><\/tr>\\n<tr><td>20+<\/td><td>0<\/td><\/tr>\\n<\/table>\\n\\n<h3>Klassen pro Datei<\/h3>\\n<pre><code>normalize_classes(count):\\n if count == 1: return 100\\n if count == 2: return 50\\n if count == 3: return 25\\n return 0<\/code><\/pre>\\n\\n<h3>Dependencies<\/h3>\\n<pre><code>normalize_deps(count):\\n if count ≤ 3: return 100\\n if count ≥ 20: return 0\\n return 100 - ((count - 3) \/ 17) × 100<\/code><\/pre>\\n\\n<h3>Hardcoded Secrets<\/h3>\\n<pre><code>normalize_secrets(count):\\n if count == 0: return 100\\n if count ≥ 1: return 20 # Hard Fail<\/code><\/pre>\\n<p><strong>Sonderregel:<\/strong> Secrets sind ein Hygiene-Killer. Ein Fund → Score maximal 20.<\/p>\\n\\n<h3>Magic Numbers<\/h3>\\n<pre><code>normalize_magic(count):\\n if count == 0: return 100\\n if count ≤ 5: return 100 - (count × 10)\\n return 50 # Floor<\/code><\/pre>\\n<p><em>Weniger kritisch. Floor bei 50, nicht 0.<\/em><\/p>\\n\\n<h2>Dateityp-Anpassungen<\/h2>\\n<p>Pragmatische Hygiene berücksichtigt Kontext:<\/p>\\n<table>\\n<tr><th>Dateityp<\/th><th>Anpassung<\/th><th>Begründung<\/th><\/tr>\\n<tr><td>Controller<\/td><td>Methoden-Grenze: 25<\/td><td>Mehr Actions normal<\/td><\/tr>\\n<tr><td>Entity<\/td><td>LOC-Grenze: 400<\/td><td>Sollten schlank sein<\/td><\/tr>\\n<tr><td>Repository<\/td><td>Methoden-Grenze: 25<\/td><td>Viele CRUD-Methoden<\/td><\/tr>\\n<tr><td>Config<\/td><td>Magic Numbers: ignoriert<\/td><td>Dort gehören sie hin<\/td><\/tr>\\n<tr><td>Test<\/td><td>LOC-Grenze: 800<\/td><td>Test-Setup braucht Platz<\/td><\/tr>\\n<\/table>\",\n \"status\": \"published\",\n \"sort_order\": 2,\n \"depth\": 2,\n \"created_at\": \"2025-12-25T16:08:00\",\n \"updated_at\": \"2025-12-27T15:58:19\"\n }\n}"
}
]
}