2010-05-20 5 views
10

Je suis un développeur stagiaire et j'écris des applications .NET depuis environ un an maintenant. La plupart du travail que j'ai fait a impliqué la construction de nouvelles applications (principalement des applications Web) à partir de zéro et j'ai été donné un contrôle plus ou moins complet sur la conception du logiciel.Comment comprendre les projets existants

Cela a été une expérience formidable, cependant, en tant que développeur stagiaire, ma confiance quant à savoir si les approches que j'ai prises sont les meilleures est minime. Idéalement, j'adorerais collaborer avec des développeurs plus expérimentés (je trouve que c'est le meilleur que j'apprends) mais dans la société où je travaille pour les développeurs, j'ai tendance à travailler de manière isolée (une grande honte pour moi). Récemment, j'ai décidé qu'un bon moyen d'en savoir plus sur la manière dont les développeurs expérimentés abordent leur conception pourrait être d'explorer certains projets open source. Je me suis retrouvé un peu dépassé par les projets que j'ai regardés. Avec mon niveau d'expérience, il était difficile de comprendre le corps du code auquel je faisais face.

Ma question est légèrement floue. Comment les développeurs abordent-ils la tâche de comprendre un nouveau projet de moyenne à grande échelle? Je me suis retrouvé à déverser beaucoup de code et à lutter pour voir le bois pour les arbres. À un moment donné, j'ai senti que je pouvais comprendre une petite partie du système, mais ne pas voir comment tout cela s'accorde. Est-ce que les autres ont ce même sentiment? Si oui, quelles approches adoptez-vous pour comprendre le projet? Avez-vous d'autres conseils sur la façon d'apprendre les meilleures pratiques de conception?

Tout conseil sera très apprécié. Je vous remercie.

+2

Dupe http://stackoverflow.com/questions/1307790/how-to-improve-your-reading-and-understanding-of-code et http://stackoverflow.com/questions/2777465/resources-for- apprendre-comment-mieux-lire-code par exemple. –

+0

S'il vous plaît modifier votre question pour le marquer comme Wiki de la communauté, sinon les gens vont le fermer. –

Répondre

3

Communicate

Je demanderais habituellement un développeur de me donner un aperçu du projet ou l'un des modules du projet que je suis intéressé. Je ne l'ai pas trouvé à ce jour tout ce qui est mieux que la communication avec les développeurs impliqués pour être introduit dans une base de code existante. Ils peuvent non seulement vous donner une vue d'ensemble du projet et du code, mais également recommander toute documentation disponible (par exemple des diagrammes de classes) qui peut être utile.

2

Vous devriez toujours être à la recherche d'un meilleur moyen. C'est là que vous vous conduisez pour vous améliorer. Demander toujours "il doit y avoir un meilleur moyen" est une bonne chose - mais ne le laissez pas vous paralyser. Prévoyez un moment pour essayer quelque chose, si vous n'obtenez rien, abandonnez-le, empruntez un autre chemin. Ce qui change, ce sont les personnes en qui vous avez confiance, les personnes avec lesquelles vous pouvez échanger des idées et les communautés auxquelles vous pouvez penser. Je fais cela tout le temps avec une courte liste de personnes qui ont travaillé avec moi avant, qui sont meilleures que moi dans des domaines que je connais, et qui ne me dérange pas de me dire "non, mauvais, tu devrais faire (une autre idée) ". Cette étape que vous avez déjà prise avec poster quelque chose ici :-)

En ce qui concerne les projets - chaque fois que j'aborde un projet qui existe déjà, ce n'est pas le mien, les gens qui l'ont écrit ne sont pas là, le code est vieux, le la documentation est clairsemée et ainsi de suite, j'ai tendance à me concentrer sur UNE CHOSE et une seule chose. N'essayez pas de comprendre l'ensemble du système, ce n'est pas réaliste et ne vous inquiétez pas trop si vos changements sont la solution/solution parfaite/quoi que ce soit - cela apparaîtra au fil du temps et deviendra évident à mesure que vous améliorerez et comprendrez les choses. . Sachez ce que vous ne savez pas et ne faites aucune erreur à ce sujet et apprenez un canal à la fois. Même connaître une tonne de trucs et de choses cool ne signifie pas grand-chose quand vous devez revenir à 2003 avec des jeux de données. Vous avez mentionné que les gens sont très instables ... c'est dommage parce que développer n'importe quoi exige que beaucoup de gens se parlent entre eux. Je suggère de demander si vous pouvez jumeler le programme avec l'un d'entre eux qui en sait beaucoup sur le système. Si cette personne fait des excuses ou dit "ils ne peuvent pas" trouver quelqu'un qui le fera.

+0

Merci. C'est un conseil vraiment utile. Je m'identifie immédiatement à ce que vous dites sur le fait de ne pas être paralysé par l'expérimentation du design. Coupable! – John

8

Ceci est une question très intéressante. J'aimerais aussi savoir comment les autres développeurs font cela. Jusqu'à présent j'utilise ces possibilités dans aucun ordre particulier:

  • Lire le code source, il a l'avantage qu'il est toujours à jour. C'est aussi la tâche la plus difficile, mais c'est possible.
  • Lire les tests unitaires s'ils sont disponibles, ils montrent souvent l'utilisation prévue pour une classe, une bibliothèque ou un cadre.
  • Refactoriser une partie du code source. Pendant que vous améliorez la qualité du code source, vous augmentez votre compréhension du code, ou devrais-je dire que vous ne pouvez améliorer le code source que si vous savez exactement ce qu'il fait.
  • Déboguez l'application, parcourez le programme tout en utilisant un débogueur.
  • Utilisez un outil comme NDepends, JDepends, Lattix, Visual Studio, etc. pour effectuer une ingénierie inverse de l'architecture ou du design de l'application et utilisez-le comme point de départ.
  • Lire la documentation. Toute documentation vous permettant de comprendre l'application fera l'affaire (documentation utilisateur, documentation de conception ou documentation d'architecture).
  • La communication avec les développeurs originaux, comme l'a dit Bruno, serait également une bonne option.
2

Question Je me suis demandé quand j'ai commencé mon voyage. Tout d'abord, il faut beaucoup de patience et de temps en fonction de la taille du projet. Voici ce que je fais aujourd'hui pour comprendre un projet existant et les projets sur lesquels je travaille la plupart du temps sont centrés sur la base de données et cette liste n'est pas nécessairement pour les projets open source, mais aussi pour des projets de lieu de travail

  1. Créer un diagramme ER du base de données (si elle est une base de données relationnelle)
  2. créer une ER feuille consanguine toutes les relations des tables disposées (ici est une requête SQL http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/)
  3. Utilisez la feuille ci-dessus pour créer des vues pour regrouper les tables logiquement et voir les résultats. Cela aide à comprendre le schéma et les données derrière l'application
  4. Schéma d'exposer les niveaux et les composants dans le projet
  5. diagramme de séquence et diagrammes de flux de données pour comprendre le flux
  6. Pour ce qui précède, vous devez déboguer l'application en utilisant un outil tel que Visual Studio
  7. Diagramme de classes et cartes de référence des méthodes pour intégrer la chaîne dans le code (peut utiliser des outils comme Resharper)
  8. Spécification fonctionnelle (ou écrire votre propre histoire du projet) et utiliser des diagrammes de cas (pour comprendre exigences commerciales)
  9. Refactoriser une petite partie pour comprendre le code mieux
  10. Parlez aux développeurs ou collectivité ou entreprise
+0

Trouvé quelques conseils intéressants ici http://programmers.stackexchange.com/questions/146471/compréhension- déjà-existant-complexe-code-base – brenmartin

3

Voici quelques bonnes étapes à considérer avant de plonger dans le code source de tout projet que vous ne regardiez en.

1ère étape - essayer de comprendre le but du projet (première vue d'ensemble puis au niveau bas), si possible, prendre l'aide du testeur.- Avant d'aller au code, essayez de concevoir le projet selon votre compréhension à un très haut niveau (ne passez pas beaucoup de temps là-dessus, juste à un très haut niveau).

3ème étape - Exécuter le projet et voir le flux, il vous donnera plus de clarté sur la compréhension de la conception fonctionnelle.

4ème étape - voir la structure du projet, il donnera une idée de base de l'architecture comme trois niveaux, à deux niveaux, etc.

5ème étape - à nouveau exécuter le programme en mode débogage et essayez de comprendre le flux technique au niveau du module et de la classe. signifie quel module contient la logique métier et où la logique d'accès aux données est écrite, essayez également de comprendre l'entrée et la sortie de ces modules.

6ème étape - Notez votre compréhension pour référence future.

7ème étape - une fois de plus exécuter l'application en mode débogage, cette fois comprendre le but de la classe et les méthodes qu'elle contient. exécuter différentes fonctionnalités d'application en mode débogage et chaque fois suivre le contrôle où que ce soit, voir les classes et toutes les méthodes de cette classe et essayer de le relier à la fonctionnalité que vous exécutez par exemple - si vous avez sélectionné un compte 'page' 'et rempli l'entrée et soumis. (vous savez qu'il va ouvrir un nouveau compte pour vous - il suffit de suivre le contrôle en mode debug et voir quelles sont les classes impliquées et essayer de comprendre leurs méthodes puis à la fin de ce cycle comprendra beaucoup de choses sur l'ouverture de compte techniquement). appliquer le même processus pour différentes fonctionnalités.

À la votre!

Questions connexes