Erstes großes Softwareprojekt, wie verwalten ?

Mo1k

Mitglied
Hallo,

ich möchte nun mein erstes privates größeres Softwareprojekt mit C++/QT starten und habe aber ein paar Fragen die mir den Kopf zerbrechen:

Gibt es gute Werkzeuge für die Projektverwaltung ?
wenn ich zb nach dem Release änderungen an dem Programm durchführen will, will ich nicht per Hand die fertig geänderten und kompilierten Dateien zusammensuchen müssen, um ein Updatepacket bereitzustellen. Gibt es dazu passendes Werkzeug ?



Mfg
 

ComFreek

Mod | @comfreek
Moderator
Zuerst würde ich dir ein Versionskontrollsystem empfehlen, z.B. Git oder SVN.

Für das Packen, kannst du z.B. ein Python-, Bash- oder auch ein Powershellskript erstellen.
Ich arbeite auch gerade an einem Projekt, welches genau für so einen Zweck gedacht ist.
 

Mo1k

Mitglied
so, erstmal danke für den Tipp SVN. Habe mich damit mal ein wenig beschäftigt, es bleiben aber noch ein paar Fragen: Mit SVN kann ich meinen Quellcode verwalten, aber was ist wenn ich das Projekt compiliert habe und es später erneut compiliere aber nur die geänderten Dateien haben will, um daraus ein Updatepacket zu machen ?
 

ikosaeder

Teekannen-Agnostiker
Projektverwaltung: Entweder klassisch mit Makefile oder schau mal hier: http://www.scons.org/

Updates kannst du auf 2 Wegen realisieren. Erstens, du lagerst möglichst viele Dinge in Bibliotheken aus, dann musst du idealerweise nur die geänderten Bibliotheken und evt das Hauptexecutable austauschen.
Oder, du erstellst mit entsprechender Software einen Patch (Dabei werden die geänderte und die Originale Datei miteinander verglichen und die Unterschiede gespeichert.) Damit kann dann das Programm auf die jeweils aktuellste Version gebracht werden.
Beispiel: http://xdelta.org/
 

gorefest

Erfahrenes Mitglied
ein gar nicht so schlechter weg ist im übrigen auch das arbeiten mit delta-rpms.

Da ein Softwareprojekt i.d.R. aus mehr als dem Executable besteht lassen sich mit deltas einfach die Änderungen verteilen.

Grundsätzlich gilt aber : ALM ist nicht trivial.

Ich empfehle Dir zunächst mit SVN zu beginnen und dann das Vorgehen des tagging und merging anzuschauen.

Normalerweise machst Du einen Tag, wenn Du einen Release durchführst. Diese Tag-Version kann man auch auschecken. Hotfixes an diesem Release werden dann direkt auf der Tag-Version gemacht und dann wieder in den trunk per merge geholt. Soweit die Sourcecodeseite.

Wenn Du dann einen Verteilungsmechanismus gefunden hast (ich bevorzuge für sowas RPM, weil ich unter Linux arbeite) kannst Du Deine Updates einfach verteilen. Soweit die Applikationsseite.

Du solltest Dir generell ein Buildwerkzeug nehmen, um Deine Artefakte zu bauen. Hier empfiehlt sich maven oder bei QT tmake.

Dann sollte das eigentlich kein Problem sein ;-)
 

ikosaeder

Teekannen-Agnostiker
@gorefest: Ich arbeite schon eine ganze Weile in der Softwareentwicklung, aber deinen Post habe ich nicht verstanden. Warum ist ALM nicht trivial und was ist das eigentlich. DeltaRPM setzt vorraus, das auf dem Client ein entsprechendes System arbeitet, gibt es das für Windows und Mac auch?
Was du über Tags und auschecken schreibst ist richtig aber jemand der noch nicht mit SVN oder CVS gearbeitet hat versteht nicht was du meinst. Die eigentliche Anleitung würde auch etwa 2-3 Seiten umfassen (habe ich erst vor Kurzem für einen Kollegen aufgeschrieben).
Was meinst du mit "Artefakten"
Link zu maven und tmake?
 

gorefest

Erfahrenes Mitglied
Hi,

a) ALM ist das Kürzel für Application Lifecycle Management und befasst sich mit dem Lebenszyklus von Anwendungen und Releases. Hierzu gehören die Strecke von Entwicklung bis zum eigentliche Produktionsrelease sowie auch der Umgang mit bereits existentierenden Versionen (z.b. Upgrade-Strategien etc).

b) RPM gibts afaik nicht für Windows. Da ich aber Linux-only arbeite, ist das kein Problem für mich. Es gab mal den WISE Installer, der war plattformunabhängig. Je nach Umgebung kann man aber auch bespielsweise maven dazu verwenden, um verschiedene Zielplattformen zu pakettieren. Ich bin mir fast sicher, dass Qt da auch was bietet.

c) früher - als ich noch qt gemacht habe - gab es das tmake von Qt. Mittlerweile gibt es auch ein maven-Plugin namens qt-jambi mit dem man offenbar auch qt builds aus maven heraus machen kann.

Maven ist ein in Java geschriebenes, sehr leistungsfähiges Buildwerkzeug, welches nicht nur den Buildlauf stark vereinfacht, sondern auch Abhängigkeiten zu anderen Libs oder Projekten (="Artefakte") auflösen kann.

siehe hierzu mal maven.apache.org bzw. http://qt-jambi.org/

Btw, das taggen von Versionen ist nur ein Klick. Der Checkout ebenfalls und der Commit auch. So kompliziert ist das doch nicht, oder?

Grüße,
gore