# Tooling: Rollen, Tools und Packs

Wofür ein Tool da ist (Rollen), welche Tools sie spielen können, und die Packs, in denen die Tools kommen. Die Begriffe sind im Glossar der Suite definiert; die Regeln stehen in [tooling-model.md](https://github.com/Art4/continuous-refactoring/blob/0.10.0/skills/continuous-refactoring/references/tooling-model.md).

## Packs

| Pack | Gilt, wenn |
| --- | --- |
| [generic](https://continuous-refactoring.de/de/docs/pack-generic.md) | Immer. |
| [php](https://continuous-refactoring.de/de/docs/pack-php.md) | Das Repository enthält PHP-Code: eine composer.json (oder composer/composer.json) oder mindestens eine *.php-Datei außerhalb von vendor/. |
| [twig-php](https://continuous-refactoring.de/de/docs/pack-twig-php.md) | Das PHP-Pack gilt, und die composer.json (oder, bei einer indirekten Anforderung, die composer.lock) verlangt twig/twig oder ein Paket, das Twig mitbringt, etwa symfony/twig-bundle. Die Dateiendung der Templates entscheidet nicht. |

## Rollen

| Rolle | Zweck | Signal | Tools |
| --- | --- | --- | --- |
| Editor Settings (`editor-settings`) | Die grundlegenden Formatierungskonventionen (Einrückung, Zeichensatz, Zeilenenden) sind einmal festgehalten, für jeden Editor. | – | .editorconfig (recommended, generic) |
| Continuous Integration (`continuous-integration`) | Eine Pipeline, die die Qualitätsjobs bei jeder Änderung ausführt. | – | CI Runner (recommended, generic) |
| Package Management (`package-management`) | Abhängigkeiten werden von einem Paketmanager deklariert und installiert. | – | Composer (recommended, php) |
| Autoloading (`autoloading`) | Klassen werden über eine Konvention gefunden, nicht über von Hand geschriebene Includes. | – | PSR-4 Autoloading (recommended, php) |
| Code Style (`code-style`) | Ein automatischer Fixer hält den Code in einem Stil, damit spätere automatisierte Umschreibungen formatiert ankommen. | – | PHP CS Fixer (recommended, php); Laravel Pint (recognized, php); Easy Coding Standard (recognized, php); PHP_CodeSniffer (recognized, php); Twig-CS-Fixer (recommended, twig-php) |
| Testing (`testing`) | Eine Testsuite, die lokal läuft und Regressionen abfängt. | – | PHPUnit (recommended, php) |
| Test Coverage (`test-coverage`) | Der Anteil des Codes, den die Tests erreichen, wird gemessen und darf nicht sinken. | Untested / hard-to-test | Test Coverage Floor (recommended, php) |
| Mutation Testing (`mutation-testing`) | Kleine Fehler werden einzeln in den Code eingebaut, und die Tests müssen jeden bemerken: Sie werden danach beurteilt, was sie fangen, nicht danach, was sie erreichen. | Untested / hard-to-test | Infection (on-request, php); Pest Mutation Testing (recognized, php) |
| Static Analysis (`static-analysis`) | Ein Tool liest den Code, ohne ihn auszuführen, und meldet Fehler, auf einer Strenge, die das Projekt Schritt für Schritt anhebt. | – | PHPStan (recommended, php); Psalm (recognized, php); TwigStan (recommended, twig-php) |
| Taint Analysis (`taint-analysis`) | Ein Tool verfolgt Daten von nicht vertrauenswürdiger Eingabe bis zu gefährlichen Operationen. | Security | Psalm Taint Analysis (on-request, php) |
| API Compatibility (`api-compatibility`) | Ein Check vergleicht den Code mit dem letzten Release und schlägt fehl, wenn etwas bricht, das das BC-Versprechen des Projekts abdeckt. | – | Roave Backward Compatibility Check (recommended, php) |
| Automated Refactoring (`automated-refactoring`) | Regelsätze schreiben Code mechanisch um, ein reviewbarer Satz nach dem anderen. | – | Rector (recommended, php) |
| Code Smell Detection (`code-smell-detection`) | Ein Tool misst Komplexität und markiert Code, der schwer zu lesen ist. | Understandability | PHPMD (recommended, php) |
| Secret Scanning (`secret-scanning`) | Committete Secrets und Zugangsdaten werden gefunden, bevor sie ausgeliefert werden. | – | Secret Detection (on-request, generic) |
| Static Security Analysis (`static-security-analysis`) | Ein regelbasierter Scanner sucht im Quellcode nach verbreiteten Schwachstellenmustern. | Security | Semgrep (OWASP Top 10) (on-request, php) |
