Je travaille dans une entreprise où OOP est ... Eh bien, pas fobdden, mais du moins fronça les sourcils comme "trop complexes". Mes collègues écrivent beaucoup de plus de 100 fonctions de lignes et elles sont généralement toutes dans un «func.inc.php» ou «quelque chose.inc.php», s'ils utilisent des fonctions du tout, elles ne sont souvent pas depuis la pâte de copie plus rapide. P>
J'aimerais bien commencer à utiliser TDD au moins pour le code que j'écris mais comme je dois interfacer avec leur code, je ne vois pas comment commencer. p>
Ce n'est pas un code hérité car ils le développent activement et je ne veux pas modifier leur code car je ne veux pas provoquer des conflits. P>
Quelle approche suggéreriez-vous, sauf pour changer l'entreprise? P>
5 Réponses :
Utilisez TDD pour tous vos modules et rédiger des tests lorsque vous utilisez leurs modules pour quelque chose. Finalement, tout le monde remarquera que vous produisez un code de haute qualité beaucoup plus rapidement que quiconque et ils seront curieux de savoir pourquoi. Ce sera l'occasion idéale de les éduquer. P>
S'ils ne demandent jamais, au moins, vous avez fait votre vie un peu plus facile. P>
Je suggérerai avec le commençant par la prochaine chose que vous devez écrire et essayer d'obtenir d'abord des tests, puis écrivez le code de cette chose. Cela pourrait corriger un bogue, mettre en œuvre une fonctionnalité d'amélioration ou une nouvelle fonctionnalité, mais l'idée est d'essayer de trouver un moyen d'effectuer les tests avant le changement. P>
Alternativement, vous pouvez prendre une partie de votre code de votre collègue et envelopper des tests autour de certains et essayer de le refroidir, mais je ne sais pas à quel point cela va passer. P>
Vous voulez probablement tester votre code dans l'isolement de leur code. Cela changera comment vous concevez votre code - mais c'est probablement pourquoi vous voulez faire de toute façon TDD. P>
Créer des fonctions simulées pour les bibliothèques que vous souhaitez isoler de vous. P>
Pouvez-vous écrire d'abord des tests de l'unité sur votre propre code? Ne soyez pas dérangé par d'autres personnes; Assurez-vous que votre code est entièrement tidé et testé unitaire. P>
Pour simuler l'interaction avec d'autres bibliothèques, vous pouvez essayer les techniques éprouvées telles que des simulacres et des talons. p>
J'ai été dans cette position, les deux dans un TDD hors de la part. Ce que je fais normalement, c'est d'écrire des tests pour les interfaces des autres personnes, dans la mesure du possible. Je sais alors avant d'exécuter mon code s'ils faisaient l'une des nombreuses choses communes que les gens font: p>
N'importe lequel de ces échecs entraînerait généralement en moi de dire "hé, pouvez-vous vérifier (module), je pense que cela s'est cassé lors de la dernière révision" p>
Ceci est devenu laid une seule fois. Quelqu'un d'autre a vraiment bouleversé que j'écris des tests pour leur code et j'ai insisté pour que j'étais dehors pour leur travail. Je ne pouvais pas faire comprendre la personne que j'étais juste pour faciliter mon travail. P>
Ce n'est jamais une bonne idée de venir tout de suite et dire "Regardez, je passe plus de temps à débattre de votre code que de travailler seul", à moins que vous ne l'iez absolument à (c'est-à-dire que votre patron demande votre performance). La plupart du temps, si vous envoyez des gens les tests, ils sont heureux de les avoir. Si vous rencontrez déjà une résistance avec l'idée, essayez simplement de ne pas offenser personne ou d'avoir semblé condescendant. p>
Les fonctions / talons simulés sont corrects, mais ce qui reste le programme dans son ensemble est toujours susceptible de casser si de vrais tests ne sont pas courus. Au moins, lorsque cela se produit, vous pouvez rapidement exclure votre problème et (probablement) sur le problème. P>
Une bonne suggestion, mais mon problème est: Comment puis-je tester des fonctions qui font 6 tâches différentes en fonction des paramètres ou parfois (moins souvent récemment) des variables globales ou des définitions globales globales et qui consistent à 80% des requêtes MySQL?
@DBemerlin: Votre situation semble un peu plus ecky que je ne le pensais :) Tout ce que vous pouvez faire est de tester avec vos cas d'utilisation i>, ce qui le limite un peu. Vous pouvez définir les globaux vous-même si nécessaire, mais je tiens votre point avec eux, vous finissez toujours par vous demander pourquoi un test a échoué lorsqu'une classe est utilisée comme annoncée / dirigée et ne fait pas annoncer sa dépendance à une mondiale. Il n'y a vraiment pas de moyen «super» de mettre en œuvre des tests lorsque personne d'autre ne fait la même chose. Quant aux données de la requête, les fonctions ne rendent pas l'entrée attendue évidente?
+1 pour la diplomatie, en particulier "Je pense Il a cassé B> dans la dernière révision." Blâmer ne jamais aider le moral.
@Carl, Blaming aide rarement n'importe quoi i>. L'identification des problèmes est une autre question :)
IMO, si vous ne voulez pas modifier le code, c'est un code hérité.
Pouvez-vous moduler votre code assez bien à TDD et en quelque sorte en quelque sorte dans le reste du code? De plus, je traiterais "OOP est trop complexe" comme un très grand drapeau d'avertissement rouge. La programmation en général est une activité complexe et éponge une technique puissante bien connue et bien comprise (ce qui n'est pas ce complexe si cela est bien fait) n'est pas un bon signe.
Malheureusement, j'ai appris que "OOP est trop complexe" -Rule après avoir signé le contrat et déplacé dans cette ville, sinon j'aurais cherché un autre employeur. Je conviens que le POOP n'est pas très complexe s'il est fait correctement et je la fauforte parfois dans l'espoir que les autres ne se plaignent pas assez fort pour que mon supérieur l'entendisse.
Je dirais que c'est un endroit où vous n'allez jamais être heureux dans la culture d'entreprise et où vos compétences actuelles pourraient même se détériorer. Je commencerais à chercher si j'étais toi.
@Arne Sostack est totalement d'accord, si personne ne veut le changer, c'est l'héritage. J'aime Martin Fowlers Définition du code hérité "Code sans tests"
fuir dans la terreur à la première occasion
Si OOP est jugé trop complexe, écrit du code testable afin que vous puissiez passer des objets simulés pourraient aussi souffler leur esprit aussi?