Si le bug a plus de 5 ans, est-ce une fonctionnalité? [fermé]

18

Permettez-moi d'ajouter des détails: je travaille dans un lieu institutionnel avec de nombreux codeurs, testeurs, analystes AQ, propriétaires de produits, etc. et voici quelque chose qui me dérange:

Nous avons été en mesure de vendre des logiciels merdiques (quoique assez fonctionnels) depuis plus d'une décennie. Il a de nombreuses fonctionnalités et le produit est compétitif, mais il existe de sérieux bugs, ainsi que des milliers de "coupures de papier" - de petits désagréments auxquels les clients doivent s'habituer.

Cela me fait mal de regarder certaines choses parce que je crois fermement que si les ordinateurs ne nous aident pas à nous faciliter la vie, nous ne devons pas les utiliser. J'ai confiance en mes collègues - ils sont intelligents, capables et peuvent améliorer les choses lorsque l'accent est mis sur cela.

Mais, il peut être difficile de déposer des bogues contre certaines anciennes fonctionnalités sans les voir fermées ou oubliées. "Cela a fonctionné comme ça pendant des éons" est une réponse typique. De plus, lorsque l'AQ régresse, ils ont tendance à rechercher tout ce qui est différent autant que tout ce qui ne semble pas correct. Ainsi, un correctif à un ancien problème peut être écrit comme un bug, car "il en était ainsi avant même mon époque".

Le jeune codeur en moi pense: réécris ce truc bizarre! En tant que personne qui a eu l'opportunité d'être proche des ventes, des clients, je veux donner un bénéfice de doute à cette approche.

Je suis également intéressé par votre opinion / expérience. Veuillez essayer de prendre en compte le risque, le rapport coût-bénéfice et d'autres facteurs non techniques.

Emploi
la source
2
Je pense que vous voulez dire "... travaillé comme ça pendant des éons."
Onion-Knight
Ne réécrivez jamais. À moins qu'il ne s'effondre sur lui-même (vous ne pouvez pas en ajouter plus sans casser les choses), vous introduisez plus de bugs que de corriger lorsque vous décidez de réécrire (ainsi que du temps)
Si vous ne perdez pas de clients maintenant, vous le ferez un jour. Quelqu'un finira par convaincre les gens que leur logiciel est plus facile que le vôtre. Maintenant, vous ne devriez probablement pas vous attaquer à cela. Il s'agit d'un changement de culture dans votre entreprise ... rien que vous puissiez ou devriez faire seul.
Brad

Réponses:

14

Je ressens ta douleur.

Mais corriger quelque chose simplement parce qu'il s'agit d'un bogue n'est pas une raison suffisante.

Vous devez vous assurer que votre correctif ne cassera aucun autre code (pas seulement le vôtre, mais le code de vos clients qui utilise votre code). Si vous lancez un correctif et que cela casse chaque système client, vous aurez des clients très mécontents.

Il existe de nombreux exemples célèbres où un nouveau code a été écrit pour remplacer un ancien système. Où ils devaient ajouter explicitement la fonctionnalité d'un bogue dans l'ancien système parce que les utilisateurs dépendaient de ce bogue (ne va pas nommer les noms mais je suis sûr que vous pouvez le rechercher sur Google).

Les tests de régression sont essentiellement un test de ce que vos clients attendent. Avant de supprimer un test de régression, assurez-vous qu'il ne fera de mal à personne (c'est presque impossible). Si vous pouvez corriger un bug ET que cela ne rompt pas les tests de régression, c'est un vrai correctif.

Martin York
la source
La partie des tests de régression est vraie en supposant que vous connaissez réellement le niveau approprié de couverture des tests.
Pemdas
d'autre part, si vous codez une interface graphique, il y a moins de dépendances; les utilisateurs évoluent plus facilement.
Matthieu M.
@Matthieu M .: Absolument. Il est plus facile de changer les habitudes (tant que vous investissez dans la fixation des habitudes) que de réparer (beaucoup) de systèmes automatisés (dont la plupart des gens auront oublié dans l'arrière-boutique).
Martin York
3

certaines choses à considérer lors de la décision de corriger un bug ... en aucun cas tout compris.

  • Est-ce critique (le système plante)? ... clairement ceux-ci sont corrigés
  • Les clients s'en plaignent-ils souvent? Cela pourrait être un bogue car quelque chose est cassé dans le code ou ce pourrait être un bogue d'exigences tel que la fonctionnalité n'est pas conviviale ou ils s'attendent à ce qu'elle fonctionne différemment.
  • Du point de vue commercial, est-il plus avantageux de corriger le bogue ou d'implémenter une nouvelle fonctionnalité?
  • Le bogue nécessite-t-il des modifications architecturales importantes ou se trouve-t-il dans une partie du système qui est fortement utilisée par d'autres sous-systèmes? Cela pourrait avoir un impact considérable sur le temps de test et compliquer la couverture de test nécessaire pour valider le bogue? S'il est vraiment ancien, il est parfois difficile de comprendre exactement ce qui sera affecté dans le système en modifiant la section buggy du code.
  • Vous perdez des clients potentiels à cause d'un système de buggy
Pemdas
la source
Perdre des clients potentiels - c'est difficile pour moi, et même pour les ventes / marketing, mais le taux de rétention a été élevé (bien que le coût de la commutation soit également élevé). On peut sans doute difficilement savoir si vous êtes mieux de faire A que d'avoir fait B, à moins que vous ne fassiez correctement les tests A / B.
Job
1
Je ne sais pas dans quelle mesure cela est applicable dans votre cas, mais nous avons souvent (une fois par trimestre) une réunion avec nos ingénieurs commerciaux pour discuter de problèmes dans le domaine qui les ont empêchés de faire une vente. Cela pourrait inclure des fonctionnalités manquantes, ou quelque chose fonctionne mal du point de vue de l'interaction avec l'utilisateur ... ect.
Pemdas
3

Définissez le bug. "La spécification dit triée par date, mais elle est triée par montant de transaction" n'est pas nécessairement un bug dans le code. Il pourrait s'agir d'un changement non documenté - parfois, quelque part, quelqu'un a demandé que l'ordre de tri soit modifié, mais les spécifications, les exigences, le manuel (même les boutons et les étiquettes sur l'interface utilisateur) n'ont pas été modifiés pour correspondre, et personne ne s'en soucie. Pour vous, que vous vous présentiez et que vous le remettiez à "par date", cela causera du chaos, et pour vous de mettre à jour l'interface utilisateur, les spécifications, le manuel, etc. . "

Certaines choses sont évidemment des bugs. Si vous cliquez sur ce bouton, il explose. Ou, si vous cliquez sur ce bouton le lundi, il explose. À moins que quelqu'un ne vous ait demandé d'investir du temps pour comprendre pourquoi, vous pourriez consacrer beaucoup d'efforts à enquêter. Et une fois que vous découvrirez pourquoi, il se pourrait bien que vous ne puissiez pas le changer, car cela ruinerait quelque chose de plus important pour les utilisateurs ou pour la direction.

Si vous voyez "sloppiness" - fuites de mémoire, code qui a clairement besoin de quelques conventions d'optimisation, d'indentation et de dénomination qui ne correspondent pas aux vôtres - il est super tentant de les corriger un jour quand vous n'avez rien d'autre à faire, ou à votre propre rythme . Cependant, ces «correctifs» gâchent l'historique du contrôle de code source pour peu ou pas d'avantages, des risques de catastrophe comme «nous ne compilons jamais ce module parce que le binaire que nous utilisons en production a été construit à partir de code qui a été perdu, et vous venez de l'écraser ", et peut sérieusement bouleverser les personnes dont vous" corrigez "les" erreurs ".

Je recommande un tête-à-tête avec votre patron. Expliquez ce qui vous dérange - est-ce un style de codage, des choses qui, vous en êtes sûr, doivent ennuyer les utilisateurs, des chiffres inexacts, des incohérences ou une catastrophe en attente de se produire? Demandez ensuite la direction et (c'est la clé), prenez-la.

Kate Gregory
la source
2

Si vous voulez corriger un bug qui a été ancien, vous devrez faire attention à ne casser aucune fonctionnalité existante. S'il y a des tests unitaires, c'est plus facile, mais étant donné l'âge implicite de l'entreprise et des logiciels, ils n'existent pas. Je recommanderais de parcourir le livre Refactoring de Martin Fowler car il explique comment refactoriser et corriger correctement les bogues tout en essayant de minimiser les effets secondaires. Je recommanderais également de vous assurer que la société est d'accord avec vous en passant par de vieux bogues pendant les heures normales. Ils ne vous laisseront peut-être le faire que si vous le faites en dehors des heures supplémentaires.

De plus, si un bogue est devenu une fonctionnalité, c'est-à-dire qu'il est réellement utilisé par les clients car il fournit quelque chose, assurez-vous de fournir un remplacement approprié quand ils veulent ce comportement (ou documentez-le simplement comme une fonctionnalité au lieu d'un bogue).

indyK1ng
la source