Was ist der gängigste Weg, um eine sehr große C ++ - Anwendung zu verstehen?

7

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?

    
Chris 15.09.2009, 15:45
quelle

19 Antworten

12

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.

    
Will Hartung 15.09.2009, 15:41
quelle
10

Hier ist mein allgemeiner Prozess:

  • Beginnen Sie damit, zu verstehen, was die Anwendung tut und wie sie verwendet wird. (Ich sehe viel zu viele Entwickler überspringen diesen kritischen Schritt.)
  • Suchen Sie nach einer Entwicklerdokumentation für das Projekt. (Allerdings wird dies fast immer falsch und veraltet sein - es wird nur hilfreiche Hinweise haben.)
  • Versuchen Sie, die Logik in der Organisation herauszufinden. Wie ist die Hauptarchitektur definiert? Welche großformatigen Muster werden verwendet? (dh: MVC, MVP, IoC usw.)
  • Versuchen Sie, die Hauptklassen zu ermitteln, die mit den "großen" Objekten im Projekt zusammenhängen. Dies hilft für den obigen Punkt.
  • Beginnen Sie langsam mit dem Refactoring und Bereinigen, während Sie versuchen, das Projekt zu verwalten.

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.

    
Reed Copsey 15.09.2009 15:50
quelle
8
  • Fangt an, daran zu arbeiten, vielleicht mit Hinzufügen eines kleinen Features.
  • Schritt durch den Anwendungsstart im Debugger.
Dominic Rodger 15.09.2009 15:40
quelle
8

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.

    
Martin Beckett 16.09.2009 01:28
quelle
4

Versuchen Sie Unit-Tests für die verschiedenen Klassen zu schreiben.

    
S.Lott 15.09.2009 15:45
quelle
3

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:

  • Beginnen Sie mit den header (.h / .hpp) -Dateien und lesen Sie diese, um die "Schnittstellen" zwischen den Klassen
  • zu verstehen
  • Wenn die Lösung mehrere Projekte hat, versuchen Sie, die Verantwortung jedes Projekts zu verstehen.
  • Finden Sie jemanden, der mit dem Projekt vertraut ist, das Ihnen einen Überblick geben könnte, 5 min mit der richtigen Person können Sie eine Stunde mit dem Debugger sparen
Dror Helper 15.09.2009 15:48
quelle
3

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.

    
VK. 15.09.2009 23:26
quelle
1

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.

    
AnthonyLambert 15.09.2009 15:44
quelle
1

So gehe ich an das Problem heran

  • Beginnen Sie damit, einfache Fehler zu beheben. Machen Sie extreme Dilligance für diese Fehler und verwenden Sie den Debugger stark, um das Problem zu finden
  • Code überprüft jede Änderung, die in das System eingeht. Wählen Sie auf einem unglaublich großen System eine kleinere Teilmenge und überprüfen Sie alle diese Änderungen
  • Und am wichtigsten: Stellen Sie viele Fragen!
JaredPar 15.09.2009 15:47
quelle
1

Dinge zu tun:

  • Schauen Sie sich an, was Ihnen die Verkaufsbroschüre sagt, legen Sie den Umfang Ihrer Erwartungen fest
  • Installieren Sie es, welche Optionen haben Sie im Installer, lesen Sie den Schnellstart / Installationsleitfaden
  • Finden Sie heraus, was es tut, führt es sogar aus, haben Sie mehrere ausführbare Dateien
  • Gibt es einen Entwickler Setup Guide / Wiki, Zeiger auf VCS
  • Holen Sie sich den Code und machen Sie Ihre Build-Umgebung funktionsfähig, dokumentieren Sie SDKs, erstellen Sie benötigte Werkzeuge, falls noch nicht vorhanden
  • Schauen Sie sich den Build-Prozess an, die Projektabhängigkeiten, gibt es einen Build-Machine / CI-Service
  • Sehen Sie sich die generierte Dokumentausgabe an (falls vorhanden!)
  • Finden Sie einen interessanten Teil der Lösung und sehen Sie, wie es funktioniert, was sind die Einstiegspunkte / wie funktioniert es / suchen Sie nach Hauptklassen und Schnittstellen
  • Replizieren Sie Fehler, halten Sie an interessanten Funktionen im Programm, um einen Überblick zu erhalten und den Code zu verfolgen.
  • Fangen Sie an, Dinge zu reparieren, aber stellen Sie sicher, dass Sie die Dinge reparieren, indem Sie geeignete Komponententests durchführen, um zu zeigen, dass es jetzt kaputt ist und wann es repariert wird.
Greg Domjan 15.09.2009 16:31
quelle
1

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.

    
user172818 15.09.2009 18:29
quelle
1

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:

  1. Klatsch die Entwickler, die daran gearbeitet haben. Es ist eine Schande, dass sie nichts so Grundlegendes wie UML-Klassendiagramme gemacht haben.
  2. Versuchen Sie, sie aus dem Code zu generieren. Sie werden nicht genau sein, aber sie werden Ihnen einen Vorsprung geben.

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.

    
the_drow 16.09.2009 00:22
quelle
0

Das Beheben von Fehlern funktioniert gut für jedes Projekt, nicht nur für C ++ eins.

    
zzandy 15.09.2009 15:41
quelle
0

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.

    
neoneye 15.09.2009 15:45
quelle
0

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.

    
Milan 15.09.2009 15:47
quelle
0

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.

    
William Pursell 15.09.2009 16:13
quelle
0

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.

    
blinnov.com 16.09.2009 01:18
quelle
0

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.

    
Paul Nathan 16.09.2009 01:28
quelle
-2

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.

    
Turing Complete 06.07.2010 09:13
quelle

Tags und Links