Conseils pour planifier la réécriture d'un grand projet PHP?

13

J'ai décidé de réécrire complètement un framework PHP (en utilisant MVC) sur lequel je travaille, on et off, depuis des années. Mon problème jusqu'à présent était que je venais juste de trouver des idées, de les jeter dans Trac en tant que tickets et de les ajouter plus tard - sans me soucier de la conception du framework lui-même. Au fil du temps, cela a causé des problèmes et je pense qu'une réécriture serait utile, mais je ne sais pas par où commencer avec sa planification - je sais que je ne veux pas utiliser Trac, et je sais que j'ai besoin de plus que juste billets et jalons - mais de quoi d'autre aurais-je besoin?

Je veux vraiment planifier soigneusement cette réécriture, je veux détailler chaque fonctionnalité que je veux, où elle ira et comment elle se connectera à toutes les autres parties - mais je n'ai aucune expérience de ce niveau de planification. Aucun conseil? Des programmes qui vous aideront? Je me lasse de Trac, je ne l'ai jamais vraiment aimé.

Je sais que j'aurai besoin d'un document de conception, mais y a-t-il une mise en page certaine à suivre? J'aurai également besoin d'un suivi des bogues, de tickets, de jalons, etc., mais au-delà de Trac, je ne sais pas non plus ce qui est bon pour cela. Je suis sûr qu'il me faudra plus mais je n'ai aucune idée de quoi, donc toute aide serait appréciée.

Jon
la source
pourquoi voulez-vous le réécrire? Pourquoi ne pas le refaçonner dans les endroits qui ont besoin d'amélioration? Lorsque vous réécrivez quelque chose à partir de zéro, il est probable que vous éliminiez les anciens problèmes pour les nouveaux.
@Gordon est peut-être si terriblement écrit qu'il est préférable de le réécrire que de le refactoriser.
plié à droite le
La réécriture est toujours plus difficile qu'il n'y paraît, et je l'ai appris à la dure. Oh, eh bien cette fois, je sais ce que je fais, donc cela prendra deux fois moins de temps (alors cela finit par prendre plus de temps que l'original parce que vous essayez de corriger ou de prévenir les erreurs commises précédemment)
Davy8

Réponses:

7

Voir ci-dessous certaines choses que je fais lors du développement d'un grand projet:

1 - J'utilise un outil de planification comme OpenProj et j'ajoute toutes les fonctionnalités que je souhaite inclure en tant que tâche. Par exemple, en ce moment, je travaille sur une fonctionnalité permettant à mes utilisateurs de se connecter automatiquement après leur inscription sur mon site. J'ai une tâche dans mon plan comme "fonctionnalité-connexion automatique".

2 - Je suis un atelier de développement individuel, donc je passe généralement d'une fonction à l'autre. Mon plan est créé de manière à ce que toutes les fonctionnalités soient séquentielles. Je n'investis pas trop de temps pour estimer le temps dont j'ai besoin pour chaque fonctionnalité. Je considère généralement que chacun me prendra un jour pour me développer. Si l'on en prend plus, je mets simplement à jour le plan et toutes les tâches futures se déplacent en conséquence.

3 - J'utilise largement git. Chaque fonctionnalité est une branche. Une fois que j'ai terminé chaque fonctionnalité, je la fusionne à la branche de développement et crée une nouvelle branche pour la fonctionnalité suivante.

4 - Si je trouve un bug dans le logiciel, je crée une petite branche git pour le corriger et le fusionner une fois qu'il est résolu. Je m'assure de mettre à jour à la fois la branche de développement et ma branche de fonctionnalité actuelle sur laquelle je travaille. Par ailleurs, le bug devient une autre tâche dans mon plan OpenProj. Quelque chose comme "bug-mauvaise-adresse". Et lorsque je l'insère, toutes les autres fonctionnalités sont replacées dans la chronologie.

5 - Pendant que je développe, si je pense à une nouvelle fonctionnalité, je l'inclus simplement dans le plan où je pense qu'elle conviendra le mieux et ajustera à nouveau la chronologie.

J'espère que ça aide. Il semble que vous ayez un projet passionnant devant vous. Bonne chance!

jdias
la source
10

Si vous optez pour une réécriture complète, pourquoi ne pas également considérer si vous devriez utiliser php? Un changement / mise à niveau de la technologie pourrait être le catalyseur que vous souhaitez améliorer votre conception / évolutivité / maintenabilité, etc.

NWS
la source
3
En outre, considérez que les cadres existants peuvent être mieux adaptés que de créer encore un autre cadre à usage unique.
S.Lott
1
@ S.Lott - qu'est-ce qui ne va pas avec la création d'un Framework à usage unique s'il est conçu pour répondre à cet usage unique mieux que tout autre?
Anonyme
1
@Chris Bridgett: Le monde n'a peut-être pas encore besoin d'un autre cadre hautement spécialisé. Il peut s'agir d'une "nuisance attractive". Une amusante perte de temps. Souvent, les cadres existants font aussi bien le travail. La "personnalisation" dans un cadre spécifique découle souvent d'une incapacité à comprendre un cadre existant et établi. Souvent, les cadres existants sont plus sûrs, plus fiables et plus rapides. Souvent, les frameworks existants sont déjà débogués. Souvent, les cadres existants sont mieux compris par les autres membres de l'équipe.
S.Lott
@ S.Lott: J'écris ceci pour plusieurs sites que je possède, et sa conception est configurée d'une manière qu'aucun autre framework n'est. Je ne prévois pas non plus de le publier pendant un certain temps, voire jamais. re: TheLQ: Ce fut l'une de mes premières réflexions, mais aucun autre langage Web n'a la portée que PHP fait autre que .NET. Python serait préférable, mais sa configuration sur les serveurs cPanel (qui constituent malheureusement une grande partie du monde de l'hébergement Web), est pénible.
Jon
1
@ S.Lott J'ai lu sur Symfony, CakePHP et CodeIgniter depuis la publication, et la première chose qui m'empêche de les utiliser - est que tous semblent coller aveuglément à MVC et ignorer la réutilisation. Ma conception actuelle (et future, si je réécris) est MVC dans un seul dossier (un dossier `` module ''), avec des vues comme l'utilisateur le souhaite (Named example.module.view.php), ainsi qu'un thème dossier, où les concepteurs peuvent créer leurs propres thèmes qui remplacent les vues existantes. C'est crucial pour moi, et aucun des principaux cadres ne semble le faire sans beaucoup de piratage - cela me dérange.
Jon
10

Je suggérerais de refactoriser fortement à la place

Le problème que vous anticipez ici:

Je veux vraiment planifier soigneusement cette réécriture, je veux détailler chaque fonctionnalité que je veux, où elle ira et comment elle se connectera à toutes les autres parties - mais je n'ai aucune expérience de ce niveau de planification. Aucun conseil? Des programmes qui vous aideront? Je me lasse de Trac, je ne l'ai jamais vraiment aimé.

est vraiment difficile. Il s'agit essentiellement du modèle Waterfall avec toute sa laideur. Voici quelques preuves anecdotiques des problèmes de l'approche de la `` grande réécriture '', qui arrivent à la conclusion: vous n'anticiperez probablement pas les problèmes correctement et vous vous retrouverez avec un autre gâchis que vous souhaitez réécrire à partir de zéro. Pas parce que vous êtes mauvais, mais parce qu'il est impossible d'obtenir quelque chose de gros en un seul coup.

Lorsque vous commencez à refactoriser, vous pouvez écrire des tickets individuels et vous pouvez continuer à utiliser le projet. L'astuce consiste à identifier les changements plus petits qui conduisent à une meilleure conception globale.

Par exemple: vous mentionnez, vous n'avez pas de MVC, mais vous le souhaitez. Dans un premier temps, vous pouvez prendre un seul fichier PHP et, en supposant le mixage habituel, le trier, de sorte qu'en haut vous avez tous les accès db, les calculs, etc., en bas vous avez le "templating" ( premiers billets, pour chaque fichier). Dans un deuxième temps, vous pouvez encapsuler toutes ces parties de modèles dans des fonctions, qui font passer leurs paramètres. (beaucoup plus de billets). Terminé? Félicitations, vous avez terminé votre V en MVC.

keppla
la source
Je vais en tenir compte, merci. Juste pour clarifier les choses - j'utilise MVC en ce moment.
Jon
@ Jon: Oui, aussi, mon exemple supposait une page typique, pas de framework. Mais je pense, mutatis mutandis, que ma réponse n'est pas invalidée par cela. Un point que je n'ai pas mentionné: le refactoring est amusant. C'est très gratifiant de voir la merde totale devenir quelque chose de beau :)
keppla
3

Envisagez d'utiliser un cadre existant. CakePHP, Zend Framework, CodeIgniter et Symfony sont les plus connus pour PHP. S'ils répondent aux besoins de centaines ou de milliers d'utilisateurs, je suis sûr qu'ils peuvent répondre aux vôtres.

Si vous êtes prêt à apprendre / utiliser autre chose que PHP - Django (Python) et Rails (Ruby) sont à peu près les principaux frameworks pour les applications Web conventionnelles.

C'est, bien sûr, à moins que vous ne vouliez de l'expérience dans la création de cadres - ce qui, je pourrais ajouter, a beaucoup moins de valeur sur le marché (plutôt que de savoir comment bien utiliser les cadres existants et pris en charge).

Yam Marcovic
la source
1

Ce que j'aime utiliser, c'est Redmine comme outil de suivi des horaires. Il gère très bien chacun de ces éléments, tout en étant beaucoup plus convivial (à mon avis) que trac.

En ce qui concerne votre réécriture, il est important de comprendre d'abord que vous n'anticiperez jamais toutes les fonctionnalités / nouvelles extensions qui peuvent apparaître, alors essayez d'écrire votre application aussi flexible que possible. L'utilisation de nombreux frameworks MVC dont PHP dispose peut aider à tirer parti de cela; cependant, certains de ces frameworks peuvent également vous troubler si votre architecture DB n'est pas flexible dès le départ (Cake). Je m'attacherais vraiment à rendre les choses aussi abstraites que possible, et chaque fois que vous voyez quelque chose de dur, demandez-vous à quoi il sert et pourquoi ne peut-il pas être stocké dans une base de données.

Vraiment, la conception de base de données aide à répondre à tant de questions et de problèmes, et c'est là que je vois l'importance principale de la façon dont votre application interagit; donc je recommanderais de passer une bonne majorité de temps à analyser comment les données sont stockées et comment votre base de données est structurée.

Petrogad
la source
1

En tant que logiciel de suivi des problèmes, JIRA est génial, mais il est très cher. Un autre bon outil que j'utilise est Eventum. C'est gratuit.

Mais le plus important est d'avoir une bonne idée de ce dont vous avez besoin. Vous devez d'abord rassembler les exigences de votre demande, pour avoir une idée globale de ce que vous voulez et aussi complet que possible.

Sur cette base, vous créerez des exigences logicielles, c'est une approche plus technique dans laquelle vous décrirez les modules qui feront partie de votre application, leurs fonctions et sous-fonctions, objets, classes, leurs interfaces, à peu près tout.

En sachant que vous aurez une bonne compréhension de la complexité de l'application et des lignes de code nécessaires, vous pourrez ainsi faire une estimation et créer un planning. Il est important d'avoir un calendrier et un délai, sinon vous risquez de ne jamais le terminer.

J'espère que cela aide


la source
Jira est très bon marché pour moins de 10 utilisateurs. Le coût est de 10 $ et les 10 $ sont reversés à des œuvres caritatives.
sixtyfootersdude