Seiteneffekte in der Softwareentwicklung

Gerade eben hatte ich mit der TV Software eyeTV für Mac OS X und der zugehörigen iOS Applikation einen äußerst interessanten und ärgerlichen Seiteneffekt, bei welchem sich mir der Zusammenhang mit der gefunden Lösung nicht wirklich erschließen will.

Da ich derzeit ohne externen Monitor an meinem MacBook Pro auskommen muss, aber trotzdem nebenbei das Testspiel der deutschen Nationalelf verfolgen wollte (hat sich nicht gelohnt), habe ich mir auf meinem iPad den eyeTV Streaming-Client installiert, mit welchem das TV Signal von einem Mac auf das iPad umgeleitet werden kann.

Die Einrichtung erfolgte ohne Probleme und die ersten paar Sekunden TV schauen auf dem iPad funktionierten auch ganz hervorragen, bis plötzlich wie von Geisterhand der Kanal selbstständig gewechselt wurde. Zehn Sekunden später das gleiche und dann noch mal.

Ein kurzes Googlen ergab nicht sofort einen Treffer, aber lieferte einen Hinweis darauf, dass bei der Auswahl einer online TV Zeitschrift zur Ergänzung der EPG-Daten in den Einstellungen von eyeTV zumindest in der Vergangenheit in der Desktop-Variante der gleiche Effekt auftrat. Nicht lange gefackelt wählte ich die Option ab und siehe da, plötzlich wurde der Kanal auf dem iPad nicht mehr gewechselt.

Jetzt mag man sich fragen, wie es zu so einem kuriosen Seiteneffekt kommen kann? Allgemein sollte beim Software-Design darauf geachtet werden, Seiteneffekte unbedingt zu vermeiden und seinen Code verständlich zu schreiben, damit auch Dritte damit zurecht kommen, ohne jede Implementierung im Detail zu kennen. Aber wie sieht ein Seiteneffekt überhaupt aus? Dazu ein kurzes Codebeispiel:

public class TestClass {
 
	public dbContext database;
 
	public boolean validateUser(String username, String password) {
		if (username.lengt > 0 && password.length > 0) {
			database.saveUser(username, password);
			return true;
		}
 
		return false;
	}
}

Zugegeben, das Beispiel ist sehr an den Haaren herbeigezogen, aber der Fehler ist offensichtlich. Von einer Methode, welche validateUser heißt, würde man nicht erwarten, das ein Benutzer bei Erfolg auch noch gespeichert wird. Eine Lösung bestände darin, die Methode umzubenennen (validateAndSaveUser) oder dem Ratschlag zu folgen, das eine Methode immer nur eine Aufgabe zu erledigen hat. Dazu empfehle ich übrigens das Buch Clean Code: A Handbook of Agile Software Craftsmanship, welches viele interessante Themen enthält, um seinen Code verständlicher zu gestalten.

Was nun genau bei eyeTV passiert ist, kann man nur raten, aber ich vermute folgendes: Irgendwo im Code gibt es (selbstverständlich) einen oder mehrere Seiteneffekte, zum Beispiel durch eine schlecht benannte Methode. Nachdem der Fehler in der Desktop-Version aufgefallen war, programmierte der entsprechende Entwickler einen Workaround um den Seiteneffekt herum, kam aber nicht auf die Idee, den Seiteneffekt selbst zu beseitigen. Mit der Entwicklung der iPad App bzw. des Streaming-Dienstes für eyeTV ist nun ein anderer Programmierer auf genau den selben Fehler hereingefallen, so dass der Fehler wieder auftritt.

Category: Programmieren 3 comments »

3 Responses to “Seiteneffekte in der Softwareentwicklung”

  1. Ich

    Seiteneffekt == side effect? Besser klingt Nebenwirkung.

  2. pume2

    Hallo,meine Vere4nderung war die, dass der Feed nach dem Auskommentieren der oben genannten Zeilen in den Webmaster Tools eine Endlosschleife auslf6ste!Ich liedf also die Zeilen setehn und e4nderte lediglich das noindex auf index und schon war die Endlosschleife weg und der Feed wurde erkannt.

  3. nogom17

    Danke ffcr den Hinweis, das ist selbst in der aklteulen Version noch so. Doof nur, dass man die Funktion bei jedem Update wieder auskommentieren muss.Abgesehen aber vom Dashboard-Widget: Bist du dir wirklich sicher, dass diese Madfnahme die Indexierungsgeschwindigkeit erhf6ht? Ich konnte das nicht feststellen.Grfcdfe!


Leave a Reply



 

Back to top