Je sais que cela ressemble beaucoup à d'autres questions qui ont déjà été posées, mais c'est en fait légèrement différent. Il semble généralement être considéré que les programmeurs ne sont pas bons pour effectuer le rôle de tester une demande. Par exemple:
Joel sur le logiciel - cinq principales raisons pour lesquelles vous n'avez pas de testeurs (emphasis mine)
Ne pensez même pas à essayer de dire aux diplômés du Collège CS qu'ils peuvent venir travailler pour vous, mais "tout le monde doit faire une crique d'AQ pendant un moment avant de passer au code". J'ai vu beaucoup de cela. Les programmeurs ne font pas de bons testeurs , et vous perdrez un bon programmeur, qui est beaucoup plus difficile à remplacer.
Et dans cette question , l'une des réponses les plus populaires indique (encore une fois, mon emphase):
Les développeurs peuvent être des testeurs, mais ils ne devraient pas être des testeurs. Les développeurs ont tendance à éviter de manière involontaire/d'éviter d'utiliser l'application d'une manière qui pourrait la casser. C'est parce qu'ils l'ont écrit et le testent principalement dans la manière dont il Devrait être utilisé.
La question est donc les programmeurs sont-ils mauvais au test ? Quelles preuves ou arguments sont là pour soutenir cette conclusion? Les programmeurs sont-ils seulement mauvais pour tester leur propre code? Existe-t-il des preuves pour suggérer que les programmeurs sont en réalité bon Au test?
Qu'est-ce que je veux dire par "test?" Je fais pas Essais d'unité moyenne ou tout ce qui est considéré comme faisant partie de la méthodologie utilisée par l'équipe de logiciels pour écrire des logiciels. Je veux dire une sorte de méthode d'assurance qualité utilisée après la construction et le déploiement de ce que cette équipe logicielle appellerait l'environnement de test ".
La question semble poser spécifiquement sur Test du système , c'est ce que je parle tout au long de cette réponse.
Je pense qu'il y a une distinction importante à faire entre être une mauvaise personne de choisir d'effectuer des tests et d'être réellement mauvais au test.
Pourquoi les programmeurs sont mauvais au test:
Pourquoi les programmeurs sont bons au test:
Pourquoi les programmeurs sont des mauvais testeurs:
Je pense que les programmeurs sont mauvais à tester leur propre code.
Nous aimons croire que notre code fonctionne parfaitement en fonction des exigences et de la tester en tant que telle. À ma place, nous testons notre propre code, puis testez le code de chacun avant de relâcher le cycle de test réel et beaucoup plus de bugs ont été attrapés de cette manière que de tester notre propre code
Les programmeurs sont définitivement les bonnes personnes à tester certaines parties du système - dans des endroits où ils sont les seuls à pouvoir pouvoir le faire efficacement.
Un seul lieu Les programmeurs ont tendance à être très mauvais au test sont le tout "Utilisez l'UI comme un utilisateur normal" - ils ne sont pas des utilisateurs normaux et ne se comportent pas comme eux. Par exemple:
Ainsi, les utilisateurs normaux font beaucoup de choses que les programmeurs ne le font pas. Vous ne pouvez pas compter complètement sur l'équipe DEV pour UAT.
Au niveau technique (tests unitaires, tests d'intégration, tests de régression) Les programmeurs sont probablement les seules personnes qualifiées pour être des testeurs, car ce type de test sont automatisables et doivent donc être automatisés, ce qui nécessite une programmation.
Mais je ne pense pas que c'est ce dont vous parlez, et je suis sûr que ce n'est pas ce que Joel Spolsky signifie non plus - c'est la partie qui reste, les tests manuels réels: transformer un document d'exigences et une spécification fonctionnelle dans un script de test, puis exécutant minutieusement ce script contre le produit fini.
Être un bon testeur nécessite des qualités essentiellement orthogonales pour ceux qui font un bon programmeur. Il y a un peu de chevauchement - vous devez être capable de penser analytiquement, vous avez besoin d'une certaine affinité avec des ordinateurs en général - mais autres que cela, les compétences d'un testeur sont très différentes. Qu'en elle-même ne signifie pas que vous pouvez avoir les deux ensembles de compétences et, en fait, certaines personnes font probablement probablement. Cependant, un très bon programmeur nécessite une certaine paresse (le désir d'automatiser vos tâches), tandis qu'un très bon testeur a besoin de persistance (vérifier tous les trois mille champs de forme pour incohérences) et, par conséquent, même ces programmeurs qui Avoir ce qu'il faut pour être un testeur généralement abhencher l'idée.
Et puis il y a le biais sélectif: un programmeur qui est déjà impliqué dans un projet, même s'il est légèrement marginalement, a déjà quelques connaissances intérieures sur le codeBase et aura du mal à l'approcher avec un esprit vide, du point de vue de l'utilisateur final. . Il n'a même pas besoin d'être explicite, comme dans "Je sais que ce bouton fonctionne, alors je vais juste noter" passer ""; Cela peut être bien plus subtil, et ces effets subtils peuvent entraîner des cas de bord critiques manqués lors des tests.
De mon expérience, oui, les programmeurs sont de mauvais testeurs. Trop souvent, j'ai vu les autres et moi-même aller "hein, mais j'ai testé cela avant de vérifier!" lorsque confronté à un testeur reproduisant le bogue devant vous.
Pourquoi? Eh bien, je ne suis pas sûr de savoir pourquoi c'est que c'est peut-être parce que nous voulons voir les affaires de travailler. Ou nous voulons simplement continuer à tester cela ou de cette fonctionnalité déjà.
Quoi qu'il en soit, les tests ne sont pas une compétence que nous avons appris et que nous ne travaillons pas comme programmeur, car nous sommes bons pour la rupture des fonctionnalités. En outre, nous pourrions avoir aucune idée de la bonne planification des tests ou de toutes les autres choses que QA fait. Nous ne sommes plus qualifiés pour faire un emploi de testeur qu'un testeur est qualifié pour mettre en œuvre votre nouveau pipeline de rendu 3D.
Comme dans la question, les tests ne veulent pas dire quoi que ce soit automatisé mais essaie réellement en utilisant le programme.
Les programmeurs sont bien définissant des tests lorsqu'ils définissent les tests avant écrire le code. Avec la pratique, ils obtiennent encore mieux.
Cependant, lorsque vous définissez des tests pour le code, ils ont écrit, ils ne font pas très bien. Ils auront les mêmes taches aveugles dans les tests qu'ils avaient écrit le code.
L'utilisation de programmeurs pour faire des tests manuels est juste idiot. Les tests manuels sont assez idiotes sur son propre; Faire des programmeurs le faire est extrêmement stupide. C'est cher et éloigne les programmeurs compétents.
Un type de test que j'ai particulièrement vu DevLopers échoue à l'essai si l'exigence a été remplie. Quels devlopers pensent que quelque chose dans une exigence signifie et quels testeurs pensent que cela signifie que cela signifie souvent deux choses complètement différentes.
Je peux penser à un moment récemment où le DeveloePR a été invité à faire une exportation de Delta et que le DEV pensait que des dossiers n'avaient pas été envoyés une seule fois et que les testeurs ont pensé que cela signifie que les nouveaux RECR et les modifications. Ils devaient retourner au client pour savoir qui était correct. I Code y a examiné et j'ai fait la même hypothèse que le développement a eu sur l'exigence. Parce que logiquement si vous vouliez inclure des mises à jour, vous les auriez mentionné. Et je suis généralement bon pour repérer ces choses ambiguës parce que j'avais l'habitude d'être à la fin de l'utilisateur des choses.
Donc, d'autres devts effectuant les tests auraient tendance à faire de nombreuses mêmes hypothèses, car elles feraient également certaines hypothèses comme "bien ils auraient eu plus de détails s'ils veulent dire X Vice Y parce qu'il y a tellement de détails à répondre avant que je puisse répondre avant que je puisse faire C'est. Mais les exigences Les écrivains ne pensent pas comme ça. Donc, quelqu'un qui pense plus à des exigences aux écrivains doit tester les hypothèses de développeur et une personne qui n'est pas un développeur est la meilleure personne à voir une question.
Quel type de test voulez-vous dire? Si vous voulez dire des tests exhaustifs complets, je pouvais voir certaines raisons pour dire oui si je soupçonnais que la plupart des gens seraient pauvres dans cette catégorie si l'on considère toutes les combinaisons possibles des intrants comme une exigence de ces tests.
Je peux reconnaître que le développeur qui conçoit le logiciel peut avoir une vision du tunnel en ce qui concerne ce que le code est de gérer et d'ignorer certains cas de frontières possibles qui n'auraient peut-être pas été envisagés. Par exemple, si je construis un formulaire Web qui prend un numéro, N, puis imprime de 1 à N à l'écran, je me manquerai des cas spéciaux comme si rien n'est entré ou quelque chose qui n'est pas un nombre naturel comme E ou PI . Qu'est-ce que le programme est censé faire dans ces cas peut être discutable.
Développement axé sur les tests serait un exemple de méthodologie de développement qui met en train de tester une lumière différente pouvant donner une autre vue ici.