A Cautionary Tale of Woe: Der Bug That Got Away
Letzte Woche habe ich eine aktualisierte Version meiner Inhaltsverzeichnis Creator Plugin für WordPress. Ich bin stolz darauf in meiner Programmierung, Fehlersuche und Testen von Fähigkeiten. Das brach alles zusammen in einer einzigen Nacht.
Um es kurz zu machen, benötigt die neue Version eine Hilfsfunktion zur Post Einträge anzuzeigen. Die Hilfsfunktion wurde nur von einer Funktion mit dem Namen und ich deshalb gewählt, um die Hilfsfunktion als Kind dieser Funktion umfassen. Dies ist gängige Praxis in vielen Sprachen, wie es verpackt fein säuberlich alle Funktionen und ihre Helfer in unmittelbarer Nähe. Die übergeordneten Funktion von der Art und Weise wird jedes Mal aufgerufen, eine Seite angezeigt wird und danach sofort beendet, wenn diese Seite nicht enthalten ist die Sitemap-Initiator-Tag.
Ok. Die Zeit vergeht. Es ist jetzt 02.00 Uhr. Der Code ist nun bereit, zu testen. Ich weiß, dass der übergeordneten Funktion sofort beendet, wenn es nicht finden, den Initiator-Tag. Dieser hat zuvor gearbeitet, und ich ging nicht mal nah dran, also sollte es weiterhin funktionieren. Richtig? Ich überprüfe die Sitemap Seite, probieren Sie alle neuen und alten Optionen und beweisen, dass der Code funktioniert wie vorgesehen. Ich habe schnell synchronisieren Sie die SVN-Repository und stürzen sich ins Bett zu schlafen, bevor die Sonne aufgeht.
Am nächsten Morgen beschließe ich, eine große Seite, die ich weiß, dass mein Plugin verwendet zu überprüfen. Es gibt keinen Ersatz für die reale Welt Tests. Ja, es sieht alles gut. Zu diesem Zeitpunkt bemerkte ich einen Beitrag in der Sitemap, die interessant aussah. Ich klickte auf den Link Kategorie und wurde mit dem ersten Beitrag in der Kategorie und dann eine große böse PHP-Fehlermeldung präsentiert. Mmm. Ich sah einen anderen großen Gelände. Mmm. Vielleicht ein Zufall. Schauen wir uns noch einen. Oh nein!
Also, was ist schiefgelaufen? Bedenken Sie, dass Kind-Funktion? Ich habe gehört, dass Kinder böse sein kann und es stellte sich heraus, dass in diesem Fall wahr. Wenn ein Blog-Seite, Kategorie-Seite, Tag-Seite oder sogar eine Homepage angezeigt wurde, werden mehrere Beiträge auf einer einzigen Seite dargestellt. WordPress tut dies, indem er vorgab, dass jeder Beitrag eine Mini-Seite ist und verbindet alle Mini-Seiten zusammen, um eine große Seite zu bilden. Dies bedeutet, dass meine Eltern Funktion mehrmals aufgerufen wird. Normalerweise kein Problem. Aber jetzt, wie die Funktion enthält untergeordnete Funktionen, sind diese Funktionen bei jedem Kind der übergeordneten Funktion genannt (auch wenn sie nicht benutzt werden) erstellt. Deshalb, wenn dann die zweite Beitrag angezeigt wird, stürzt die Seite mit einer doppelten Funktion Name Fehlermeldung. Das Netto-Ergebnis war, dass ein kleiner Fehler in einem scheinbar unzusammenhängenden Funktion mehrere sehr große Websites zu gehen verursacht.
Die Moral der Geschichte: Wenn Sie eine Website-Administrator sind, stellen Sie sicher, starten Sie das vollständige Suite von Tests nach jedem Plugin Update, egal wie groß oder klein, dass Plugin kann.



















