Scientist: GitHub stellt Werkzeug für Code Refactoring vor

Damit sich alter gegen neuen Code tauschen lässt, ohne dass es bei den Anwendern negativ auffällt, hilft bei GitHub Scientist. Das Ruby-Tool ist nun in Version 1.0 verfügbar.

In Pocket speichern vorlesen Druckansicht
GitHub stellt Scientist für Code Refactoring vor
Lesezeit: 2 Min.
Von
  • Julia Schmidt

GitHubs Jesse Tooth hat im Blog des Codeverwaltungsdienst die Veröffentlichung der ersten Hauptversion des Refactoring Tools Scientist bekannt gegeben. Es dient dazu, Produktionsdaten und das Verhalten eines Systems zu prüfen und so sicherzustellen, dass die Neuimplementierung diesbezüglich nicht von der Vorlage abrückt.

Normalerweise käme bei größeren Änderungen das "Branch by abstraction"-Muster zum Einsatz, bei dem eine Abstraktionsschicht um den zu ändernden Code gelegt wird. Sie verweist auf den alten Code, bis die neue Variante fertig ist, danach lässt sich eine Art Schalter in der Abstraktion umlegen und auf sie umstellen. Um sicherzustellen, dass das neue Verhalten dem alten entspricht, sind Tests durchzuführen, die allerdings meist nicht berücksichtigen, wie das System mit Produktionsdaten umgeht. Diese Lücke soll Scientist schließen.

Das Ruby-Tool legt ebenfalls eine Abstraktion, ein sogenanntes Experiment, an. Wird sie zur Laufzeit aufgerufen, führt sie Originalcode und Neuimplementierung aus. Die Ergebnisse lassen sich vergleichen, Abweichungen festhalten und zur weiteren Arbeit am neuen System nutzen. Meist könne man durch die Abweichungen auf Bugs oder fehlende Elemente im neuen Code schließen, allerdings lassen sich so auch Fehler im Legacy-System finden.

Zwar habe man bei GitHub schon größere Rewrites wie etwa bei der Zugriffsregelung mit Scientist gearbeitet, allerdings sei festzuhalten, dass es dort nur für Leseoperationen zum Einsatz käme. Da sich bei Schreiboperationen, etwa in eine Datenbank, aus der altes und neues System Daten beziehen, das Ergebnis ändere, könnten Fehler entstehen, weshalb sich das Tool hier nicht eigne. Eine Anleitung zum Einsatz ist im GitHub-Repository des Tools zu finden. (jul)