CHOOSE YOUR LANGUAGE --- G E R M A N --- E N G L I S H ---

Samstag, 1. Juni 2013

Bug Jagd


Kennst Du die kriechenden Bugs die sich im Quell Code verstecken und den Programmierern schlaflose Nächte bereiten? Ich möchte Dir von Ihnen erzählen :) Es gibt so viele Möglichkeiten wie man Bugs vermehren und anlocken kann aber es ist ungemein schwerer sie wieder los zu werden.

Im Detail


Wenn Du eine Liste hast mit 10 Bällen die im Bildschirm umherfliegen, wird diese intern wie in allen Programmiersprachen üblich von Objekt 0 bis 9 gezählt. Wenn man das vergisst greift man gerne auf Objekt 10 zu das es nicht gibt, oder fängt an die Objekte ab "1" zu berechnen. Aber so einen Fehler findet man noch recht schnell...

Wenn wir jetzt aber ein Element löschen, davon ausgegangen man lässt diese Liste auch schön verwalten von z.B. NSMutableArray, dann wird die Liste entsprechend gekürzt. Wenn also Ball Nr. 8 gelöscht wird, ist gleich danach Ball Nr. 8 wieder vorhanden, allerdings ist das dann der Ball der vorher Nr. 9 hatte und nur nachgerutscht ist. Klingt logisch oder? Aber schon hier fangen die Bugs das Knabbern an ;)

Wenn wir nun eine sich wiederholende Schleife schreiben die alle Bälle von 0 bis zum letzten Element in der Liste abhandeln, und dann ein Ball aus dem Spiel gelöscht wird, wird so in der selben Runde/Frame vergessen ein Ball zu bewerten, denn nachdem der jeweilige Ball abgehandelt und gelöscht wurde, springt die Schleife ja zur nächsten Ballnummer, und denkt nicht daran das ein Ball mit der selben Nummer, der noch nicht dran war, nachgerutscht ist. Das muss jetzt nicht schlimm sein, es kann sein das ein Ball nur für ein Frame stehen bleibt oder schlimmer, gar nicht dargestellt wird, es kann aber auch Fehler verursachen die das ganze Spiel zum Absturz bringen, und die nicht so einfach aufzufinden sind weil diese schwerer zu reproduzieren sind. Denn ein Fehler der immer an der gleichen Stelle auftritt kann leicht gefunden und behoben werden, man kennt die Stelle und auch grob durch was er verursacht wurde. Aber taucht ein Fehler in verschiedener Form in ganz unterschiedlichen Stellen auf, und eher selten, und niemals an der gleichen Stellen wenn man ihn forcieren möchte, wird die Bugjagd wirklich zum Geduldsspiel. Vor allem wenn man Stunden sucht und dann feststellt das der Code stimmt und nur der Compiler irgend einen Murks gebaut hat und man das in Maschinensprache umgewandelte Projekt nur komplett bereinigen und neu erstellen muss, und auf einmal geht alles wieder! Dieser Fall ist zwar Selten und abhängig von der Programmiersprache, den Tools etc. aber es kommt durchaus vor.

Noch eine lustige Geschichte von "BLACK AND WHITE"


Vor geraumer Zeit hat ein Entwicklerteam ein Spiel namens "BLACK AND WHITE" entwickelt, während sich ein sehr kurioser Bug eingeschlichen hat. Im Spiel entwickelt man eine kleine Nation von Menschen die obendrein ein riesiges Maskottchen artiges Wesen besitzen das sie beschützt und welches man indirekt steuern kann. Dieser Haushohe Kollos fing auf einmal an nur noch im Kreis zu laufen und reagierte auf nichts mehr. Keiner wusste warum und sie suchten und suchten nach einer Ursache... Bis sich endlich herausstellte was los war: Die Kreatur war hungrig geworden und sie suchte etwas zu essen, also ging sie die Liste mit allen anderen Objekten durch die es im Spiel gab, darauf welches Objekt das angreifbar / essbar war am nächst gelegen war, um dieses anzugreifen und zu essen. Natürlich war es selbst auch in dieser Liste eingeschlossen. Kurz um es versuchte sich selbst zu jagen und zu fressen, was natürlich nicht ging, und endete darin das es immer im Kreis lief beim Versuch sich selbst zu folgen ^^ Wie sagt man so schön, jeder ist sich selbst der nächste!

Alles logisch, aber Logik kann sehr komplex sein, und selbst mit viel Erfahrung stolpert man gelegentlich über solche Fallen. Und ganz im Gegenteil dazu sind es eher fantastische Ausnahmen wenn man richtig lange Quell Code Stellen schreibt, die komplexe Themen abhandeln wie Künstliche Intelligenz, und dergleichen, oder letzten zum Beispiel der Runden Generator für Pulse of Life, und dann nach zig Seiten das Programm startet und dieses auf anhieb perfekt und bugfrei läuft. Das ist in etwa so wie mit verschlossenen Augen zur nächsten Stadt zum einkaufen zu fahren und anzukommen ohne einen Unfall gebaut zu haben ^^ Aber es ist schon super wenn das Programm nach 5 Minuten drüber sehen und korrigieren klaglos seinen Dienst verrichtet.

Keine Kommentare:

Kommentar veröffentlichen