Code-Review-Checkliste mit Claude Code
Eine praktische Code-Review-Checkliste mit Claude Code zur Verbesserung der Codequalität.
Code-Reviews mit Claude Code optimieren
Code-Reviews sind ein wichtiger Prozess zur Qualitätssicherung, aber die Belastung der Reviewer ist eine Herausforderung. Mit Claude Code können Sie effiziente Reviews auf Basis einer systematischen Checkliste durchführen.
Sicherheitsprüfung
> Überprüfe den Code dieses PR aus Sicherheitsperspektive.
> Prüfe auf XSS, SQL-Injection und Authentifizierungsschwachstellen.
// Sicherheitscheckliste
const securityChecks = {
// 1. Eingabevalidierung
inputValidation: {
check: 'Wird Benutzereingabe bereinigt?',
bad: `element.innerHTML = userInput;`,
good: `element.textContent = userInput;`,
},
// 2. SQL-Injection
sqlInjection: {
check: 'Werden parametrisierte Abfragen verwendet?',
bad: `db.query(\`SELECT * FROM users WHERE id = \${userId}\`);`,
good: `db.query('SELECT * FROM users WHERE id = ?', [userId]);`,
},
// 3. Authentifizierung & Autorisierung
auth: {
check: 'Haben API-Endpunkte Authentifizierungs-Middleware?',
bad: `app.get('/api/admin/users', handler);`,
good: `app.get('/api/admin/users', requireAuth, requireAdmin, handler);`,
},
// 4. Offenlegung von Geheimnissen
secrets: {
check: 'Werden Umgebungsvariablen nicht an den Client weitergegeben?',
bad: `const apiKey = "sk-1234567890abcdef";`,
good: `const apiKey = process.env.API_KEY;`,
},
};
Performance-Prüfung
// Performance-Checkliste
const performanceChecks = [
{
item: 'Gibt es N+1-Abfragen?',
bad: `
const users = await db.user.findMany();
for (const user of users) {
const posts = await db.post.findMany({ where: { userId: user.id } });
}`,
good: `
const users = await db.user.findMany({
include: { posts: true },
});`,
},
{
item: 'Gibt es unnötige Re-Renders?',
bad: `
function Component() {
const handler = () => doSomething();
return <Child onClick={handler} />;
}`,
good: `
function Component() {
const handler = useCallback(() => doSomething(), []);
return <Child onClick={handler} />;
}`,
},
{
item: 'Wird Virtualisierung für große Listen angewendet?',
check: 'Bei Listen mit über 1000 Einträgen → react-virtual in Betracht ziehen',
},
];
Lesbarkeits- und Wartbarkeitsprüfung
> Mache Vorschläge zur Verbesserung der Lesbarkeit dieses Codes.
> Überprüfe Namenskonventionen, Funktionslänge und Angemessenheit der Kommentare.
// Punkte zur Lesbarkeitsüberprüfung
// 1. Funktionslänge (idealerweise unter 30 Zeilen)
// ❌ Alle Verarbeitung in einer Funktion
async function processOrder(order: Order) {
// 100 Zeilen Verarbeitung...
}
// ✅ Nach Verantwortlichkeiten aufteilen
async function processOrder(order: Order) {
const validated = validateOrder(order);
const priced = calculateTotal(validated);
const payment = await processPayment(priced);
return createConfirmation(payment);
}
// 2. Early-Return-Pattern
// ❌ Tiefe Verschachtelung
function getDiscount(user: User) {
if (user) {
if (user.isPremium) {
if (user.orders > 10) {
return 0.2;
}
return 0.1;
}
return 0.05;
}
return 0;
}
// ✅ Early Return
function getDiscount(user: User) {
if (!user) return 0;
if (!user.isPremium) return 0.05;
if (user.orders > 10) return 0.2;
return 0.1;
}
// 3. Magische Zahlen eliminieren
// ❌
if (status === 3) { /* ... */ }
// ✅
const ORDER_STATUS = { PENDING: 1, PROCESSING: 2, COMPLETED: 3 } as const;
if (status === ORDER_STATUS.COMPLETED) { /* ... */ }
Fehlerbehandlungsprüfung
// Prüfpunkte für die Fehlerbehandlung
// ❌ Fehler verschlucken
try {
await saveData(data);
} catch (e) {
// Nichts tun
}
// ✅ Angemessene Fehlerbehandlung
try {
await saveData(data);
} catch (error) {
logger.error('Datenspeicherung fehlgeschlagen', { error, data: data.id });
throw new AppError('SAVE_FAILED', 'Die Datenspeicherung ist fehlgeschlagen', { cause: error });
}
Review-Automatisierungsskript
// scripts/review-check.ts
import { execSync } from 'child_process';
interface ReviewIssue {
file: string;
line: number;
severity: 'error' | 'warning' | 'info';
message: string;
}
function checkForIssues(): ReviewIssue[] {
const issues: ReviewIssue[] = [];
const diff = execSync('git diff --cached --name-only').toString().split('\n');
for (const file of diff.filter(f => f.endsWith('.ts') || f.endsWith('.tsx'))) {
const content = execSync(`git show :${file}`).toString();
const lines = content.split('\n');
lines.forEach((line, index) => {
// console.log-Prüfung
if (line.includes('console.log') && !file.includes('scripts/')) {
issues.push({
file, line: index + 1, severity: 'warning',
message: 'console.log ist noch vorhanden',
});
}
// TODO/FIXME-Prüfung
if (/\/\/\s*(TODO|FIXME|HACK)/i.test(line)) {
issues.push({
file, line: index + 1, severity: 'info',
message: 'TODO/FIXME-Kommentar vorhanden',
});
}
// any-Typ-Prüfung
if (/:\s*any\b/.test(line)) {
issues.push({
file, line: index + 1, severity: 'warning',
message: 'any-Typ wird verwendet',
});
}
});
}
return issues;
}
const issues = checkForIssues();
issues.forEach(i => console.log(`[${i.severity}] ${i.file}:${i.line} - ${i.message}`));
Zusammenfassung
Code-Reviews sind eng mit Teststrategien verknüpft. Mit Claude Code können Sie systematische Reviews aus den Perspektiven Sicherheit, Performance und Lesbarkeit effizient durchführen. In Kombination mit KI-Pair-Programming können Sie Qualität und Geschwindigkeit der Reviews vereinen. Best Practices für Code-Reviews finden Sie unter Google Engineering Practices.
Related Posts
10 Tipps, um Ihre Produktivität mit Claude Code zu verdreifachen
Entdecken Sie 10 praktische Tipps, um mehr aus Claude Code herauszuholen. Von Prompt-Strategien bis zu Workflow-Abkürzungen — diese Techniken steigern Ihre Effizienz ab sofort.
Canvas/WebGL-Optimierung mit Claude Code
Erfahren Sie, wie Sie Canvas/WebGL mit Claude Code optimieren. Mit praktischen Tipps und Codebeispielen.
Markdown Implementation with Claude Code
Learn about markdown implementation using Claude Code. Practical tips and code examples included.