本文へ移動
cccskills
無料GitHub で公開

bugfix-protocol

Systematic 6-phase debugging protocol. Structured approach to bugs with quick checks, isolated testing, 20-minute rule, and bug report template.

インストール方法を見る

含まれるファイル(13)

  • SKILL.md9.2 KB
  • banner.png148.4 KB
  • EN/SKILL.md8.8 KB
  • ES/SKILL.md10.3 KB
  • JA/SKILL.md10.9 KB
  • RU/SKILL.md14.2 KB
  • SKILL.en.md9.1 KB
  • SKILL.es.md10.6 KB
  • SKILL.fr.md9.2 KB
  • SKILL.ja.md11.4 KB
  • SKILL.ru.md14.9 KB
  • SKILL.zh.md9.3 KB
  • ZH/SKILL.md8.9 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

<img src="banner.png" width="100%" alt="bugfix-protocol banner">

Bugfix-Protokoll: Systematisches 6-Phasen Debugging

Strukturiertes Vorgehen bei Bugs — von der Symptom-Analyse bis zur Verifikation. Verhindert planloses Herumprobieren und stellt sicher, dass Fixes nachhaltig sind.


Uebersicht

PhaseNameZielMax. Zeit
1Schnell-ChecksOffensichtliche Ursachen ausschliessen2 min
2DiagnoseUrsache lokalisieren10 min
3Isolierter TestBug reproduzierbar machen5 min
4FixMinimale Korrektur10 min
5VerifikationFix pruefen + Seiteneffekte5 min
6DokumentationWissen sichern2 min

20-Minuten-Regel: Wenn nach 20 Minuten kein Fortschritt → Ansatz wechseln oder Hilfe holen.


Phase 1: Schnell-Checks (2 min)

Bevor du tief einsteigst — pruefe die haeufigsten Ursachen:

Checkliste

  • Syntax-Fehler? Fehlermeldung genau lesen, Zeile pruefen
  • Import-Fehler? Modul installiert? Richtiger Name? Circular Import?
  • Tippfehler? Variablen-/Funktionsnamen korrekt?
  • Falscher Datentyp? String statt Int? None wo Objekt erwartet?
  • Veralteter Cache? __pycache__ loeschen, Neustart
  • Falsche Umgebung? Richtiges venv aktiv? Richtige Python-Version?
  • Encoding? UTF-8 vs. cp1252 (Windows-Klassiker)

Schnell-Aktionen

# Cache leeren
find . -name "__pycache__" -type d -exec rm -rf {} + 2>&1
find . -name "*.pyc" -delete 2>&1

# Imports pruefen
python -c "import modulname"

# Syntax pruefen
python -m py_compile datei.py

Phase 2: Diagnose (10 min)

Strategie: Von aussen nach innen

  1. Fehlermeldung analysieren — Traceback von unten nach oben lesen
  2. Letzte Aenderungen pruefen — git diff, git log --oneline -10
  3. Diagnose-Tools einsetzen — Eigene Diagnose-Tools je nach Projekt verwenden

Diagnose-Tools (Beispiele)

Je nach Projekt koennen spezialisierte Diagnose-Skripte hilfreich sein:

ToolZweck
import_diagnose.pyImport-Probleme analysieren
method_analyzer.pyMethoden-Signaturen pruefen
env_checker.pyUmgebungsvariablen/Pfade validieren

Hinweis: Eigene Diagnose-Tools je nach Projekt erstellen oder vorhandene Projekt-Tools nutzen. Wichtig ist das systematische Vorgehen, nicht das spezifische Tool.

Debugging-Techniken

# 1. Print-Debugging (schnell aber effektiv)
print(f"DEBUG: variable={variable!r}, type={type(variable)}")

# 2. Breakpoint (interaktiv)
breakpoint()  # Python 3.7+

# 3. Traceback erweitern
import traceback
traceback.print_exc()

# 4. Logging statt Print
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug(f"State: {state!r}")

Phase 3: Isolierter Test (5 min)

Minimal Reproducible Example (MRE)

Ziel: Bug mit minimal Code reproduzieren.

# test_bug.py — Minimaler Reproduktions-Test
"""
Bug: [Kurze Beschreibung]
Erwartet: [Was sollte passieren]
Tatsaechlich: [Was passiert stattdessen]
"""

# Minimaler Setup
# ... nur das Noetigste

# Bug-Ausloeser
# ... exakter Code der den Bug triggert

# Erwartetes Ergebnis
# assert result == expected, f"Got {result}"

Isolations-Strategien

  1. Neue Datei: Bug in eigener Datei reproduzieren
  2. Abhaengigkeiten entfernen: Eine nach der anderen, bis Bug verschwindet
  3. Halbieren: Code-Block halbieren, pruefen welche Haelfte den Bug enthaelt
  4. Git Bisect: git bisect start, git bisect bad, git bisect good <commit>

Phase 4: Fix (10 min)

Prinzipien

  1. Minimal: Aendere so wenig wie moeglich
  2. Verstehen: Nie blind fixen — verstehe WARUM es kaputt ist
  3. Eine Sache: Ein Fix pro Commit, nicht mehrere Probleme gleichzeitig
  4. Rueckwaerts-kompatibel: Bestehende Funktionalitaet nicht brechen

Fix-Muster

# SCHLECHT: Symptom behandeln
try:
    result = broken_function()
except:  # Alles schlucken
    result = default_value

# GUT: Ursache beheben
def broken_function():
    if input_data is None:  # Eigentliche Ursache: None-Check fehlte
        return default_value
    return process(input_data)

Haeufige Fix-Kategorien

KategorieTypischer Fix
None/NullGuard-Clause: if x is None: return default
Index-FehlerBounds-Check: if i < len(lst)
Type-FehlerExplizite Konvertierung: str(x), int(x)
Import-FehlerPfad korrigieren, Paket installieren
EncodingUTF-8 explizit angeben: encoding='utf-8'
Race ConditionLock/Mutex, oder Reihenfolge aendern
State-BugInitialisierung pruefen, Reset einfuegen

Phase 5: Verifikation (5 min)

Checkliste

  • Bug ist gefixt: Originales Problem tritt nicht mehr auf
  • MRE besteht: Isolierter Test laeuft durch
  • Keine Regression: Bestehende Tests laufen noch
  • Edge Cases: Leere Eingabe, None, grosse Daten getestet
  • Projekt-Tools: Im Projekt-Tools-Verzeichnis nachschauen ob es relevante Test-/Validierungstools gibt

Test-Befehle

# Unit-Tests
python -m pytest tests/ -v

# Nur betroffene Tests
python -m pytest tests/test_modul.py -v -k "test_name"

# Type-Check
python -m mypy datei.py

# Lint
python -m flake8 datei.py

Phase 6: Dokumentation (2 min)

Bug-Report Template

## Bug-Report: [Kurztitel]

**Datum:** YYYY-MM-DD
**Schwere:** kritisch / hoch / mittel / niedrig
**Komponente:** [Modul/Datei]

### Symptom
[Was der User sieht / Fehlermeldung]

### Ursache
[Technische Root-Cause]

### Fix
[Was geaendert wurde + warum]

### Betroffene Dateien
- `datei1.py` — [Aenderung]
- `datei2.py` — [Aenderung]

### Praevention
[Wie kann dieser Bug-Typ in Zukunft vermieden werden?]

Commit-Message Format

fix: [Kurze Beschreibung des Fixes]

Ursache: [Root-Cause in einem Satz]
Fix: [Was geaendert wurde]
Test: [Wie verifiziert]

PyQt6 / GUI Debugging — Haeufige Fallen

Diese Sektion ist relevant fuer Desktop-GUI-Projekte mit PyQt6/PySide6.

Top 5 PyQt6 Traps

TrapProblemLoesung
Signal-Slot DisconnectSignal connected aber Handler laeuft nichtprint in Handler, Signature pruefen
Thread-SafetyGUI-Update aus Worker-ThreadQMetaObject.invokeMethod oder Signal nutzen
Layout-CascadeWidget unsichtbar/falsch platziertwidget.show(), Layout-Hierarchie pruefen
Event-Loop BlockGUI friert einLangzeit-Ops in QThread auslagern
Garbage CollectionWidget verschwindet ploetzlichReferenz als self.widget halten

PyQt6 Debug-Helfer

# Widget-Hierarchie ausgeben
def dump_widget_tree(widget, indent=0):
    print(" " * indent + f"{widget.__class__.__name__}: {widget.objectName()}")
    for child in widget.findChildren(QWidget):
        if child.parent() == widget:
            dump_widget_tree(child, indent + 2)

# Signal-Debugging
from PyQt6.QtCore import QObject
original_connect = QObject.connect
def debug_connect(self, *args, **kwargs):
    print(f"CONNECT: {self.__class__.__name__} -> {args}")
    return original_connect(self, *args, **kwargs)

Quick Reference

BUG GEFUNDEN?
     │
     ▼
[Phase 1: Schnell-Checks]  ──── Offensichtlich? → FIX
     │
     ▼
[Phase 2: Diagnose]  ────────── Ursache klar? → Phase 4
     │
     ▼
[Phase 3: Isolierter Test]  ── Reproduzierbar? → Phase 4
     │                              │
     │                         Nicht reproduzierbar?
     │                              │
     │                         Logging einbauen,
     │                         auf erneutes Auftreten warten
     ▼
[Phase 4: Fix]  ─────────────── Minimal + verstanden
     │
     ▼
[Phase 5: Verifikation]  ────── Tests gruen? → Phase 6
     │                              │
     │                         Tests rot? → Zurueck zu Phase 4
     ▼
[Phase 6: Dokumentation]  ───── Bug-Report + Commit

20-Minuten-Regel

Wenn du nach 20 Minuten festhaengst:

  1. Ansatz wechseln — Andere Debugging-Technik probieren
  2. Rubber Duck — Problem laut erklaeren (oder aufschreiben)
  3. Pause — 5 Minuten weggehen, dann mit frischem Blick
  4. Hilfe holen — Kollege fragen, Stack Overflow, Dokumentation
  5. Zuruecksetzen — git stash, komplett neu anfangen

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Akademisches Studien- und Fristenmanagement mit Quellenprüfung, Datenschutz und realistischer Handlungsplanung.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills72026年10月12日 更新

Aktives Lernen, Erarbeitung von Fachinhalten und strukturierte Erstellung von Synthesen.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills72026年10月12日 更新

Prüfungsvorbereitung, Selbsttests, Probeklausuren und systematische Fehleranalyse.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills72026年10月12日 更新

Terapia de Aceptación y Compromiso (ACT) según Steven Hayes: modelo Hexaflex con los seis procesos nucleares de la flexibilidad psicológica.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills72026年10月12日 更新

Acceptance & Commitment Therapy (ACT) nach Steven Hayes: Hexaflex-Modell mit den sechs Kernprozessen psychischer Flexibilität.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills72026年10月12日 更新

Acceptance & Commitment Therapy (ACT) according to Steven Hayes: Hexaflex model with the six core processes of psychological flexibility.

日本語の概要は準備中です。原文の説明を表示しています。

ellmos-ai/skills72026年10月12日 更新

ellmos-ai のスキルをすべて見る

このスキルの問題を報告する