Ich habe immer alleine programmiert, ich bin noch ein Student, also habe ich nie mit jemand anderem programmiert, ich habe noch nie ein Versionskontrollsystem verwendet.
Ich arbeite gerade an einem Projekt, das Kenntnisse darüber erfordert, wie Programmierer an einer Software in einem Unternehmen zusammenarbeiten.
Wie ist die Software kompiliert? Ist es aus dem Versionskontrollsystem? Ist es von einzelnen Programmierern? Ist es periodisch? Ist es, wenn sich jemand entscheidet zu bauen oder so? Gibt es Tests, die durchgeführt werden, um sicherzustellen, dass es "funktioniert"?
Alles wird reichen.
Antworten:
Tatsächlich gibt es bei diesen Prozessen so viele Variationen wie bei vielen Unternehmen. Das heißt: Jedes Unternehmen hat ein bisschen andere Konventionen als andere, aber es gibt einige gängige Best Practices, die in der Regel an den meisten Orten angewendet werden.
Best Practices, die immer nützlich sind
Darüber hinaus sollten unnötige Dateien (Objektdateien oder kompilierte Binärdateien) nicht zum Repository hinzugefügt werden, da sie recht einfach wiederhergestellt werden können und nur Speicherplatz im Repo verschwenden würden.
Diese Vorgehensweise wird als kontinuierliche Integration bezeichnet, und die Builds werden auch als nächtliche Builds bezeichnet .
(Dies bedeutet nicht, dass Entwickler den Code nicht auf ihren eigenen Computern erstellen und testen sollten. Wie oben erwähnt, sollten sie dies tun.)
Diese einfachen Dinge stellen sicher, dass das Projekt nicht außer Kontrolle gerät und jeder an derselben Version des Codes arbeitet. Der Continuos-Integrationsprozess hilft, wenn etwas furchtbar schlecht läuft.
Es verhindert auch, dass Benutzer Dinge festschreiben, die nicht im Haupt-Repository erstellt wurden.
Wenn Sie eine neue Funktion einbinden möchten, deren Implementierung Tage dauern würde und die andere Personen daran hindern würde, das Projekt zu erstellen (und zu testen), verwenden Sie die Verzweigungsfunktion Ihrer Versionskontrolle.
Wenn dies nicht ausreicht, können Sie es auch für automatisierte Tests einrichten, sofern dies mit dem betreffenden Projekt möglich ist.
Noch ein paar Gedanken
Die obige Liste kann auf den ersten Blick sehr schwer sein. Ich empfehle, dass Sie es nach Bedarf befolgen : Beginnen Sie mit einer Versionskontrolle und einem Bug-Tracker und richten Sie später den Continuous Integration Server ein, falls Sie ihn benötigen. (Wenn es sich um ein großes Projekt handelt, werden Sie es sehr bald brauchen.) Schreiben Sie Unit-Tests für die wichtigsten Teile. Wenn es nicht genug ist, schreiben Sie mehr davon.
Einige nützliche Links:
Kontinuierliche Integration , Tägliche Builds sind Ihre Freunde , Versionskontrolle , Unit-Tests
Beispiele:
Für die Versionskontrolle verwende ich heutzutage Git für meine persönlichen Projekte. Subversion ist ebenfalls beliebt, und beispielsweise ist VisualSVN recht einfach einzurichten, wenn Sie einen Windows-Server verwenden. Für Kunden funktioniert TortoiseSVN am besten für viele Menschen. Hier ist ein Vergleich zwischen Git und SVN.
Für Bug-Tracking-Software sind Jira und Bugzilla sehr beliebt. Wir haben Mantis auch an einem früheren Arbeitsplatz verwendet.
Für Software zur kontinuierlichen Integration gibt es Teamcity für eine (auch CruiseControl und sein .NET-Gegenstück sind bemerkenswert).
Antwort auf Ihre Frage "Wer entscheidet über das Hauptdesign des Projekts?"
Das wäre natürlich der Hauptentwickler.
In Unternehmen ist der Hauptentwickler die Person, die mit den Finanz- / Marketingmitarbeitern des Projekts spricht und die Arcithecture entsprechend der finanziellen Leistungsfähigkeit des Unternehmens, den geplanten Merkmalen, den Anforderungen der Benutzer und der verfügbaren Zeit festlegt.
Es ist eine komplexe Aufgabe, an der normalerweise mehr als eine Person beteiligt ist. Manchmal werden Mitglieder des Teams auch gebeten, sich an der Gestaltung des gesamten Projekts oder bestimmter Teile zu beteiligen oder ein Brainstorming durchzuführen.
quelle
Ich bin auch ein Student, der kürzlich einen Software-Engineering-Kurs abgeschlossen hat, bei dem das gesamte Semester aus einem riesigen Gruppenprojekt bestand. Lassen Sie mich zunächst sagen, wir hätten mit 3 Leuten das machen können, was 12 von uns das ganze Semester gebraucht haben. Mit Menschen zu arbeiten ist eine schwierige Sache. Kommunikation ist der Schlüssel.
Verwenden Sie auf jeden Fall ein Repository. Jede Person kann remote auf den gesamten Code zugreifen und alles hinzufügen / löschen / ändern. Das Beste an Subversion ist jedoch, dass Sie, wenn jemand den Code bricht, zu einer früheren Version zurückkehren und beurteilen können, was von dort aus schief gelaufen ist. Kommunikation ist immer noch der Schlüssel, wissen Sie, was Ihre Teamkollegen tun, damit es keine Konflikte gibt. Setzen Sie sich auch nicht auf Ihren Code, sondern legen Sie schnell und aussagekräftig fest, dass das Repository am effektivsten ist.
** Ich würde auch einen Bug-Tracker wie Redmine empfehlen. Sie können Konten für alle einrichten und Personenaufgaben mit unterschiedlichen Prioritäten zuweisen sowie nachverfolgen, ob sich Personen um bestimmte Probleme gekümmert haben oder ob weitere aufgetreten sind.
Und wie bereits gesagt, werden Unit-Tests sehr hilfreich sein. Viel Glück! Hoffe das hat geholfen :-)
quelle
Die großen Dinge sind:
Schließlich brauchen Sie die Bereitschaft, zusammenzuarbeiten, um den Plan zu erfüllen. Das ist allzu oft der schwierige Teil.
quelle
Im Allgemeinen wird empfohlen, Build-Artefakte nicht im Repository zu überprüfen. Das Repository enthält den Quellbaum, die Build-Konfiguration usw. - alles, was von einem Menschen geschrieben wurde. Softwareentwickler checken eine Kopie ihres Codes in ihr lokales Dateisystem aus und erstellen ihn lokal.
Es wird auch empfohlen, Unit-Tests durchzuführen, die im Rahmen des Erstellungsprozesses ausgeführt werden. Auf diese Weise erkennt ein Entwickler sofort, ob seine Änderungen einen der Komponententests ungültig gemacht haben, und hat die Möglichkeit, diese zu beheben, bevor er seine Änderungen eincheckt.
Vielleicht möchten Sie die Dokumentation für ein Versionskontrollsystem (eines von Subversion, CVS, Git usw.) und für ein Build-System (zum Beispiel in Java gibt es Ant und Maven) lesen.
quelle
Entwickler arbeiten niemals als Team. Teams saugen. Dilbert ist nicht lustig, weil er eine komische Figur wie Goofy ist. Er ist lustig, weil er real ist und die Leute die Situationen erkennen, in denen er sich befindet.
quelle
Es gibt keinen Standard für die Dinge, nach denen Sie fragen. Vielmehr gibt es Konventionen, die stark von der Größe und Reife der Organisation abhängen. Wenn Sie in einer kleinen Organisation arbeiten, sagen einige Programmierer, werden die Dinge wahrscheinlich etwas informell sein, wenn die einzelnen Entwickler Codierungen, Builds und Tests durchführen.
In größeren Organisationen gibt es möglicherweise einen dedizierten Build-Ingenieur und -Prozess. Diese Art von Organisation führt normalerweise regelmäßig einen formellen Build durch, beispielsweise einmal am Tag, wobei der eingecheckte Quellcode verwendet wird. Der Prozess umfasst normalerweise auch BVT (Build Validation Tests) und möglicherweise einige Regressionstests. Entwickler checken den Code aus dem Repository aus, arbeiten lokal an ihrem eigenen Teil und checken ihn dann ein.
In den größten Organisationen wie Microsoft oder Google verfügen sie über eine vollständig dedizierte Gruppe und ein vollständiges Labor, das mehr oder weniger kontinuierlich aufbaut und die Ergebnisse jedes Laufs zur Verfügung stellt. Diese Organisationen verfügen über sehr formale Prozesse und Verfahren, die festlegen, was wann eingecheckt wird, wie die Codeüberprüfungsprozesse aussehen usw.
quelle
Es gibt kein Kochbuch für die Arbeit mit der Softwareentwicklung, aber im Allgemeinen sollte das Versionskontrollsystem das Herzstück Ihres Build-Systems sein, selbst wenn Sie in einem Projekt arbeiten, in dem Sie der einzige Entwickler sind. Selbst in diesem Fall ist es sehr willkommen, Versionen zurücksetzen und das Versionsprotokoll lesen zu können, um Fehler zu beheben. Dies ist nicht die einzige Funktion eines Versionskontrollsystems, sondern allein die Installation, Konfiguration und Wartung eines Versionskontrollsystems.
Der Build kann entweder von jedem Entwickler beim Hinzufügen von neuem Code oder regelmäßig von einem "Build-Server" durchgeführt werden. Der letzte Ansatz erfordert mehr Setup, hilft jedoch dabei, Buildfehler früher herauszufinden.
quelle
Die kurze Antwort - "Es kommt darauf an".
Derzeit arbeite ich selbst an einem Projekt, also bin ich derjenige, der VCS erstellt / verwendet. Ich kenne andere Orte, an denen Teams per Schauer- E-Mail gemeinsam an dem Projekt arbeiten . Oder große (+5) Teams, die VCS verwenden.
In diesem Sinne empfehle ich dringend, zumindest einige VCS zu lernen, und Joel Spolsky hat ein großartiges Einführungs- Tutorial für Mercurial. Bazaar (meine persönliche Wahl) ist ähnlich, und dann ist Git in Bezug auf Ähnlichkeit der nächstgelegene, aber wahrscheinlich beliebter als beide (zumindest Geldautomaten). Danach haben Sie SVN, die im Vergleich ziemlich schwach ist.
Eigentlich spricht Joel über die meisten Ihrer Fragen - ich würde empfehlen, die 10 Jahre Archive zu lesen, die er hat - es sind alles sehr nützliche Informationen, und das meiste davon ist relevant für Ihre aktuelle und nahe zukünftige Situation.
quelle
Die richtige Programmierung ist eine tiefe Sache, die stark von der Erfahrung profitiert. Paarprogrammierung ist wie das Ausführen mehrerer Prozessoren des Bewusstseins ... einer kann etwas übersehen, das der andere sieht, und solange sie kommunizieren, kann dies zu großen Fortschritten führen.
quelle
Zuallererst arbeiten Teams mithilfe von Repositorys (dies kann eine professionelle Versionskontrolle sein oder nur eine Reihe von Verzeichnissen, die als "live" betrachtet werden, jedoch ist ein Revisionskontrollsystem de facto der Standard). Wie das Projekt verwaltet wird, hängt auch davon ab, wie Sie arbeiten (Wasserfall, Agilität usw.). Wenn Sie in Iterationen arbeiten, erstellen Sie Komponenten / Plugins / Module / Bibliotheken, die eigenständig sind, und führen Unit-Tests durch, bis sie als abgeschlossen abgemeldet sind. Als Team arbeiten Sie in einem Team, was bedeutet, dass Sie nicht überall gleichzeitig am gesamten Projekt arbeiten. Stattdessen erhalten Sie eine Aufgabe, die Sie in einem Bereich des Projekts ausführen müssen. In einigen Fällen müssen Sie Code reparieren, der nicht Ihnen gehört, der jedoch normalerweise auftritt, wenn ein seltsames Verhalten auftritt. Grundsätzlich testen Sie die Teile, die Sie entwickeln.
Lassen Sie mich dies für Sie erläutern. Sie befinden sich in einem Team von Bauarbeitern. Der Architekt kommt mit einem Plan für ein Gebäude, der Vorarbeiter prüft, was zu bauen ist, und stellt dann die Bauherren ein. Der Maurer macht die Wände, prüft sie auf Festigkeit und klebt sie schön fest. Der Elektriker führt die gesamte Verkabelung im Gebäude durch, damit Strom fließen kann. Jeder Mann hat seinen eigenen Job. Manchmal möchte der Elektriker vielleicht mit dem Maurer besprechen, ob bestimmte Wände geschnitzt werden können, aber immer in Verbindung mit dem Vorarbeiter.
Ich hoffe das ist eine Hilfe für dich!
quelle
In der Regel enthält das Quellcodeverwaltungssystem den Quellcode und verfügt normalerweise nicht über die Binärdateien. Wenn Sie es erstellen und ausführen möchten, überprüfen Sie den Code und erstellen Sie ihn auf Ihrem lokalen Computer.
Einige Orte führen nächtliche Builds durch, um sicherzustellen, dass alles funktioniert. Möglicherweise gibt es sogar einige automatisierte Tests, die serverseitig ausgeführt werden. Wenn der Build oder etwas anderes fehlschlägt, wird automatisch jemand benachrichtigt.
quelle
Eine gute Einführung in eine Methode zur Verwendung der Quellcodeverwaltung ist Eric Sinks Quellcodeverwaltungs-HOWTO http://www.ericsink.com/scm/source_control.html
In seinen Beispielen verwendet er SourceGear Vault, seit er es geschrieben hat, aber die Methoden können auf andere Versionskontrollsysteme angewendet werden.
quelle
Dies ist wieder ein guter Grund, warum man sich mit Open Source-Projekten befassen sollte.
Die Hauptentwickler, die in großen OpenSource-Projekten (wie Chromium, Mozilla Firefox, MySQL, Popular Gnu Software) arbeiten, sind Profis. Sie haben viel Erfahrung und diese Projekte haben sich im Laufe der Jahre mit Ideen von Hunderten solcher Fachleute entwickelt.
Alles, was andere in ihren Antworten erwähnt haben (Plan, Versionskontrollsystem, Issue-Tracker, Benachrichtigungssystem, Build-System, Testsuite), finden Sie in diesen OpenSource-Projekten.
Wenn Sie wirklich praktische Erfahrungen sammeln möchten, empfehle ich Ihnen dringend, einige beliebte und große OpenSource-Projekte durchzugehen und dann die Quelle aus einem beliebigen Projekt (mithilfe der Versionskontrolle) abzurufen und selbst zu erstellen.
PS: Ich bin auch Student und die Teilnahme an OpenSource-Projekten ist das Beste, was ich jemals in meinem Leben getan habe. Vertrau mir! Sie werden auch das gleiche fühlen.
quelle