Question:
Comment éviter les erreurs critiques dans un nouvel environnement de code?
Im-Harrison
2018-07-19 19:50:22 UTC
view on stackexchange narkive permalink

Je suis développeur depuis plus de 3 ans maintenant et j'ai acquis une confiance en mes capacités de programmation au sein de mon équipe. Récemment, mon équipe a été employée dans une société appartenant à nos capital-risqueurs dans laquelle nous avons intégré et sur laquelle nous travaillons maintenant.

Je n'ai aucune expérience de Java et bien que je sache coder en C #, etc. familier avec les API, j'ai récemment créé un énorme problème lors de l'enregistrement de mon code dans notre référentiel source.

J'ai été plongé dans le deep-end et on m'a demandé d'apporter des modifications à une API existante (mon équipe est consciente de mon exposition et de mes capacités). Après avoir compris les changements et vérifié l'environnement de la solution pour les références à l'API elle-même, j'ai fait les changements, l'ai testé avec des tests unitaires et Postman pour la réponse, etc.

Tout semblait bien. Cependant, ma connaissance de la solution dans son ensemble et d'autres choses n'est pas aussi bonne que les autres développeurs back-end sur ce projet; Je suis le seul développeur full-stack, faisant à la fois le front et le back-end. Le problème était que l'API est référencée dans un fichier de flux de travail BPMN qui n'apparaissait pas lorsque j'ai recherché les références ou le nom de l'API sous forme de texte dans l'EDI.

Cela a causé un problème de 4 jours entre 2 -4 développeurs back-end recherchant pourquoi la compilation échouait à un moment donné pendant la journée de travail. Bien que je reconnaisse mon erreur et accepte pleinement la responsabilité de créer un si gros problème, je me sens maintenant très déçu de moi-même et je doute plus que je doive continuer à développer le back-end avec si peu de connaissances de Java et de la structure de la solution. . Je ne peux pas non plus m'empêcher de me sentir coupable d'avoir perdu autant de temps et d'argent sur ce qui était une erreur et a mis du temps à trouver.

Bien que j'aimerais pouvoir passer du temps et m'asseoir avec certains développeurs back-end pour le comprendre et le comprendre pleinement, ils n'ont tout simplement pas le temps pour le moment. Que puis-je faire d'autre pour m'assurer de ne pas commettre d'erreurs, ou encore moins susceptibles de faire des erreurs, encore moins coûteuses, à l'avenir?

Je devrais ajouter que mon code de modification a également été examiné par l'un des développeurs back-end, à qui je suis sûr que j'ai demandé si l'API était référencée ailleurs. Comme ma recherche et ma vérification n'ont rien montré dans l'EDI car il ne vérifie pas les fichiers BPMN, j'ai répondu non.

Que dois-je faire de plus et que faire d'autre pour minimiser le risque de faire des erreurs similaires dans le futur?

Notes supplémentaires en réponse aux commentaires et réponses:

Revues de code: je serai toujours assis avec le développeur et je parlerai et comprendrai le code avec lui, expliquant comme nous Allez.

Nous faisons des mêlées quotidiennes. J'en ai parlé lorsque j'y travaillais mais aucune inquiétude n'a été soulevée, même si je suis sûr que nous en discuterons dans la mêlée de demain ou lors de la prochaine rétrospective.

Je devrais préciser que le problème était l'échec de la compilation et je comprends que je devrais probablement insérer toutes les modifications dans ma branche et construire et faire un test final avant de valider, ce que je n'ai pas fait.

Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (https://chat.stackexchange.com/rooms/80421/discussion-on-question-by-im-harrison-how-can-i-avoid-critical-mistakes-in-un nouveau).
Des choses comme celle-ci devraient être documentées avec la source exactement dans ce but.Ils ne le sont pas toujours.Avez-vous lu la documentation que vous pouviez _ avec raison_ vous attendre?
Cela ressemble à une odeur de code, java comme C # est un langage fortement typé.Si les mécanismes utilisés pour la vérification de type ne sont pas déclenchés dans les tests, vous pouvez avoir un problème plus profond où les interfaces ne sont pas utilisées correctement.
C'est précisément pourquoi les revues de code existent.Je suppose que vous utilisez le contrôle de source;pourquoi était-il si difficile pour les développeurs de passer en revue la dernière douzaine d'engagements pour repérer le problème?
C'est également pourquoi il devrait y avoir une solide suite de tests, un serveur CI et un contrôle qualité dans un environnement de préparation avant de publier le code.Il semble que votre entreprise ne dispose pas de ces composants, ce qui permet de publier des bogues qui pourraient facilement être détectés.
Je vous suggère de ne pas avoir de contact avec le développeur qui effectue votre révision de code.Ils devraient obtenir les spécifications qui vous ont été fournies et votre code du dépôt.S'ils ont des questions sur quelque chose, laissez-les demander à un autre développeur, pas à vous.Lorsque vous l'expliquez, vous pouvez leur faire manquer une erreur qu'ils auraient détectée.
@J.ChrisCompton Je suis d'accord avec cela.Cependant, dans mon entreprise, à l'heure actuelle, nous n'avons pas de spécifications de bout en bout et c'est peut-être une chose personnelle, mais je trouve souvent que les gens passent plus en revue un code si vous n'êtes pas là pour les inciter à regarder certains domaines au fur et à mesure..Peut-être que ce n'est pas correct et je suis d'accord qu'ils devraient m'en parler davantage.
"un problème de 4 jours entre 2 et 4 développeurs back-end" - Donc, 8 à 16 jours de développeur back-end ont été nécessaires pour localiser l'erreur?Ensuite, le problème n'est pas aussi «trivial à voir et à éviter» que certains le prétendent.S'ils connaissent «leur» truc, ils peuvent localiser l'erreur rapidement.Si cela prend * eux * quelques jours, vous n'êtes pas responsable de ne pas savoir à l'avance ce qui était lié à quoi dans le nouvel environnement.* À moins que * le problème ne soit clairement documenté.Mais alors, pourquoi leur faudrait-il des jours pour le réparer?
@Im-Harrison Oui, je comprends que vous avez probablement un contrôle limité.(1) Le problème de "survol" peut être moindre si le codeur et le réviseur de code sont appelés à chaque réunion lorsque quelque chose ne va pas.Personne ne devrait savoir lequel d'entre vous l'a codé (bien qu'il le fasse généralement).(2) Même si vous n'avez pas de spécifications de bout en bout, vous devriez avoir quelque chose.Si c'est verbal, écrivez un e-mail et envoyez-le à la personne qui vous donne les spécifications - alors vous avez quelque chose pour le réviseur de code (et cela peut également vous épargner de l'angoisse :)(par politique ou règle non écrite).
Huit réponses:
user34587
2018-07-19 20:00:27 UTC
view on stackexchange narkive permalink

Avec plusieurs développeurs qui soumettent des modifications à la même base de code (et ne sont pas toujours à jour les uns avec les autres), ces choses se produiront. Je suis moi-même développeur; il n'y a pas de quoi se raccrocher, cela nous arrivera à tous au moins une fois. Il y a cependant deux choses que vous pouvez faire pour réduire le risque que cela se reproduise.

D'après le contexte, il semble que vous ayez tout testé localement et que cela a bien fonctionné. Ce n'est que plus tard que quelque chose a mal tourné. Cela suggère que votre propre base de code était légèrement obsolète et / ou que quelqu'un d'autre avait du code obsolète lorsqu'il a commis ses propres modifications. La meilleure chose que vous puissiez faire, juste avant de valider votre code, est d'extraire toutes les modifications récentes de votre référentiel (ou peu importe comment vous l'appelez) afin que vous puissiez être sûr que vos modifications fonctionnent avec le code le plus à jour. Si tous vos tests réussissent, alors vous pouvez vous engager en toute conscience.

Je suggère également d'être un peu plus vocal avec vos collègues. Si vous apportez des modifications à un système critique, dites-leur-leur. Même s'il s'agit d'une simple requête comme "Je suis sur le point de changer cet élément important, avez-vous le temps de revoir le code?" . De cette façon, votre équipe ne passera pas des jours à trouver le problème, s'il y en a un, et vous pouvez être tranquille en sachant que vous ET vos collègues êtes confiants avec les changements. Certaines équipes de développement font des stand-ups quotidiens où elles expriment ce sur quoi elles travaillent; cela aide l'équipe à être plus consciente de ce sur quoi vous travaillez et s'il y a un risque que vos modifications entrent en conflit avec celles de quelqu'un d'autre.

Vous apprendrez en faisant. Si vous maîtrisez bien les langages comme C #, vous pourriez utiliser Java plus rapidement que vous ne le pensez!

Cela a été causé par une référence * de type chaîne * à l'API dans ce "fichier de flux de travail BPMN", donc rien n'était obsolète et l'extraction des modifications récentes n'aurait pas aidé.
@DavidConrad vous êtes à 100% là, mais il s'agit moins du passé et de la raison pour laquelle cela s'est produit car je suis conscient et je comprends comment cela est arrivé à ce point.Cette réponse suggère ce que je pense a le meilleur conseil dans ce cas - utiliser davantage votre voix et impliquer les autres.Si j'avais été plus fort et exprimé davantage ce que je faisais à d'autres développeurs, il serait plus probable que quelqu'un aurait pu signaler qu'il était utilisé dans les flux de travail BPMN.
Ah, le vieux, "fonctionne sur ma machine".: P
user44108
2018-07-19 19:55:23 UTC
view on stackexchange narkive permalink

Cette situation se produit de temps en temps - vous faites quelque chose qui a des effets d'entraînement imprévus sur quelque chose d'autre dont vous ne saviez pas auparavant.

Le fait que vous n'avez pas été renvoyé immédiatement ou mettre sur un PIP signifie que l'entreprise reconnaît que des erreurs se produisent, qu'elles sont résolues et que la vie évolue en conséquence.

Que pouvez-vous y faire? Renseignez-vous sur cette conséquence et voyez s'il y a autre chose que vous auriez dû prendre en compte ou toute autre équipe à laquelle vous auriez dû poser des questions sur les effets d'entraînement de la modification d'une API.

Tout cela fait partie de la construction expérience et cela ne devrait pas vous décourager d'aller de l'avant.

dbeer
2018-07-19 21:17:52 UTC
view on stackexchange narkive permalink

Le moyen d'éviter ce problème vous offre également la possibilité de contribuer de manière significative à votre nouvelle entreprise: la racine de ce problème est un test inadéquat, pas vous (sauf si vous avez fait preuve de négligence d'une manière qui n'apparaît pas dans votre message ).

Dans tous les environnements de développement, il devrait être possible de déterminer si le changement que vous avez effectué va provoquer un échec majeur avant l'enregistrement et de déterminer si le le code va casser la construction. S'il est vraiment embarrassant d'être celui qui trouve un tout aussi béant dans le processus de l'entreprise, vous pouvez maintenant être un leader en essayant d'établir un tel processus dans votre nouvelle entreprise.

Vous pouvez proposer que le l'équipe commence à rédiger des tests unitaires et à configurer un environnement d'intégration continue qui recompilerait le projet et exécuterait les tests unitaires à chaque fois que le code temporel est archivé, et où les tests peuvent être exécutés individuellement avant l'enregistrement. Les tests unitaires prendront engagement de l'équipe, mais un environnement CI de base peut être mis en place assez rapidement à partir de projets open source tant que vous pouvez y dédier une VM ou un serveur.

Modifier: les revues de code sont une autre bonne programmation pratique qui peut minimiser ce genre d'erreurs et qui est également assez facile à mettre en œuvre.

TL; DR profite de cette opportunité embarrassante pour moderniser les processus de développement de votre entreprise. Vous en sortirez avec une odeur de roses.

Le PO peut également profiter de cette opportunité pour introduire l'évaluation par les pairs en tant que POS, au lieu d'avoir à la demander à chaque fois.La révision par les pairs peut vous aider à apprendre le code, au fur et à mesure que vous lisez ce que font les autres, ainsi qu'en obtenant de bons commentaires d'autres développeurs sur votre propre code.Je dois dire que ** Pas ** tous les échecs majeurs peuvent être détectés avant l'enregistrement. Les serveurs peuvent avoir des paramètres différents qui peuvent casser une version qui fonctionne localement.Le simple fait de configurer NuGet différemment peut causer ce genre de problème.
paulj
2018-07-19 20:22:18 UTC
view on stackexchange narkive permalink

Le problème se pose que l'API est référencée dans un fichier de flux de travail BPMN qui ne s'affiche pas lorsque j'ai recherché les références ou le nom de l'API sous forme de texte dans l'EDI.

Qu'est-ce que la rétrospective des équipes sur cette surface d'incident? Quelles procédures départementales pourraient être mises en place pour que cela ne se répète pas? Qu'est-ce que l'équipe estime nécessaire lors de l'embarquement de nouveaux développeurs? Et quelles nouvelles procédures d'intégration faut-il développer?

P.S. Être proactif dans ce qui précède est un excellent moyen d'apprendre et de diriger.

Puis-je demander pourquoi les gens suggèrent toujours des améliorations au niveau de la procédure ou de la gestion?Il est très peu probable qu'un tout nouveau type vienne dire: * "Change tout ça pour que mes affaires fonctionnent!" * Quand tout le monde / chose a fonctionné "bien" jusqu'ici?Casser quelque chose, puis ne pas savoir pourquoi il a cassé, prendre près d'une semaine d'heures de travail, puis à la fin dire que leur processus pue et qu'il a besoin d'être amélioré n'est pas une excellente façon de commencer votre carrière là-bas.
Parce que si la question est "Quel type de test automatisé pouvons-nous ajouter au processus de publication pour identifier ce type de problème la prochaine fois que des modifications sont apportées", vous devriez vous retrouver avec un meilleur processus qui ne nécessite pas que quelqu'un vérifie manuellementchaque changement.
Les anciens combattants ignorent souvent les problèmes de procédure et de gestion lorsqu'ils s'habituent à les contourner.Ils oublient que les choses ne doivent pas être comme ça, donc pour eux les choses fonctionnent "bien".Il faut une nouvelle paire d'yeux pour voir les lacunes. Cela dit, je suis d'accord que le nouveau gars ne devrait pas faire de demandes, mais c'est une grande différence entre dire * "Changer tout ça pour que mes affaires fonctionnent!" * Et * "Comment se fait-il que nous fassions les choses de cette façon au lieu de cette façon?"*
@Dan Votre scénario peut être refondu: "... alors à la fin, dites que leur processus pue et doit être amélioré" afin d'éviter des problèmes comme celui-ci à l'avenir.En tant que personne qui a fait exactement cela, un peu de détermination obstinée a entraîné des changements de processus qui ont rendu la vie de tout le monde plus facile.J'ai influencé mes collègues avec environ 3 mois dans l'entreprise en tant que développeur junior en * faisant * et ensuite * en montrant les résultats *.S'ils ne font pas de rétrospectives / post-mortems, c'est un endroit facile pour adopter un changement positif qui profitera ** certainement ** à l'équipe.
Si un problème survient, c'est soit par incompétence, soit par erreur de processus - il est clair que l'OP n'est pas incompétent mais a commis une erreur qui peut être évitée grâce à un mécanisme.L'entreprise n'aimerait peut-être pas l'entendre d'un «étranger», mais c'est un problème que des processus appropriés élimineraient.Idéalement, la direction de l'équipe devrait être en mesure d'identifier cela et d'appliquer de nouveaux processus - si le débutant lance ce processus de réflexion, ses préoccupations sont plus importantes.Je pense que le conseil «proactif» est valable, bien que je reconnaisse que si le PO est l’action-er quelque chose de plus grand ne va pas.
@Dan Parce que leur processus est clairement interrompu.Il n'y a aucun test que le fichier de flux de travail BPMN correspond à l'API, et il devrait certainement y en avoir.
@Dan pour éviter que cela ne se reproduise la prochaine fois qu'un nouveau développeur est ajouté à l'équipe.
Dan Is Fiddling By Firelight
2018-07-20 01:21:39 UTC
view on stackexchange narkive permalink

Où étaient stockés les fichiers BPMN qu'ils n'étaient pas visibles lorsque vous recherchiez d'autres consommateurs d'API?

Le problème semble être que vous ne saviez pas / que vous n'aviez pas accès à tout des consommateurs d'API.

S'ils ne font pas partie de votre ensemble de travail de développement standard et pour une raison quelconque ne peuvent pas y être ajoutés, toutes les API qui sont consommées par alors doivent être documentées comme faisant ainsi dans les commentaires d'en-tête d'appel de méthode équivalents. Selon le degré de formalité de votre processus de révision, vérifier explicitement qu'ils ne sont pas affectés peut être un changement de processus valide.

Le problème de ne pas savoir tout ce qui se trouve en dehors de la base de code sur laquelle vous travaillez doit être vérifié les besoins soulevés lors de votre prochain stand-up / rétrospective par vous si vos collègues ne le font pas. Quelque chose de ce genre aurait dû être traité dans le cadre de votre intégration au projet.

Je pense que l'un des problèmes est que les IDE pour des langages comme java (je suppose que C # est similaire mais je n'ai aucune expérience personnelle) peuvent vous endormir dans un faux sentiment de sécurité.Ils ont des fonctionnalités intégrées pour trouver les utilisateurs de classes, méthodes, champs, etc. qui évitent les faux positifs trouvés dans une simple recherche de texte, mais ces méthodes ne sont fiables que si tout le code est inclus dans le projet IDE ET que les appels sont effectués directementdu code java plutôt que par réflexion.
teego1967
2018-07-20 04:06:14 UTC
view on stackexchange narkive permalink

Indépendamment de ce que vous ou quiconque fait pour minimiser les erreurs, les erreurs vont se produire.

Il existe, bien sûr, des bonnes pratiques techniques «cela aidera et oui, il y a toutes les platitudes sur l'apprentissage de ses erreurs. Mais tu as tout ça, il semble. Pourtant, vous vous sentez encore assez mal à propos de l'incident que vous avez pris le temps de l'écrire sur le lieu de travail.stackexchange.com?

Je pense qu'il y a quelque chose de tangible que vous pouvez faire qui vous aidera, vous et les autres, à vous sentir mieux dans tout cela.

La meilleure chose à faire est de prendre note de gentillesse et de générosité qui vous a été témoignée et exprimez votre gratitude pour cela .

Au lieu de vous excuser encore plus abondamment et de faire des promesses de "plus jamais" bientôt oubliées, prenez le temps de REMERCIER personnellement les personnes qui ont aidé à résoudre le problème et celles que vous avez gênées. Si c'est approprié, apportez une boîte de beignets (par exemple) au bureau et complétez vos collègues.

Et puis, la prochaine fois que quelque chose se passe et que quelqu'un d'autre fait une erreur, soyez gentil avec eux, aidez-les et rendez-leur la gentillesse qui vous a été donnée . C'est ça. Vous serez une meilleure équipe grâce à des choses comme ça.

AnoE
2018-07-20 13:22:16 UTC
view on stackexchange narkive permalink

Vous devez changer votre état d'esprit.

Vous n'avez pas commis "d'erreur critique". Vous avez travaillé au mieux de vos capacités; vous étiez ouvert à travailler dans un environnement inconnu; vous étiez transparent sur vos connaissances et tout le reste, avant et après; vous avez travaillé avec les autres gars pour résoudre le problème, vous n'avez probablement pas fait de colère dans le bureau. Après la débâcle, vous venez ici et essayez de vous améliorer encore plus.

En bref: je me lècherais les doigts pour avoir plus d'employés comme vous.

Pour répondre à votre question:

  1. Vous ne pouvez pas personnellement éviter de telles choses, en général. L'erreur technique était complètement hors de votre portée. Si vous souhaitez être sûr à 100%, vous vous arrêterez. Vous ne pouvez pas vérifier les parties d'un système dont vous ne savez rien.
  2. Les systèmes (y compris les ordinateurs et les humains) ne peuvent pas non plus être construits pour éviter de telles choses, dès qu'elles deviennent suffisamment complexes.
  3. Une façon d'aborder ce problème est l'approche DevOps / Agile consistant à inviter l'échec et l'échec brutal et rapide. C'est ce que tout le CI et spécialement les CD. Vous déployez si fréquemment et rapidement que vous échouerez très souvent; et chaque fois que vous corrigez la raison particulière avec la plus grande priorité (en utilisant les techniques habituelles - tests automatisés et manuels, annulation indolore de petits commits, déploiements bleu-vert avec basculement en arrière instantané, etc.). Cela conduit logiquement à rendre l'ensemble du processus plus robuste très rapidement. Idéalement, vous faites cela à partir du jour 0. Facile? Non. Peut être amélioré pièce par pièce? Oui.
user3067860
2018-07-20 00:52:57 UTC
view on stackexchange narkive permalink

Faites vos commits aussi petits que possible, et si vous pouvez construire à partir du serveur de build après chaque push. (S'il ne se construit pas souvent, vous voudrez peut-être aussi construire avant votre push!)

Cela ne vous aidera pas à ne pas faire d'erreurs, mais cela les rendra beaucoup moins critiques. Si vous savez quel commit / groupe de commits a causé la rupture de la compilation, il est trivial de le restaurer pendant que vous travaillez sur le problème, et si les commits sont aussi petits que possible, il est plus facile de localiser la source du problème.

Si vous utilisez git, il existe même une commande pour vous aider: git-bisect, qui vous permettra de faire une recherche binaire dans un groupe de commits pour trouver celui qui cause le problème.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...