Von Mozilla gibt es das Werkzeug mozregression, mit dem man nach den Prinzip der binären Suche die erste Version finden kann, in der ein Fehler auftritt; das Prinzip ist auch von git bisect bekannt. Am Anfang wählt man eine alte Version, in der der Fehler noch nicht auftritt, und eine neue Version, in der der Fehler auftritt. Danach bekommt man einige Versionen aus dem Zeitraum gezeigt, prüft ob der Fehler vorhanden ist und gibt das Ergebnis bei mozregression ein.
Das Programm gibt es für die Kommandozeile und auch mit einer grafischen Oberfläche für alle üblichen Betriebssysteme. Die Bedienung ist recht einfach und man benötigt nur eine gute Internetverbindung, denn die ganzen Versionen zum Test werden von Mozilla-Servern geladen.
Ein Beispiel
Im Matrix-Raum #front-end-web-development:mozilla.org berichtete jemand, dass er seit einigen Versionen eine weiße Linie in einem Farbverlauf sieht.
Da er hierfür auch ein Minimalbeispiel bereitgestellt hat, habe ich mozregression damit ausprobiert.
<!DOCTYPE html>
<html>
<head>
<title>Glitch</title>
<style>
.is-slanted {
position: absolute;
transform: skewY(-5deg);
width: 100%;
height: 100%;
background: linear-gradient(#007DB8 25%, #093167);
}
</style>
</head>
<body>
<div class="is-slanted"></div>
</body>
</html>
Im Dialog für einen neuen Lauf kann man alles leer lassen und nur
/tmp/test.html
(mit obigem Inhalt) als URL angeben; Repository und
Profile können leer bleiben. Als Zeitraum habe ich 2021-04-01
bis
2021-06-15
gewählt. Mozregression sucht dann die passenden Versionen für den
Anfang und das Ende. Schritt für Schritt wird man dann durch die Versionen
geführt und muss angeben, ob der Fehler auftritt Bad oder nicht Good.
Zwischendurch wechselt Mozregression auch das Repository von mozialla-central zu autoland, wenn es die Versionen immer mehr eingrenzt. Am Ende erhält man dann einen konkreten Änderungsbereich, indem der Fehler erstmals auftritt; in meinem Fall 21749038..f733b37f (siehe pushlog_url).
BBChop als Alternative
BBChop ist ein Programm, dass eine binäre Suche basierend auf Unsicherheit durchführt. Damit ist sie nicht mehr so effizient wie die reine binäre Suche, aber man kann damit Systeme untersuchen, in denen sich ein Fehler nicht sicher reproduzieren lässt; wenn ein fehlerfreies Ergebnis nicht unbedingt bedeutet, dass der Fehler nicht vorliegt. Der umgekehrte Fall einer fehlerhaften Beobachtung – dass der Fehler auftritt, aber vorliegt – wird von dem System nicht abgedeckt.
Hinter dem Ganzen steckt die bedingte Wahrscheinlichkeit und der Satz von Bayes: Bayesian search theory.