Wenn Sie ein neues C ++ - Projekt erhalten haben, welches ist die Standardmethode, um es durchzugehen und sich mit der gesamten Codebasis vertraut zu machen? Fangen Sie einfach an der obersten Datei an und beginnen Sie alle x-hundert Dateien durchzulesen? Verwenden Sie ein Tool, um Informationen für Sie zu generieren? Wenn ja, welches Werkzeug?
Ich verwende Änderungsanfragen / Fehlerberichte, um mein Lernen eines neuen Projekts zu leiten. Es macht für mich nie Sinn, die Gesamtheit von etwas auf einmal zu konsumieren. Eine Änderungsreihenfolge oder ein Fehlerbericht gibt mir eine Anleitung, um sich auf diese eine Ranke des Systems zu konzentrieren und ihre Aktivität durch den Code zu verfolgen.
Nach einer angemessenen Menge von diesen kann ich ein gutes Verständnis der Grundlagen des Projektes bekommen.
Hier ist mein allgemeiner Prozess:
Normalerweise bringt mich das zumindest ein bisschen auf Touren. Normalerweise bekomme ich jedoch ein solches Projekt, weil etwas repariert oder verbessert werden muss und das Timing nicht immer realistisch ist. In diesem Fall muss ich oft einfach hineinspringen und beten.
Sie könnten versuchen, es durch doxygen laufen zu lassen, um endlich eine übersichtliche Dokumentation zu geben - aber im Prinzip ist der einzige Weg ein Debugger, einige trace / std :: cerr-Nachrichten und jede Menge Kaffee.
Der Vorschlag, Testfälle zu schreiben, ist die Grundlage für Working-Effectively-Legacy-Code und den Punkt die cppunit-Testbibliothek. Wenn Sie diesen Ansatz verwenden können, hängt von Ihrem Team und Ihrer Einrichtung ab - wenn Sie der neue Junior sind, können Sie die App nicht wirklich neu schreiben, um das Testen zu unterstützen.
Es gibt ein Tool, von dem ich weiß, dass es Ihnen helfen kann. Es befindet sich derzeit in der Beta-Version CppDepend , mit dem Sie die Beziehung zwischen beiden besser verstehen können die Klassen und die Projekte in der Lösung.
Anders als das können Sie versuchen, den Code zu verstehen, indem Sie es lesen:
Das Verständnis, wie der Code verwendet wird, ist normalerweise sehr hilfreich.
Wenn es sich um eine Bibliothek handelt, sehen Sie sich Clientcode und Komponententests an. Wenn es keine Komponententests gibt, schreiben Sie einige.
Wenn dies eine Anwendung ist, verstehen Sie, wie es funktioniert - im Detail. Nochmals lesen & amp; Unit-Tests schreiben.
Es geht im Wesentlichen um die Schnittstellen. Verstehen Sie die Schnittstellen und Sie werden einen langen Weg zu verstehen, wie der Code funktioniert. Mit Schnittstelle, ich meine, die API, wenn es eine Bibliothek ist, die Benutzeroberfläche, wenn es eine grafische Anwendung ist, der Inhalt der eingehenden & amp; ausgehende Nachrichten, wenn es ein Server ist.
Erstens, wie groß ist groß?
Ich glaube nicht, dass Sie das beantworten können, ohne die andere Hälfte des Szenarios zu kennen. Was ist die Voraussetzung für die Änderung des Codes?
Unterstützen / reparieren Sie es nur, wenn es schief geht? Neue Funktionalität entwickeln? Den Code auf eine neue Plattform portieren? Aktualisieren Sie den Code für einen neuen C ++ - Compiler?
Je nachdem, was Ihre Anforderung ist, würde ich auf verschiedene Arten starten.
So gehe ich an das Problem heran
Dinge zu tun:
Ich habe Quellcodes einiger mittelgroßer Projekte eingearbeitet. Die wichtigste Lektion, die ich aus diesem Prozess lerne, ist, bevor ich auf den Quellcode eingehe, dass Sie sicher sein müssen, welcher Teil des Quellcodes Sie am meisten interessiert. Sie sollten dann in dieses Stück gehen, indem Sie Protokoll- / Warnmeldungen überfüllen oder Klassen- / Funktionsnamen betrachten. Um die Quellcodes zu verstehen, sollten Sie sie in einem Debugger ausführen oder eigene Warnmeldungen einfügen. In allem sollten Sie sich auf Dinge konzentrieren, die Sie interessieren. Das Letzte, was Sie wollen, ist, alle Quellcodes zu lesen.
Versuchen Sie, eine Dokumentation mit Doxygen oder etwas ähnlichem zu erstellen, wenn dies nicht bereits geschehen ist.
Gehen Sie durch die API und sehen Sie, ob etwas für Sie unklar ist, und schauen Sie sich den Code an. Wenn Sie ihn immer noch nicht bekommen, fragen Sie einen Entwickler, der bereits daran gearbeitet hat.
Untersuche immer, was du als erstes bearbeiten musst.
Sehen Sie sich an, welche UML-Dokumente Sie haben, wenn Sie keine haben:
Wenn es etwas Bestimmtes gibt, das Sie nicht verstehen oder nicht für falsch halten, fragen Sie das Team, das es entwickelt hat. Sie werden es wahrscheinlich besser wissen.
Durchsuchen Sie mit Total Commander in der Dateihierarchie, versuchen Sie sich einen Überblick über die Struktur zu verschaffen. Versuchen Sie herauszufinden, wo sich die Hauptheader-Dateien befinden. Suchen Sie auch nach der Datei, in der sich die Funktion main () befindet.
Bitten Sie eine Person, die bereits mit der Codebasis vertraut ist, um die grundlegenden Konzepte zu beschreiben, die während der Entwicklung verwendet wurden.
Er muss nicht jedes Detail erklären, sollte Ihnen aber eine grobe Vorstellung davon geben, wie die Software funktioniert und wie die einzelnen Module miteinander verbunden sind. Was ich in der Vergangenheit als nützlich empfunden habe, war zunächst, eine funktionierende Entwicklungsumgebung einzurichten, bevor ich über den Code nachzudenken begann.
Lesen Sie die Dokumentation. Sprechen Sie nach Möglichkeit mit dem ehemaligen Betreuer. Überprüfen Sie dann die Codebasen des ersten Commits und des ersten Releases vom VCS und verbringen Sie einige Zeit damit, sie zu betrachten. Gehen Sie noch nicht zum vollständigen Verständnis, nur überfliegen Sie und verstehen Sie, welche die Hauptkomponenten sind und was sie tun. Lesen Sie dann die Änderungsprotokolle und Versionshinweise für jede der Hauptversionen. Dann fang an, alles zu brechen und zu sehen, was was kaputt macht. Mach ein paar Fehlerbehebungen. Überprüfen Sie die Testsuite und verstehen Sie, auf welche Komponente sich jeder Test konzentriert. Fügen Sie einige Tests hinzu. Durchlaufen Sie den Code in einem Debugger. Wiederholen.
Wie schon gesagt, greifen Sie doxygen und erstellen Sie HTML-Dokumentation für den Quellcode.
Wenn Code gut entworfen ist, sehen Sie leicht eine nette Klassenhierarchie, klare Anrufgraphen und viele andere Dinge, die sonst ewig brauchen würden, um sie aufzudecken. Wenn das Verhalten einiger Teile unklar erscheint, sehen Sie sich die Komponententests an oder schreiben Sie Ihre eigenen.
Wenn jedoch die Struktur flach oder unordentlich oder beides zusammen erscheint, können Sie sich in einer Art von Schwierigkeiten befinden.
Ich bin mir nicht sicher, ob es einen Standardweg gibt. Es gibt einige Tools zum Bezahlen, die C ++ - Klassendiagramme / Aufrufgraphen ausführen und eine Art Code-Level-Ansicht bereitstellen. Doxygen ist eine gute freie. Meine Low-Tech-Ansatz ist die Top-Level-Datei zu finden und beginnen zu sortieren, was es bietet und wie ... Notizen bei Bedarf.
In C ++ ist das häufigste Problem, dass viel Energie und Zeit für Aufgaben auf niedriger Ebene verschwendet wird, z. B. "Speicherverwaltung".
Dinge, die in verwalteten Sprachen keine Probleme bereiten, sind in C ++ ein Problem.
Tags und Links c++ project-management