J'ai un problème intéressant, assez courant, je suppose, avec l'un des développeurs de mon équipe. Le gars est un excellent développeur, travaille vite et est productif, produit un code de assez bonne qualité et tout. Bon ingénieur. Mais il a un problème avec lui - très souvent, il ne parvient pas à traiter les cas marginaux dans son code.
Nous en avons parlé plusieurs fois avec lui et il essaie mais je suppose qu'il ne pense pas de cette façon. Donc, ce qui finit par arriver, c'est que QA trouverait beaucoup de problèmes avec son code et le retournerait encore et encore pour le développement, entraînant finalement des délais manqués et tout le monde dans l'équipe mécontent.
Je ne sais pas quoi faire de lui et comment l'aider à surmonter ce problème. Peut-être que quelqu'un avec plus d'expérience pourrait vous conseiller?
la source
Réponses:
Lui demander d'écrire des tests unitaires automatisés pour son code. L'écriture de tests unitaires oblige à réfléchir aux cas marginaux.
Quelques détails:
la source
After some amount of feedback from his team about missed edge cases, he will probably learn to consider those
Les développeurs qui ont de mauvaises pratiques soutiennent souvent la non pertinence de l'effort supplémentaire requis pour une bonne pratique (car ils ne voient pas l'avantage de le faire). Bien que le développeur puisse acquiescer lorsque vous ajoutez des cas supplémentaires, cela ne signifie pas qu'il pense que cela est pertinent ou s'il va les ajouter lui-même.Donnez-lui une liste de contrôle, par exemple
Les gens d'AQ peuvent aider à élaborer la liste de contrôle
Donnez la liste de contrôle à tous les développeurs, pas seulement à celui-ci.
la source
D'accord.
C'est une qualité que les bons ingénieurs ne partagent pas.
La surveillance des cas marginaux est une caractéristique qui est présente ou non chez les personnes. Cela n'a rien à voir avec le fait d'être ingénieur ou programmeur. Le développement de cette caractéristique est influencé par le contexte culturel, le cadre de vie, les événements de l'enfance et les expériences de vie. Ensuite, l'attitude est simplement appliquée à tout travail effectué par un individu.
Ce dont vous avez besoin est de savoir si votre gars est de ce type qui n'a pas développé ce certain sens (peut-être encore). Il est également très probable qu'il ne se soucie simplement pas d'une raison ou d'une autre. Vous devez analyser toute la situation, qu'il soit satisfait de son travail. Sinon, vous devriez peut-être faire quelque chose pour l'aider en premier.
S'il est d'accord avec le travail mais n'a pas encore connu le danger de cas marginaux, vous pouvez commencer à l'éduquer. S'il le prend au sérieux, il pourrait changer ses habitudes au fil du temps. Bien que je sceptique sur celui-ci, vous pouvez toujours l'essayer.
Si toutefois il se révèle être ce type de personne qui n'est pas bonne dans les cas marginaux, il ne vous reste plus qu'à le retirer de l'équipe. Cette caractéristique est essentielle à la programmation pratique. Malheureusement, sans elle, même une grande personne ne produirait pas un bon travail.
la source
Pourriez-vous faire des revues de code ou de conception plus tôt dans le processus?
la source
Apprenez-lui à programmer le test d'abord. Associez-le avec lui. Vous écrirez les cas de test et il écrira le code pour passer les tests.
la source
Est-ce que l'implication de l'AQ assez tôt dans le développement des fonctionnalités pourrait lui fournir une liste de cas marginaux à traiter? Bien que certains puissent voir cela comme ne s'attendant pas à ce que le développeur couvre tout, cela peut être un moyen de contourner ce problème s'il a tendance à manquer ces cas limites qu'un testeur pourrait bien détecter initialement.
L'autre idée que j'aurais ici est de savoir comment il voit ce problème. Est-il vraiment ennuyé et se moque-t-il de ce modèle ou le considère-t-il simplement comme normal et pas quelque chose pour lui de s'inquiéter de la résolution? Certes, cela nécessite beaucoup de confiance et lui permet d'être ouvert sur son point de vue, mais je pense qu'il y a un certain degré d'empathie ici qui peut aider si vous pouvez voir les choses de son point de vue.
la source
Il existe un nombre infini de cas de bord, il est impossible de les couvrir tous. Et si quelqu'un le fait
#define TRUE FALSE
? Il ajoute des cas de bord, les vérifierez-vous aussi?De plus, je ne considérerais pas à toute épreuve toutes les fonctions d'une classe privée ou d'une fonction interne.
L'approche que je choisis pour le code qui doit être très solide et stable est la suivante:
De cette façon, vous obtenez des vidages d'application solides dans QA, et au moment où vous arrivez à une version, l'application est solide et sûre.
Il est mauvais de contourner les erreurs. Ok, vous pouvez enregistrer une fonction si le descripteur de fichier est nul et renvoie null, mais dans la plupart des cas, il y a une erreur de conception quelque part et le plantage de l'application est un meilleur moyen de vous forcer à trouver la cause. La plupart des cas marginaux masquent simplement l'erreur en masquant un problème, par exemple - le bouton a cessé de fonctionner. Crash vous indique que certaines hypothèses sur le produit sont erronées et que vous devez réviser la logique à l'origine du crash.
la source
S'il s'agit d'un cas de bord, doit-il même être pris en considération? Si les cas marginaux sont importants, les cas marginaux doivent être introduits dans les exigences / fonctionnalité / histoire utilisateur.
Si les caisses de bord ont été considérées comme faisant partie d'une pièce de travail et que des dispositifs doivent être mis en place, ils doivent faire partie de l'élément de travail et, par définition, l'élément de travail n'est pas complet tant que le mécanisme de gestion de l'étui de bord n'est pas en place.
Cela vous donne en tant que chef d'équipe quelque chose à vérifier une fois le travail terminé pendant la discussion post-travail et cela donne au développeur quelque chose à vérifier pendant qu'il termine le travail.
la source
Catching edge cases est la raison pour laquelle l'AQ existe. Les programmeurs ont la responsabilité de faire sortir le travail en temps opportun. Passer tout son temps à chercher des cas de pointe est très inefficace. Si vous avez un cycle itératif assez rapide, cela ne devrait poser aucun problème. Les cas de bord sont presque infinis en nombre. Si c'était un problème avec les cas "Core", je serais un peu inquiet. Tout comme les développeurs sont experts en développement, un testeur devrait être un expert en tests. Lorsqu'un testeur trouve un problème, il le renvoie au développement. Le développeur résout le problème. Problème résolu. Le temps nécessaire à un développeur pour rechercher chaque cas périphérique est beaucoup plus long que le cycle de test itératif devrait prendre. Notez également que lorsque je parle de tests, je ne parle pas de tests unitaires en boîte blanche, mais de tests strictement en boîte noire.
la source
C'est l'un des cas où je crois que le développement piloté par les tests vient à la rescousse car il aide à penser en termes de cas marginaux et de tout ce qui peut casser le code.
la source