Was ist der beste Weg, um sich mit einer großen Codebasis vertraut zu machen?
Beitritt zu einem bestehenden team mit einer großen Codebasis bereits im Ort kann entmutigend sein. Was ist der beste Ansatz;
- Breit; versuchen Sie einen Allgemeinen überblick darüber, wie alles zusammen verbindet, aus dem code
- Schmal; Fokus auf kleine code-Abschnitte zu einer Zeit, zu verstehen, wie Sie arbeiten voll
- Wählen Sie eine Funktion zu entwickeln und zu lernen, wie Sie gehen entlang
- Versuchen, Einblick von Klassendiagrammen und uml, falls verfügbar (und aktuell)
- Etwas ganz anderes?
Arbeite ich auf, was momentan ein ca 20k line C++ - app & Bibliothek (Edit: kleinen in den großen Plan der Dinge!). In der Industrie ich glaube, Sie würde bekommen eine Einführung durch einen erfahrenen Programmierer. Aber wenn dies nicht der Fall ist, was können Sie tun, um einen Mehrwert so schnell wie möglich?
--
Zusammenfassung der Antworten:
- Schritt durch den code im debug-Modus, um zu sehen, wie es funktioniert
- - Pair-Mädchen mit jemandem mehr vertraut mit der code-Basis als Sie, abwechselnd die person zu sein, die Kodierung und die person anschauen/diskutieren. Drehen Partnern unter team-Mitglieder, damit das wissen wird verstreut.
- Schreiben von unit-tests. Beginnen wir mit einer Behauptung, wie Sie denken-code funktioniert. Wenn es sich herausstellt, als Sie erwartet haben, haben Sie wahrscheinlich verstehen, den code. Wenn nicht, hast du ein puzzle zu lösen und oder eine Anfrage zu stellen. (Dank Donal, dies ist eine große Antwort)
- Gehen über die bestehenden unit-tests für Funktions-code, in einer ähnlichen Weise wie oben
- Lesen, UML, Doxygen generierte Klasse Zeichnungen und anderen Unterlagen, um sich ein breites Gefühl der code.
- Machen kleine änderungen oder Fehlerkorrekturen, dann allmählich aufbauen
- Notizen, und nicht springen und beginnen mit der Entwicklung; es ist mehr wertvolle Zeit zu verbringen Verständnis als zur Erzeugung chaotisch oder ungeeigneten code.
dieser Beitrag ist eine partielle Duplikat von die-beste-Weg-zu-machen-sich-mit-einer-geerbt-codebase
InformationsquelleAutor der Frage RJFalconer | 2008-10-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beginnen mit einigen kleinen Aufgaben, wenn möglich, Debuggen Sie den code, um Ihr problem.
Den code schrittweise im debug-Modus ist der einfachste Weg, um zu lernen, wie etwas funktioniert.
InformationsquelleAutor der Antwort Brian R. Bondy
Eine weitere option ist das schreiben von tests für die Funktionen, die Sie interessiert sind in. Einrichten der Testumgebung ist ein guter Weg, zu etablieren, welche Abhängigkeiten das system hat und wo sein Zustand sich befindet. Jeder test beginnt mit einer Behauptung über die Art und Weise Sie denken, das system sollte funktionieren. Wenn es sich herausstellt, das es so funktioniert, Sie haben etwas erreicht, und Sie haben einige Beispiel-code, um es zu reproduzieren. Wenn es nicht so funktioniert, hast du ein puzzle zu lösen und eine Linie der Untersuchung zu Folgen.
InformationsquelleAutor der Antwort
Eine Sache, die ich in der Regel empfehlen die Menschen, die noch nicht erwähnt worden ist, ist es wichtig, sich einen kompetenten Benutzer der bestehenden code-Basis, bevor man einen Entwickler. Wenn neue Entwickler in unserem großen software-Projekt, schlage ich vor, dass Sie verbringen Zeit zu Experten aus dem vor dem Tauchen versuchen, die Arbeit auf den code.
Vielleicht ist das offensichtliche, aber ich habe gesehen, dass viele Leute versuchen, den Sprung in den code zu schnell, denn Sie sind begierig, beginnen, die Fortschritte.
InformationsquelleAutor der Antwort Russell Bryant
Dies ist ganz davon abhängig, welche Art von Lernenden und welche Art von programmer sind Sie, aber:
InformationsquelleAutor der Antwort Draemon
Paarung mit strengen rotation.
Wenn möglich, während Sie durch die Dokumentation/codebase, versuchen zu verwenden Paarung mit strengen rotation. Bedeutung, zwei von Ihnen setzen sich zusammen für einen festen Zeitraum (sagen wir eine 2 Stunden-Sitzung), dann wechseln Sie Paare, eine person wird weiter daran arbeiten, dass diese Aufgabe, während die andere bewegt, um eine andere Aufgabe mit einem anderen partner.
Paarweise wirst du beide pick-up ein Stück von wissen, die dann gefüttert werden, um andere Mitglieder des Teams bei der Drehung Auftritt. Was daran gut ist auch, dass, wenn ein neues paar zusammen gebracht, die eine, die arbeitete an der Aufgabe (in diesem Fall, die Untersuchung der code) kann dann zusammenfassen und erklären die Konzepte, die in einer verständlicher Art und Weise. Mit fortschreitender Zeit sollte jeder auf einem ähnlichen Niveau von Verständnis, und hoffentlich verhindern, dass die "Oh, es ist nur John weiß, dass etwas von der code-Syndrom".
Was ich sagen kann, über Ihr Szenario, Sie haben eine gute Zahl für diese (3 paar), jedoch, wenn Sie verteilt sind oder nicht arbeiten, um die gleichen Zeitrahmen, es wird kaum möglich sein.
InformationsquelleAutor der Antwort Grundlefleck
Ich würde vorschlagen ausführen von Doxygen bekommen Sie ein up-to-date-Klassendiagramm, dann werde Breitband-in für eine Weile. Dies gibt Ihnen einen quickie big picture, die Sie verwenden können, wie Sie sich nahe kommen und schmutzig mit dem code.
InformationsquelleAutor der Antwort Paul Nathan
Ich Stimme zu, dass es hängt ganz davon ab, welche Art von Lernenden Sie sind. Having said that, habe ich zwei Unternehmen vor, die hatten sehr große code-Basen, um mit zu beginnen. In der Regel arbeite ich so:
Wenn möglich, vor dem suchen der funktionalen code, ich gehe durch unit-tests, die sind schon geschrieben. Diese können in der Regel helfen eine ganze Menge. Wenn Sie nicht verfügbar sind, dann kann ich Folgendes tun.
Erste, die ich weitgehend ignorieren, Implementierung und schauen nur auf header-Dateien, oder nur die Schnittstellen-Klasse. Ich versuche eine Vorstellung davon zu bekommen, was der Zweck der jeweiligen Klasse ist. Zweitens gehe ich eine Ebene tiefer in der Umsetzung, beginnend mit dem, was zu sein scheint der Bereich der größten Wichtigkeit. Dies ist schwer zu beurteilen, so gelegentlich habe ich nur start an der Spitze und meinen Weg nach unten in der Datei-Liste. Ich nenne diese Breite-zuerst lernen. Nach diesem ersten Schritt, ich in der Regel gehen Tiefe-Weise durch den rest des Codes. Die anfängliche Breite-zuerst schauen, hilft, sich zu verfestigen/zu beheben, irgendwelche Ideen, die ich von den interface-Ebene, und dann der Tiefe-weiser Blick zeigt mir die Muster, die verwendet wurden, um das system zu implementieren, sowie den verschiedenen design-Ideen. Durch die Tiefe-zuerst, ich meine, dass Sie im Grunde für Schritt durch das Programm mit dem debugger Schritt in jeder Funktion, um zu sehen, wie es funktioniert, und so weiter. Dies ist offensichtlich nicht möglich mit wirklich großen Systeme, aber 20k LOC ist nicht, dass viele. 🙂
InformationsquelleAutor der Antwort user29227
Arbeit mit einem anderen Programmierer, die mehr vertraut mit dem system zu entwickeln, ein neues feature oder einen bug zu beheben. Dies ist die Methode, die ich gesehen habe die beste.
InformationsquelleAutor der Antwort Avdi
Ich denke, dass Sie müssen binden Sie diese zu einem bestimmten Aufgabe. Wenn Sie Zeit haben auf Ihre Hände, gehen für welchen Ansatz Sie sind in der Stimmung für.
Wenn Sie etwas haben, das zu tun, geben Sie sich einen engen Fokus und bekommen es getan.
InformationsquelleAutor der Antwort KevDog
Erhalten Sie das team setzen Sie auf bug-fixing für zwei Wochen (wenn Sie zwei Wochen). Sie werden glücklich sein, um jemanden die Verantwortung zu übernehmen für das, und am Ende der Zeit haben Sie verbrachte so viel Zeit, problem-Lösung, mit der Bibliothek, die Sie wahrscheinlich kennen es ziemlich gut.
InformationsquelleAutor der Antwort Leigh Caldwell
Wenn es unit-tests (ich Wette nicht). Fangen Sie klein an und stellen Sie sicher, dass die unit tests nicht fehlschlagen. Wenn Sie starren auf die gesamte Codebasis auf einmal Ihre Augen werden glasig und Sie fühlen sich überfordert.
Wenn es keine unit-tests, die Sie benötigen, um den Fokus auf die Funktion, die Sie möchten. Führen Sie die app und schauen Sie auf die Ergebnisse der Dinge, die Ihre Funktion beeinflussen. Dann beginnen Sie durch den code um herauszufinden, wie die app erstellt die Dinge, die Sie ändern möchten. Schließlich ändern Sie es und überprüfen, dass die Ergebnisse kommen heraus, wie Sie wollen.
Erwähnten Sie, es ist eine app und eine Bibliothek. Ändern Sie zuerst die app und halten Sie mit der Bibliothek als Benutzer. Dann, nachdem Sie lernen, die Bibliothek wird es leichter sein, sich zu ändern.
Aus der top-down-Ansatz, die app hat wohl ein main-loop oder ein Haupt-gui steuert alle Maßnahmen. Es lohnt sich, das Verständnis der wichtigsten Ablaufsteuerung der Anwendung. Es ist lesenswert, den code zu geben, sich einen umfassenden überblick über den wichtigsten Fluss von der app. Wenn es eine GUI-app, erstellen Sie ein Papier, das zeigt, welche screens es gibt, und wie man von einem Bildschirm zum anderen. Wenn es ist ein Kommandozeilen-app, wie die Verarbeitung erfolgt.
Selbst in Unternehmen es ist nicht ungewöhnlich, dass dieser Ansatz. Oft niemand vollständig versteht, wie eine Anwendung funktioniert. Und die Menschen haben keine Zeit, Ihnen zu zeigen herum. Bevorzugen Sie spezielle Fragen zu bestimmten Dingen, so dass Sie zu Graben in und Experimentieren auf eigene Faust. Dann, nachdem du deine spezifische Frage haben, können Sie versuchen, zu isolieren, die Quelle des Wissens für, Stück Sie die Anwendung und Fragen Sie.
InformationsquelleAutor der Antwort Cervo
Starten Sie durch das Verständnis der problem-Domäne' (ist es ein Lohn-system? Inventar? die Echtzeit-Kontrolle oder was auch immer). Wenn Sie nicht verstehen, den jargon der Benutzer verwenden, werden Sie nie verstehen, den code.
Dann betrachten Sie das Objekt-Modell; es könnte schon sein, ein Diagramm, oder Sie können durch reverse Engineering ein (entweder manuell oder mit einem tool wie vorgeschlagen von Doug). In dieser Phase könnte man auch untersuchen der Datenbank (falls vorhanden), wenn sollte Sie den Objekt-Modell, aber kann es nicht, und das ist wichtig zu wissen.
Haben Sie einen Blick auf die Geschichte ändern oder bug-Datenbank, wenn es eine Gegend kommt, die viel Blick in, die bit zuerst. Dies bedeutet nicht, dass es schlecht geschrieben ist, aber es ist das bit, die jeder verwendet.
Schließlich halten einige Anmerkungen (ich bevorzuge ein wiki).
InformationsquelleAutor der Antwort Robin Bennett
Ich hatte eine ähnliche situation. Ich würde sagen, Sie gehen so:
Wäre dies machen Sie besser mit dem system. Denken Sie daran, dass Sie versuchen zu schreiben oder zu verstehen, unit-tests ist nur möglich, wenn Sie wissen sehr gut was ist getestet und warum es muss geprüft werden, in nur so.
Und im Falle einer großen Anwendung, die nicht angetrieben in Richtung Datenbanken, würde ich empfehlen, einen anderen Ansatz:
Für die erste Strategie:
Nehmen Sie das Beispiel dieser stackoverflow-Seite zum Beispiel. Untersuchen Sie die datenspeicher an, was gespeichert wird, wie Sie gespeichert sind, was die Darstellungen dieser Elemente in den code, wie und wo diese präsentiert werden auf der Benutzeroberfläche. Woher kommen Sie und was die Verarbeitung geschieht mit Ihnen, wenn Sie gehen zurück auf den datastore.
der zweite
Nehmen wir das Beispiel einer Textverarbeitung zum Beispiel. Welche Komponenten gibt es? IO, - UI, - Seite und wie. Wie diese miteinander interagieren? Bewegen Sie entlang, wie Sie weiter lernen.
Entspannt werden. Code geschrieben ist jemand, der Denkweise, erstarrte Logik und denken Stil, und es würde die Zeit nehmen, zu Lesen, dass mind.
InformationsquelleAutor der Antwort Mohsin Hijazee
Den ersten, wenn Sie team-Mitglieder zur Verfügung, die Erfahrung haben mit dem code vereinbaren Sie bitte für Sie tun, um eine übersicht der code bei dir nicht. Jedes team-Mitglied sollte Ihnen Informationen über Ihren Bereich der Sachkenntnis zu haben. Es ist in der Regel wertvoll, um mehrere Menschen Dinge zu erklären, da einige besser zu erklären als andere, und einige haben ein besseres Verständnis als andere.
Dann, müssen Sie starten, Lesen Sie den code für eine Weile ohne Druck (ein paar Tage oder eine Woche, wenn Ihr Chef wird bieten). Oft hilft es zu kompilieren/erstellen Sie das Projekt selbst und in der Lage sein, um führen Sie das Projekt im debug-Modus, so können Sie Schritt für Schritt durch den code. Dann starten Sie Ihre Füße nass, beheben kleine Fehler und kleinere Verbesserungen. Sie wird hoffentlich bald bereit sein für ein mittelständisches Projekt, und später, ein großes Projekt. Weiterhin stützen Sie sich auf Ihre Teamkollegen, wie Sie gehen - oft findet man in bestimmten, der bereit ist, mentor Sie.
Nicht zu hart zu sich selbst, wenn Sie den Kampf - das ist normal. Es dauert eine lange Zeit, vielleicht viele Jahre, um zu verstehen, eine große code-Basis. Tatsächlich, es ist oft der Fall, dass selbst nach Jahren gibt es immer noch einige Teile des Codes, die sind immer noch etwas gruselig und undurchsichtig. Wenn Sie Ausfallzeiten zwischen den Projekten, die Sie Graben können, um diese Bereiche, und Sie werden oft feststellen, dass nach ein paar versuchen können Sie die Abbildung auch die Teile aus.
Glück!
InformationsquelleAutor der Antwort unintentionally left blank
Vielleicht möchten Sie erwägen Blick auf source code reverse engineering tools. Es gibt zwei tools, die ich kenne:
Beide tools bieten ähnliche feature-sets, die unter anderem statische Analyse erzeugt Graphen, die die Beziehungen zwischen den Modulen in der software.
Diese besteht meist aus call-Graphen und-Art/- Klasse Anstände. Betrachten Sie diese Informationen sollten Ihnen ein gutes Bild davon, wie die Teile des Codes beziehen sich auf einander. Mit Hilfe dieser Informationen, können Sie Graben sich in die eigentliche Quelle für die Teile, die Sie am meisten interessieren und die Sie benötigen, um zu verstehen/ändern-ersten.
InformationsquelleAutor der Antwort Doug
Finde ich, dass nur das springen im code kann ein wenig überwältigend. Versuchen Sie, zu Lesen, wie viel Dokumentation auf das design wie möglich. Dies wird hoffentlich erklären Sie den Zweck und die Struktur der einzelnen Komponenten. Seine besten, wenn eine bestehende Entwickler können Sie durch es, aber das ist nicht immer möglich.
Sobald Sie sind komfortabel mit der high-level-Struktur des Codes zu versuchen, um einen Fehler zu beheben oder zwei. dies wird Ihnen helfen, an Griffe mit dem tatsächlichen code.
InformationsquelleAutor der Antwort Dave Turvey
Mag ich alle Antworten, die sagen, sollten Sie ein tool wie Doxygen um ein Klassendiagramm, und zuerst zu verstehen versuchen, das große Bild. Ich bin völlig einverstanden mit diesem.
Sagte, dies hängt davon ab, wie gut berücksichtigt der code ist, um mit zu beginnen. Wenn Ihr ein gigantisches Durcheinander, es ist schwer zu lernen. Wenn Ihr sauber, organisiert und richtig, es sollte nicht so schlimm sein.
InformationsquelleAutor der Antwort dicroce
Sehen diese Antwort auf, wie die Verwendung von test-coverage-tools zu suchen, der den code für eine Funktion der Zinsen, ohne etwas darüber zu wissen, wo diese Funktion ist, oder wie es ist, verteilt auf viele Module.
InformationsquelleAutor der Antwort Ira Baxter
(shameless marketing-ahead)
Sollten Sie sich nWire. Es ist ein Eclipse-plugin für die Navigation und Visualisierung von großen codebase. Viele unserer Kunden nutzen es zu brechen-in der neuen Entwickler von Druck-Visualisierung der großen Flüsse.
InformationsquelleAutor der Antwort zvikico