Existe-t-il une manière élégante d'analyser le processus d'un ingénieur?

12

Beaucoup de gens pensent que mesurer les commits est inapproprié.

Y a-t-il eu une étude qui tente d'attirer plus de sources que d'engagements - telles que:

  • modèles de navigation
  • Travail IDE (pré-commit)
  • temps d'inactivité
  • multitâche

Je ne vois pas de moyen facile de prendre ces mesures, mais je me demande si une étude a été réalisée.


Sur une note personnelle, je crois que la réflexion sur ses propres «métriques» pourrait être utile indépendamment de (ou en l'absence de) les utiliser pour l'évaluation de la performance. IE une manière non biaisée de réfléchir à vos habitudes. Mais ceci est un sujet de discussion au-delà des questions et réponses.

New Alexandria
la source

Réponses:

6

Je ne sais pas si vous le jugeriez élégant, mais Watts Humphrey a écrit un livre entier intitulé Personal Software Process qui était tout au sujet de la mesure de votre propre productivité. Il a décrit les paramètres des entrées comme le temps passé à votre bureau par rapport aux interruptions, le temps passé à travailler sur différents types d'activités du cycle de vie du logiciel, les défauts par quantité de code. Il y a un rapport technique qui donne la version courte à:

http://www.sei.cmu.edu/library/abstracts/reports/00tr022.cfm

Si vous voulez regarder quelque chose comme la qualité d'un code de développeur, Chidamber & Kemerer a proposé plusieurs mesures pour le code orienté objet.

Mesures pour le code orienté objet

  • profondeur de l'arbre d'héritage,
  • nombre pondéré de méthodes,
  • nombre de fonctions membres,
  • nombre d'enfants, et
  • couplage entre objets.

En utilisant une base de code, ils ont essayé de corréler ces mesures à la densité de défauts et à l'effort de maintenance en utilisant une analyse covariante. Des études ultérieures ont fait une analyse similaire sur des centaines de projets Java Source Forge pour déterminer leurs caractéristiques par rapport aux métriques CK et certaines métriques supplémentaires proposées plus tard.

Mesures générées dans le contexte des révisions de code

Les défauts peuvent être classés selon de nombreux critères:

  • gravité: (majeure, mineure, cosmétique, enquête / inconnue),
  • type (logique, faute de frappe, orthographe, violation de la norme de codage, etc.),
  • confinement origine / phase (exigences, conception, code, etc.).

Il existe également des taux de préparation et d'inspection (temps par réviseur, temps par ligne de code) et des densités de défauts (par KLOC (milliers de lignes de code), par minute de temps d'inspecteur / réviseur).

Le traçage de ces valeurs par rapport aux cartes de contrôle peut nous montrer si nous sommes dans les limites du processus (par exemple, une équipe qui inspecte 200 lignes de code qui ne trouve aucun défaut dans un groupe qui compte en moyenne vingt-cinq défauts par KLOC pourrait être défectueuse).

Autres métriques

D'autres paramètres qui pourraient aider à inclure ceux pour

  • valeur acquise pour aider à calibrer l'estimation
  • vitesse pour ceux qui utilisent Scrum ou Kanban .
  • Le travail de Pareto , Juran , Demming , Ishikawa , et d'autres de la qualité et de l'ingénierie industrielle est quelque peu portable au développement logiciel avec un peu d'imagination.

Limites de l'analyse

Il existe d'énormes limites sur la valeur des mesures. Les bogues corrigés par développeur peuvent signifier presque n'importe quoi, et lorsque vous commencez à punir ou à récompenser cette mesure, je parie que les bogues deviendront plus nombreux et granulaires, et le mélange de bogues difficiles à faciles corrigés changera également au fur et à mesure que l'équipe choisira la cerise dans le courir pour avoir le plus.

Il y a aussi une certaine distraction et potentiellement une perte de concentration et de plaisir qui peuvent survenir avec une mesure intrusive. Vous ne pouvez pas devenir beaucoup plus élégant (et émotionnellement chargé) qu'un poète du lac comme Wordsworth qui a dit:

      Sweet is the lore which Nature brings;
      Our meddling intellect
      Mis-shapes the beauteous forms of things:--
      We murder to dissect.

Bien que les logiciels ne soient pas exactement de la nature, donnez-moi une certaine latitude car je pensais que je n'aurais jamais pu utiliser quoi que ce soit du cours de littérature anglaise du secondaire.

L'agilité peut être considérée comme une réaction à un gros processus centralisé. Parfois, ce mode de travail pouvait nécessiter tellement d'efforts analytiques que la capacité à atteindre le débit lors de la création de logiciels avait pratiquement disparu.

DeveloperDon
la source
J'aime cette réponse, que quelqu'un d'autre obtienne ou non de meilleures informations - je l'ai donc modifiée pour le contenu en coupe.
New Alexandria
Je ne comprends pas votre commentaire sur la valeur gagnée pour les "développeurs qui n'ont pas fait la transition vers Agile". La simple recherche de «valeur gagnée en agile» et de «valeur gagnée agile» fait apparaître de nombreuses personnes qui ont appliqué des techniques EVM traditionnelles à des environnements agiles ...
Thomas Owens
La valeur acquise semble être une bonne technique adaptative en matière d'estimation. J'ai pensé que l'estimation Agile avait ses propres approches principalement liées aux points. Je vais voir si je peux reformuler les choses pour qu'elles soient inclusives.
DeveloperDon
Il existe des livres entiers sur l'estimation agile, donc c'est assez complet. Cependant, j'ai travaillé dans des environnements agiles qui, de par leur nature de reporting et de mise à jour, nécessitaient l'application d'EVMS.
Thomas Owens
2

Je veux ajouter une réponse alternative qui pointe loin de la pratique standard du génie logiciel vers un autre domaine dans le but de voler des outils de base que nous pouvons adapter au besoin. Les personnes chargées de l'assurance qualité se préoccupent de la production, du rendement et de la détection et de la prévention des défauts, tout comme les développeurs de logiciels.

http://en.wikipedia.org/wiki/Seven_Basic_Tools_of_Quality

J'aime la carte de contrôle.

http://en.wikipedia.org/wiki/Control_chart

Faites une activité, tracez une métrique, faites-en une autre, tracez sa métrique, etc. Par exemple, l'intrigue est validée par jour. Le graphique diffusera des données allant d'un minimum à un maximum. Peut-être plus tard, vous pourrez caractériser les résultats pour déterminer que lorsque la valeur est faible, quelque chose entrave la progression et lorsqu'elle est trop élevée, le travail commence de manière rapide mais bâclée. La façon dont vous encouragez les travailleurs à accélérer ou à ralentir vous appartient.

Les métriques personnelles peuvent être quelque chose que vous pouvez corréler pour vous-même en commençant par une question comme: "Je me sens le plus productif quand je ..."

  • Écrivez un cas d'utilisation complet avant de commencer à coder.
  • Écrivez mes tests unitaires avant mon code.
  • Vérifiez fréquemment auprès des parties prenantes pour vous assurer que les exigences ne changent pas et créez des retouches massives sur le travail effectué vers un plan obsolète.
  • Modifiez autant de code que possible.
  • Déléguez des changements bien définis aux membres de l'équipe qui sont les plus experts des pièces que je leur ai demandé de changer.
    • Donnez à mon équipe un aperçu complet, mais avec des priorités, nous pouvons terminer dans le sprint actuel.
    • Commencez ma passe de refactoring avec une liste hiérarchique de répertoires, fichiers, classes, méthodes, équations, variables, documentation, etc. que je changerai.
    • Rechercher un problème de haut niveau pour trouver des solutions de l'art antérieur, estimer la portée et les améliorations clés nécessaires pour faire une meilleure solution.

L'ancien a vu que ce que nous mesurons est que ce qui est fait peut vous amener à attaquer le problème en fonction de ce que vous jugez être le facteur limitant.

ou plusieurs facteurs par ordre de priorité sur la base d'un diagramme de Pareto.

http://en.wikipedia.org/wiki/Pareto_chart

DeveloperDon
la source