archivo

Archivos diarios: julio 31, 2010

Haciendo una revisión de algunos incumplimientos de reglas detectados por Sonar, nos llamó mucho la atención a un proveedor y a mi un incumplimiento que se repetía en distintas partes del código de una aplicación Java basado en una regla de CheckStyle denominada “Parameter Assignment”, ya que ninguno de los dos entendíamos por qué.

¿Cuándo se produce el incumplimiento de esta regla? Cuando dentro del cuerpo de un método se asigna un valor a un parámetro de entrada.

Para intentar entender los motivos acudí a Internet y al libro “Refactoring: improving the design of existing code” de Martin Fowler y Kent Beck y básicamente es el siguiente:

Mejorar la comprensibilidad de los métodos por la confusión que existe en muchos casos con el paso de parámetros a los métodos en Java. En Java siempre se realiza un paso de parámetros por valor, es decir, el método trabaja con una copia del parámetro enviado por el método llamante por lo que cualquier posible cambio en dicho parámetro dentro del mismo no afecta hacia fuera de él, no obstante la confusión la tenemos cuando el parámetro que se envía es un objeto en lugar de un tipo primitivo, en ese caso también existe un paso por valor, pero la copia en esta caso es una referencia a memoria por lo que los cambios en este caso si pueden tener su reflejo en el método llamante. Como pese a que el paso del parámetro es siempre por valor, pero el comportamiento varía en función de si lo que se pasa es un objeto o un tipo primitivo una forma de darle un tratamiento homogéneo es tratar el parámetro de entrada como una “constante” y que si hay que hacer operaciones se haga con variables u objetos temporales.

Además de tratarse de una regla de estilo (claridad, comprensión y homogeneización), en mi opinión (y es solo mi opinión) también es una forma de prevenir cambios no deseados en el valor de un objeto mediante al acceso a su contenido en los métodos donde se pasa el valor de su referencia en memoria.

Este es el cuarto artículo que publico con la evolución en el uso de navegadores y sistemas operativos en dos sitios web españoles dirigidos al público general, que tienen un importante número de visitas como para que los resultados obtenidos con las métricas de Google Analytics sean lo suficientemente representativos.

El primer artículo fue publicado el 12 de enero de 2009 y contiene los datos entre el 30/06/2008 y el 31/12/2008. El segundo artículo fue publicado el 22 de julio de 2009 y contiene los datos entre el 01/01/2009 y el 30/06/2009. El tercer artículo fue publicado el 26 de enero de 2010 y contiene los datos entre el 30/06/2009 y el 31/12/2009.

En este artículo, se muestran los resultados recogidos entre el 01/01/2010 y el 30/06/2010 y se comparan con los resultados informados en los tres artículos anteriores (aparecen entre paréntesis, en orden cronológico de más reciente a menos reciente).

Como conclusiones más significativas, señalar las siguientes:

1) La trayectoria descendente en el uso de Internet Explorer es continua y se situa entre los cuatro y siete puntos al semestre (si hacemos media de los resultados obtenidos a lo largo de estas mediciones, la caída se situa en los cuatro puntos al semestre o lo que es lo mismo 8 puntos al año). Todavía domina por mayoría absoluta, pero de continuar la caída tal y como ahora y de seguir el auge de los otros navegadores (nada hace presagiar que se inviertan los términos) será cuestión de año y medio o dos años que pierda la mayoría absoluta. No obstante, se requerirá mucho más tiempo para que otro navegador le quite el trono.
2) La pérdida de cuota de Internet Explorer se la han repartido principalmente Firefox y Chrome (este último ya ha dejado de ser una anécdota). También es importante señalar que sigue el estancamiento de Opera, con un uso prácticamente testimonial y que la subida de Safari es coherente con el incremento de uso de los dispositivos de la familia Mac.
3) En cuanto a los sistemas operativos, el dominio de los sistemas operativos de la familia Windows sigue resultando abrumador. Es cierto que cada semestre pierde algo de cuota (aproximadamente un punto), pero es muy poco en relación a la que ya tienen. Casi todo lo que pierde Windows, en esta ocasión se lo han repartido a partes casi iguales Mac y Linux.

Sitio web 1:

Navegadores.

– Internet Explorer: 69’38% (73’83%) (77′27%) (81′81%)
– Firefox: 23’04% (21’06%) (19′40%) (16′16%)
– Chrome: 5’13% (2’93%) (1′50%) (0′48%)
– Safari: 1’79% (1,45%) (1′13%) (0′87%)
– Opera: 0’35% (0’44%) (0′44%) (0′41%)

Sistema Operativo.

– Windows: 95’84% (96’57%) (96′94%) (97′52%)
– Macintosh: 2’12% (1’83%) (1′65%) (1′37%)
– Linux: 1’65% (1’29%) (1′22%) (1′02%)
– iPhone: 0’19%
– SymbianOS: 0’06%
– Android: 0’03%

Combinación Navegador + Sistema Operativo.

– Internet Explorer + Windows: 69’38% (73’83%) (77′27%) (81′80%)
– Firefox + Windows: 20’87% (19’19%) (17′61%) (14′69%)
– Chrome + Windows: 4’99% (2’91%) (1′50%)
– Firefox + Linux: 1’40% (1’12%) (1′06%) (0′84%)
– Safari + Macintosh: 1’27% (1’07%) (0′92%) (0′72%)

Sitio web 2:

Navegadores.

– Internet Explorer: 62’19% (69’06%) (72′08%) (74′71%)
– Firefox: 27’69% (24’27%) (23′7%) (22′47%)
– Chrome: 6’15% (3’43%) (1′69%) (0′71%)
– Safari: 2’85% (2’22%) (1′73%) (1′45%)
– Opera: 0’69% (0’67%) (0′54%) (0′43%)

Sistema Operativo.

– Windows: 93’57% (94’93%) (95′58%) (96′3%)
– Macintosh: 3’34% (2’91%) (2′46%) (2′19%)
– Linux: 2’50% (1’68%) (1′66%) (1′34%)
– iPhone: 0’28%
– SymbianOS: 0’11%
– Android: 0’05%

Combinación Navegador + Sistema Operativo.

– Internet Explorer + Windows: 62’19% (69’06%) (72′07%) (74′7%)
– Firefox + Windows: 24’39% (21’62%) (21′12%) (20′24%)
– Chrome + Windows: 5’93% (3’4%) (1′69%)
– Firefox + Linux: 2’14% (1’47%) (1′55%) (1′23%)
– Safari + Macintosh: 2’05% (1’73%) (1′43%) (1′22%)