Depuis le démarrage du développement de Gecko 1.9, les développeurs ont mis en place plusieurs frameworks de tests unitaires. Ceux-ci ont contribué largement à faire de Firefox 3 un navigateur solide, ou en tout cas un navigateur ayant le moins de régressions possible. Il y a un gros 4 types de tests :

  • Mochitest, qui est un framework pour des tests nécessitant d'être fait dans une page HTML (ou XUL) chargée par le navigateur.
  • reftest. Ce sont des tests sur le moteur de rendu. Le principe est le suivant : pour chaque test, on fourni deux pages HTML écrites différemment. Cependant elles sont censées avoir exactement le même aspect à l'affichage, l'une des pages servant de référence (sur le même principe que pour le test acid2 : une page pour tester, et une autre qui sert de référence[1]). Aussi ce système compare l'"image" des deux pages, et si il y a le moindre pixel différent, le test n'est pas valide.
  • xpcshell tests. Ce type de test est utilisé pour faire des tests de composants XPCOM principalement ou sur le langage javascript, et donc ne nécessitant pas d'être dans le contexte d'une page html chargée.
  • stand-alone, pour faire des tests qui ne sont pas possible de faire avec les autres systèmes, donc en général quand il faut tester des classes C++, qu'il faille créer un exécutable.
  • crashtests : ce sont des tests qui sont dédiés aux bugs qui causaient des crashs du navigateur. Ils vérifient donc que ces crashs ne se reproduisent plus :-)

Actuellement, pour Firefox 3, il y a plus de 46200 mochitests et 1840 reftests. Pour les autres types, il est difficile de les compter, mais il y en a aussi plusieurs centaines (voire milliers..).

Même si ça peut paraitre beaucoup, ces tests sont très loin de couvrir l'ensemble du code, et surtout de l'ensemble des centaines de composants XPCOM. La principale raison est que ça prendrait des mois à développer tout les tests unitaires, vu la complexité d'un moteur de rendu comme Gecko. Il aurait fallu commencer à construire ces tests dés le début du projet en 1998[2], mais à cette époque, le développement piloté par les tests unitaires n'était pas une pratique connu dans le monde de l'informatique.

Et puis Firefox ne fonctionne pas si mal :-) Il n'est donc pas forcément urgent de développer des tests sur des parties dont on sait qu'elles fonctionnent bien depuis des lustres. Aussi les tests ajoutés actuellement concernent-ils principalement les corrections de bugs, les nouveautés et les améliorations.

Notes

[1] Bien sûr, acid2 est inclus dans les reftests ;-)

[2] Depuis le début en fait, il y a eu des tests développés, mais ils étaient peu nombreux jusqu'au développement de Gecko 1.9, et ils étaient en majorité de type stand-alone