1 00:00:01,260 --> 00:00:03,390 Dans cette vidéo, je voudrais vous montrer que Pharo 2 00:00:03,557 --> 00:00:06,040 offre aussi la possibilité d'avoir un assistant qui va 3 00:00:06,207 --> 00:00:08,640 vérifier la qualité de votre code, et qu'on appelle soit 4 00:00:08,807 --> 00:00:11,450 le Quality Assistant, soit Code Critics qui va faire 5 00:00:11,617 --> 00:00:14,770 tourner automatiquement des règles de bonne conduite sur votre code. 6 00:00:15,710 --> 00:00:17,040 Regardons ça un petit peu de plus près. 7 00:00:17,300 --> 00:00:19,220 Vous avez vu qu'à chaque fois que je browse une classe, 8 00:00:19,387 --> 00:00:22,770 vous avez ce petit pop-up qui s'affiche. 9 00:00:22,937 --> 00:00:25,300 En fait, ce qui se passe c'est que de manière 10 00:00:25,467 --> 00:00:27,770 automatique, quand je suis en train de browser, on va 11 00:00:27,937 --> 00:00:32,010 prendre peut-être CubHelix pour voir, vous avez cette 12 00:00:32,177 --> 00:00:35,740 petite zone-là dans laquelle s'affiche des 13 00:00:37,020 --> 00:00:40,390 indications. Et quand je le fais sur le package aussi. 14 00:00:43,110 --> 00:00:46,350 Alors comme c'est un petit peu difficile de trouver un 15 00:00:46,517 --> 00:00:49,240 exemple probant, on va utiliser notre propre code et on 16 00:00:49,407 --> 00:00:52,090 va écrire du code pas beau dedans, comme ça vous allez le voir. 17 00:00:52,280 --> 00:00:57,080 Donc, si je vais dans Counter, imaginons par exemple que 18 00:00:57,247 --> 00:01:00,480 je laisse du code de debugage, 19 00:01:02,350 --> 00:01:04,730 là le système me dit automatiquement deux choses. 20 00:01:05,180 --> 00:01:09,310 Il me dit qu'il y a du code de debugage qui est resté 21 00:01:09,477 --> 00:01:12,200 dans la méthode. Qu'est-ce que je vais pouvoir faire? 22 00:01:12,940 --> 00:01:14,540 Je peux comprendre d'où vient cette règle. 23 00:01:14,707 --> 00:01:16,680 Donc si je clique dessus, il me dit utilise des 24 00:01:16,847 --> 00:01:19,800 breakpoints, ce n'est pas forcément intelligent dans du code de production. 25 00:01:21,280 --> 00:01:25,260 Il peut me dire, je vais résoudre automatiquement ce problème. 26 00:01:25,427 --> 00:01:26,340 Essayons, on va voir. 27 00:01:27,300 --> 00:01:28,530 Il me dit, il faut enlever ça. 28 00:01:28,720 --> 00:01:30,240 Oui, ok, très bien. 29 00:01:30,950 --> 00:01:32,710 Et du coup, je n'ai plus ce problème-là. 30 00:01:34,540 --> 00:01:36,700 Donc là, vous avez vu qu'on le fait alors que je suis en 31 00:01:36,867 --> 00:01:40,100 train de programmer. Finalement, le système va réagir. 32 00:01:40,460 --> 00:01:43,350 Maintenant, il y a une autre façon de le faire, ce que je 33 00:01:43,517 --> 00:01:48,250 peux faire c'est ouvrir le Critic browser sur mon package. 34 00:01:48,417 --> 00:01:49,460 Là, c'est un tout petit package. 35 00:01:50,960 --> 00:01:55,460 On va faire une erreur histoire qu'on puisse la voir. 36 00:01:55,627 --> 00:01:56,440 Donc là, si je fais "self halt" 37 00:02:01,020 --> 00:02:02,790 ou par exemple je vais faire une autre méthode. 38 00:02:03,460 --> 00:02:06,910 Je vais faire une méthode "increment3" et je vais 39 00:02:07,077 --> 00:02:08,790 invoquer une méthode qui n'existe pas. 40 00:02:08,957 --> 00:02:11,740 On va l'appeler "foofoo". 41 00:02:13,110 --> 00:02:16,010 Donc là, c'est rouge mais imaginons que je ne m'en soit 42 00:02:16,177 --> 00:02:18,900 pas rendu compte dans un état de fébrilité. 43 00:02:20,590 --> 00:02:24,360 Je vais utiliser le Critic browser 44 00:02:27,380 --> 00:02:31,250 sur mon code et donc là ce que me montre le critic 45 00:02:31,417 --> 00:02:32,770 browser c'est l'ensemble des règles. 46 00:02:33,720 --> 00:02:38,620 Donc, il y a quand même pas mal de règles avec des 47 00:02:38,787 --> 00:02:42,790 explications. Si vous avez ce code-là, alors à ce 48 00:02:42,957 --> 00:02:46,200 moment-là il vaut mieux l'utiliser comme ça, si vous avez 49 00:02:46,367 --> 00:02:47,450 une affectation à l'intérieur. 50 00:02:47,617 --> 00:02:49,620 Vous avez plusieurs sortes de règles. 51 00:02:50,040 --> 00:02:52,160 Vous avez des règles qui sont liées à l'optimisation, des 52 00:02:52,327 --> 00:02:54,300 règles qui peuvent potentiellement identifier des bugs fixes. 53 00:02:54,650 --> 00:02:56,600 Vous avez des règles qui identifient des vraies. 54 00:02:56,860 --> 00:02:59,200 Donc là, par exemple, si je viens ici, je vois le code. 55 00:02:59,367 --> 00:03:03,050 Donc, je peux browser ma définition comme ce qu'on a fait 56 00:03:03,217 --> 00:03:05,810 tout à l'heure, ou je peux le transformer. 57 00:03:08,180 --> 00:03:12,160 Et donc, le warning a disparu. 58 00:03:13,610 --> 00:03:15,400 Maintenant, ce qui est important de voir, c'est que 59 00:03:15,567 --> 00:03:17,920 toutes ces règles sont basées sur des heuristiques. 60 00:03:18,087 --> 00:03:19,700 Ça veut dire que, parfois, vous faites des choses qui ne 61 00:03:19,867 --> 00:03:22,840 sont pas très catholiques. Vous le savez et il faut 62 00:03:23,007 --> 00:03:24,200 laisser comme tel dans le système. 63 00:03:24,367 --> 00:03:28,840 Ce qu'on peut aussi faire, on peut dire, ça c'est un faux 64 00:03:29,007 --> 00:03:33,660 positif. Imaginons que j'ai un message 65 00:03:33,827 --> 00:03:36,660 "foofoo" et que je sais que je veux le garder, je vais 66 00:03:36,827 --> 00:03:40,240 pouvoir dire cette règle est fausse pour cette 67 00:03:41,850 --> 00:03:44,850 méthode. Je vais le marquer. 68 00:03:45,017 --> 00:03:46,510 Là c'est en gris qu'est-ce que ça veut dire? 69 00:03:46,677 --> 00:03:49,690 Ça veut dire que moi plus tard, je vais pouvoir regarder 70 00:03:49,857 --> 00:03:51,310 et me dire peut-être que cette règle était vraie et que 71 00:03:51,477 --> 00:03:53,490 ça faisait du sens de la 72 00:03:57,250 --> 00:03:57,883 revisiter. 73 00:03:58,410 --> 00:04:00,640 Ce qu'on peut faire, en fait on va pouvoir sauver les Critics. 74 00:04:00,807 --> 00:04:04,910 Ça veut dire qu'on va sauver les résultats des règles et 75 00:04:05,077 --> 00:04:06,670 aussi des faux positifs. 76 00:04:07,290 --> 00:04:08,850 Quand on a écrit que quelque chose était faux, on ne veut 77 00:04:09,017 --> 00:04:11,000 pas qu'à chaque fois qu'on fasse tourner des règles, le 78 00:04:11,167 --> 00:04:12,680 système nous le dise en permanence. 79 00:04:13,400 --> 00:04:18,230 Donc quand je sauve les critiques, il va les mettre dans un Manifest. 80 00:04:18,470 --> 00:04:21,690 On va voir ça, Là, j'ai mon Manifest qui va être 81 00:04:21,857 --> 00:04:23,920 versionné avec le système. 82 00:04:24,087 --> 00:04:26,410 Il ne faut pas aller voir comment c'est codé à l’intérieur, on s'en fiche. 83 00:04:26,577 --> 00:04:29,400 Le Manifest, ça permet de coder des choses mais peu importe. 84 00:04:29,700 --> 00:04:32,590 Ça, vous n'y touchez pas, c'est le code critic qui va l'utiliser 85 00:04:32,757 --> 00:04:34,120 pour les prochaines exécutions. 86 00:04:34,287 --> 00:04:36,260 Et donc, vous avez un Manifest par package. 87 00:04:36,700 --> 00:04:38,100 Quand vous allez versionner le code, vous allez 88 00:04:38,267 --> 00:04:39,920 versionner vos Manifests avec, et quand vous allez 89 00:04:40,087 --> 00:04:42,880 refaire tourner le code critique, automatiquement, il va 90 00:04:43,047 --> 00:04:44,890 prendre en compte les faux positifs et toutes les 91 00:04:45,057 --> 00:04:47,040 méta-remarques que vous avez mis dedans. 92 00:04:47,207 --> 00:04:49,510 Donc, ce qui est vraiment intéressant avec ces règles de 93 00:04:49,677 --> 00:04:53,390 qualité, c'est que Pharo va l'intégrer dans un processus de développement. 94 00:04:53,557 --> 00:04:56,010 Ce qu'on va faire c'est qu'on va faire en sorte qu'on a 95 00:04:56,177 --> 00:04:58,570 des serveurs Jenkins qui vont, à chaque fois que vous 96 00:04:58,737 --> 00:05:01,170 allez commiter votre projet, le charger et faire tourner 97 00:05:01,337 --> 00:05:04,000 automatiquement ces règles de qualité pour vérifier que 98 00:05:04,167 --> 00:05:05,920 votre programme suit bien ces règles.