Deterministischer Kern, nicht-deterministische Hülle: So wird Legacy-Code testbar
Deterministic Core, Non-Deterministic Shell

Gary Bernhardts „Functional Core, Imperative Shell“ lässt sich verallgemeinern: Statt rein funktionaler Programmierung genügt Determinismus. Der Kern trifft Entscheidungen und ist isoliert, die Hülle koordiniert Abhängigkeiten und IO. Nicht-deterministische Operationen wie RNGs, Netzwerk oder Datenbankzugriffe gehören in die Hülle. In Legacy-Code verstecken sich viele kleine deterministische Kerne – wie verstreute Dateien auf einer Festplatte. Defragmentierung des Determinismus: Finde und gruppiere sie, um die testbare Fläche zu vergrößern.
Jede üble Codebasis, die ich gesehen habe, hat einen oder mehrere viel schönere deterministische Zustandsautomaten in sich eingeschlossen. Ich verspreche Ihnen, sie sind da, auch wenn es nicht offensichtlich ist.