Wieviele Programmzeilen pro Script?
Thomas Schmieder
- php
0 Christoph0 Christian Kruse0 lulu0 Philipp Hasenfratz0 Axel
Hallo,
bei meinem Projekt komme ich langsam auf die Idee, mal nachzufragen, wieviele Programmzeilen IHR schon in PHP in einem Script inclusive der Includes gewagt habt.
Wo sollte man da die Grenze ziehen?
Erfahrungsberichte aus der Praxis würden mich freuen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
keine Ahnung wo ne Grenze liegt, für den Compiler sind doch 1000 Zeilen doch garnix. Meine/Unsere längste php Datei war und ist 2303 echte Zeilen lang! Das war damals noch ein ein tolles Projekt...
Heute wird da etwas anders programmiert ;-)
Bin auch schon ganz gespannt was die anderen jetzt sagen werden :)
Ps: hab mal ne xml Datei gesehen, die war beim MozPad mit dabei, die war 4225 Zeilen lang...
Gruß Christoph
Hallo Thomas,
bei meinem Projekt komme ich langsam auf die Idee, mal
nachzufragen, wieviele Programmzeilen IHR schon in PHP in
einem Script inclusive der Includes gewagt habt.
ckruse@sunshine:~/dev/www/groupware $ wc -l find . -name "\*.php"
18781 total
ckruse@sunshine:~/dev/www/groupware $
Die werden, im unguenstigsten Fall, alle benoetigt. Templates
sind noch nicht dabei.
Wo sollte man da die Grenze ziehen?
So niedrig wie moeglich aber so hoch wie noetig.
Erfahrungsberichte aus der Praxis würden mich freuen.
Auf einer Pentium4-1,2GHz-Maschine mit 1,2Gig RAM habe ich
bei 1,5k Usern keine groesseren Probleme. Hin und wieder
muckt der MySQL-Server (auf einer zweiten
Pentium4-1GHz-Maschine mit 1,2 Gig RAM), er habe zu viele
Verbindungen, aber wirklich kritisch ist da eigentlich
nichts.
Gruesse,
CK
Hallo Christian,
das beruhigt mich schon mal.
Im Moment sind wir vielleicht bei 2000 Zeilen, wobei wir die immer noch "druckfähig" halten. Kommen vielleicht noch 50*4*30=6000 aus mehr oder weniger polymorphen Scripten hinzu, dann sollte das Projekt (erstmal) stehen oder besser laufen.
Wir haben uns bewusst nicht für OOP entschieden, da nicht immer alle Module nötig sind, und die Objektorientierujng über die DB abgwickelt wird.
Suche da noch ein itelligentes Include-Konzept. Ich hatte ja schon mal von dem Problem der Doppel-Icludes bei define() berichtet.
-----------------
Nochmal zu dem andren Thema "Response-Management im Forum": War nur eine Idee, wie man vieleicht besser helfen könnte. Es soll sich hier bestimmt keiner überwacht fühlen. dann würde das keinen Spaß mehr machen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Thomas,
Suche da noch ein itelligentes Include-Konzept. Ich hatte ja schon mal von dem Problem der Doppel-Icludes bei define() berichtet.
Du kennst include_once/require_once?
Grüße,
Christian
Hi Christian,
danke, danke, danke...
Ich hatte da sowas latent im Hinterkopf, aber kaum bewegt, wars schon wieder weg *schnüff*
Ich hätte jetzt selber was mit get_included_files() eingebaut. Man gut, dass es das Forum gibt.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallöle...
Ich hatte da sowas latent im Hinterkopf, aber kaum bewegt, wars schon wieder weg *schnüff*
Ich hätte jetzt selber was mit get_included_files() eingebaut. Man gut, dass es das Forum gibt.
Ummpf, hättest ja mal fragen können - so mach ich das seit langem mit meinen funclib.inc.php... ;-)
Fabian
Gutes zur Nacht...
Ich hätte jetzt selber was mit get_included_files() eingebaut. Man gut, dass es das Forum gibt.
Ummpf, hättest ja mal fragen können - so mach ich das seit langem mit meinen funclib.inc.php... ;-)
Man gut, dass Du bald Ferien hast und endlich mal wieder zur Arbeit kommst *ggg*
Liebe Grüße aus http://www.braunschweig.de
Tom
Gutes zur Nacht...
*Gähn* Was?
Ich hätte jetzt selber was mit get_included_files() eingebaut. Man gut, dass es das Forum gibt.
Ummpf, hättest ja mal fragen können - so mach ich das seit langem mit meinen funclib.inc.php... ;-)Man gut, dass Du bald Ferien hast und endlich mal wieder zur Arbeit kommst *ggg*
Ja nu, Schule geht vor, das weißt du doch. Und wenn ich dann an das grottige Praktikum im Januar denke (oder wenn ich es gar mit unserem vergleiche... *g*), bin ich wirklich froh mal n bissel was ordentliches zu tun zu haben >;)
Fabian
Huhu Thomas
1. jedes Computer-Programm enthält Fehler
2. jedes Computer-Programm enthält eine überflüssige Zeile
Durch Deduktion folgt also, dass man jedes Programm auf eine einzige Zeile reduzieren kann - welche nicht funktioniert.
so viel zum Thema lange Bärte ...
*SCNR*
bei meinem Projekt komme ich langsam auf die Idee, mal nachzufragen, wieviele Programmzeilen IHR schon in PHP in einem Script inclusive der Includes gewagt habt.
Also beim längsten Projekt dürften das so um die 8-9 Tausend Zeilen sein. Ich bin mir allerdings sicher, dass es mindestens 1000 zuviel sind ;-)
Aber was sagt das schon aus ?
Viele Grüße
lulu
Halihallo Thomas
Ich versuche mal meine Gedanken zum Thema etwas zusammenzufassen. Die Antworten passen auch nicht immer zwingend auf deine Frage.
bei meinem Projekt komme ich langsam auf die Idee, mal nachzufragen, wieviele Programmzeilen IHR schon in PHP in einem Script inclusive der Includes gewagt habt.
Nun, mit PHP habe ich mich bisher an keine grösseren Projekte gewagt, aber vielleicht interessiert dich ein vergleichbares Projekt in Perl. Bei dem grössten Projekt ist die LOC ca. 44700 (an die 670 A4 Seiten Code), wobei ich mich hier lulu anschliessen kann und zugeben muss, dass wohl ca. 10000 LOC inaktiv sind (wie in der DNA). Es ist eine Kunst, ein Projekt über ein Jahr u. mehr umzusetzen und dann keine überflüssigen Zeilen zu haben; besonders wenn die Aufgabenstellung in der Entwicklungsphase noch ändert (was eigentlich (fast) immer der Fall ist und eine der grössten Gefahren hervorruft; nicht 100% durchdachte Schemata, sowohl in der Speicherung, als auch in der Verarbeitung).
Wo sollte man da die Grenze ziehen?
Eigentlich keine. Ich würde das Problem auf etwas anderes reduzieren: Die Gesamtmenge an LOC spielt keine Rolle, wichtig ist, dass jeder Prozess/Programm nur jene beansprucht, welche auch zwingend notwendig sind; dies erreicht man durch ein intelligentes splitten einzelner "Problemkreise" (modularer Aufbau, Klassen, Templates, ...). Christian hat mit seiner Argumentation recht, "So niedrig wie moeglich aber so hoch wie noetig.", einfach das laden, was auch notwendig ist, nicht mehr und nicht weniger; die gesamtsumme aller LOC des Projektes ist nicht relevant (ich bin sogar der Meinung, dass die Anzahl LOC einer Programminstanz nicht von grosser Relevanz ist [es sei denn, man übertreibt es]). Es ist klar, das bei einem grossen Projekt viele Module, viele Templates und und und geladen werden muss, aber um das kommt auch niemand herum, die Frage ("habe ich zuviel oder zuwenig LOC?") stellt sich eigentlich gar nicht.
Ich würde mal darauf tippen, dass es lediglich eine physikalische Grenze hat, sprich, Speicher voll...
---
Optimieren kann man später auch noch (Module verbessern, verweiste LOC vernichten, ...), aber schon am Anfang möglichst "spärlich" zu programmieren kann verherend sein (mit spärlich meine ich die "code&fix Umsetzung", also wenn DB-Verbindung, dann mach DB-Verbindung; aber kein Gedanke daran, dass die selbe Verbindung/Retrieval auch noch wo anders gebraucht wird und somit "separat" programmiert sein sollte). Eine Software "broken-by-design" ist wesentlich schlimmer, als eine gute Software, welche einfach einige LOC zu viel hat...
---
Bei meinem Projekt habe ich gemerkt, dass die grosse LOC Anzahl auch positiv sein kann. Nich im Bezug auf Performance, Statilität oder Funktionalität, sondern im Bezug auf den Menschen, der die Software überarbeiten/pflegen muss. Die relativ grosse LOC Anzahl meines Projektes rührt wohl daher, dass ich alle "Prozesse" getrennt halte, alles Modular, alles möglichst logisch getrennt. Man könnte sicherlich ca. 50% an LOC einsparen, aber ich tue es nicht. Warum? - Durch die "Gliederung/Modularisierung" hat man einen guten Überblick. Wenn ein Problem entsteht, weiss man, wo man zu suchen hat, da alle "Einheiten" auch gretrennt sind. Die Nachbearbeitung oder gar Redesign ist wesentlich einfacher, als wenn alles "gemischt" ist, da ein Problem/Neuerung an einer Stelle geändert werden muss und nicht bei jedem Auftreten desselben...
---
Abschliessend möchte ich sagen, dass nicht die Quantität, sondern die Qualität von Wichtigkeit ist. Mach dir keine Sorgen um die Quantität deiner Software, ich würde mal behaupten, dass es immer jemand gibt, der noch mehr programmiert (LOC) hat. Viel wichtiger ist, dass die LOC die du hast auch funktionieren ;-)
Eine ziemlich spärliche Aufführung meiner Gedanken zu "zu grossen Projekten". Meine Hauptaussage ist in etwa folgende "Die LOC ist, wenn nicht arg übertrieben oder durch schlechtes Programmieren verursacht, nicht relevant; andere Kriterien der Softwarebewertung sind wesentlich wichtiger" (ja, ich weiss, dass du nicht nach einer Bewertungsgrundlage gefragt hast; wollte dies hier nur kurz festhalten).
Viele Grüsse
Philipp
Hi,
Bei dem grössten Projekt ist die LOC ca. 44700 (an die 670 A4 Seiten Code), wobei ich mich hier lulu anschliessen kann und zugeben muss, dass wohl ca. 10000 LOC inaktiv sind (wie in der DNA).
WAAAH!!!2
Ist es nun Zufall oder Absicht, dass erst kürzlich im Fernsehen StarTrek TNG: Genesis lief, und dass mein WinAmp *exakt diesen Moment* ausgesucht hat, um die Titelmusik von StarTrek II: Der Zorn des Khan (aka "Das Genesis-Projekt") zu spielen?
Cheatah :-)
Novnt Cheatah,
Ist es nun Zufall oder Absicht, dass erst kürzlich im
Fernsehen StarTrek TNG: Genesis lief, und dass mein WinAmp
*exakt diesen Moment* ausgesucht hat, um die Titelmusik von
StarTrek II: Der Zorn des Khan (aka "Das Genesis-Projekt")
zu spielen?
Bestimmt nicht. Schau mal aus dem Fenster, stehen da so graue
Lieferwagen? Dann pack schonmal die Zahnbuerste ein.
Gruesse,
CK
Hi Cheatah,
WAAAH!!!2
Ist es nun Zufall oder Absicht, dass erst kürzlich im Fernsehen StarTrek TNG: Genesis lief, und dass mein WinAmp *exakt diesen Moment* ausgesucht hat, um die Titelmusik von StarTrek II: Der Zorn des Khan (aka "Das Genesis-Projekt") zu spielen?
Vielleicht hast Du unter Skins versehentlich das neue PSI-Modeul[tm] von Winamp aktiviert? Passt sich den Hirnströmen der Umgebung an....
Viele Grüße
Mathias Bigge
Halihallo Cheatah
WAAAH!!!2
Ist es nun Zufall oder Absicht, dass erst kürzlich im Fernsehen StarTrek TNG: Genesis lief, und dass mein WinAmp *exakt diesen Moment* ausgesucht hat, um die Titelmusik von StarTrek II: Der Zorn des Khan (aka "Das Genesis-Projekt") zu spielen?
Du sollst doch keine synthetischen T-Zellen in den WinAmp laden, Cheatah! - Du wisst doch, dass Änderungen im Win-System irreversibel sind! ;)
Viele Grüsse
Philipp
Hi,
Du sollst doch keine synthetischen T-Zellen in den WinAmp laden, Cheatah!
<schäm> 'tschuldigung... </schäm>
Du wisst doch, dass Änderungen im Win-System irreversibel sind! ;)
"Mouse pointer moved. Please reboot to apply." ;-)
Danke auch an die anderen für das Outing als Gesinnungsgenosse *g* Wo wir gerade so nett beisammen sitzen, und wo schon "OT" im Subject steht: Wer kennt alles schon die eine oder andere Folge der neuen Serie "Enterprise", und was haltet ihr davon[1]?
Cheatah
[1] "Abstand" lasse ich als Antwort nicht gelten ;-)
Halihallo Cheatah
Danke auch an die anderen für das Outing als Gesinnungsgenosse *g* Wo wir gerade so nett beisammen sitzen, und wo schon "OT" im Subject steht: Wer kennt alles schon die eine oder andere Folge der neuen Serie "Enterprise", und was haltet ihr davon[1]?
sorry für die verspätete Antwort, musste noch meinen Geb*ups, jetzt hab ich's verraten*i betrinken, man möchte meine meine Wortkargheit also darauf zurückführen, etwas zu viel Bier getrunken zu haben... ;)
Enterprise? - Na, das konnte ich mir einfach nicht entgehen lassen (als Trekkie *g*)... Um eine wirkliche Meinung darüber zu bilden, habe ich jedoch noch zu wenige gesehen. Was ich jedoch bisher mitbekam, ist gut, aber bei weitem nicht so gut wie TNG (ich vermisse mein Data und Jean Luc :-( ). Ich vermisse das "Autoritäre", das "Entschiedene", das "Wissenschaftliche" und das "Analytische".
... so, und jetzt zieh ich mir noch ein DVD zu Gemüte (um den schönen Tag etwas abzurunden), ihr entschuldigt mich? ;)
Viele Grüsse
Philipp
Hallo Cheatah,
Wer kennt alles schon die eine oder andere Folge der neuen Serie "Enterprise", und was haltet ihr davon[1]?
Also, ich kenne die erste Folge (Pilotfilm). Die Idee finde gut und auch die Charaktere sind gut gewählt, aber ich persönlich finde den Vorspann unpassend zu Star Trek. (nicht, dass er schlecht sei, er passt einfach nicht) Außerdem gibt es doch einige (sehr auffällige) Inkonsitenzen zu den anderen Serien, z.B. dass das Schiff so "modern" aussieht (vom Design her), vor allem, wenn man es mit TOS vergleicht. Außerdem haben sie da mit "temporalem kalten Krieg" & co schon etwas dick aufgetragen...
Naja, was ist denn *Deine* Meinung dazu?
Grüße,
Christian
Hi Cheatah,
also ich habe mir fest vorgenommen, den morphing code von IE und Windows nicht zu aktibieren, obwohl ich hier einige nette Berichte gesammelt habe, wie man das machen muss.
Wenn es denn mehr als 10.000 Programmzeilen werden, dann sicherlich wegen der vielen Kommentare i PHP, die ich mir selber angewöhnt habe und deshalb auch von den Teammitgliedern erwarte....
Ich hoffe nicht, dass Die auf Deinem Client jemals ankommen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi
also ich habe mir fest vorgenommen, den morphing code von IE und Windows nicht zu aktibieren, obwohl ich hier einige nette Berichte gesammelt habe, wie man das machen muss.
Wenn es denn mehr als 10.000 Programmzeilen werden, dann sicherlich wegen der vielen Kommentare i PHP, die ich mir selber angewöhnt habe und deshalb auch von den Teammitgliedern erwarte....
Grumpf, du kannst PHP nicht fliessend lesen? *scnr*
(Nein, ist ja in Ordnung, aber wenn eine Zeile Kommentar auf eine Zeile Code kommt isses auch gut ;-)))
Fabian
Hallo,
bei meinem Projekt komme ich langsam auf die Idee, mal nachzufragen, wieviele Programmzeilen IHR schon in PHP in einem Script inclusive der Includes gewagt habt.
Mein lägstes Script in PHP war eine Klasse mit rund 3.400 Zeilen (inklusive Kommentare, Leerzeilen)
Wo sollte man da die Grenze ziehen?
Vollkommen wurscht. Funktionieren muss es. Je weniger Du benötigst um ein Problem zu lösen, desto besser - aber nicht unbedingt schneller.
Eine Zeilenanzahl sagt nichts (garnichts) über ein Programm aus.
Erfahrungsberichte aus der Praxis würden mich freuen.
Etwas vielleicht: Ich packe grundsätzliche jede Klasse in eine eigene Datei. Es macht keinen Sinn alles in eine Datei zu packen - ich glaube zwar nicht, das hier jemand das macht, aber ich habe schon Pferde vor der Apotheke...
Beispiel: Ich habe von einem Freund ein C# Programm erhalten - das waren 16 Klassen, einige Windowsforms, enumerations, delegates etc. in einer einzigen Datei.
Wahnsinn! Das Ding hatte rund 25.000 Zeilen Programmcode war aber faktisch nicht mehr zu durchblicken. Nach einer durchgemachten Nacht hatte ich das Ganze aufgedröselt und entsprechend in Namespaces und Folder umgearbeitet.
Siehe da...Die umfangreichste Datei hatte etwa 1.200 Zeilen. Ab jetzt ist das Programm sehr gut handlebar und lässt sich sogar gut im Team weiterentwickeln.
Nur mal so am Rande...
Grüße
Axel
Hallo Axel,
Erfahrungsberichte aus der Praxis würden mich freuen.
Etwas vielleicht: Ich packe grundsätzliche jede Klasse in
eine eigene Datei.
Schlechter Rat, ganz schlechter Rat. Sicher sollte man nicht
alles in eine Datei packen, aber du vergisst, dass es hier um
eine Script-Sprache geht. Jede Datei verlangsamt den Vorgang
um ein Weiteres. Also: so wenige Datein wie moeglich, aber so
viele wie noetig.
Gruesse,
CK
Hallo Axel,
Schlechter Rat, ganz schlechter Rat. Sicher sollte man nicht
alles in eine Datei packen, aber du vergisst, dass es hier um
eine Script-Sprache geht. Jede Datei verlangsamt den Vorgang
um ein Weiteres. Also: so wenige Datein wie moeglich, aber so
viele wie noetig.
Hi,
Ansichtssache. Abgesehen davon: Wieviele Klassen hat so ein durchschnittliches Script? Im Normfall vielleicht eine Datenbank-Abstraktion, eine Template-Engine und meistens (wenn überhaupt) war's das.
Komplexere Seiten werden u.U. noch ein paar weitere Klassen haben - hier ist dann folgendes zu klären:
U.u. kann sich in Einzelfällen eine Ausnahme lohnen - dennoch: Ich habe bisher darauf verzichtet, mehrere Klassen in ein einziges File zu packen.
Ich vertrete den Grundsatz "pro Klasse eine Datei" übrigens aus verschiedenen Gründen:
Ich teile Deine Einschätzung, das Dateizugriffe im Normalfall teuer sind - aber:
Eine unfragmentierte Platte ermöglicht das Ablegen der Dateien dicht bei dicht. Der Lesekopf muss minimal repositioniert werden. Die Platte dreht ohnehin immer und moderne Platten bieten gutes Caching und gute Durchsatzraten. Hinzu kommen Chaching-Algorithmen moderner Webserver - also meiner Auffassung nach nicht kritisch.
Ich bin bis jetzt immer ganz gut damit gefahren - Mergen im SourceSafe blieb mir bis jetzt erspart.
Natürlich kann man das auch ganz anders sehen (hängt auch stark von der eigenen Arbeitsweise und den Rahmenbedingugen ab) - aber bisher habe ich nur gute Erfahrungen im Gegensatz zum "One Project - One Script" - Vorgehen.
Gruß
Axel
BTW: Script-Sprache hin- oder her: Arbeitest Du im Team mit einem Versionskontrollsystem, wirst Du den Vorteil des "eine Klasse eine Datei"-Prinzips schnell lieben - solange Du nur selbst an einem Projekt arbeitest sind die Vorteile natürlich je nach Arbeitsweise nicht gravierend.
Hallo Axel,
Ansichtssache. Abgesehen davon: Wieviele Klassen hat so
ein durchschnittliches Script? Im Normfall vielleicht eine
Datenbank-Abstraktion, eine Template-Engine und meistens
(wenn überhaupt) war's das.
ckruse@sunshine:~/dev/www/groupware $ find . -name "*.php" | wc -l
69
ckruse@sunshine:~/dev/www/groupware $
Wenigstens eine Klasse pro Datei, in vielen eher zwei.
- Sind es individuelle Klassen ohne
Wiederverwendungsmöglichkeit in anderen Projekten?
Was hat das damit zu tun?
Eine vernuenftige Modularisierung modularisiert nach
Themengebieten. Es kann sinnvoll sein, pro Thema eine Datei
anzulegen, es kann sinnvoll sein, ein Thema in eine Datei
zusammenzufassen.
- Muss im Team daran gearbeitet werden?
Das darf kein Kriterium sein.
U.u. kann sich in Einzelfällen eine Ausnahme lohnen -
dennoch: Ich habe bisher darauf verzichtet, mehrere
Klassen in ein einziges File zu packen.
Bleibt dir ueberlassen.
- Ich muss nur das laden, was ich benötige
Den Grundsatz vertrete ich aehnlich. Aber das zusammenfassen
in einer Datei schliesst diesen Grundsatz nicht aus.
- Ich belege nur den Speicher den ich wirklich benötige
Dito.
- Ich kann im Team an einem Projekt arbeiten
Das sollte und darf kein Kriterium sein.
- Kommt dem OOD am nächsten
Sehe ich anders. OOD sieht Namespaces (Themengebiete) vor.
- Das Prinzip der Modularität wird auch auf Dateiebene
realisiert
Das muss kein Vorteil sein, beleibe nicht.
- Das Projekt wird übersichtlicher
Ganz im Gegenteil.
- Das Ergebis entspricht eher dem, was ich in Rational
entwerfe
Bei mir nicht.
Ich teile Deine Einschätzung, das Dateizugriffe im
Normalfall teuer sind - aber:
Es kommt nicht auf die Dateizugriffe an. Teuer ist das
include() selber, nicht der Dateizugriff. Bei jedem Durchlauf
muss der Parser ein weiteres mal angeworfen werden, bei
jedem Durchlauf muessen die Syntax-Baeume neu erstellt werden.
[... HD-Zugriff ...]
Um den HD-Zugriff zu merken, muss eine Datei schon *sehr*
viel Code enthalten. Script-Sprachen sind idR nicht schnell
genug, als das man den Unterschied merken wuerde.
Natürlich kann man das auch ganz anders sehen (hängt auch
stark von der eigenen Arbeitsweise und den
Rahmenbedingugen ab) - aber bisher habe ich nur gute
Erfahrungen im Gegensatz zum "One Project - One Script" -
Vorgehen.
Wer redet denn davon, alles in ein Script zu packen? Meine
Guete, ich redete vom goldenen Mittelweg.
BTW: Script-Sprache hin- oder her: Arbeitest Du im Team
mit einem Versionskontrollsystem, wirst Du den Vorteil des
"eine Klasse eine Datei"-Prinzips schnell lieben
Ich wusste gar nicht, dass ich noch nie in einem Team
gearbeitet habe, mit einem Versions-System nicht umgehen kann
und keine groesseren Projekte umgesetzt habe ;)
Gruesse,
CK