Ich arbeite an einem Projekt, das dringend eine Leistungsoptimierung benötigt.
Wie schreibe ich einen Test, der fehlschlägt, wenn meine Optimierungen die Geschwindigkeit des Programms nicht verbessern?
Um das etwas näher auszuführen:
Das Problem besteht nicht darin, herauszufinden, welche Teile zu optimieren sind. Hierfür kann ich verschiedene Profiling- und Benchmarking-Tools verwenden.
Das Problem ist die Verwendung von automatisiert Tests, um zu dokumentieren, dass eine bestimmte Optimierung tatsächlich die beabsichtigte Wirkung erzielt hat. Es wäre auch sehr wünschenswert, wenn ich die Testsuite nutzen könnte, um später mögliche Leistungseinbußen zu entdecken.
Ich nehme an, ich könnte einfach meine Profiling-Tools ausführen, um einige Werte zu erhalten und dann behaupten, dass mein optimierter Code bessere Werte erzeugt. Das offensichtliche Problem dabei ist jedoch, dass Benchmarking-Werte keine harten Werte sind. Sie variieren je nach der lokalen Umgebung.
Besteht die Lösung also darin, immer dieselbe Maschine für diese Art von Integrationstests zu verwenden? Wenn ja, müsste man trotzdem eine gewisse Unschärfe in den Ergebnissen einkalkulieren, denn selbst auf derselben Hardware können die Benchmarking-Ergebnisse variieren. Wie kann man dies berücksichtigen?
Oder liegt die Antwort vielleicht darin, dass man ältere Versionen des Programms behält und die Ergebnisse vorher und nachher vergleicht? Dies wäre meine bevorzugte Methode, da sie weitgehend unabhängig von der Umgebung ist. Hat jemand Erfahrung mit diesem Ansatz? Ich könnte mir vorstellen, dass es nur dann notwendig wäre, eine ältere Version zu behalten, wenn alle Tests bestanden werden können, wenn die Leistung der neuesten Version mindestens so gut ist wie die der vorherigen.