Le titre dit tout. Mon entreprise réutilise un projet de micrologiciel hérité pour un dispositif de microcontrôleur, écrit complètement en clair C.
Il y a des parties qui sont manifestement erronées et doivent être modifiées, et venant d'un arrière-plan C # / TDD, je n'aime pas l'idée de refactoriser au hasard des trucs sans tests pour nous assurer que la fonctionnalité reste inchangée. De plus, j'ai vu que des bogues difficiles à trouver ont été introduits à de nombreuses reprises par le biais de moindres changements (ce qui, je pense, serait corrigé si des tests de régression étaient utilisés). Beaucoup de précautions doivent être prises pour éviter ces erreurs: il est difficile de suivre un tas de globaux autour du code.
Résumer:
- Comment ajouter des tests unitaires au code étroitement couplé existant avant de le refactoriser?
- Quels outils recommandez-vous? (moins important, mais toujours agréable à savoir)
Je ne suis pas directement impliqué dans l'écriture de ce code (ma responsabilité est une application qui interagira avec l'appareil de diverses manières), mais ce serait mauvais si de bons principes de programmation étaient laissés pour compte s'il y avait une chance qu'ils puissent être utilisés.
Pour les techniques, le livre de Michael Feathers dans la réponse de Péter Török sera probablement assez complet. Si vous ne voulez pas aller au livre, je suggère un processus en trois étapes:
Répétez ce processus plusieurs fois et vous devriez constater que la qualité de la base de code héritée a considérablement augmenté.
En ce qui concerne les outils, notez que C ++ peut appeler en C, donc tout framework de test unitaire C ++ peut être utilisé pour tester le code C. Par exemple, nous utilisons CPPUnit pour tester à l'unité un tas de code C dans notre projet.
la source