2010-01-26 3 views
11

Ich habe einen Open Source Code, etwa 15 MB. Ich möchte den dort verwendeten Hauptalgorithmus verstehen. Ich habe angefangen, jeden Teil dieses Codes zu analysieren, aber ich denke, es wird eine Menge Zeit brauchen. Gibt es Ansätze, um den Prozess zu vereinfachen? Das habe ich vorher nicht gemacht, also ist es meine erste Erfahrung.Wie analysiert man einen offenen Quellcode ohne (oder mit nicht genug) Dokumentation?

Dieses, kann jemand weiß: https://launchpad.net/cuneiform-linux

+0

Welche Sprache? Für einige Sprachen gibt es Tools zum Erstellen von Dokumenten. –

+0

Es ist in C++ geschrieben. Aber sie benutzen einige speziell gemachte Kommentare, nicht wahr? – maximus

+0

Ich meine der Quellcode muss einige spezielle Kommentare haben – maximus

Antwort

2

Da es C++ - Code ist, können Sie Source Navigator nützlich finden.

+0

Danke, ich versuche es jetzt. – maximus

+0

+1 SourceNav wird Ihnen helfen, leicht im Code zu navigieren und wird Beziehungen zwischen verschiedenen Teilen des Quellcodes viel offensichtlicher machen! –

1

den Code Profilerstellung wird Ihnen zeigen, welche Routinen wichtig sind. Sehen Sie sich die oberen und unteren 5% nach Anzahl der Anrufe an.

+2

Ja, wie zu sehen, dass main() einmal aufgerufen wird und std :: string Konstruktor eine Million Mal, wird jedem helfen;) –

+0

Es sind die, die 'hash_password()' und 'draw_form()' genannt werden. –

+0

Ich würde vorschlagen, sie nach Ausführungszeit zu ordnen. Verwerfen Sie alle offensichtlichen Zeitsenken (Konstruktoren, Netzwerk-I/O), und der Rest sollte hoffentlich die wichtigsten Routinen sein. Leider funktioniert dies nicht so gut mit gut entworfenem OOP-Code, wie er es in den Tagen des strukturierten Designs getan hat ... – TMN

2

Während Sie gehen, fügen Sie der Dokumentation hinzu. Mit etwas Glück gibt es mehr Leute, die das gleiche machen und zwischen Ihnen bringen Sie das Niveau der Dokumentation auf das Notwendige. Darum geht es bei Open Source.

+0

Das ist großartig! Gute Idee, Danke! – maximus

+0

Ich bin dem Projekt beigetreten und habe den Jungs ein Angebot gemacht, einige Unterlagen zusammenzustellen. Hoffe, dass sie antworten! – maximus

+0

Viel Glück, genießen ... –

7

Verwenden Sie Doxygen. Es erstellt einen leicht durchsuchbaren Querverweis der Codebasis in HTML. Und es kann auch Abhängigkeits-/Klassendiagramme erstellen (wenn der Code OOP ist).

Der Code muss keine speziell formatierten Kommentare enthalten. Obwohl es hilft, ist Doxygen schlau genug, um den Code selbst zu parsen und herauszufinden. Was ich am meisten mag, ist die Fähigkeit, auf einen Funktionsnamen, eine Variable, eine Klasse usw. zu klicken und sofort zu der Stelle zu springen, an der sie deklariert, definiert und eine Liste aller Orte anzeigt, an denen sie verwendet wird. Ich habe Doxygen in der Vergangenheit benutzt, um einige ziemlich große Codebasen (z. B. PHP-Quellcode) zu kauen, und das hat mir viel Zeit gespart.

Sie können Eclipse CDT auch einrichten und alle Quelldateien in ein Projekt importieren und einen ähnlichen Code-Browser erhalten. Einige Funktionen wie der Funktionsindex sind in diesem Fall jedoch nicht verfügbar.

0

einen Link zu dem Open-Source-Projekt in Ihrer Frage hinzufügen :-)

andere es wissen oder wissen Alternativen Vielleicht.

+0

OK!) Ich habe es hinzugefügt) – maximus

0

Als erstes würde ich herausfinden, was die wichtigsten Einstiegspunkte sind. Die meisten Programme haben ein ziemlich standardisiertes Format: Erstens, Eingabeüberprüfung (stellen Sie sicher, dass Sie die richtige Anzahl und Art der Eingaben erhalten). Zweitens Vorverarbeitung/Vorbereitung (Öffnen von Dateien, Zuweisen von Puffern, Initialisieren von Datenstrukturen). Drittens machen sie, was immer sie tun, die Hauptverarbeitungsroutine. Danach wird in der Regel & Cleanup ausgegeben. Natürlich können diese möglicherweise vermischt sein (die Eingabeüberprüfung kann das Öffnen der Eingabedatei umfassen), möglicherweise fürchterlich; wie eine Routine fileAccessible(char *fileName), die die Datei öffnet, den Header streift, den Parser instanziiert und den Lexer initialisiert, indem er das erste Symbol liest und in die Scannertabelle einfügt. Zum Glück sind die meisten Open-Source-Projekte nicht so durcheinander, aber Sie müssen für alles bereit sein.