Erbt einen PHP Alptraum, wo anfangen?

stimmen
40

Ich habe ein PHP-Projekt geerbt, die ein Alptraum sein ist Ausdrehen. Hier sind die wichtigsten Punkte:

  1. Alle ursprünglichen Entwickler verlassen haben
  2. Der Code hat keine Versionskontrolle
  3. Alle Entwicklung und Erprobung wurden auf dem Live-Server erfolgt durch Umbenennen und Bearbeiten der PHP-Dateien. Es gibt mehrere Kopien jeder Datei index.php, index2.php, index3.php usw. und es ist unklar, welche Dateien wirklich verwendet wird
  4. Es gibt mehrere enthält, um Dateien in jeder Datei, die andere Dateien enthalten, die andere Dateien enthalten, usw.
  5. Es wird auf dem Projekt ein mehrere Entwickler gewesen, dass jeder, Dinge zu tun gibt es eigene Art und Weise hat. Zum Beispiel gibt es ein Sammelsurium von JavaScript-Frameworks verwenden einige Datenbankabfragen SQL, andere eine XML-Schnittstelle und andere nennen Verfahrensfunktionen in der Datenbank.

Wegen all dieser Probleme, die Entwicklung ist frustrierend langsam. Neben Entlüftung meine Frustrationen Überlauf Stack, alle Empfehlungen, wie auf diesem Schlamassel zu beginnen? Ich bin ziemlich neu in PHP-Entwicklung selbst, aber es scheint wie eine Art Entwicklungsumgebung einrichten, so dass Änderungen den Live-Server, ohne zu brechen getestet werden können, ist der erste Schritt. Irgendwelche Tipps, wie Sie hier, um loszulegen? Was ist eine typische Art und Weise Tests zu tun? Einrichten scheint eine lokale Version der Website auf meinem Desktop wie eine Menge Arbeit (Server ist Linux, aber Desktops sind hier Windows). Kann ich ein Unterverzeichnis auf dem Live-Server zum Testen erstellen, oder ..? Was ist mit der Datenbank?

Zweitens ist es eine Art von Profilierung I ermöglichen kann tatsächlich verwendet werden, werden die Dateien auf dem Server zu verfolgen? Ich mag die umbenannte Kopien der Dinge löschen, die nicht tatsächlich enthalten ist. Noch besser ist, ist es eine Möglichkeit, die nicht ausgeführt wird, sind Teile einer Datei zu erzählen? Es gibt viele kopierte Funktionen und Müll in, dass ich vermute, sind ebenfalls nicht verwendet werden. In ähnlicher Weise für die beinhaltet, irgendwelche Tipps, das Chaos Begradigung?

Nun, ich werde hier aufhören Entlüftungs- und werfe mich auf Gedeih und Verderb jeder hier. :)

Veröffentlicht am 09/12/2008 um 19:48
quelle vom benutzer
In anderen Sprachen...                            


27 antworten

stimmen
56
  1. Vor allem, bekommen Sie die Dateien in Steuer Version gibt. Sie gehen nicht in der Vergangenheit # 1 , bis es fertig ist.
  2. Stellen Sie eine Testumgebung.
  3. Bereinigen Sie die Dateien
Beantwortet am 09/12/2008 um 19:58
quelle vom benutzer

stimmen
30

Ich habe dies getan. Sie haben meine Sympathie. Wenn Ihr Reisepass nicht aktuell oder aus einem anderen Grund ist, können Sie dies nicht ausweichen zu tun, hier ist, wie ich es Ansatz würde:

Schritt Zero ist es in die Versionskontrolle zu bekommen, egal, wie beschissen es ist. Wenn es sogar Art funktioniert, und Sie etwas brechen, müssen Sie in der Lage sein, um den Arbeitszustand zurück zu gehen - oder zumindest vergleichen Sie Ihre Änderungen daran herauszufinden, was schief gelaufen ist. Haben häufige kleine Check-Ins wie Sie Refactoring, und Sie werden weniger Code müssen zurückrollen, wenn die Dinge auf mysteriöse Weise schief gehen. (Dinge auf mysteriöse Weise schief gehen.)

Danach würde ich in der Datenbank beginnen. Stellen Sie sicher, alles ist relativ gut normalisiert, Spalten eindeutig benannt werden, usw.

Haben die PHP - Code nächste. Wenn der Code wirklich so viel von einem Flickenteppich ist, würde ich voran gehen und passen es an einen Rahmen. Schauen Sie in CakePHP oder Symfony - ihre Rails-ish Art und Weise der Trennung von Bedenken macht die Frage „wo soll dieses Stück Code gehen?“ leicht zu beantworten. Es ist keine leichte Aufgabe, aber wenn Sie es getan haben, sind Sie wahrscheinlich besser als auf halbem Weg eine sanely konstruierten App zu haben. Auch die eingebaute Testeinrichtungen eines guten Web - Framework machen Refactoring viel einfacher - schreiben einen Test ein bestehendes Stück Funktionalität abzudecken , bevor Sie es ändern, und Sie wissen , ob Sie etwas nach dem Wechsel brach.

Nachdem Sie Ihre Datenbank sortiert und haben den Modellcode in den Modellen und den Controller-Code in den Controllern haben, dann können Sie über Sachen Präsentationsebene sorgen auf einer einzelnen JS / AJAX-Bibliothek wie Standardisierung, CSS Reinigung etc.

Wie für eine Entwicklungsumgebung: Sie sollten unbedingt eine lokale Entwicklungsumgebung einzurichten. Es gibt aus Turnkey WAMP - Pakete gibt, oder könnten Sie auf eine Box Linux installieren / VM (ich empfehle VirtualBox für Virtualisierung). Sie sollten auch eine separate Integrationstestumgebung, die den Live - Server nachahmt. Nichts als Live - Code sollte auf dem Live - Server ausgeführt werden .

Soweit debug / Profilierwerkzeuge, ich weiß, dass Symfony mit einer ziemlich glatt Reihe von Werkzeugen kommt, darunter eine wenig JS-Symbolleiste, die (nur im Debug-Modus) auf Ihren Seiten kommen mit Protokollierung und Profilinformationen.

Viel Glück.

Beantwortet am 09/12/2008 um 20:25
quelle vom benutzer

stimmen
17

Nun, das Wichtigste zuerst. Ich habe in der Situation, die Sie in sind gewesen, und es saugt. Ich denke, dass Sie auf dem richtigen Weg sind mit dem Wunsch auf eine Entwicklungsumgebung zum Laufen.

Entwicklungsumgebung

Dies wird einen Webserver / Script-Engine / Datenbank-Engine-Stack und ein IDE höchstwahrscheinlich auch.

Für einen LAMP - Stack - Installer , empfehle ich eine davon mit:

Lese weiter auf dem LAMP-Stack:

O'Reillys ONLamp Website

Für eine gute PHP IDE , empfehle ich eine davon mit:

Artikel auf IBM Developer Website mehr IDE Vergleich

Für Quellcodeverwaltung können Sie Team Foundation Server, SVN oder Git - nur etwas verwenden , die Sie kennen. Ich würde empfehlen , zuerst in der Quellcodeverwaltung immer alles (für jeden Notfall Wartung Sie haben könnten), aber dann plane eine ziemlich große Überholung tun.

der Overhaul

Sie haben erwähnt, dass Sie nicht einmal wissen, welche Dateien verwendet werden immer, und dass sie verwendet, um eine Datei Konvention als pseudo-Versionskontrolle zu benennen. Vielleicht möchten Sie es starten Überholungs, sobald Sie eine Entwicklungsumgebung und läuft haben. Es gibt ein paar Dinge, die Ihnen helfen können:

  • Ihre App Kunden / Benutzer
  • Sorgfältige und organisierte Notizen
  • Eine gute Logging-Framework

Ihre Kunden / Benutzer sind wichtig , weil es klingt wie Sie für das Projekt neu sind und sie werden wissen , wie die App besser verhalten , als Sie (wahrscheinlich).

Sorgfältige Notizen sind wichtig , weil Sie alle Anforderungen im Wesentlichen neu zu schreiben werden sein / Design / Endbenutzerdokumentation von Grunde auf. Sie müssen die Interna verstehen , wenn Sie vorhaben , das zu tun. Und wenn du gehst , etwas über dieses System zu verstehen, müssen Sie es aufzuschreiben selbst (oder würden Sie jetzt premade Dokumentation statt Lesen Stack - Überlauf werden Lesen) ;-)

Und schließlich ein Logging - Framework ist wichtig , weil Sie brauchen , um Dinge zu beheben, und Sie können nicht reparieren Dinge , die Sie wissen nicht gebrochen werden. Ein Logging - Framework gibt Ihnen Einblick in die Teile der Anwendung , die keine offensichtliche UI haben. Es in verschiedenen Teilen der App einfügen und dann in den Protokollen der Suche gibt Ihnen eine gute Idee , wenn der Code ausgeführt wird und in welcher Reihenfolge.

Sie werden auf die Erfassung (auf Papier) konzentrieren wollen, wie die App funktionieren sollte, und dann nicht mehr benötigte Dateien langsam entfernen, während versuchen, nichts zu brechen. Halten Sie ein Auge auf Protokolle mit Fehlersuche zu helfen. Stellen Sie sicher, dass Ihre Kunden nicht schreien, dass etwas gebrochen ist. Stellen Sie sicher, dass Ihre Notizen stimmen mit dem, was immer protokolliert und was Ihre Kunden sagen.

Verhindern, dass dies in der Zukunft

Überprüfen Sie nochmals alles wieder in die Quellcodeverwaltung . Hoffentlich haben Sie bei einer neueren, gesünderen, besser Verzeichnisstruktur von diesem Punkt angekommen.

Holen Sie sich eine Teststruktur an Ort und Stelle . Auch wenn dies bedeutet nur eine Basiseinheit Test - Framework an Ort und Stelle bekommen und nach jedem deploy einige grundlegende Rauchversuche zu tun, dann ist es besser als nichts. Idealerweise sollten Sie einen Testingenieur oder einen kompetenten und vertrauenswürdige Kunden , die Zeittests nach jedem deploy verbringen kann.

Setzen Sie einen Deployment - Prozess statt , wenn Sie mehr als einen Entwickler wachsen. Steuern von Änderungen sollten in der Produktionsumgebung Ihre erste Priorität sein. (Das letzte , was Sie tun wollen würde , ist durch diese wieder zu gehen, nicht wahr?) Sie sollten für die Bewegung zwischen Umwelt Grenzen eine klare und einfache Prozess (wie Dev -> Test dann Test -> Produktion).

Beantwortet am 09/12/2008 um 20:23
quelle vom benutzer

stimmen
16

Die meiste Zeit können Sie feststellen, ob eine Datei mit grep benutzt wird.

grep -r "index2.php" *

Sie können auch die PHP-Parser verwenden Sie Bereinigung zu helfen. Hier ist ein Beispiel-Skript, das die Funktionen ausdruckt, die deklariert werden und Funktionsaufrufe:

#!/usr/bin/php
<?php
class Token {
    public $type;
    public $contents;

    public function __construct($rawToken) {
        if (is_array($rawToken)) {
            $this->type = $rawToken[0];
            $this->contents = $rawToken[1];
        } else {
            $this->type = -1;
            $this->contents = $rawToken;
        }
    }
}

$file = $argv[1];
$code = file_get_contents($file);

$rawTokens = token_get_all($code);
$tokens = array();
foreach ($rawTokens as $rawToken) {
    $tokens[] = new Token($rawToken);
}

function skipWhitespace(&$tokens, &$i) {
    global $lineNo;
    $i++;
    $token = $tokens[$i];
    while ($token->type == T_WHITESPACE) {
        $lineNo += substr($token->contents, "\n");
        $i++;
        $token = $tokens[$i];
    }
}

function nextToken(&$j) {
    global $tokens, $i;
    $j = $i;
    do {
        $j++;
        $token = $tokens[$j];
    } while ($token->type == T_WHITESPACE);
    return $token;
}

for ($i = 0, $n = count($tokens); $i < $n; $i++) {
    $token = $tokens[$i];
    if ($token->type == T_FUNCTION) {
        skipWhitespace($tokens, $i);
        $functionName = $tokens[$i]->contents;
        echo 'Function: ' . $functionName . "\n";
    } elseif ($token->type == T_STRING) {
        skipWhitespace($tokens, $i);
        $nextToken = $tokens[$i];
        if ($nextToken->contents == '(') {
            echo 'Call: ' . $token->contents . "\n";
        }
    }
}
Beantwortet am 09/12/2008 um 23:56
quelle vom benutzer

stimmen
10

Wenn es der schlimmste Fall ist, wird der Code alle scrampled und alle Display mit der Logik und der Datenbankaufrufe verwirbelt wird, könnten Sie tun, was ich mit einem PHP-Projekt zu tun hatte.

Ich habe es drei Starts auf dem Refactoring Ansatz versucht. Es war wie Bergauffahrt auf einem Motorrad und bekommen 10% der Art und Weise jedes Mal. Also nahm ich einen anderen Ansatz, der viel besser am Ende der Arbeit aus.

  1. Ich angemeldet als Benutzer,
  2. und arbeitete jeden Bildschirm durch und jeden Anwendungsfall die ich finden konnte.
  3. Ich rettete die html zu statischen Dateien,
  4. und machte mir Notizen über das Verfahren Betrieb und offensichtliche Geschäftsregeln.

Ich tat dies für 3 ganze Tage und nahm dann meine Notizen und hatte ein langes Gespräch mit den Beteiligten.

richtig nach dem Aufstehen Einigung über einige erste Schritte, reimplementiert ich alle html UI, gute konsistente Gestaltung und Abstraktion mit. Nach dem Walzen bekommen, konnte ich ein paar Bildschirme pro Tag tun.

Dann nahm ich das Ergebnis zurück an die Akteure und lief durch ein Bündel von Anwendungsfällen. (Die Beteiligten waren ungeheuer erfreut über die Schritte 1 und 2, weil sie nicht die erste Implementierung mochten überhaupt sowieso (Überraschung) und jetzt sah es so gibt es Hoffnung auf Besserung, nicht nur Erholung von sane-old-App.

Das erwies sich das Ende der harten Arbeit zu sein (und auch das Ende der empfundenen Projektrisiko für die Akteure.)

Es stellte sich heraus, dass die erste Mannschaft so bekommen hatte in ihrem eigenen misbegotten Spaghetti gebunden, dass es tatsächlich vergleichsweise wenig Inhalt der Arbeit war, so duplizieren es weniger Umfang als alle vermutet hatten.

Aber der Schlüssel Entscheidung war, dass der ursprüngliche Code, Inhalt und Struktur war unrefactorable und ich brauchte von einer völlig Außenansicht mit einem neuen Rahmen zu arbeiten, die richtig entworfen wurde.

Beantwortet am 10/12/2008 um 00:24
quelle vom benutzer

stimmen
10
  1. Richten Sie einen Entwicklungsserver (als Greg Hewgill erwähnt, VirtualBox und Virtual PC sind eine gute Wahl für diese).

  2. Setzen Sie die aktuelle Site-Dateien (einschließlich der entsprechenden Web-Server und PHP-Konfigurationen!) In die Versionskontrolle.

  3. Finden Sie heraus, welche Dateien verwendet werden - Ihre Entwicklung Server-Setup verwenden, indem alle fooN.php Dateien zu testen und sehen, ob es noch funktioniert.

  4. Pray ... lots (OK, ist dies nicht erforderlich, aber es klingt wie Sie es brauchen).

Beantwortet am 09/12/2008 um 19:57
quelle vom benutzer

stimmen
7

Eine Sache, die Sie betrachten könnte, ist die PHP „xdebug“ Erweiterung in einer Entwicklungsumgebung zu installieren, stellen Sie alle Funktionsaufrufe zu verfolgen, und dann möglichst vollständig (möglicherweise durch automatisierte UI-Tests) übt die gesamte Anwendung. Sie werden dann in der Lage sein, die xdebug Trace-Dateien zu analysieren / analysieren alle Dateien / Funktionen, die von der Anwendung verwendet zu finden.

Beantwortet am 09/12/2008 um 20:38
quelle vom benutzer

stimmen
6

Andere Leute auf diesen Thread haben gute Ratschläge. Ich habe auch in dieser Situation gewesen. Wahrscheinlich hat jeder einmal in ihrer Karriere ging in ein Projekt, das aussieht wie es von einem Tornado getroffen wurde.

Ein Vorschlag, den ich hinzufügen möchte, ist, dass, bevor Sie eine der Bereinigung tun, indem andere Leute beschrieben, müssen Sie Management-Buy-in erhalten.

  • Machen Sie einen Plan basierend auf Vorschläge zu diesem Thema.
  • Beschreiben Sie neue Hardware oder Software, die Sie benötigen, um eine Entwicklung und Testumgebung zu schaffen, und den Preis diese aus.
  • Herauszufinden, welche neuen Fähigkeiten, die Sie zur Einrichtung geschult werden müssen auf und verwenden Sie die Entwicklung und Testumgebung. Schätzen Sie die Zeit und Kosten, die für Sie, diese Fähigkeiten zu erhalten. ZB Bücher oder bezahlte Ausbildung.
  • Schätzen Sie einen Arbeitsplan für Sie die Bereinigung zu tun. Wie lange Sie den Code unter Quellcodeverwaltung zu bekommen? Wie lange die Datenbank zu verstehen? Wie lange die PHP und Javascript-Code zu verstehen?
  • Präsentieren Sie dies Ihrem Vorgesetzten und Ausdruck das Ziel in Bezug auf die Leistung seiner unteren Zeile. ZB einmal wird alles gereinigt, so dass Änderungen oder neue Funktionen schneller werden Ausrollen, Debuggen Fehler berechenbarer sein wird und neue Mitarbeiter wird leichter sein Hochfahren.

Natürlich müssen Sie auch weiterhin mit dem aktuellen Chaos zu arbeiten, weil es eine Live-Site ist. die Live-Site Verwalten Priorität, so Aufräumarbeiten muss eine Hintergrundaufgabe sein. Das heißt, es wird noch länger dauern. Meine Erfahrungen Reinigen eines mittelgroßen Projekt als Hintergrundaufgabe, müssen in der Regel sechs bis zwölf Monate in Anspruch genommen. Da die Seite über diesen Zeitraum entwickeln wird auch weiterhin, müssen einige Ihrer abgeschlossen Cleanuptasks überarbeitet werden oder neu gemacht. Stellen Sie sicher, dass Ihre Manager nur allzu dies versteht.

Wenn der Manager bei Ihrem Plan stockt dieses Chaos aufzuräumen, oder nicht Wert es Reinigung, zumindest dann werden Sie wissen, warum alle anderen Entwickler diese Firma verlassen haben!

Ich habe ein paar konkreten Vorschläge darüber, wie es weitergeht:

  • Zusätzlich zu all den anderen guten Ratschlägen, ich würde vorschlagen , dass die Verwendung von Joel - Test als Maßstab. Ihr Plan für die Bereinigung sollte in einem Arbeitsumfeld führen , die auf dem Joel - Test punkten würden.
  • Lesen Sie meine Antwort auf „ Was sind die besten Möglichkeiten sind eine unbekannte Datenbank zu verstehen?
  • Aktivieren Sie auf der Website anmelden, so können Sie analysieren, welche PHP-Seiten werden tatsächlich aufgerufen. Mindestens das sagt Ihnen, welche von index2.php, index3.php, index4.php usw. wirklich veraltet sind.
  • PHP hat eine Funktion , get_included_files()die ein Array aller Dateien , die während der aktuellen Anforderung enthalten zurückgibt. Durch diese Informationen Anmeldung können Sie herausfinden, welche PHP - Dateien verwendet werden, auch wenn sie auftauchen nicht im Web - Server - Protokoll.
  • Sie wirklich brauchen eine Test & Entwicklungsumgebung, die Ihre Produktionsserver übereinstimmt. Es ist nicht gut auf Windows zu testen und implementieren auf Linux. Es ist nicht gut MySQL 5.0 während der Entwicklung zu nutzen und MySQL 4.0 in der Produktion. Sie können sich wahrscheinlich mit einer Hardware-Plattform weg, die bescheidenen (obwohl kompatibel) ist.
Beantwortet am 09/12/2008 um 21:29
quelle vom benutzer

stimmen
5

Sie können, indem sie diese in der Nähe des Ende der Seite eine Liste aller enthalten / erforderlich Dateien finden Sie unter:

<?php var_dump(get_included_files()); ?>
Beantwortet am 12/12/2008 um 02:45
quelle vom benutzer

stimmen
5

Ich würde:

  1. Setzen Sie sich und einen tiefen Atemzug nehmen;
  2. Entscheiden Sie, ob das ist wirklich, wo Sie arbeiten möchten;
  3. ja Unter der Annahme, dann würde ich meine Ganzkoerper aufrollen, eine Pick Chaos zu einer Zeit zu arbeiten und zu arbeiten.

Ich weiß, dass wir uns nicht darauf beschränken können nur auf eine Aufgabe zu einer Zeit; jedoch können Sie Ihre Arbeit zur Lösung ein Chaos zu einer Zeit begrenzen, während auf den täglichen Aufgaben arbeiten, die in kommen.

Beantwortet am 09/12/2008 um 20:09
quelle vom benutzer

stimmen
3

Betrachten wir eine neu zu schreiben und verwenden Sie den alten Standort als Feature-Spezifikation

Überraschenderweise niemand auch nur erwähnt dies, soweit ich sehen kann, aber es ist eine andere Alternative: auf dem Code aufgeben und verwenden nur die Funktionalität der Website selbst als neues Feature - Set - Spezifikation (dh die erste jemals für diese Projekt) und dann neu bauen die Website, auf diese Funktionen basieren, mit einem etablierten Rahmen (wie Symfony, Laravel oder Drupal).

Ja, es gibt diejenigen , die bei dem bösen Wort erschaudern würden wieder schreiben ... aber es gibt Fälle , in denen dies eigentlich ein besseren Weg zu gehen, und Sie an irgendwelchen Gründen angedeutet:

  • Sie sind ziemlich neue Entwicklung PHP, selbst
  • Sie werden wahrscheinlich mit etwas besser dran , ausgehend sauber anstelle des reinen Mist Code , den Sie haben geerbt
  • in der abschließenden Analyse, die meisten Anwender nicht einen Dreck um den Quellcode geben , und wenn es so aussieht , „funktioniert“ , um sie, können sie schauen dich wie du bist verrückt , wenn man sie etwas zu sagen versuchen ist fürchterlich falsch
  • Sie werden mehr Spaß haben und ein längeres Leben leben, wenn Sie die Praktiken der Quelle Revisionskontrolle und Datenbankdesigns in einem einheitlichen Rahmen abholen, die tatsächlich gepflegt genug sehen aus wie jemand ihren Namen mit ihm verbunden sein

Klar, jeder in dieser Position hatte zuvor so mit dem Code zu arbeiten, aber manchmal genug ist genug, und es ist besser, die Spaghetti verschrotten und mit einer frischen Platte beginnen.

Wenn Sie lesen Joels Artikel darüber , warum es schlecht ist ein Re-write zu tun, werden Sie fast keiner der Umstände bemerke , dass er hier auf Sie zutreffen zitiert.

Beantwortet am 10/12/2008 um 01:02
quelle vom benutzer

stimmen
2
  1. Holen Sie sich unter Revisionskontrolle.

  2. Entscheiden Sie sich für Namenskonventionen und Datei / Verzeichnisstruktur.

  3. Stellen Sie sicher, dass Sie anständige Werkzeuge / IDE haben.

  4. Stellen Sie eine separate Entwicklung / Testumgebung, wenn Sie nicht bereits haben

DANN ...

  1. Leider müssen Sie in all den 1, 2, 3 Dateien sichten und welche sind im Einsatz zu bestimmen, und welche entsorgt werden kann. Keine andere Art und Weise neben einer Brute-Force durchschleifen, Datei für Datei.

  2. Auch wenn ich eine RCS an der richtigen Stelle, noch bewege ich mich oft, was ich denke sind nicht verwendeten Skripte zu einem versteckten Ort, sagen .mausoleum und haben dann die RCS diese Position ignorieren. Nizza in der Lage sein, einen Blick zu nehmen lokal, ohne auf die Repo zurück.

  3. Separate HTML und PHP so weit wie möglich . Ich kann nicht genug betonen! Wenn dies in jeder Datei gemacht, in Ordnung. Nur so lange , wie Sie separate Stücke von PHP und HTML haben. Natürlich wird HTML mit echos hier und da gespickt werden, sondern versuchen , alle Tests zu haben, Schalter, alles andere bewegt aus dem HTML - Block und in den PHP - Block. Dies allein kann sein riesig , wenn es darum geht , Dinge aussortiert.

  4. Wenn der Code in erster Linie verfahrens ist - ich nehme an, in Ihrem Fall ist es - es ist wahrscheinlich am besten, einige erste bis reinige, bevor eine ernsthafte Refactoring zu tun oder in Klassen Refactoring.

  5. Wie Sie Dateien finden / Skripte, die logisch miteinander kombiniert werden können, tun dies. (Ich habe Projekte gesehen - wahrscheinlich nicht anders als bei Ihnen - wo die Gesamtzahl der überlebenden Dateien ist etwa 1/4 von dem, was wir angefangen haben mit).

Sobald Sie dies weit gegangen, dann können Sie eine richtige Refactoring oder Refactoring in Klassen beginnen.

Viel Glück!

Beantwortet am 02/03/2009 um 18:50
quelle vom benutzer

stimmen
2

Viele nützliche Beiträge darüber, wie damit umgehen.

Ohne zu versuchen, zu wiederholen, was alle anderen gesagt hat:

  1. Holen Sie sich eine Kopie der prod-Umgebung. Es kann eine virtuelle Maschine oder eine andere reale Maschine sein. Aber Sie müssen auf ihrem Gott sein. Wenn die prod Datenbank auf einem anderen Feld ist, werden Sie ein Entwickler-Version benötigen, auch.
  2. Werfen sie alle in die Versionskontrolle. Auf einem anderen Feld. Eine, die mindestens einmal pro Woche gesichert wird.
  3. Stellen Sie sicher wissen, wie Arbeiten in Ihrer Versionskontrolle Anwendung verzweigen. Sie werden wahrscheinlich brauchen.
  4. Holen Sie sich das prod Server gesperrt. Sie mögen keine weiteren Änderungen vorgenommen, die die Versionskontrolle nicht kommen.
  5. Erstellen Sie Anweisungen für die aus der Versionskontrolle zum Produkt Server Freigabe-Code. Die kleinste Einheit lösbarer Änderung soll die gesamte Code-Basis sein.

Die nächsten Schritte davon abhängen, wie angebracht, um es den Benutzern sind. Wenn es nicht zu viel aus irgendeinem Grund geändert werden kann, müssen Sie einen progressiven Ansatz. Wenn die Entwicklung und Wartung noch geschehen muss, dann ist dies wahrscheinlich die einzige Möglichkeit. Denken Sie daran, dass die Verzweigung Funktion nutzen zu können solche Mods trennen weg von Ihrem Umschreiben Bemühungen.

Um Sinn in die Struktur zu setzen, müssen Sie im Grunde eine neue Struktur neben schaffen, was es gibt. Ein neuer DB-Handler ist in der Regel ein guter Anfang, von einem generischen Include-Datei enthielt, das jede Seite geladen werden soll. Das Ziel ist die Schaffung eine minimale Struktur enthalten, die später erweitert werden kann, ohne jede Seite zu sagen, weitere Dateien zu laden.

Jetzt müssen Sie starten Funktionalität über Ihre neue Include-Dateien bewegen. Sie brauchen eine Möglichkeit, um mehrere Dateien auf einmal geöffnet zu haben, wie ein Multi-Datei-Editor, oder Bildschirm + vi (oder Emacs). Beginnen Sie mit Utility-Funktionen und Code-Blöcken, die an verschiedenen Orten wiederholt werden. Versuchen Sie, nicht ablenken zu lassen in eine Menge auf einmal zu fixieren. Einige Arten von Problemen gehen zu müssen, nur Orte bewegen, wie andere Probleme gefixt. Sie werden später auf sie zurückkommen.

Haben Sie das Gefühl nicht einen Drittanbieter-Rahmen hinzufügen müssen. Hinzufügen einer solchen Sache führt schnell zu einem kompletten Re-write. An diesem Punkt wird das eine ganze Menge mehr Arbeit als nur Zähmung ihrer Struktur enthalten. So sortiert zuerst, dass aus.

Wie Sie Funktionalität über verschieben, müssen Sie Dateien Ihre neue Datei enthalten verwenden haben. Die ersten paar Dateien, die Sie dies tun für Sie Konflikte für eine Weile zu jagen. Es fühlt sich entmutigend und sinnlos, aber das ist wahrscheinlich der schwierigste Teil. Nach ein paar Dateien, wird es einfacher werden. Es wird Zeiten geben, wenn Sie ein halbes Dutzend Seiten migrieren können, um die neuen Dateien enthalten ein Dutzend enthält eine mit nur durch den Ersatz. Die Kehrseite dieser Aktion ist, dass es Dateien, die Sie einfach löschen können.

Wenn man sich daran halten, werden Sie schließlich zu dem Punkt, wo alle Dateien enthalten sind diejenigen, die Sie geschrieben haben, und Sie werden über die gesamte umfassen Layout sein. Bis zu diesem Punkt wird es wesentlich einfacher sein, viel mehr invasive Veränderungen zu tun, wie in einem Dritt Rahmen setzen.

Beantwortet am 10/12/2008 um 05:31
quelle vom benutzer

stimmen
2
  1. Machen Sie ein Back-up des Codes jetzt.

  2. Versionskontrolle.

  3. Erstellen Sie eine Test-Site. Ist die Website läuft unter Apache? Sie können sogar Apache + PHP + MySQL auf Ihrem eigenen Computer, installieren und dass zum Testen verwenden.

  4. Deal mit Sicherheitsfragen. Stellen Sie sicher , dass die Website von SQL - Injection - geschützt ist, und von E - Mail - Injektion. Am allerwenigsten, können Sie eine Suche nach Datenbankaufrufe tun , und fügen Sie Anrufe mysql_real_escape_string()(na ja, wenn es eine MySQL - Datenbank ist mit) ... Sie können später eine echte Verlegenheit tun , wenn Sie den Code besser zu verstehen. Für die E - Mail - Injektion ... eine Filterfunktion schreiben , die Spammers Code herausfiltert, und stellen Sie sicher , dass alle Formularfelder , die in einer E - Mail verwendet werden , werden gefiltert. (Ja , es fügt mehr Spaghetticode, aber es wird eine Weile dauern , bevor Sie bereit sind , deutlich den Code Refactoring.)

  5. Danach schlage ich inkrementellen Upgrades. Sie sind neu und der Code ist ein higgleypiggley Chaos, so es wird eine Weile dauern, sie alle ... und vollständig die Domäne zu verstehen zu verstehen. So gehen Sie einfach über Ihre Arbeit für ein bisschen, reparieren, was repariert werden muss, und fügte hinzu, was hinzugefügt werden muss. Wie Sie tun so, Sie lernen, wie das System zusammengesetzt ist. Sobald Sie wissen, wie der Code organisiert ist (oder nicht organisiert) ein wenig besser, können Sie beginnen, eine große Refactoring / Neuschreiben der Anlagenplanung. Hoffentlich können Sie es Komponente für Komponente tun, so dass Sie immer einen neuen Meilenstein in Sicht haben.

Beantwortet am 10/12/2008 um 00:06
quelle vom benutzer

stimmen
2

Ich weiß wie du dich fühlst. Ich erbte die Entwicklung eines solchen Projekts. Es blieb bei mir für ein Jahr und um ehrlich zu sein es hat mich an den Entwickler der ich heute bin. Es gibt keine bessere Gelegenheit für persönliche Weiterentwicklung als knietief in der Scheiße zu arbeiten.

Hier sind die Dinge, die mir am meisten geholfen:

  • identifizieren, welche die wichtigsten Dateien des Systems sind. Sie werden sie, weil die meisten Ihrer Arbeit finden in ihnen getan werden
  • erstellen Sie eine lokale Version des Projekts (einschließlich der Datenbank) und setzt es unter Versionskontrolle
  • nur auf eine kleine Menge von Dateien mit kleinen Änderungen arbeiten
  • nichts in der Serienversion setzen, bis es gründlich getestet haben, und dann bereit sein, die alte Version zurück zu setzen
  • herauszufinden, wie die Benutzer des Systems behandelt werden (Sitzungen, Cookies). Erstellen Sie ein Super-User und dann, wenn Sie benötigen, um Ihre Code live auf dem System zu testen, setzen es in einem Block wie folgt aus:

    if($_POST['your_registered_user_name']{
       //Your live code being tested, which will be visible only to you when you are logged in
    }
    

    andere Benutzer nicht in der Lage sein, um die Änderungen zu fühlen. Diese Technik hat mir sehr geholfen, als ich war nicht in der Lage, den Systemstatus auf meinem lokalen Rechner zu ersetzen

  • Schreibtest und folgen strengen technischen Richtlinien für den gesamten Code Sie schreiben sind

Beantwortet am 09/12/2008 um 23:09
quelle vom benutzer

stimmen
2

Dies ist in der Tat ein Chaos. Aber beginnen kreativ immer auf dem einige der Tentakeln auf dieses Ding abzuschneiden:

  1. Holen Sie Versionskontrolle. Ich empfehle Git.
  2. Legen Sie einen lokalen Entwicklungsserver auf. Finden Sie eine WAMP, LAMP oder MAMP-Paket für den Einstieg, da Sie diese neu sind.
  3. Suchen Sie nach den Einspeisepunkten (index.php, etc.). Überprüfen Sie Ihre Serverzugriffsprotokolle, um zu sehen, was diese sind.
  4. Krempeln Sie die Ärmel auf einigen regulären Ausdruck schwarze Magie und auskippen eine Include / require Baum auf alle Dateien. Aber hüte dich vor irgend enthalten ($ filename) dynamic enthält. Wenn Sie eine von ihnen haben müssen Sie einige Protokollierung auf $ Dateinamen tun, was möglicherweise um herauszufinden, wird einbezogen, obwohl der Code um es sollte Ihnen Hinweise geben. Mit ein wenig Glück können Sie alle Ihre nicht mehr benötigte Dateien auf diese Weise keulen.
  5. Verwenden Sie mehr regex schwarze Magie Funktionen und Methoden zu überprüfen, werden an anderer Stelle in der Codebasis verwiesen. Es kann eine IDE, die Ihnen dabei helfen können. Versuchen Sie NetBeans (Ich habe es mir zu helfen, ein C ++ Projekt einmal zu umgestalten, so dass es hier helfen.)
  6. Wie jemand anderes antwortete: „herausfinden, falls erforderlich, wenn einige Klassen verwendet werden und einige sind es nicht, die Sie verwenden können get_declared_classes in Verbindung mit get_defined_vars und getType zu sehen, welche Arten instanziiert werden.“ Sie können auch nur einen Code schreiben, alle neuen Anweisungen in der Codebasis zu finden.
  7. Und so weiter ... man denke nur darüber, wie Sie whittle dieses Monster nach unten. Und versuchen, Code neu zu organisieren, wo Sie können.
Beantwortet am 09/12/2008 um 20:31
quelle vom benutzer

stimmen
2

Hier sind ein paar Ideen:

  • PHP und Apache gut funktionieren unter Windows auch. Vielleicht können Sie eine All-Windows-Installation, nachdem alle tun?
  • Versuchen Sie grep‚ing (oder eine alternative Windows) für‚umfassen‘und‚erforderlich‘in allen PHP - Dateien. Dann machen Sie eine Liste aller gefundenen Dateien enthalten. Vergleichen Sie die Liste mit Dateien im Ordner. Sie sollten loswerden zumindest einige nicht referenzierte Dateien können.
  • machen alternativ eine Liste aller Dateinamen und durchsuchen die Dateien für sie. Man könnte so etwas wie ein dependancy Graph wie diese machen.
Beantwortet am 09/12/2008 um 20:30
quelle vom benutzer

stimmen
2

Ich denke, alle 5 Ihrer Punkte auf einigen klassischen ASP-Projekten schlug ich geerbt haben, und ein PHP ein zu ...

Ich stimme völlig mit dem anderen auf sie in der Quellcodeverwaltung erhält so schnell wie möglich und verwendet VMWare, VirtualBox, etc. für eine Testumgebung.

Stellen Sie sicher, auch Ihre Datenbank versioniert zu erhalten, vor allem, wenn die Verfahren in ihnen zusätzliche Logik haben (nicht nur gerade einfügen, aktualisieren, löschen). DB Versionierung braucht mehr Aufmerksamkeit dann die PHP-Seiten. Sie müssen alle Objekte zu SQL-Skripte generieren und diese Skripte in der Quellcodeverwaltung gestellt. Dann, wie Sie db-Struktur ändern, Verfahren, usw. müssen Sie die Scripts aktualisieren, so dass Sie auch eine Geschichte von diesen Änderungen haben.

Wie um herauszufinden , was auf der Seite Datenbank verwendet , was würde ich vorschlagen , Blick ApexSQL reinigen . Früher habe ich dies an einem Projekt mit mehreren hundert ASP - Dateien, 200+ Tabellen und etwa 400 gespeicherte Prozeduren. Ich war in der Lage 20 oder so Tabellen zu identifizieren , die nicht in Gebrauch waren und etwa 25% der gespeicherten Prozeduren. Mit ApexSQL reinigen können Sie alle Ihre PHP - Dateien in die Abhängigkeitsprüfung zusammen mit den Tabellen, Ansichten und gespeicherte Prozeduren hinzufügen. Ergreifen Sie die 30 - Tage - Testversion und probieren Sie es aus, wird es sparen Sie viel Zeit.

Für welche Dateien waren im Einsatz für die Website hatte ich Webserver-Logs für den vorangegangenen Monat und lief sucht gegen sie für irgendetwas an war ich nicht sicher. Ich mache auch wie eine Variation auf das, was Aistina vorgeschlagen, um die Dateien auf Modifizieren anmelden, wenn auf sie zugegriffen wird. Vielleicht haben sie in der Datenbank Sie Setup in eine Tabelle gehen die Dateinamen und Zugriffszähler ist und für jedes Mal die Datei geladen wird es die Zählung erhöht. Dann, nach einer gewissen Zeit können Sie die Grafen schauen über und bestimmen, was gehen kann.

Beantwortet am 09/12/2008 um 20:24
quelle vom benutzer

stimmen
2

Erster Schritt natürlich wäre es unter Versionskontrolle zu stellen. Auf diese Weise zumindest können Sie auf die ursprüngliche Arbeitsversion zurück. Zweitens könnte es eine gute Idee sein, zu überschreiben, die beinhalten, erfordern, etc Funktionen, beispielsweise die Dateinamen der Datei schreiben, die bis zu einem gewissen Protokolldatei enthalten sind werden, auf diese Weise Sie herausfinden können, welche Dateien tatsächlich enthalten werden (also hoffentlich Ausschluss viel von dem index2.php, index3.php usw.

Um das herauszufinden, falls erforderlich, wenn einige Klassen verwendet werden und einige sind nicht, Sie get_declared_classes in Verbindung mit get_defined_vars verwenden können und getType zu sehen, welche Arten instanziiert werden.

Wie bei der Ausgabe 4 und 5, sind diejenigen, wahrscheinlich ein bisschen schwieriger zu lösen, aber das sollte man hoffentlich gestartet.

Beantwortet am 09/12/2008 um 20:01
quelle vom benutzer

stimmen
2

Sie müssen auf jeden Fall eine Entwicklungsumgebung. Wenn Sie nicht mit dem Betrieb der Website auf Ihrem Windows-Rechner zu verwirren wollen, könnten Sie ein VMWare Bild von einiger Linux-Distribution greifen.

Beantwortet am 09/12/2008 um 19:53
quelle vom benutzer

stimmen
2

Das erste, was ich tun würde, ist eine Testumgebung unter Verwendung einer virtuellen Maschine von einer Art eingerichtet. VirtualBox oder Virtual PC würde feine Wahl. Auf diese Weise können Sie beginnen, die Dinge ohne Angst vor Bruch der Produktionsumgebung zu verändern. Egal, wie viel Arbeit dies scheint, wie es (mit der Datenbank und Web-Server und alles), am Ende sein wird, wird es wert sein. Einer der großen Vorteile ist, dass Sie die VM kopieren und geben es an jemand anderen, wenn Sie Sie Hilfe benötigen finden.

Beantwortet am 09/12/2008 um 19:50
quelle vom benutzer

stimmen
1
  1. mit Versionskontrolle im Projekt starten (i empfehlen git)
  2. Unit-Tests für alle Codes schreiben
  3. Start ORM (empfehle ich dringend, Lehre)
  4. beginnen, einige Framework (i empfehlen symfony / nette)
  5. Start PHP-Code Refactoring
Beantwortet am 02/12/2010 um 08:54
quelle vom benutzer

stimmen
1

Ja, Versionskontrolle ist definitiv # 0 Schritt.

Ich würde auch ein gutes empfehlen - Code Search Tool .

Agent Ransack ist ziemlich gut (vorausgesetzt , Sie sind auf dem Fenster) http://www.mythicsoft.com/agentransack/Page.aspx?page=download

Ich würde blinder ohne Codesuche fliegen.

Beantwortet am 11/01/2009 um 20:55
quelle vom benutzer

stimmen
1

Ich gerade ging durch diese selbst.

Meine Nummer eins Spitze ist nicht zu versuchen, alles an einem Tag zu ändern. Sie brauchen Freunde, wenn Sie wirklich dieses Ding wollen in der Lage zu beheben. Sie müssen Ihre Kollegen Respekt vor Ihnen vorschlagen, wie alles ändern sie für Monate gearbeitet haben (Jahre?).

Zunächst holen Sie den Code unter Versionskontrolle so schnell wie möglich. Wenn das wird nicht leicht für Sie sein, zumindest beginnen tägliche Backups zu machen, auch wenn es bedeutet, nur die Dateien zippen und die Zip-Datei mit dem Datum zu benennen. Wenn niemand da über Versionskontrolle kennt, kaufen ein Pragmatische Programmierer Buch über CVS oder SVN, und setzte es sich auf. Die Bücher können an einem Tag gelesen werden, und Sie können schnell und problemlos sein. Wenn sonst niemand will die Versionskontrolle verwenden möchten, können Sie es verwenden, um sich ... dann, wenn jemand eine Datei verliert können Sie den Tag mit einer Kopie von Ihrem Repo speichern. Früher oder später werden die anderen sehen die Weisheit, die Versionskontrolle ist.

Zweitens tauchen in den Code so hart wie Sie können. Leben sie und atmen es für einen Monat. Zeigen die Menschen, die dort sind, dass Sie ihren Code gehen zu lernen.

Drittens, wie Sie den Code zu gehen, nehmen zahlreiche Notizen. Schreiben Sie alles, was Sie nach unten, die Sie über den Code stört. Nehmen Sie einfach Ihre Gedanken auf dem Papier. Sie können es später organisieren, nach Monat One.

Viertens, einen Codeprofiler (wie xdebug) installieren. Das wird Ihnen sagen, welche Dateien und Funktionen werden auf jeder Seite genannt wird, und wie lange jedes Stück Code nimmt zu laufen. Damit können Sie Ihre Fragen, um herauszufinden, enthält, und langsam Bit-Code finden. Optimieren Sie die zuerst.

Nach Ihrem Monat harter Arbeit, durch den Code Sichtung und Notizen, schalen Sie Ihre Notizen in ein richtiges Dokument. Die verschiedenen Abschnitte könnten von Sicherheit, Caching reichen, zur Architektur, zu was auch immer ist, stört Sie. Für jede Kritik, die Sie machen, bietet eine bessere Lösung, und eine Schätzung, wie lange würde es zu beheben nehmen. Hier finden Sie alle konkurrierenden JavaScript-Frameworks loszuwerden usw.

Revidieren dieses Dokument so viel wie möglich. Ich kann nicht genug betonen.

Stellen Sie sicher, dass Ihr Publikum sagen, können Sie es zum Wohle des Unternehmens tun, nicht nur Ihre persönlichen Vorlieben.

Präsentieren Sie es zu Ihrem Chef, persönlich. Set-up eine Zeit, darüber zu diskutieren.

Sie konnten ihr Feuer für sie geschrieben zu haben. Wenn sie das tun, sind Sie ohne sie besser dran, weil sie nicht verbessern wollen, und Ihre Karriere stagniert.

Sie möchten alle Ihre Empfehlungen umzusetzen. Es ist nicht wahrscheinlich, aber es ist möglich. Dann würden Sie gerne (es sei denn, Ihre Empfehlungen gescheitert).

Höchstwahrscheinlich werden sie ein paar Ihrer Empfehlungen umsetzen wollen, und das ist besser als nichts. Am allerwenigsten, es wird helfen, Ihre Sorgen zu lindern.

Wie zum Testen, Setup eines anderen "virtueller Host" in Apache (sowohl unter Windows und Linux unterstützt). Virtuelle Hosts können Sie mehrere Websites auf einem einzelnen Server ausgeführt werden. Die meisten größeren Seiten haben mindestens drei virtuelle Hosts (oder tatsächlichen Server): dev.domain.com (für die tägliche Entwicklung), staging.domain.com (für QA Menschen kurz vor einem Release-Tests zu tun), und www.domain. com (Produktionsserver). Sie sollten auch Setup-Entwickler, Staging und Produktion Versionen der Datenbank mit verschiedenen Logins und Passwörter, so dass Sie nicht versehentlich verwechselt werden.

Eine alternative Lösung wäre jedem Entwickler ihre eigene virtuelle Host auf dem Linux-Server zu geben, und sie können per FTP / SCP oder Netzwerkfreigabe mit Samba arbeiten.

Viel Glück!

Beantwortet am 11/12/2008 um 03:29
quelle vom benutzer

stimmen
0

Zusätzlich zu den großen Sachen andere Leute gesagt haben, um einen ersten Pass zu erhalten, welche Dateien aktiv verwendet werden, können Sie einen Opcode Cache wie APC oder eaccelerator auf Ihrem dev-Server (oder sogar ein Produktionsserver installieren, wird dies nicht brechen etwas). Dann klicken Sie rund um die Web-App auf Ihrem dev-Server (oder lassen Sie die Benutzer tun es auf dem Produktionsserver).

Nun ein Blick auf die Liste der Cache-Dateien im Cache Admin-Seite. Wenn eine Datei nicht als zwischengespeichert von Ihrem Opcode Cache aufgeführt ist, gibt es eine gute Chance ist es durch nichts geladen.

Dies ist nicht eine ganze Lösung, aber wenn jedes Verzeichnis 10 index.php Dateien hat (zB index.php, index2.php, etc.), zumindest werden Sie wissen, was man durch Ihre Anwendung verwendet wird.

Beantwortet am 11/12/2008 um 03:35
quelle vom benutzer

stimmen
0

Tun Sie, was Harper Shelby sagte ...

Aber, würde ich noch hinzufügen, dass, wenn Sie diese nicht-Management-Unterstützung erhalten, um aufzuräumen, können Sie die Tatsache akzeptieren wollen, dass dies aus einem Grund so sein kann. ... ich sag bloß. ;-)

Beantwortet am 09/12/2008 um 20:29
quelle vom benutzer

stimmen
0

Versuchen Sie, detaillierte Statistiken auf der Website zu erhalten und herauszufinden, wo die Ein- und Ausstiegspunkte sind. Ein anständiger Weg, um herauszufinden, welche Dateien des Top-Hit aus werden (und dann diese Dateien prüfen, um zu sehen, welche sind gezogen enthält).

Beantwortet am 09/12/2008 um 19:58
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more