Ich habe eine große Code-Basis von ziemlich altem C-Code auf einem eingebetteten System und leider gibt es keine automatisierten Testfälle / -suiten. Dies macht Restrukturierung und Refactoring-Code zu einer gefährlichen Aufgabe.
Das manuelle Schreiben von Testfällen ist sehr zeitaufwendig, daher dachte ich, dass es möglich sein sollte, zumindest einen Teil dieses Prozesses zu automatisieren, indem zum Beispiel alle Funktionsaufrufe verfolgt und die Eingabe- und Ausgabewerte aufgezeichnet werden. Ich könnte dann diese Werte in den Testfällen verwenden (das würde nicht für alle funktionieren, aber zumindest für einige Funktionen). Es wäre wahrscheinlich auch möglich, Scheinfunktionen basierend auf den gesammelten Daten zu erstellen.
Mit solchen Testfällen würde das Refactoring zu einer weniger gefährlichen Aktivität werden.
Gibt es Lösungen, die das schon können? Was wäre der einfachste Weg, dies zum Laufen zu bringen, wenn ich es selbst programmieren müsste?
Ich habe über ctags
nachgedacht, um die Funktionsdefinitionen zu finden und sie in eine Funktion einzufügen, die die Parameterwerte aufzeichnet. Eine andere Möglichkeit wäre wahrscheinlich ein GCC-Compiler-Plugin.
Es gibt eine gcc-Option "-tanstrument-functions", mit der Sie Ihre eigenen Callbacks für die Ein- / Ausgänge jeder Funktion definieren können.
Google es und Sie können viele gute Beispiele finden.
[Bearbeiten] Mit dem Aufruf dieser gcc-Option können Sie nur den Eingang / Ausgang der Funktion verfolgen, nicht die Parameter. aber mit ein paar Tricks können Sie auch die Params verfolgen. (Gehe durch den aktuellen Rahmenzeiger, um den Parameter auf dem Stapel zu erhalten).
Hier ist ein Artikel, der über die Idee der Implementierung spricht:
Außerdem hängt es von Ihrem eingebetteten System ab, dass Sie unter Linux etwas wie ltrace ausprobieren können, um die Parameter anzuzeigen (wie der Strace-Modus). Es gibt viele Tools, die die Funktion trace work entweder im Userspace oder im Kernel unter linux, ftrace / ust / ltrace / utrace / strace / systemtap / ausführen. Wie auch immer, wenn Sie keinen harten Debug-Code hinzufügen, ist es nicht möglich, die Parameter korrekt anzuzeigen. Wenn Sie die Bemühungen zum Hinzufügen / Beenden von Debugging-Informationen akzeptieren, dann ist es viel einfacher.
Auch hier ist ein ähnlicher Thread, der über dieses Problem spricht.
Tags und Links c unit-testing tracing mocking