Je ne connais pas coveralls spécifiquement mais je peux éclairer ta lanterne quant aux outils d'intégration continue.
L'idée est d'automatiser un maximum de procédures, pas forcément sur chaque commit, mais au moins à chaque build de ton projet.
On va raisonner sur un projet perso (et sans pré-prod) pour simplifier.
Tu modifies ton application / site web / ou autre, en local sur ta machine. Tu es satisfait de ton résultat, tu vas balancer les modifications en prod, i.e. balancer ça sur internet ou créer l'exécutable/le fichier distribuable (jar) de ton programme, etc.
L'outil d'intégration continue peut se charger dans ce cas de plusieurs choses :
-
récupérer tes sources modifiées (sur un repository, en lisant le système de fichier local, …)
-
construire ton application (phase de build ). Par exemple minifier les fichiers JS ou CSS, ou nettoyer des sources dans d'autres cas. Construire un fichier WAR ou EAR dans le cas d'un projet JEE
-
tester ton application (cf. plus bas) afin de vérifier que les dernières modifications effectuées n'ont pas affecté le comportement de l'application tel que tu l'as décrit dans les tests d'intégration
-
si les tests n'échouent pas : déployer l'application. Par exemple éteindre le serveur d'application, envoyer le résultat du build , puis redémarrer le serveur d'application
En ce qui concerne la phase de tests plus spécifiquement, l'idée est de décrire le comportement attendu fonctionnellement. Tu dois connaître les tests unitaires. Ceux-là ont du être lancés auparavant (même si ça ne fait pas de mal d'en remettre une couche) par le développeur, pour s'assurer qu'il n'a rien cassé dans les classes qu'il a modifiées. Par contre, les tests d'intégration s'occupent de vérifier que, sur le plan des fonctionnalités offertes par l'application (rédaction d'un message, +1/-1, création d'un tutoriel, ajout d'un chapitre, …) rien n'a été cassé.
En conjonction de ces tests, on utilise parfois un outil de couverture de code qui, en gros, te dit : "lors de l'exécution des tests d'intégration, on est passé dans 87% du code, donc il se pourrait bien que y'ait des cas qui existe dans le code (des else, des switch) dans lequel les tests ne passent pas. Si y'a un bug là-dedans, on ne le teste pas : attention".
Oui, ça vient en quelque sorte en conjonction de l'approche TDD, même si c'est pas tout à fait cela.
En gros le TDD c'est l'idée que tu vas décrire le comportement attendu de ton code avant même (ou en même temps) que tu écris le code. Et tu le décris en codant des tests du style "quand un tutoriel est publié, il doit être renvoyé au contrôleur qui s'occupe d'afficher la liste des tutoriels".