Наследуется РНР кошмар, с чего начать?

голоса
40

Я унаследовал PHP проект, который оказываясь кошмар. Вот основные моменты:

  1. Все оригинальные разработчики оставили
  2. Код не имеет контроля версий
  3. Вся разработка и тестирование было сделано на живом сервере путем переименования и редактирования файлов PHP. Есть несколько копий каждого файла index.php, index2.php, index3.php и т.д., и неясно, которые действительно используются файлы
  4. Есть несколько включает в себя в каждом файле, чтобы файлы, которые включают в себя другие файлы, которые включают в себя другие файлы и т.д.
  5. Там было несколько разработчиков на проекте, что каждый имел там собственный способ делать вещи. Например, есть мешанина фреймворк, некоторые запросы к базе данных используют SQL, другие интерфейс XML и другие называют процедурные функции в базе данных.

Из-за все эти проблемы, развитие удручающе медленно. Помимо вентиляции моих разочарований в Stack Overflow, любые рекомендации о том, как начать работу на этом бардаке? Я довольно новый для разработки PHP самих, но кажется, что создание какого-то среды разработки, так что изменения могут быть проверены, не нарушая живой сервер является первым шагом. Любые советы о том, как начать здесь? Что такое типичный способ сделать тестирование? Настройка локальной версии сайта на моем рабочем столе, кажется, как много работы (сервер Linux, но десктопы здесь Windows). Могу ли я создать подкаталог на реальном сервере для тестирования, или ..? Что можно сказать о базе данных?

Во-вторых, есть какая-то профилирование я могу позволить, чтобы отслеживать, какие файлы на сервере, на самом деле используются? Я хотел бы удалить переименованные копии вещей, которые фактически не включены. Еще лучше, если есть способ, чтобы сказать, какие части файла не выполняется? Есть много скопированных функций и мусора в том, что я подозреваю, не используются либо. Кроме того, для включает в себя, какие-либо советы по выпрямлению беспорядка?

Ну, я остановлюсь здесь вентилирования и брошусь на милость всех здесь. :)

Задан 09/12/2008 в 19:48
источник пользователем
На других языках...                            


27 ответов

голоса
56
  1. Прежде всего, получить файлы в систему управления версиями , как есть. Не приступайте мимо # 1 , пока это не будет сделано.
  2. Создание среды тестирования.
  3. Очистка файлов
Ответил 09/12/2008 в 19:58
источник пользователем

голоса
30

Я сделал это. У вас есть мое сочувствие. Если ваш паспорт не является текущим или по какой-то другой причине, вы не можете увернуться делать это, вот как я бы подойти к нему:

Шаг Ноль, чтобы получить его в систему управления версиями, независимо от того, как дерьмовый это. Если даже вид работы, и что-то сломается, вы должны быть в состоянии вернуться в рабочее состояние - или, по крайней мере, сравнить изменения к нему, чтобы выяснить, что пошло не так. Есть частые, небольшие контрольные модули, как вы рефакторинг, и вы будете иметь меньше коды отката, когда все загадочно ошибется. (Вещи таинственно пойти не так.)

После этого, я хотел бы начать в базе данных. Убедитесь, что все относительно хорошо нормализованы, столбцы четко названы, и т.д.

Сделайте PHP код в следующем. Если код действительно , что большая часть пэчворк, я бы идти вперед и установить его в рамки. Посмотрите в CakePHP или Symfony - их Rails-иш способ разделения проблем делает вопрос «где должен этот кусок кода идти?» легко ответить. Это не простая задача, но как только вы сделали это, вы , вероятно , лучше , чем на полпути к наличию здраво-сконструированное приложения. Кроме того , встроенный в тестовых объектах хорошего веб - структуры делают рефакторинг гораздо проще - написать тест , чтобы покрыть существующую часть функциональности , прежде чем изменить его, и вы будете знать , нарушил ли ты что - нибудь после изменения.

После того как вы получили вашу базу данных сортируются и иметь код модели в модели и коды контроллера в контроллерах, то вы можете не беспокоиться о вещах презентационного уровня, как стандартизация на одной библиотеке JS / AJAX, CSS очистки и т.д.

Что касается среды Dev: Вы должны абсолютно настроить локальную среду разработки. Есть под ключ пакеты WAMP там, или вы можете установить на поле Linux / VM (я рекомендую VirtualBox для виртуализации). Вы также должны иметь отдельную тестовую среду интеграции , которая имитирует живой сервер. Ничего , кроме живого кода не должен работать на сервере.

Что касается отладки / профилирования инструментов, я знаю, что Symfony поставляется с довольно гладким набором инструментов, в том числе небольшой панели инструментов JS, который появляется на страницах (только в режиме отладки) с ведением журнала и профилированием информации.

Удачи.

Ответил 09/12/2008 в 20:25
источник пользователем

голоса
17

Ну, первое, что первое. Я был в ситуации, в которой вы находитесь, и он сосет. Я думаю, что вы на правильном пути, с желанием получить среду разработки и запуска.

Среда разработки

Это будет включать в себя веб-сервер / скрипт стек двигатель / двигатель базы данных, и IDE, скорее всего.

Для ЛАМПЫ установщика стека , я рекомендую использовать один из них:

Дальнейшее чтение на стек LAMP:

сайт OnLamp О'Рейли

Для хорошего PHP IDE , я рекомендую использовать один из них:

Статья на сайте разработчика IBM, сравнивая несколько IDE,

Для контроля исходного кода , вы можете использовать Team Foundation Server, SVN или Git - просто использовать то , что вы знаете. Я рекомендовал бы получить все , что в системе управления версиями первым (для любого аварийного обслуживания вы можете иметь), но планирую делать довольно большой ремонт.

Капитальный ремонт

Вы упомянули, что вы даже не знаете, что привыкают файлы, и что они использовали файл именования как псевдо-контроля версий. Вы могли бы хотеть начать капитальный ремонт там, как только у вас есть среда разработки и запуска. Есть несколько вещей, которые могут помочь вам:

  • Ваше приложение клиентов / пользователей
  • Тщательное и организованное конспектирование
  • Хорошая основа каротажа

Ваши клиенты / пользователи имеют важное значение , потому что это звучит , как вы новичок в проекте и они будут знать , как приложение должно вести себя лучше , чем вы (скорее всего).

Тщательные заметки важны , потому что вы собираетесь быть в основном переписыванием любой документации требования / дизайн / конечного пользователя с нулем. Вы должны понимать , внутренности , если вы собираетесь сделать это. И если вы собираетесь , чтобы понять что - нибудь об этой системе, вам нужно записать его самостоятельно (или вы бы просматривал Premade документации прямо сейчас вместо чтения переполнения стека) ;-)

И , наконец, рамки протоколирования важно , потому что вам нужно исправить вещи, и вы не можете исправить то , что вы не знаете , сломаны. Рамки каротаж дает видимость в части приложения , которые не имеют никакого очевидного UI. Вставка его в различные части приложения , а затем , глядя на журналах дает хорошее представление о том , когда код выполняется и в каком порядке.

Вы хотите, чтобы сосредоточиться на захвате (на бумаге), как приложение должно работать, а затем медленно, удаляя ненужные файлы при попытке ничего не сломается. Следите на бревнах, чтобы помочь при отладке. Убедитесь, что ваши клиенты не кричать, что-то сломалось. Убедитесь, что ваши замечания согласны с тем, что получение регистрируется и то, что ваши клиенты говорят.

Предотвращение этого в будущем

Перепроверьте все обратно в исходный контроль . Надеюсь , вы пришли к новой, более разумной, более эффективной структуре каталогов этой точкой.

Получите тестовую структуру на месте . Даже если это просто означает получение базовой основы модульного тестирования на месте и делать некоторые основные тесты дыма после каждого разворачивать, это лучше , чем ничего. В идеале, вы должны иметь тестовый инженер или знающий и надежный клиент , который может провести тестирование времени после каждого Deploy.

Помещенный процесс развертывания на месте , если вы растете более одного разработчика. Контроль изменений в производственной среде , должны быть вашим первым приоритетом. (Последнее , что вы хотите сделать , это пройти через это снова, правда?) Вы должны иметь четкий и простой способ перемещения между границами среды (как Dev -> Test затем Test -> Производство).

Ответил 09/12/2008 в 20:23
источник пользователем

голоса
16

Большую часть времени вы можете сказать, если файл используется при использовании Grep.

grep -r "index2.php" *

Вы также можете использовать PHP парсер, чтобы помочь вам очистки. Вот пример скрипта, который выводит функции, которые заявлены и вызовы функций:

#!/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";
        }
    }
}
Ответил 09/12/2008 в 23:56
источник пользователем

голоса
10

Если это самый худший случай, код все scrampled, и все отображения вперемешку с логикой и обращений к базе данных, вы можете делать то, что я должен был сделать с одним PHP проекта.

Я дал ему три запуска на попытки рефакторинга подхода. Это было похоже на пониженную на мотоцикле и получать 10% пути каждый раз. Таким образом, я сделал еще один подход, который в конечном итоге работает намного лучше.

  1. Я вошел в систему как пользователь,
  2. и работал через каждый экран и каждый потребительной случае я мог бы найти.
  3. Я сохранил HTML для статических файлов,
  4. и делали заметки на процедурных операциях и очевидных бизнес-правилах.

Я делал это в течение 3-х монолитных дней, а затем взял мои заметки и имел продолжительную беседу с заинтересованными сторонами.

После получения согласия на некоторых первые шаги, я переписана все HTML UI правильно, используя хороший выдержанный дизайн и абстракцию. После того, как прокатка, я мог бы сделать пару экранов в день.

Тогда я взял результат обратно к заинтересованным сторонам и побежал через кучу случаев использования. (Заинтересованные стороны были очень рады на этапах 1 и 2, потому что они не хотели первой реализации на все равно (сюрприз), и теперь казалось, была надежда на улучшение, а не только для восстановления в здравом-олд-приложение.

Это оказался конец тяжелой работы (а также конец воспринимаемого риска проекта для заинтересованных сторон.)

Оказался, что первый экипаж получил настолько связан в своем собственном позорном спагетти, что было на самом деле сравнительно мало содержания на работу, поэтому дублировать ее были меньше возможностей, чем все подозреваемое.

Но ключевое решение было то, что исходный код, как содержания и структура, было unrefactorable и мне нужно было работать с совершенно внешним вида с новой структурой, которая была должным образом разработана.

Ответил 10/12/2008 в 00:24
источник пользователем

голоса
10
  1. Настройка сервера разработки (как уже упоминалось Грег Hewgill, VirtualBox и Virtual PC являются хорошим выбором для этого).

  2. Поместите текущие файлы сайта (в том числе соответствующих веб-сервера и PHP конфигурации!) В систему управления версиями.

  3. Выясните, какие файлы используются - использовать настройки сервера разработки, чтобы проверить, удалив все файлы fooN.php и посмотреть, если он все еще работает.

  4. Помолитесь ... много (хорошо, это не требуется, но это звучит, как вы будете нуждаться в этом).

Ответил 09/12/2008 в 19:57
источник пользователем

голоса
7

Одна вещь, которую вы могли бы рассмотреть это установить PHP «XDebug» расширение в среде разработки, установите его, чтобы проследить все вызовы функций, а затем как можно более полно (возможно, с помощью автоматизированного тестирования UI) осуществляет все приложение. После этого вы будете иметь возможность анализировать / анализировать файлы трассировки Xdebug найти все файлы / функции, используемые приложением.

Ответил 09/12/2008 в 20:38
источник пользователем

голоса
6

Другие люди на этой теме есть большой совет. Я был в этой ситуации тоже. Наверное, каждый в свое время в их карьере вошла в проект, который выглядит, как он был поражен торнадо.

Одно предложение, которое я хотел бы добавить, что, прежде чем делать какие-либо из очистки, описанной другими людьми, вы должны получить управление бай-ин.

  • Составьте план на основе предложений по этой теме.
  • Опишите любые новые аппаратные средства или программное обеспечение, вам необходимо создать среду разработки и тестирования, и цена их вне.
  • Выяснить, какие новые навыки, которые вы должны быть обучены, чтобы установить и использовать среду разработки и тестирования. Оценить время и расходы, необходимые для Вас, чтобы получить эти навыки. Например, книга или платное обучение.
  • Расчетный график работы для Вас, чтобы сделать уборку. Как долго, чтобы получить код под контролем источника? Как долго, чтобы понять базу данных? Как долго, чтобы понять PHP и код JavaScript?
  • Представить это своему менеджеру, и фраза цели с точки зрения выгоды для его нижней строке. Например, как только все будет очищен, внесение изменений или выкатывают новые функции будет быстрее, ошибки отладки будут более предсказуемыми, и наращивают новые сотрудники будет легче.

Естественно, вы должны продолжать работать с текущем бардаком, потому что это живой сайт. Управление живого сайта имеет приоритет, поэтому чистка работа должна быть фоновой задачей. Это означает, что он будет еще дольше. Мой опыт уборка до умеренного размера проекта в качестве фоновой задачи, как правило, принимается от шести до двенадцати месяцев. Так как сайт будет продолжать развиваться в течение этого периода, некоторые из ваших выполненных задач по очистке, возможно, потребуется пересмотреть или переделаны. Убедитесь, что ваш менеджер понимает, все это тоже.

Если менеджер уклоняется на свой план, чтобы очистить этот беспорядок, или не дорожит очистки его, по крайней мере, тогда вы будете знать, почему все остальные разработчики оставили эту компанию!

У меня есть несколько конкретных предложений о том, как поступить:

  • В дополнении ко всему другому великому совету, я предлагаю использовать тест Joel в качестве ориентира. Ваш план очистки должен привести в работе среды , которая будет забивать хорошо на тесте Джоэла.
  • Прочитайте мой ответ на « Какой лучшие способы , чтобы понять незнакомую базу данных? »
  • Включение регистрации на веб-сайте, так что вы можете проанализировать, какие PHP страницы фактически называется. По крайней мере, говорит вам, какие из index2.php, index3.php, index4.php и т.д. действительно устарели.
  • PHP имеет функцию , get_included_files()которая возвращает массив всех файлов , включенных в ходе текущего запроса. Входя эту информацию, вы можете узнать, какие PHP файлы используются, даже если они не отображаются в журнале веб - сервера.
  • Вы действительно должны иметь среду для тестирования и разработки, которая соответствует вашему производству сервера. Это не хорошо, чтобы проверить на Windows, и развернуть на Linux. Это не хорошо использовать MySQL 5.0 в процессе разработки и MySQL 4.0 в производстве. Вы, вероятно, может уйти с аппаратной платформой, которая является более скромным (хотя совместимый).
Ответил 09/12/2008 в 21:29
источник пользователем

голоса
5

Вы можете просмотреть список всех входящих / требуемых файлов, помещая это в нижней части страницы:

<?php var_dump(get_included_files()); ?>
Ответил 12/12/2008 в 02:45
источник пользователем

голоса
5

Я бы:

  1. Сядьте и сделайте глубокий вдох;
  2. Решите, если это на самом деле, где вы хотите работать;
  3. Предполагая, что да, то я бы засучить sleaves, выбрать один беспорядок работать на в то время, и приступить к работе.

Я знаю, что мы не можем ограничиться только одной задачи в то время; Однако, вы можете ограничить свою работу, чтобы решить один беспорядок в то время, во время работы над ежедневными задачами, которые приходят в.

Ответил 09/12/2008 в 20:09
источник пользователем

голоса
3

Рассмотрим переписать и использовать старый сайт в качестве спецификации признака

Удивительно, но никто даже не упомянул это, насколько я могу видеть, но есть и другой вариант: отказаться от кода и использовать только функциональность самого сайта как новый набор функций спецификации (то есть, первый когда - либо для этого проект) , а затем повторно создать сайт, на основе этих функций, с установленной структурой (такие , как Symfony, Laravel или Drupal).

Да, есть те , кто будет пресмыкаться на злое слове переписывает ... но есть случаи , когда это на самом деле лучший способ пойти, и вы намекали на ряде причин:

  • вы достаточно новое для PHP развития, самостоятельно
  • Вы, вероятно , будете лучше начать с чем - то чистым вместо чистого дерьма коды вы унаследованная
  • в конечном счете, большинство пользователей не фени исходного кода , и если он выглядит , как он «работает» на них, они могут выглядеть на вас , как вы с умом , если вы пытаетесь сказать им что - то ужасно неправильно
  • вы будете иметь больше удовольствия и жить дольше, если вы поднимаете практику контроля версий исходных и проектирование баз данных в рамках единой структуры, которая выглядит как кто-то на самом деле заботились достаточно, чтобы их имя прилагается к нему

Конечно, все в этой позиции пришлось работать с кодом, как это раньше, но иногда достаточно достаточно, и это лучше отказаться от спагетти и начать с новой пластинки.

Если вы читали статью Джоэла о том, почему это плохо , чтобы сделать повторную запись, вы не заметите , почти ни одно из обстоятельств , он цитирует применить к вам здесь.

Ответил 10/12/2008 в 01:02
источник пользователем

голоса
2
  1. Получить его под контролем версий.

  2. Принятие решения о именования и структуры файла / каталога.

  3. Убедитесь, что у вас есть приличная инструменты / IDE.

  4. Настройка отдельной среды разработки / тестирования, если вы еще не сделали

ТОГДА ...

  1. К сожалению, вам нужно просеять через все эти 1, 2, 3 файла и определить, какие из них используются, и которые могут быть утилизированы. Ни один другой способ, кроме грубой силы не шлифовать через, файл файлом.

  2. Даже если у меня есть RCS на месте, я до сих пор часто двигаться, что я думаю, что неиспользованные сценарии в скрытом месте, скажем .mausoleum, а затем иметь RCS игнорировать это местоположение. Приятно иметь возможность взглянуть на местном уровне, не возвращаясь к репо.

  3. Отдельные HTML и PHP в максимально возможной степени . Я не могу подчеркнуть это достаточно! Если это делается в каждом файле, хорошо. Только до тех пор , пока у вас есть отдельные куски PHP и HTML. Конечно, HTML будет усеян эхом здесь и там, но старается иметь все тесты, переключатели, все остальное перемещаются из HTML блока и в PHP блок. Это само по себе может быть ОГРОМНЫЙ , когда дело доходит до получения вещи разобрали.

  4. Если код в основном процедурный - я предполагаю, что в вашем случае - это, вероятно, лучше, чтобы сделать некоторые очистить первый, прежде чем делать какой-либо серьезный рефакторинг или рефакторинг в классы.

  5. Как найти файлы / скрипты, которые логически могут быть объединены, сделать это. (Я видел проекты - вероятно, не в отличие от твоего - где общее число выживших файлов составляет около 1/4 от того, что мы начали с).

После того, как вы ушли так далеко, то вы можете начать правильное рефакторинга или рефакторинга на классы.

Bonne шанс!

Ответил 02/03/2009 в 18:50
источник пользователем

голоса
2

Много полезных сообщений о том, как справиться с этим.

Не пытаясь повторить то, что все остальные уже сказал:

  1. Получить копию бега прод среды. Это может быть виртуальная машина, или другая реальная машина. Но вы должны быть Бог на нем. Если база данных прода находится на другое поле, вы будете нуждаться в версии разработчика, тоже.
  2. Бросьте все это в систему управления версиями. На другом поле. Один, что резервное копирование по крайней мере раз в неделю.
  3. Убедитесь, что вы знаете, как разветвление работает в приложении управления версиями. Вы, вероятно, нужно.
  4. Получить сервер прод заблокирован. Вы не хотите никаких дальнейших изменений, внесенных в него, не выходят из-под контроля версий.
  5. Создание инструкций для освобождения от кода управления версиями на сервер прод. Наименьшая единица высвобождаемым изменения должны быть весь базовый код.

Следующие шаги зависят от того, как приложенных к ней пользователи. Если он не может быть изменен на много по какой-либо причине, вы будете нуждаться в прогрессивный подход. Если разработка и обслуживание еще должно произойти, то это, вероятно, единственный вариант. Не забывайте использовать эту функцию разветвления для разделения таких модов от ваших усилий переписывания.

Для того, чтобы поместить смысл в структуру, вы должны в основном создать новую структуру, наряду с того, что там. Новый обработчик DB, как правило, хорошее место, чтобы начать, включенных в общий файл включения, каждая страница должна загружаться. Цель здесь заключается в создании минимальный включают структуру, которая может быть расширена позже, не говоря каждую страницу для загрузки дополнительных файлов.

Теперь вам нужно, чтобы начать двигаться функциональностью к вашим новым инклюдникам. Вам нужен способ, чтобы иметь несколько открытых файлов одновременно, например, редактор мульти-файл, или экрана + VI (или Emacs). Начнет с полезными функциями и кодовыми блоками, которые повторяются в разных местах. Постарайтесь не отвлекаться на фиксацию много сразу. Некоторые типы проблем придется просто переместить места, как и другие проблемы исправляются. Вы вернетесь к ним позже.

Не чувствую, что вам нужно добавить рамки третьей стороны. Добавление такой вещи быстро приводит к полной повторной записи. На данный момент, это будет гораздо больше работы, чем просто приручить его включают структуру. Так что разобраться в первую очередь.

По мере продвижения функциональность более, вам нужно будет иметь файлы использовать ваш новый заголовочный файл. Первые несколько файлов вы делаете это для вас будут преследовать конфликты на некоторое время. Он будет чувствовать разочарование и бессмысленно, но это, вероятно, самая трудная часть. Через несколько файлов, это будет легче. Там будет время, когда вы можете перенести пол-десятка страниц нового включаемые файлы, заменяя дюжину включает в себя только с одним. Оборотная сторона этого действия является то, что будет файлами вы можете просто удалить.

Если вы будете на него, вы будете в конечном итоге добраться до точки, где все включаемые файлы являются те, что вы написали, и вы будете по всему включать раскладку. К этому моменту она будет значительно легче сделать гораздо более инвазивные изменения, как положить в рамках третьей стороны.

Ответил 10/12/2008 в 05:31
источник пользователем

голоса
2
  1. Сделайте резервную копию кода прямо сейчас.

  2. Контроль версий.

  3. Создать тестовый сайт. Является ли сайт работает под Apache? Вы даже можете установить Apache + PHP + MySQL на вашем компьютере, и использовать его для тестирования.

  4. Разобраться с вопросами безопасности. Убедитесь , что сайт защищен от SQL инъекций, и от инъекции электронной почты. По крайней мере, вы можете сделать поиск для вызовов базы данных и добавить вызовы к mysql_real_escape_string()(ну, если он использует базу данных MySQL) ... Вы можете сделать реальное исправление позже , как только вы поймете код лучше. Для введения электронной почты ... написать функцию фильтра , который отфильтровывает код спамера, и убедитесь , что все поля формы, которые используются в электронной почте фильтруются. (Да , это добавляет больше Спагетти кода, но он собирается занять некоторое время , прежде чем вы будете готовы существенно реорганизовать код.)

  5. После этого, я предлагаю инкрементные обновления. Вы новичок и код higgleypiggley бардак, так что это займет некоторое время, чтобы понять все это ... и чтобы полностью понять домен. Так что просто идти о работе на некоторое время, фиксируя то, что нужно исправить, добавив, что нужно добавить. Как вы делаете это, вы изучаете, как система, вместе взятые. После того, как вы знаете, как организован код (или не организован) немного лучше, вы можете начать планировать большой рефакторинг / перезапись системы. Надеюсь, что вы можете сделать это компонент, компонент, чтобы у вас всегда есть новый этап в ближайшем будущем.

Ответил 10/12/2008 в 00:06
источник пользователем

голоса
2

Я знаю, что ты чувствуешь. Я унаследовал разработку такого проекта. Он остался со мной в течение года и быть честным это сделало меня разработчик я сегодня. Существует нет лучшей возможности для личного развития, чем работать по колено в дерьме.

Вот вещи, которые помогли мне больше всего:

  • определить, какие ключевые файлы системы. Вы найдете их, потому что большая часть работы будет сделана в них
  • создать локальную версию проекта (включая базу данных) и поставить его под контроль версий
  • работать только на небольшом количестве файлов с небольшими изменениями
  • ничего не помещается внутри производственной версии до тех пор, пока его апробирование тщательно, а затем быть готовы поставить старую версию назад
  • узнать, как пользователи системы обрабатываются (сеансы, печенье). Создание супер пользователя, а затем, когда вам необходимо проверить свой код в прямом эфире на систему поставить его в блоке, как это:

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

    Другие пользователи не будут иметь возможность чувствовать изменения. Этот метод помог мне, когда я был не в состоянии заменить состояние системы на моей локальной машине

  • написать тест, и следовать строгим правилам инженерии для всего кода вы пишете

Ответил 09/12/2008 в 23:09
источник пользователем

голоса
2

Это действительно беспорядок. Но начать получать творческие о том, где отрезать некоторые из щупалец на эту вещь:

  1. Получить контроль версий. Я рекомендую Git.
  2. Настройка локального сервера разработки. Найти WAMP, LAMP или MAMP пакет, чтобы вы начали, так как вы новичок в этом.
  3. Найти точки входа (index.php и т.д.). Проверьте журналы доступа сервера, чтобы узнать, что это.
  4. Засучить рукава на некоторое регулярное выражение черной магии и выливать включаемый / требуется дерево всех файлов. Но остерегайтесь любого включают ($ имя_файла) динамический включает в себя. Если у вас есть какие-либо из них вы должны будете сделать некоторые протоколирование на $ файла, чтобы узнать, что, возможно, получает включены, хотя код вокруг него должен дать вам ключи. В случае удачи вы можете отбраковать все неиспользуемые файлы таким образом.
  5. Используйте более регулярок черную магию, чтобы проверить функции и методы в настоящее время ссылки в других местах в коде. Там может быть IDE, который может помочь вам в этом. Попробуйте NetBeans (я использовал его, чтобы помочь мне реорганизовать проект C ++ один раз, так что это может помочь здесь.)
  6. Как кто-то сказал, «выяснить, если это необходимо, если некоторые классы используются и некоторые из них не так, вы можете использовать get_declared_classes в сочетании с get_defined_vars и GetType, чтобы увидеть, какие типы в настоящее время экземпляр.» Вы также можете просто написать код, чтобы найти все новые заявления в коде.
  7. И так далее ... просто думаю о том, как вы можете сточить этот монстр вниз. И попытаться реорганизовать код, где вы можете.
Ответил 09/12/2008 в 20:31
источник пользователем

голоса
2

Вот некоторые идеи:

  • PHP и Apache работает просто отлично на Windows, тоже. Может быть, вы можете сделать установку все-Windows, в конце концов?
  • Попробуйте grep«Инг (или какая - либо альтернатива Windows) для„включать“и„требует“во всех PHP файлов. Затем составьте список всех включенных файлов , найденных. Сравните список с файлами в папке. Вы должны быть в состоянии избавиться от по крайней мере некоторых неразрешенных ссылок файлов.
  • В качестве альтернативы составьте список всех имен файлов и поиск всех файлов для них. Вы могли бы сделать что-то вроде зависимостей графика, как это.
Ответил 09/12/2008 в 20:30
источник пользователем

голоса
2

Я думаю, что все 5 из ваших пунктов, пострадавших от некоторых классических ASP проектов, я унаследованных и тоже PHP один ...

Я полностью согласен с другими, чтобы получить это в системе управления версиями как можно скорее и использовать VMWare, VirtualBox, и т.д. для тестовой среды.

Убедитесь в том, чтобы база данных версий тоже, особенно если процедуры имеют дополнительную логику в них (а не только прямые вставки, обновления, удаления). DB версий требуется больше внимания, то страница PHP. Вы должны генерировать все объекты в SQL скриптов и поместить эти скрипты в системе управления версиями. Тогда, как изменить структуру БД, процедуры и т.д. вам необходимо обновить скрипты, чтобы у вас есть история этих изменений тоже.

Что же касается выяснить , что использует то , что на стороне базы данных я хотел бы предложить , глядя на ApexSQL Clean . Я использовал это в проекте несколько сотен ASP файлов, 200+ таблиц и около 400 хранимых процедур. Я был в состоянии идентифицировать 20 или около того таблиц , которые не были в использовании , и около 25% хранимых процедур. С ApexSQL Clean вы можете добавить все ваши PHP файлов в проверку зависимостей вместе с таблицами, представлениями и хранимыми проками. Возьмите 30 - дневную пробную версию и проверить его, это сэкономит вам много времени.

Для того, что файлы были в использовании для веб-сайта, я имел журналы веб-сервера за предыдущий месяц и провел поиски против них ни за что я не был уверен в. Я также как и вариации на то, что предложил Aistina на модификации файлов журнала при доступе к ним. Может быть, у него идет к столу в базе данных вы установили, что это имя файл и доступ счетчик и каждый раз, когда файл загружается он увеличивает счетчик. Затем, после определенного периода времени вы можете просмотреть подсчеты и определить, что может пойти.

Ответил 09/12/2008 в 20:24
источник пользователем

голоса
2

Первый шаг, конечно, было бы поставить его под контроль версий. Таким образом, по крайней мере, вы можете вернуться к исходной рабочей версии. Во-вторых, может быть хорошей идеей, чтобы перезаписать включать, требуют и т.д. функции, например, записать имя файла, который будучи включен в какой-то лог-файл, таким образом, вы можете узнать, какие файлы фактически включены (таким образом, мы надеемся, исключающие много в index2.php, index3.php и т.д.

Для того, чтобы выяснить, если это необходимо, если некоторые классы используются и некоторые из них не так, вы можете использовать get_declared_classes в связке с get_defined_vars и GetType, чтобы увидеть, какие типы в настоящее время экземпляр.

Что касается вопроса 4 и 5, тем, вероятно, немного сложнее решить, но это должно вам начать работу с надеждой.

Ответил 09/12/2008 в 20:01
источник пользователем

голоса
2

Вы, безусловно, нужна среда разработки. Если вы не хотите возиться с запуском сайта на ваше окно поля, вы можете захватить VMWare образом какого-то дистрибутив.

Ответил 09/12/2008 в 19:53
источник пользователем

голоса
2

Первое, что я хотел бы сделать, это создать среду для тестирования с помощью виртуальной машины какой-то. VirtualBox или Virtual PC будет в порядке выбора. Таким образом, вы можете начать изменять вещи, не опасаясь нарушения производственной среды. Независимо от того, сколько работы это кажется, что это будет (с сервером базы данных и веб и все), в конце концов, это будет стоит. Одно из самых больших преимуществ является то, вы можете скопировать VM и передать его кому-то другому, если вам понадобится помощь.

Ответил 09/12/2008 в 19:50
источник пользователем

голоса
1
  1. начать использовать систему контроля версий в проекте (я рекомендую мерзавец)
  2. писать тесты для всего кода
  3. начать использовать ORM (я настоятельно рекомендую доктрину)
  4. начинают использовать некоторые рамки (я рекомендую Symfony / Nette)
  5. начать рефакторинга кода PHP
Ответил 02/12/2010 в 08:54
источник пользователем

голоса
1

Да, управление версиями, безусловно, шаг # 0.

Я также рекомендую хороший код Search Tool .

Агент Ransack довольно хорошо (если вы на окнах) http://www.mythicsoft.com/agentransack/Page.aspx?page=download

Я бы вслепую без поиска кода.

Ответил 11/01/2009 в 20:55
источник пользователем

голоса
1

Я просто прошел через это сам.

Мой номер один совет, чтобы не пытаться изменить все в один день. Вы нужны друзья, если вы действительно хотите, чтобы иметь возможность исправить эту вещь. Тебе нужно коллеги уважение, прежде чем предложить, как изменить все, что они работали в течение нескольких месяцев (лет?).

Во-первых, получить код под контролем версий, как можно скорее. Если это не будет легко для вас, по крайней мере, начать делать ежедневные резервные копии, даже если это означает только сжать до файлов и имен файлов почтового индекса с датой. Если никто не знает о контроле версий, купить книгу прагматический программиста на CVS или SVN, и установить его самостоятельно. Эти книги можно читать в день, и вы можете быть запущен и работает быстро. Если никто не хочет использовать систему контроля версий, вы можете использовать его сам ... тогда, когда кто-то теряет файл можно сохранить в день с копией из вашей репо. Рано или поздно другие будут видеть мудрость, управление версиями.

Во-вторых, погружение в код так сложно, как вы возможно. Живи и дышать в течение месяца. Покажите людям, которые там, что вы собираетесь узнать свой код.

В-третьих, как вы идете через код, принимать многочисленные записи. Запишите все, что беспокоит вас о коде. Просто получить свои мысли на бумаге. Вы можете организовать его позже, после месяца One.

В-четвертых, установить код профилировщика (например, Xdebug). Это вам скажет, какие файлы и функция вызываются на каждой странице, и как долго каждый кусок кода будет выполняться. Вы можете использовать это, чтобы выяснить ваши включает в себя вопросы, и найти медленные биты кода. Оптимизация тех первых.

После Вашего месяца напряженной работы, просеивания через код, и заметки, превратить ваши заметки в надлежащий документ. Различные секции могут варьироваться от безопасности, кэширования, архитектуры, к тому, что еще вас беспокоит. Для каждой критики вы делаете, предлагают лучшее решение, и оценки о том, как долго он будет принимать, чтобы исправить. Здесь вы избавитесь от всех конкурирующих яваскрипта структур и т.д.

Пересмотрите этот документ как можно больше. Я не могу не подчеркнуть , что достаточно.

Убедитесь, что ваша аудитория может сказать, что вы делаете это на благо компании, а не только ваши личные предпочтения.

Представьте его своему боссу, лично. Настройка времени, чтобы обсудить это.

Они могут уволить за то, что написал. Если они это сделают, вы лучше без них, потому что они не хотят, чтобы улучшить, и ваша карьера будет застаиваться.

Они могли бы реализовать все ваши рекомендации. Это маловероятно, но возможно. Тогда вы были бы счастливы (если ваши рекомендации не обязательно).

Скорее всего, они хотят, чтобы реализовать некоторые из ваших рекомендаций, и это лучше, чем ничего. По крайней мере, это поможет облегчить ваши проблемы.

Что касается тестирования, установки другого «виртуального хоста» в Apache (поддерживается как Windows, и Linux). Виртуальные хосты позволяют запускать несколько сайтов на одном сервере. Большинство крупных сайтов, по крайней мере, 3 виртуальных хостов (или фактические серверы): dev.domain.com (для ежедневного развития), staging.domain.com (для QA людей, чтобы сделать тестирование только перед выпуском), и www.domain. ком (ваш производственный сервер). Вы должны также настроить Dev, постановка и производство версии базы данных, с разными логинами и паролями, чтобы вы случайно не перепутать их.

Альтернативное решение было бы дать каждому разработчику свой собственный виртуальный хост на сервере Linux, и они могут работать через FTP / SCP или сетевой ресурс с помощью самбы.

Удачи!

Ответил 11/12/2008 в 03:29
источник пользователем

голоса
0

В дополнении к большому материалу и другие люди сказали, чтобы получить первый проход на то, что файлы активно используются, вы можете установить кэш опкода, как APC или Eaccelerator на вашем Dev сервере (или даже производство серверов, это не нарушит что-нибудь). Затем нажмите вокруг веб-приложения на сервере DEV (или позволить пользователям сделать это на рабочем сервере).

Теперь посмотрим на список кэшированных файлов на вашей странице кэш администратора. Если файл не указан в списке, как в кэше вашего кэша опкода, есть хороший шанс, что он не загружается ничем.

Это не все решение, но если каждый каталог имеет 10 index.php файлов (например, index.php, index2.php и т.д.), по крайней мере, вы будете знать, какой из них используются вашим приложением.

Ответил 11/12/2008 в 03:35
источник пользователем

голоса
0

Делайте то, что сказал Харпер Шелби ...

Но я бы также добавить, что если вы не получаете поддержку управления, чтобы очистить это, вы можете принять тот факт, что это может быть, как это по причине. ... просто говорю. ;-)

Ответил 09/12/2008 в 20:29
источник пользователем

голоса
0

Постарайтесь, чтобы получить подробную статистику на сайте и узнать, где вход и выход точки. Достойный способ выяснить, какие файлы хит от вершины (а затем посмотреть в эти файлы, чтобы увидеть, который включает в себя тянут).

Ответил 09/12/2008 в 19:58
источник пользователем

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