﻿1
00:00:01,260 --> 00:00:03,390
En este vídeo, me gustaría
mostrarle que Pharo

2
00:00:03,557 --> 00:00:06,040
también dispone de un asistente

3
00:00:06,207 --> 00:00:08,640
que comprueba la calidad de su 
código, al que llamamos

4
00:00:08,807 --> 00:00:11,450
Quality Assistant o bien
Code Critics. Comprueba automáticamente

5
00:00:11,617 --> 00:00:14,770
varias reglas de buenas
prácticas en su código.

6
00:00:15,710 --> 00:00:17,040
Echemos un vistazo
de cerca.

7
00:00:17,300 --> 00:00:19,220
Ha visto que cada vez que
navego por una clase,

8
00:00:19,387 --> 00:00:22,770
aparece una ventana emergente que
se abre.

9
00:00:22,937 --> 00:00:25,300
De hecho, lo que sucede es que
automáticamente,

10
00:00:25,467 --> 00:00:27,770
mientras estoy navegando,

11
00:00:27,937 --> 00:00:32,010
eligiéremos CubHelix
para verlo, tiene

12
00:00:32,177 --> 00:00:35,740
esta pequeña área aquí
donde se muestran las

13
00:00:37,020 --> 00:00:40,390
indicaciones. Y cuando lo realizo
en el paquete también.

14
00:00:43,110 --> 00:00:46,350
Como es un poco difícil
encontrar un

15
00:00:46,517 --> 00:00:49,240
ejemplo convincente, utilizaremos
nuestro propio código y

16
00:00:49,407 --> 00:00:52,090
escribiremos código feo en él,
de esta manera podrá verlo.

17
00:00:52,280 --> 00:00:57,080
Si voy en Counter, imaginemos
por ejemplo que

18
00:00:57,247 --> 00:01:00,480
dejo el código de depuración,

19
00:01:02,350 --> 00:01:04,730
aquí el sistema me dice
automáticamente dos cosas.

20
00:01:05,180 --> 00:01:09,310
Me dice que hay depuración
de código que ha quedado

21
00:01:09,477 --> 00:01:12,200
en el método.
¿Que puedo hacer?

22
00:01:12,940 --> 00:01:14,540
Puedo comprender de donde
viene esta regla.

23
00:01:14,707 --> 00:01:16,680
Entonces si hago clic en él,
me dice que utilizar breakpoints

24
00:01:16,847 --> 00:01:19,800
(puntos de interrupción) no es muy
inteligente en el código de producción.

25
00:01:21,280 --> 00:01:25,260
Puede decirme, voy a resolver
automáticamente este problema.

26
00:01:25,427 --> 00:01:26,340
Probemos, y veamos.

27
00:01:27,300 --> 00:01:28,530
Me dice, es necesario suprimir esto.

28
00:01:28,720 --> 00:01:30,240
Ok, muy bien.

29
00:01:30,950 --> 00:01:32,710
Y de golpe, ya no
tiene mas este problema.

30
00:01:34,540 --> 00:01:36,700
Ha visto que lo hacemos
mientras programamos.

31
00:01:36,867 --> 00:01:40,100
Finalmente, el sistema reaccionará.

32
00:01:40,460 --> 00:01:43,350
Ahora, hay otra forma de hacerlo,
puedo

33
00:01:43,517 --> 00:01:48,250
abrir el Critic browser en
mi paquete.

34
00:01:48,417 --> 00:01:49,460
Aquí, es un paquete muy pequeño.

35
00:01:50,960 --> 00:01:55,460
Cometeremos un error para
que podamos verlo.

36
00:01:55,627 --> 00:01:56,440
Aquí, si hago "self halt"

37
00:02:01,020 --> 00:02:02,790
o por ejemplo voy a hacer otro
método,

38
00:02:03,460 --> 00:02:06,910
Crearé el método "increment3"
y

39
00:02:07,077 --> 00:02:08,790
invoco un método que
no existe.

40
00:02:08,957 --> 00:02:11,740
Lo llamaremos "foofoo".

41
00:02:13,110 --> 00:02:16,010
Entonces, aquí está rojo, pero 
supongamos que 

42
00:02:16,177 --> 00:02:18,900
en un estado febril
no me di cuenta.

43
00:02:20,590 --> 00:02:24,360
Voy a usar el Critic browser
(navegador crítico)

44
00:02:27,380 --> 00:02:31,250
en mi código y aquí
lo que me muestra el navegador

45
00:02:31,417 --> 00:02:32,770
critico és un conjunto de reglas.

46
00:02:33,720 --> 00:02:38,620
De hecho, hay muchas reglas
con sus explicaciones.

47
00:02:38,787 --> 00:02:42,790
Si usted tiene este código,
entonces en este

48
00:02:42,957 --> 00:02:46,200
momento és mejor usarlo
de esa manera, si hay

49
00:02:46,367 --> 00:02:47,450
una asignación dentro.

50
00:02:47,617 --> 00:02:49,620
Hay varios tipos de reglas.

51
00:02:50,040 --> 00:02:52,160
Hay reglas vinculadas a la
optimización, reglas

52
00:02:52,327 --> 00:02:54,300
que pueden potencialmente
identificar bugs (errores).

53
00:02:54,650 --> 00:02:56,600
Reglas que identifican como verdaderas.

54
00:02:56,860 --> 00:02:59,200
Si voy aquí, veo el código.

55
00:02:59,367 --> 00:03:03,050
Puedo navegar por la definición
como lo hicimos antes,

56
00:03:03,217 --> 00:03:05,810
o puedo transformarlo.

57
00:03:08,180 --> 00:03:12,160
Y la advertencia ha desaparecido.

58
00:03:13,610 --> 00:03:15,400
Ahora lo que es importante de ver,
es que 

59
00:03:15,567 --> 00:03:17,920
todas estas reglas se basan
en heurística

60
00:03:18,087 --> 00:03:19,700
Esto significa que a veces
hace cosas

61
00:03:19,867 --> 00:03:22,840
que no son muy correctas.
Usted lo sabe y tiene

62
00:03:23,007 --> 00:03:24,200
que dejarlo así en el sistema.

63
00:03:24,367 --> 00:03:28,840
Lo que también puede hacer,
puede decir, esto es un falso

64
00:03:29,007 --> 00:03:33,660
positivo. Imaginemos
que tengo un mensaje 

65
00:03:33,827 --> 00:03:36,660
"foofoo" y sé que quiero
guardarlo, puedo decir

66
00:03:36,827 --> 00:03:40,240
que esta regla es falsa para este

67
00:03:41,850 --> 00:03:44,850
método, Lo escribiré.

68
00:03:45,017 --> 00:03:46,510
Aquí está gris, qué
significa esto?

69
00:03:46,677 --> 00:03:49,690
Significa que mas tarde podría
mirar

70
00:03:49,857 --> 00:03:51,310
y preguntarme si tal vez 
esta regla era cierta y

71
00:03:51,477 --> 00:03:53,490
tenía sentido

72
00:03:57,250 --> 00:03:57,883
volver a visitarla.

73
00:03:58,410 --> 00:04:00,640
Podemos guardar los Critics.

74
00:04:00,807 --> 00:04:04,910
Significa que podemos guardar los
resultados de las reglas

75
00:04:05,077 --> 00:04:06,670
así como los falsos positivos.

76
00:04:07,290 --> 00:04:08,850
Cuando escribimos que algo era
falso, no queremos

77
00:04:09,017 --> 00:04:11,000
que el sistema nos lo repita
constantemente

78
00:04:11,167 --> 00:04:12,680
cada vez que ejecutamos las reglas.

79
00:04:13,400 --> 00:04:18,230
Entonces, cuando guarda a los crítics,
los pondrá en un manifiesto.

80
00:04:18,470 --> 00:04:21,690
Veamos este. Aquí, tengo
mi manifiesto que sera

81
00:04:21,857 --> 00:04:23,920
versionado con el sistema.

82
00:04:24,087 --> 00:04:26,410
No es necesario ver cómo está codificado
en su interior, no nos importa

83
00:04:26,577 --> 00:04:29,400
El Manifiesto permite codificar
cosas, pero importa poco.

84
00:04:29,700 --> 00:04:32,590
Esto, no lo tocáis, és el
critico de código quien lo utilizara

85
00:04:32,757 --> 00:04:34,120
en las próximas ejecuciones.

86
00:04:34,287 --> 00:04:36,260
Así pues, tiene un Manifiesto
para cada paquete.

87
00:04:36,700 --> 00:04:38,100
Cuando asigna una versión a
su código, entonces también

88
00:04:38,267 --> 00:04:39,920
asigna una versión a su
manifiesto y cuando ejecute de

89
00:04:40,087 --> 00:04:42,880
nuevo sus críticos de código,
automáticamente tendrá

90
00:04:43,047 --> 00:04:44,890
en cuenta todos los
falsos positivos y todas

91
00:04:45,057 --> 00:04:47,040
las meta-observaciones
que usted a incorporado.

92
00:04:47,207 --> 00:04:49,510
Así, lo qué es realmente interesante
con estas reglas de calidad

93
00:04:49,677 --> 00:04:53,390
és que Pharo las integra en 
un proceso de desarrollo.

94
00:04:53,557 --> 00:04:56,010
De manera que tenemos,

95
00:04:56,177 --> 00:04:58,570
unos servidores Jenkins que,

96
00:04:58,737 --> 00:05:01,170
cada vez que tira adelante
su proyecto, cargara y correrá

97
00:05:01,337 --> 00:05:04,000
automáticamente estas reglas de
calidad para verificar que 

98
00:05:04,167 --> 00:05:05,920
su programa realmente sigue
las reglas
