Systematische Fehlersuche und Problemlösung

  • Wer einen Fehler erkennen und beheben will, muss ihn erst einmal erkennen können. Das setzt ein Grundverständnis für die Abläufe voraus. Man muss also erst einmal wissen, wie etwas funktioniert, bevor man an die Fehlersuche gehen kann.


    Schritt 1) Den Aufbau des defekten Systems oder des Gerätes erkennen
    Bei Geräten mit Motoren ist er wie folgt:
    Der Motor treibt über diverse Anbauteile die Maschine an. Dabei wird er von diversen Steuerungen beeinflusst.



    Bei Elektronik ist der Aufbau wie folgt:
    Diverse Bauteile steuern die Verteilung des Betriebsstroms und wie/ob maßgebliche Bausteine funktionieren.


    Bei Telekommunikation ist der Aufbau wie folgt:
    Ein "Sender" wandelt das Schallsignal in elektrische Signale um und überträgt sie dann zum Empfänger. Dieser wandelt das Signal dann wieder in ein akustisches um.


    Bei Datenübertragungen ist der Aufbau wie folgt:
    Der Übertrager muss die Daten erst einmal umwandeln und bereitstellen. Danach folgt die eigentliche Übertragung. Beim Empfänger müssen die Daten erneut umgewandelt werden bis sie genutzt werden können.


    Schritt 2) Funktionsweise nachvollziehen
    Wenn ein Motor laufen soll, muss er auch ein entsprechendes Betriebsmittel haben. Ohne Strom oder Kraftstoffe läuft er nicht. Wenn ein elektrisches Gerät funktionieren soll, muss es Strom haben.
    Erst dann kann das Gerät überhaupt seine Funktion ausüben.


    Schritt 3) Fehler ausschließen
    Egal wie unwahrscheinlich ein Fehler ist, man sollte immer von Grundauf mit der Fehlersuche beginnen.


    - Stecker bei elektrischen Geräten eingesteckt ?
    - Akkus oder Batterien voll oder geladen ? Auch Fahrzeuge haben Akkus, die für den Betrieb nötig sind.
    - Kraftstoff vorhanden ?



    Wenn sichergestellt ist, dass die Antriebsenergie vorhanden ist, geht man zum nächsten Schritt:
    Kommt sie auch dort an, wo sie hin soll ?


    - Sicherungen für Strom in Ordnung ?
    - Kraftstoff-Ventil geöffnet ?


    Schritt 4) Fehlerquellen eingrenzen
    Jetzt muss man wissen, wie das Gerät im Einzelnen arbeitet. Bislang haben wir geprüft, ob die Grundlage für den Betrieb zur Verfügung steht und auch dort hinkommen könnte, wo sie benötigt wird.
    Jetzt muss man die Arbeitsabläufe Schritt für Schritt nachvollziehen.


    So eine Fehlersuche kostet in der Regel sehr viel Zeit. Es kommt aber auch darauf an, aus welcher "Richtung" man beginnt.
    Funktioniert ein Fahrzeug nicht mehr korrekt, kann man auch dort beginnen, wo man zuletzt etwas geändert hatte. Hier sollte man dann zuerst ansetzen, weil die hohe Wahrscheinlichkeit besteht, dass man dort etwas falsch gemacht hatte.
    Man geht also den umgekehrten Weg und sucht den Fehler "im Rückwärtsgang".


    Wenn es um Programmierung geht, muss man ganz anders denken


    1) Abhängigkeiten erkennen
    WENN ... DANN
    Wenn ich dieses mache, dann geschieht das.
    Wenn das geschehen ist, passiert das Nächste.


    2) Abhängigkeiten auflösen und aufteilen
    Was beruht auf dem Grundcode und was hat eine eigene und unabhängig Funktion ?
    Unabhängige Funktionen kann man "in sich" prüfen und beheben. Bei abhängigen Funktionen muss man zuerst die Basis prüfen, auf der sie beruhen.


    Um Fehler in einer Programmierung zu erkennen, muss man oft nicht einmal selber programmieren können. Man muss nur das "Wenn... Dann" erkennen können, um die Fehlerquelle eingrenzen zu können. Der "richtige Programmierer" kann dann dort nachschauen, ob der Code einen entsprechenden Fehler enthält.


    Beim Programmieren ist es nützlich, im Code Hinweise zu hinterlassen, wozu die jeweilige Funktion nötig ist oder was sie bewirkt.
    Später kann man dann gezielt zu den einzelnen Passagen springen, um gezielt Fehlersequenzen finden und prüfen zu können.


    Manche Programmierer machen das aus Unkenntnis oder Überheblichkeit nicht.
    "Es ist mein Code. Die sollen sich wegen Support an mich wenden müssen."


    Kommerzielle Programme enthalten solche Infos absichtlich nicht, damit man die Programmierung möglichst nicht nachvollziehen kann.
    Wer will schon Millionen Zeilen an Code mühselig nachvollziehen, um eine Funktion zu ändern ?
    Bei kommerziellen Programmen gibt es aber trotzdem eine entsprechende Dokumentation. Diese anzufertigen ist oft aufwendiger als der Code selbst.


    Manche professionelle Programme entstanden aber "in der Garage". Man bastelte vor sich hin und jeder wusste was welche Sequenz bewirkte. Später wechselten die Programmierer und das Wissen um den Grundcode, und was er jeweils bewirkte, ging verloren. Man baute einfach weiterhin darauf auf und kümmerte sich nicht mehr weiter darum.


    Ein typisches Beispiel dafür war das "Jahr-2000-Problem".
    Als man mit dem Programmieren begann, musste man noch jedes überflüssige Bit einsparen. Aus dem Grund wurde auch die Angabe des Jahrhunderts weggelassen. Zwei Ziffern weniger.
    Kurz vor dem Jahrhundertwechsel merkte man, dass alle Rechner Probleme haben würden, wenn zeitabhängige Funktionen genutzt wurden. Der Rechner kannte nur die Jahre 00-99. Für ihn war deshalb ein Mensch, der 1901 geboren war also genau so alt wie ein Mensch der 2001 geboren war " (19)01 = (20)01".


    Das Problem wurde längst schon ausgemerzt.
    Andere Probleme sind aber heute noch vorhanden und werden erst nach und nach entdeckt. Nicht anders ist es zu erklären, dass es zum Beispiel immer wieder Fehler bei Microsoft Windows gibt, die wirklich in allen Versionen (auch den ältesten) vorhanden sind.


    Ich hoffe, dass euch dieser Beitrag etwas "auf die Spur" bringt, um Fehler an euren Geräten zu erkennen und den richtigen Lösungsweg zu finden.
    Man muss also "nach System" vorgehen, wenn man möglichst schnell einen Fehler finden will. Um einen Fehler zu finden, muss man kein Fachmann sein. Um den Fehler zu beheben, braucht es da schon etwas mehr Wissen/Können ;)