Question

Je suis en train d'installer un dépôt de code réutilisable. Je pensais avoir chaque module de code réutilisable de ratings « niveau de maturité ». La note est définie comme le niveau auquel un code réutilisable est dans un certain ensemble d'exigences. Le niveau de maturité le plus élevé sera le plus haut degré de standard à un ensemble prédéfini d'exigences.

Par exemple:
Niveau; Exigences; Description
Niveau 0; Code est légal d'utiliser; Le droit de code à utiliser dans l'industrie commerciale / sur plusieurs contrats / etc?
Niveau 1; Base de codeline et répond aux exigences de niveau 0; Code prototypé, 3e partie des outils, etc.
Niveau 2; A l'interface des fonctions et des commentaires et répond niveau 1 exigences; Une documentation suffisante pour chaque classe et la fonction; Capable de déterminer la fonctionnalité des commentaires
Niveau 3; Adhère aux normes de codage et répond à des exigences de niveau 2; Normes de codage définies suit et passe le code de vérification test de l'utilitaire
Niveau 4; Comprend des cas de test et répond à des exigences de niveau 3; A des cas de test suffisant pour tester toutes les fonctionnalités d'un code
Niveau 5; Approuvé par le comité de réutilisation et répond niveau 4 exigences; Commenté par des experts de réutilisation et de leurs pairs et Verified il répond à tous les niveaux de maturité

Je me demande si ce niveau de maturité devrait être une structure hiérarchique, où pour passer au niveau suivant, vous devez répondre aux exigences de tous les niveaux précédents (comme je l'ai indiqué ci-dessus)?

Ou si elle doit être un sous-ensemble d'exigences pour répondre au prochain niveau?

Par exemple, nous avons rencontre x sur les exigences y, nous pouvons passer au niveau suivant (exigences serait le même que celui mentionné ci-dessus).

Niveau 0, répond 0 sur 6 exigences
Niveau 1, répond à 1 sur 6 exigences
...

Le problème que je vois avec l'approche sous-ensemble est certaines exigences devraient avoir une pondération plus forte, et dans cette approche qui ne sera pas prise en compte (sauf si je commence à entrer dans les détails comme, rencontre un de b et x sur y, etc). Mais il pourrait commencer à se compliquer.

Quelqu'un at-il fait cela avant, et si oui, comment avez-vous configurer votre bibliothèque? Avez-vous un niveau de maturité du tout ou une autre structure? Toute entrée serait grandement apprécié.

Était-ce utile?

La solution

La mise en place d'un référentiel de réutilisation de code est une tâche difficile. La principale difficulté est pas dans la façon dont vous l'avez configuré, mais comment vous communiquer l'existence des différentes bibliothèques dans le référentiel. bibliothèques de réutilisation que de bonnes si elles sont utilisées, et ils ne sont utilisés que si elles sont connues, et ils ne sont largement utilisés si la qualité du code est élevé et si elle répond aux besoins des utilisateurs.

J'aime l'idée de niveaux de maturité, mais comme d'autres l'ont, il y a probablement un peu de configuration / construire du travail à faire. J'ai pensé à une approche similaire à builds d'une application - je les ai appelés niveaux de confiance. Dans le domaine d'application-construction, une faible accumulation de confiance est celui qui ne passe pas les tests unitaires; une confiance moyenne pourrait inclure des tests unitaires qui passent, mais pas les tests d'intégration, et ainsi de suite. Ce fut un bon mécanisme de communication à l'assurance qualité et les utilisateurs à quoi s'attendre. Un mécanisme similaire pourrait être approprié pour les bibliothèques.

Les commentaires de documentation sont un must, et doivent aussi avoir autant de soin mis en eux que vous mettez dans le code. Les commentaires doivent communiquer quoi, pourquoi, où, quand, comment, qui, etc. Votre processus de construction devrait publier la documentation à un endroit bien connu (encore une fois, la communication est la clé).

Le long des lignes de communication, il ne fait pas de mal à présenter de temps en temps tout ce qui est là. Encore! communication.

Alors, au minimum votre construction de chaque bibliothèque doit:

  • publier la bibliothèque (peut-être informer les abonnés)
  • publier la documentation
  • exécuter des tests unitaires
  • publier le niveau de maturité

En ce qui concerne les niveaux de maturité, je les définir avec un « nom de niveau » et une description de ce que signifie le niveau. Publier les critères pour ce que cela signifie pour déplacer vers le haut ou vers le bas niveau. En fait, maintenant que j'y pense, peut-être que vous voulez un ensemble de critères orthogonale: un niveau pour le code, un niveau pour la documentation, l'utilisation-politiques (à savoir doit avoir une licence pour XYZ), et d'autres attributs. Je vous recommande cette approche par petits incréments bien. A la fin de la journée, offrant des fonctionnalités aux utilisateurs finaux est ce qui compte.

Vous devez communiquer aussi un état d'esprit de pousser naturellement les bits réutilisables dans le référentiel. Les développeurs doivent avoir incités à le faire habituellement. code statique outils de vérification qui recherchent des commentaires de duplication et les pairs ne vont jusqu'à présent. Quelqu'un doit faire réellement le travail d'un code de passer au dépôt.

Enfin, je vous recommande d'utiliser le plus grand soutien de l'outil possible dans la configuration, la construction, l'entretien et la communication du référentiel. Dans le cas contraire, comme tout artefact non-code, vous ferez face à une certaine quantité d'entropie qui abaisse la valeur comme l'artefact non code devient daté.

Autres conseils

Je pense que vous trouverez qu'il est difficile de faire en sorte que l'équipe de développement suit ces lignes directrices avec suffisamment de précision. Surtout quand les lignes directrices peuvent être interprétées d'une façon ou d'une autre. De plus, ce sera une douleur importante si quelqu'un améliore un morceau de code en ajoutant des tests et tout à coup, il doit passer à un autre projet. Plus que probable, un tel code restera dans le projet, il a été placé dans, et au fil du temps les niveaux de maturité perd tout son sens.

Une approche que j'ai vu travailler très bien dans une grande entreprise est la suivante:

  • Toutes les bibliothèques de tiers se sont engagés dans un répertoire spécial et toujours inclure un numéro de version.
  • Nos propres bibliothèques communes sont divisées sur la base des références ils ont d'autres choses. Par exemple. si le code utilitaire fait référence à la bibliothèque Infragistics alors ce morceau de code utilitaire va dans une bibliothèque InfragisticsUtils.
  • Nos propres bibliothèques communes qui forment clairement identifiables « unités » vont dans des bibliothèques distinctes. Par exemple, une bibliothèque de code qui traite des titres de prix est un projet distinct.
  • Tout le code réutilisable qui ne satisfait pas à l'un des passe au-dessus dans un fourre-tout projet Utilities.
  • Nos propres bibliothèques sont compilées et publiées dans un emplacement partagé où les projets peuvent y faire référence. Il appartient à l'équipe de développement de projets de décider si elles veulent faire référence à un juste ou binaire comprennent le projet compilé d'utilité dans leur solution.

Il est évident que la qualité du code que vous trouverez dans le fourre-tout bibliothèque Utilities peut varier considérablement. Pour remédier à cela, nous fait qu'assurer que deux personnes de différentes équipes de développement a examiné tous checkins à Utilities. Ce mauvaises herbes à beaucoup de choses qui n'a pas sa place là-bas!

Je pense qu'un grand dépôt de code comprendrait un outil de CM et un outil Wiki. L'outil CM devrait être structuré en utilisant l'idée de niveau (comme vous proposiez), car elle structure le code de qualité. Le wiki doit agir comme une « publicité » de ce que le logiciel peut faire et comment il peut vous aider. Ce wiki pourrait également conserver des informations telles que les projets utilisent le code, la notation de la façon dont il est utilisable, et des exemples de la façon de l'utiliser. Si quelqu'un est inquiet de l'équipe de développement suivant les directives de niveau, il convient de souligner comment fonctionne autosurveillance et de donner l'exemple de la façon dont il fonctionne avec les wikis.

Maintenant, la structuration de l'outil de CM est important. Il est conçu pour transmettre la qualité du code, donc vous savez ce que vous obtenez en lorsque vous l'utilisez. Par exemple, si vous écrivez une classe simple avec peine des commentaires et il ne respecte pas vraiment aux normes de codage (peut-être un prototype), il serait alors entré dans \ sw_repository \ level0 \ ExamplePrototype.

Peut-être que quelqu'un prend alors ce morceau de code et les commentaires ajoutés et apporte aux normes. Ensuite, cette personne placerait dans \ sw_repository \ niveau1 \ ExamplePrototype.

Ensuite, cette même personne, un peu plus tard, crée des tests unitaires pour la ExamplePrototype. Ce serait alors aller à Level2 et ainsi de suite.

Définir les niveaux devrait prendre une pensée. Ils devraient être un peu séquentiel et même si, par exemple, vous avez écrit des tests unitaires pour le code prototype mais il ne répondait pas aux commentaires et de codage standard, alors il est placé dans Level0 de toute façon. Cependant, il serait facile d'aller à ces commentaires si Level2 et les normes ont été respectées.

Pour ma bibliothèque, je viens de mettre dans le code que j'ai écrit qui peut être utilisé dans plusieurs applications. Si le code est spécifique à une application en particulier, il ne va pas dans la bibliothèque. De plus en plus des applications utilisent, les bugs sont élaborés, donc je ne pense que ce soit sans bug tout de suite. Bugs seront constamment trouvés et fixes que votre bibliothèque arrive à maturité et est souligné avec différentes applications. Il ne sera jamais sans bug, mais au fil du temps se rapprochera de fiabilité. Aussi, quand je me rends compte que l'API pour des choses ne va pas, je ne vous inquiétez pas à ce sujet et Refactor l'API le plus rapidement possible.

Voici ma bibliothèque en c ++
http://code.google.com/p/kgui/

Pendant des années, Microsoft a été un grand défenseur de ce qu'on appelle usines de logiciels , une grande partie est consacrée à la résolution des problèmes de réutilisation.

Quels sont les problèmes de réutilisation? Tout d'abord, il est difficile. Il est très difficile de trouver une bibliothèque et une API qui servira au-delà des besoins immédiats du projet à portée de main. Comment prévoyez-vous l'avenir? En outre, le problème d'un référentiel centralisé qui sert à la fois une base de connaissances et une communauté dynamique de la pratique est très difficile. Comment voulez-vous faire quelque chose qui est encore à la fois très flexible facile à utiliser? Beaucoup ont essayé et échoué. Les deux usines de logiciels et lignes de produits logiciels tentent de résoudre ces problèmes.

Bonne chance!

Kit mentionné problème le plus important: la réutilisation . le reste de l'idée est belle, mais pas plus d'un détail.

Je veux dire, je me suis mal à maintenir ma bibliothèque de réutilisation propre. parfois je fais une mise en œuvre qui est très spécifique au projet, ou je fais le prototype n-ième pour une idée, et aucun de ceux qui rentrent dans ma bibliothèque.

si vous réussissez vraiment à avoir une bibliothèque de réutilisation de code, qui est utilisé et entretenu par de nombreux développeurs, d'une manière disciplinée, que c'est la victoire. vous avez besoin d'un système de contrôle de version et un bug tracker, ce dernier étant utilisé par les propriétaires du projet et les utilisateurs. vous avez besoin de communication et des moyens de contribution. ayant une poignée de développeurs utilisant un projet améliore considérablement sa qualité. la mise en œuvre va mieux. la documentation est créée. API et la conception de fonctionnalités sont à un niveau beaucoup plus élevé. un comité est une bonne chose, mais il ne peut pas décider, à quel point le code donné est, sans l 'utiliser. il peut décider si le code est conforme aux normes spécifiques, mais le respect des normes ne suffit pas pour les bonnes bibliothèques.

vous devez faire de votre mieux pour vous assurer, vous n'avez pas des tonnes d'extraits de code flottant autour, qui peuvent tous plus ou moins faire quelque chose. ok, toute décision de conception a des avantages et des inconvénients, mais je pense, il est plus logique de commencer par un projet pour une tâche donnée, et la branche, si vraiment nécessaire, mais garder la communication vivante entre les équipes de projet et envisager (en partie) la fusion retour.

ne vous inquiétez pas trop de catégoriser la qualité des différents projets. si un projet est mauvais, alors les utilisateurs / développeurs vont le pousser à un meilleur niveau. la plupart des gens sont assez intelligents pour voir, quand une bibliothèque est bon, et quand il est pas. vous avez vraiment besoin de mettre votre énergie dans ces effets symbiotiques, plutôt que d'essayer aux participants du fardeau des règles strictes.

juste mes 2 cents ...;)

Regardez Will "Confessions d'un programme utilisé Salesman" de Tracz, et d'autres choses par la réutilisation de HP Rabbi, Martin Griss.

Je pense que vous pensez trop dans un problème non.

Comment avez-vous configurer ma bibliothèque? facile, si vous utilisez le même (ou presque la même) méthode en deux ou plusieurs projets, déplacez à la bibliothèque.

Il est considéré comme une bonne approche d'avoir sa propre bibliothèque, mais un milliers de lignes est une ruine!

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