Comment mettre en œuvre le code d'une manière qui réduit la possibilité de re-travaux complets [clos]

StackOverflow https://stackoverflow.com/questions/937457

  •  06-09-2019
  •  | 
  •  

Question

J'ai eu un travail jeté en raison d'un changement de spécification mineur qui est avéré ne pas avoir été correctement déterminé les caractéristiques techniques. Si cela avait été fait dès le début du projet alors la plupart de ce travail aurait jamais été nécessaire en premier lieu .

Quels sont les principes bons conseils / conception qui gardent ces choses de se produire?

Ou pour diminuer la quantité de re-travail au code qui est nécessaire pour mettre en œuvre des demandes de fonctionnalités ou des modifications de conception mi mise en œuvre?

Était-ce utile?

La solution

Modulariser. Faites de petits blocs de code qui font bien leur travail. Cependant, thats seulement le début. Il est généralement une grande combinaison de facteurs qui contribuent au code si mauvais il a besoin d'une refonte complète. Tout des exigences très instables, une mauvaise conception, le manque de propriété de code, la liste est longue et sur.

Ajout à ce que d'autres ont mis en place:. COMMUNICATION
La communication entre vous et le client, vous et la gestion, vous et les autres développeurs, vous et votre service d'assurance qualité, la communication entre tout le monde est la clé. Assurez-vous que la gestion comprend des délais raisonnables et assurez-vous que vous et le client à comprendre exactement ce que votre bâtiment.

Autres conseils

Prenez le temps de garder la communication ouverte avec le client que votre construction du produit. Faire des étapes et configurer un temps pour afficher le projet au client à chaque étape. Même si le client est tout à fait déçu par une étape importante lorsque vous vous présentez, vous pouvez rayer ce que vous avez et recommencer à partir de la dernière étape. Cela exige également que votre travail soit construit en blocs qui fonctionnent indépendamment les uns des autres comme Csunwold dit.

Points ...

  1. Maintenir une communication ouverte
  2. Soyez ouvert et honnête avec les progrès du produit
  3. Soyez prêt à changer tous les jours pour les besoins des clients d'affaires et les spécifications pour le changement de produit.

Configuration logicielle changent, et il n'y a pas grand-chose, on peut faire à ce sujet, sauf pour une interaction plus fréquente avec les clients.

On peut cependant établir un code qui est plus robuste face aux changements. Il ne vous sauvera pas de jeter un code qui répond à une exigence que personne n'a besoin plus, mais il peut réduire l'impact de ces changements.

Par exemple, chaque fois que cela s'applique, utilisez les interfaces plutôt que des classes (ou l'équivalent dans votre langue), et éviter l'ajout d'opérations à l'interface, sauf si vous êtes absolument sûr que vous en avez besoin. En construisant vos programmes de cette façon vous êtes moins susceptibles de compter sur la connaissance d'une mise en œuvre spécifique, et vous êtes moins susceptible de mettre en œuvre des choses que vous auriez pas besoin.

Un autre avantage de cette approche est que vous pouvez facilement remplacer une mise en œuvre pour une autre. Par exemple, il paie parfois hors d'écrire le plus stupide (efficacité), mais le plus rapide d'écrire et de mise en œuvre test pour votre prototype, et seulement le remplacer par quelque chose de plus intelligent à la fin lorsque le prototype est la base du produit et la performance réellement questions. Je trouve que cela est un moyen très efficace pour éviter les optimisations prématurées, et ainsi jeter des choses.

modularité est la réponse, comme cela a été dit. mais il peut être une réponse difficile à utiliser dans la pratique. Je suggère l'accent sur:

  • petites bibliothèques qui font des choses prédéfinies bien
  • dépendances minimales entre les modules

interfaces d'écriture est d'abord un bon moyen d'atteindre ces deux (avec des interfaces utilisées pour les dépendances). l'écriture de tests suivante, contre les interfaces, avant que le code est écrit, souligne souvent les choix de conception qui sont non modulaire.

Je ne sais pas si votre application est l'interface utilisateur-intensive; qui peut rendre plus difficile d'être modulaire. il est encore le plus souvent en vaut la peine, mais sinon, supposons qu'il sera jeté avant longtemps et suivre le principe de l'iceberg, que 90% du travail ne soit pas lié à l'interface utilisateur et donc plus facile de garder modulaire.

Enfin, je recommande « le programmeur pragmatique » par andrew chasse et dave thomas comme plein de conseils. mon préféré est DRY - « ne vous répétez pas. » - un code qui dit la même chose sent deux fois

  • itérer petit

  • itérer souvent

  • essai entre les itérations

  • obtenir un produit simple de travail sur le plus tôt possible afin que le client peut apporter sa contribution.

En fait supposer trucs obtiendrai jeté, si le code de manière appropriée , et ne pas assez loin dans quelque chose qui l'avoir jeté sur les coûts beaucoup de temps.

G'day,

En regardant à travers les autres réponses ici, je remarque que tout le monde est de mentionner ce qu'il faut faire pour votre prochain projet.

Une chose qui semble manquer si a un savoir pour les lavages pourquoi la spécification. était hors de synchronisation. avec les besoins réels nécessaires par le client.

Je suis juste inquiet que si vous ne le faites pas, quel que soit l'approche que vous prenez pour la mise en œuvre de votre prochain projet, si vous avez encore que l'inadéquation entre les besoins réels et les spécifications. pour votre prochain projet alors vous être à nouveau dans la même situation.

Il est peut-être quelque chose d'aussi simple que la mauvaise communication ou peut-être le fluage des besoins du client.

Mais au moins si vous connaissez la cause et vous pouvez essayer de minimiser les chances de se reproduire.

ne dénigre pas ce que les autres réponses disent et il y a quelques trucs formidables là-bas, mais s'il vous plaît apprendre de ce qui est arrivé afin que vous n'êtes pas condamnés à le répéter.

HTH

Cheers,

Parfois, une ré-écriture est la meilleure solution!
Si vous écrivez un logiciel pour un appareil photo, vous pouvez supposer que la prochaine version sera également faire une vidéo ou vidéo stéréo ou balayage laser 3D et inclure tous les crochets pour toutes ces fonctionnalités, ou vous pourriez écrire une telle architecture astronaute polyvalent extensible qu'il pourrait faire face à la caméra suivante, y compris les moteurs à réaction -. mais il vous en coûtera tant en argent, des ressources et des performances que vous auriez pu être mieux de ne pas le faire

Une réécriture complète de nouvelles fonctionnalités dans un nouveau rôle n'est pas toujours une mauvaise idée.

Comme csunwold dit, modularisation votre code est très important. Écrire de sorte que si une pièce tombe sujette à des erreurs, il ne muck pas le reste du système. De cette façon, vous pouvez déboguer une section buggy tout en pouvant compter en toute sécurité sur le reste.

Au-delà, la documentation est la clé. Si votre code est soigneusement et clairement annotées, il retravaillant dans l'avenir sera infiniment plus facile pour vous ou celui qui arrive à être le débogage.

En utilisant le contrôle de la source peut être utile aussi. Si vous trouvez un morceau de code ne fonctionne pas correctement, il y a toujours la possibilité de revenir à un passé itération robuste.

Bien qu'elle ne concerne pas directement à votre exemple, lorsque le code écrit, j'essaie de garder un œil sur les façons dont je peux voir le logiciel en évolution dans l'avenir.

En fait, j'essaie d'anticiper où le logiciel sera, mais critique, je résiste à la tentation de mettre en œuvre l'une des choses que je peux imaginer qui se passe. Tout ce que je suis après est en train de faire les API et les interfaces prennent en charge les avenirs possibles sans mettre en œuvre ces fonctionnalités encore, dans l'espoir que ces l'aide «scénarios possibles de me venir avec une meilleure et plus interface à l'épreuve.

ne fonctionne pas toujours ofcourse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top