Código de calidad y buenas prácticas...

44
Código de ca buenas práctic buenas práctic Carlos F cfontela@ No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo. alidad y cas ágiles A3F cas ágiles Fontela @fi.uba.ar

Transcript of Código de calidad y buenas prácticas...

Page 1: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Código de calidad y

buenas prácticas ágilesbuenas prácticas ágiles

Carlos Fontela

[email protected]

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Código de calidad y

buenas prácticas ágiles

A3F

buenas prácticas ágiles

Carlos Fontela

[email protected]

Page 2: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Antes de empezar

Lleve lo que necesite…

Recordemos:

“El código es el único artefacto del desarrollo

2c2011 2

“El código es el único artefacto del desarrollo de software que siempre se va a construir” (Carlos Fontela)

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Antes de empezar

“El código es el único artefacto del desarrollo

A3F

“El código es el único artefacto del desarrollo de software que siempre se va a construir”

Page 3: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Agenda

Calidad en general

Temas de legibilidad

Guías para mejora de desempeño

2c2011 3

Otros temas

Buenas prácticas ágiles

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Agenda

Guías para mejora de desempeño

A3F

Page 4: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Calidad

2c2011 4

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Calidad

A3F

Page 5: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Calidad del software

No es algo objetivo

¿Qué importa más?

Código claro y mantenible

Desempeño (performance) de la aplicación

2c2011 5

Desempeño (performance) de la aplicación

Performance del usuario

Portabilidad a distintos ambientes

Todo depende del cliente y de la aplicación

(criticidad, longevidad…)

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Calidad del software

Código claro y mantenible

Desempeño (performance) de la aplicación

A3F

Desempeño (performance) de la aplicación

Portabilidad a distintos ambientes

Todo depende del cliente y de la aplicación

(criticidad, longevidad…)

Page 6: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Principio Nº 1: no repetir

¿Se entiende por qué?

Extraer métodos

2c2011 6

Extraer clases, por delegación

o por generalización

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Principio Nº 1: no repetir

A3F

Extraer clases, por delegación

Page 7: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Principio Nº 2: estandarizar

Nombres

2c2011 7

Nombres

Formatos: líneas en blanco, sangrías, etc.

Comentarios

=> Código autodocumentado

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Principio Nº 2: estandarizar

A3F

Formatos: líneas en blanco, sangrías, etc.

=> Código autodocumentado

Page 8: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Principio Nº 3: no sorprender

Suponer igual nivel del desarrollador que va a

necesitar mi código

Evitar lucirse

No explicar lo obvio

2c2011 8

No explicar lo obvio

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Principio Nº 3: no sorprender

Suponer igual nivel del desarrollador que va a

A3F

Page 9: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Reflexión

“Now listen. We are paying $600 an hour for

this computer and $2 an hour for you, and I

want you to act accordingly.”

Según Barry Boehm, lo que su jefe le dijo en su

2c2011 9

Según Barry Boehm, lo que su jefe le dijo en su

primer trabajo (1950s)

¿Hasta qué punto sigue siendo nuestra

mentalidad?

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Reflexión

“Now listen. We are paying $600 an hour for

this computer and $2 an hour for you, and I

want you to act accordingly.”

Según Barry Boehm, lo que su jefe le dijo en su

A3F

Según Barry Boehm, lo que su jefe le dijo en su

¿Hasta qué punto sigue siendo nuestra

Page 10: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Legibilidad

2c2011 10

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Legibilidad

A3F

Page 11: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Legibilidad: por qué

El código se escribe una vez y se lee muchas

Escribir código para humanos

En un texto usamos:

Títulos de distinto nivel

2c2011 11

Títulos de distinto nivel

Sangrías

Signos de puntuación

Tipografías especiales

¿Por qué no hacer el código legible?

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Legibilidad: por qué

El código se escribe una vez y se lee muchas

Escribir código para humanos

A3F

¿Por qué no hacer el código legible?

Page 12: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Nombres (1)

Ser descriptivo

lineasPorPagina es mejor que lpp

distanciaEnMetros es mejor que Distancia

Poner antónimos en forma consistente: mayor, menor / min, max

No usar números: total1, total2

Hablar en términos del problema y no de la solución

2c2011 12

Hablar en términos del problema y no de la solución

empleados en vez de arregloEmpleados

Usar pocas abreviaturas

Salvo en nombres muy largos: num, cant, long, max, min

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Nombres (1)

lineasPorPagina es mejor que lpp

distanciaEnMetros es mejor que Distancia

Poner antónimos en forma consistente: mayor, menor / min, max

Hablar en términos del problema y no de la solución

A3F

Hablar en términos del problema y no de la solución

empleados en vez de arregloEmpleados

Salvo en nombres muy largos: num, cant, long, max, min

Page 13: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Nombres (2)

Evitar significados ocultos

“long” es la longitud del documento, o

Que se puedan leer en algún idioma

Casos especiales , cuando no hay nombres mejores

i, i, k, para índices

2c2011 13

i, i, k, para índices

Por qué no usar un índice numero

Tmp, temp, para temporales y auxiliares

Variables booleanas

encontrado, terminado, error

No expresarlas en forma negativa

Que se lean como verdadera o falsa: “

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Nombres (2)

“long” es la longitud del documento, o -1 si no se encontró

Que se puedan leer en algún idioma

Casos especiales , cuando no hay nombres mejores

A3F

numero

Tmp, temp, para temporales y auxiliares

No expresarlas en forma negativa

Que se lean como verdadera o falsa: “sexo” no es buen nombre

Page 14: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Nombres de métodos

Que describa todo lo que hace el método

Que describa la intención (el qué) y no detalles de

implementación (el cómo)

2c2011 14

eliminarEmpleado: nombre

Malos sucedáneos: procesarEmpleado ,

buscarEmpleadoEliminar, buscEmpEl, bee,

buscarEliminar, findEmpleadoDelete

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Nombres de métodos

Que describa todo lo que hace el método

Que describa la intención (el qué) y no detalles de

A3F

Malos sucedáneos: procesarEmpleado ,

buscarEmpleadoEliminar, buscEmpEl, bee,

buscarEliminar, findEmpleadoDelete

Page 15: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Métodos y legibilidad

Tratar de que no dependan de un orden de ejecución

Si no, documentarlo adecuadamente

Recursividad sólo cuando ayuda a la legibilidad

Y sólo al nivel de un método

No: A -> B -> A

2c2011 15

No: A -> B -> A

Que afecte a la clase en la que está declarado

Si es así, suele tener el nombre de otra clase en su nombre

Si no, moverlo de clase

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Métodos y legibilidad

Tratar de que no dependan de un orden de ejecución

Si no, documentarlo adecuadamente

Recursividad sólo cuando ayuda a la legibilidad

A3F

Que afecte a la clase en la que está declarado

Si es así, suele tener el nombre de otra clase en su

Page 16: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Parámetros

Que no sean muchos

No más de 7, y si es menos, mejor

Que estén ordenados con algún criterio

2c2011 16

Mantener el criterio en diferentes métodos

Chequear valores válidos a la entrada

En las referencias, ver que no estén en nil

Los valores de entrada no deben cambiarse

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Parámetros

No más de 7, y si es menos, mejor

Que estén ordenados con algún criterio

A3F

Mantener el criterio en diferentes métodos

Chequear valores válidos a la entrada

En las referencias, ver que no estén en nil

Los valores de entrada no deben cambiarse

Page 17: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Variables locales

Inicialización: siempre explícita

Un uso para cada variable

Que la vida de la variable sea lo más corta posible

2c2011 17

posible

Usar variables booleanas para guardar partes de tests complicados

if ( (anio % 400 == 0) ||

((anio % 4 == 0) && (anio % 100 != 0) ) …

O métodos booleanos

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Variables locales

Inicialización: siempre explícita

Un uso para cada variable

Que la vida de la variable sea lo más corta

A3F

Usar variables booleanas para guardar partes

((anio % 4 == 0) && (anio % 100 != 0) ) …

Page 18: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Números mágicos

( 1 to: 14) do: …

(usuario id = 1234) ifTrue: […]

Evitar todo “hardcodeo” o “números

mágicos”

2c2011 18

mágicos”

¿Por qué?

Salvo algunos 0, 1, ‘’, nil, y cosas que no cambian

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Números mágicos

// 14 clientes

(usuario id = 1234) ifTrue: […]

Evitar todo “hardcodeo” o “números

A3F

Salvo algunos 0, 1, ‘’, nil, y cosas que no cambian

Page 19: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Sangrías y espacios

No tener miedo de usar espacios

(a=b)ifTrue:[Transcript show:’OK’]

(a = b) ifTrue: [ Transcript show: ’OK’ ]

2c2011 19

Usar líneas en blanco

Separar clases si van en el mismo archivo

Usar paréntesis sobreabundantes para aclarar

Usar layouts del lenguaje

O al menos siendo consistentes

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Sangrías y espacios

No tener miedo de usar espacios

(a=b)ifTrue:[Transcript show:’OK’]

(a = b) ifTrue: [ Transcript show: ’OK’ ]

A3F

Separar clases si van en el mismo archivo

Usar paréntesis sobreabundantes para aclarar

O al menos siendo consistentes

Page 20: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Comentarios (1)

Son buenos para aclarar código

Aunque deberíamos tratar de aclarar el código antes

O como resumen de una secuencia de acciones

Aunque deberíamos tratar de separar en un método

2c2011 20

Aunque deberíamos tratar de separar en un método

No repetir en los comentarios lo que dice el código

“ asigno 1 a x: ”

x := 1.

Corolario: no deberían abundar

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Comentarios (1)

Son buenos para aclarar código

Aunque deberíamos tratar de aclarar el código antes

O como resumen de una secuencia de acciones

Aunque deberíamos tratar de separar en un método

A3F

Aunque deberíamos tratar de separar en un método

No repetir en los comentarios lo que dice el código

Corolario: no deberían abundar

Page 21: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Comentarios (2)

Que los comentarios sean fáciles de mantener

El comentario debe ir antes del código al que se refieren

Preparan mejor al lector

2c2011 21

A veces conviene ponerlos al final de la línea

Casos especiales a documentar con comentarios

Efectos laterales

Restricciones de un método o clase

Nombres de algoritmos, fuentes (de dónde lo saqué)

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Comentarios (2)

Que los comentarios sean fáciles de mantener

El comentario debe ir antes del código al que se

A3F

A veces conviene ponerlos al final de la línea

Casos especiales a documentar con comentarios

Restricciones de un método o clase

Nombres de algoritmos, fuentes (de dónde lo saqué)

Page 22: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Condicionales y ciclos

Cuidar los >=, <=, >, <

Ojo con anidaciones profundas

No más de 3 niveles

Ordenar los “case” de los “switch”

Orden lógico: alfabético, numérico

2c2011 22

Orden lógico: alfabético, numérico

Hacer obvio al lector la manera de salir del ciclo

Usar salidas explícitas de ciclos cuando se pueda

O incluso retornos de métodos

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Condicionales y ciclos

Ojo con anidaciones profundas

Ordenar los “case” de los “switch”

Orden lógico: alfabético, numérico

A3F

Orden lógico: alfabético, numérico

Hacer obvio al lector la manera de salir del

Usar salidas explícitas de ciclos cuando se

O incluso retornos de métodos

Page 23: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Tabulaciones de resultados

Días de un mes

diasMes := #(31 28 31 30 31 30 31 31 30 31 30 31 ).

( (mes > 0) & (mes <= 12) )

ifTrue: [resultado := diasMes at: mes]

ifFalse: [Error signal new].

2c2011 23

ifFalse: [Error signal new].

( (mes = 2) & (anio bisiesto) )

ifTrue: [resultado := 29]

¿Es mejor que un “switch”?

Depende de cada uno

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Tabulaciones de resultados

diasMes := #(31 28 31 30 31 30 31 31 30 31 30 31 ).

A3F

Page 24: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Desempeño

2c2011 24

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Desempeño

A3F

Page 25: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Mejora de desempeño

Resistir la tentación

No siempre el usuario percibe las mejoras en el código, sino que privilegia su propia experiencia

¿Mejorar el hardware?

2c2011 25

¿Mejorar el hardware?

Cuando todo falle…

Mejoramos el código

Pero sólo en las partes críticas

(recordar a Paretto: 80-20)

Usar “profilers” si los tenemos

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Mejora de desempeño

No siempre el usuario percibe las mejoras en el código, sino que privilegia su propia

A3F

Pero sólo en las partes críticas

20)

Usar “profilers” si los tenemos

Page 26: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Algunas posibilidades (1)

Evitar el uso de memoria externa cuando se puede usar memoria interna

Accesos innecesarios a disco

En las evaluaciones lógicas, utilizar la opción de cortocircuito

2c2011 26

de cortocircuito

En un “(a & b) ifTrue:” no necesitamos evaluar b si a es falso

En un “(a | b) ifTrue:” no necesitamos evaluar b si a es verdadero

Verificar si el entorno no lo hace solo

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Algunas posibilidades (1)

Evitar el uso de memoria externa cuando se puede usar memoria interna

Accesos innecesarios a disco

En las evaluaciones lógicas, utilizar la opción

A3F

En un “(a & b) ifTrue:” no necesitamos evaluar b si

En un “(a | b) ifTrue:” no necesitamos evaluar b si

Verificar si el entorno no lo hace solo

Page 27: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Algunas posibilidades (2)

Ordenar las preguntas en acciones switch

Conviene evaluar primero las más frecuentes y menos costosas de evaluar

switch (mes) {

2c2011 27

switch (mes) {

case 1, 3, 5, 7, 8, 10, 12 : dias = 31; break;

case 4, 6, 9, 11 : dias = 30; break;

case 2 if (anio.bisiesto())

dias = 29;

else dias = 28;

break;

default: throw new MesInvalidoException();

}

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Algunas posibilidades (2)

Ordenar las preguntas en acciones if compuestas y

Conviene evaluar primero las más frecuentes y menos

A3F

case 1, 3, 5, 7, 8, 10, 12 : dias = 31; break;

case 4, 6, 9, 11 : dias = 30; break;

default: throw new MesInvalidoException();

Page 28: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Algunas posibilidades (3)

Calcular todo lo que se pueda antes de entrar a un ciclo

// mal ejemplo:

f1 leerFecha.

f2 leerFecha.

100 timesRepeat: [

periodo f1 diasHasta: f2.

2c2011 28

periodo f1 diasHasta: f2.

periodoDoble := periodo * 2.

f3 := Fecha hoy.

i := i+1;

Transcript show: i * periodo + periodoDoble ]

Usar tipos por valor siempre que se pueda

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Algunas posibilidades (3)

Calcular todo lo que se pueda antes de entrar a un ciclo

A3F

Transcript show: i * periodo + periodoDoble ]

Usar tipos por valor siempre que se pueda

Page 29: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Algunas posibilidades (4)

Usar tipos enteros en vez de punto flotante

int mejor que double

Tabular datos en vez de usar funciones trascendentes

Salvo que se requiera mucha precisión

2c2011 29

Salvo que se requiera mucha precisión

En algunos casos es sencillo

Liberar memoria que ya no se necesita, si el entorno no lo hace solo

Usar lenguajes compilados o de menor nivel

Assembler >> C++ >> Java / C# / Smalltalk >> PHP / Python

Si la modularización es buena, podemos acotarlo

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Algunas posibilidades (4)

Usar tipos enteros en vez de punto flotante

Tabular datos en vez de usar funciones

Salvo que se requiera mucha precisión

A3F

Salvo que se requiera mucha precisión

Liberar memoria que ya no se necesita, si el entorno

Usar lenguajes compilados o de menor nivel

Assembler >> C++ >> Java / C# / Smalltalk >> PHP /

Si la modularización es buena, podemos acotarlo

Page 30: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Después de la mejora

Probar su efectividad

Muchas presuntas mejoras no resultan, porque los compiladores, entornos de ejecución y otros, las introducen en forma automática

No hay expertos generalistas

2c2011 30

No hay expertos generalistas

Hay cosas que han cambiado con el tiempo

P. ej., llamadas a funciones, arreglos multidimensionales

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Después de la mejora

Muchas presuntas mejoras no resultan, porque los compiladores, entornos de ejecución y otros, las introducen en forma automática

No hay expertos generalistas

A3F

No hay expertos generalistas

Hay cosas que han cambiado con el tiempo

P. ej., llamadas a funciones, arreglos multidimensionales

Page 31: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Otras ideas

2c2011 31

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Otras ideas

A3F

Page 32: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Warnings

Mirar los “warnings” de los compiladores

Evita errores posteriores

Aunque algunos son muy molestos

2c2011 32

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Warnings

Mirar los “warnings” de los compiladores

Aunque algunos son muy molestos

A3F

Page 33: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Referencias

Cuando ya no quiero una referencia, recordar

poner el nil

Facilita tareas al recolector de basura

Inicializar siempre con nil si no sé qué hacer

2c2011 33

Inicializar siempre con nil si no sé qué hacer

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Referencias

Cuando ya no quiero una referencia, recordar

Facilita tareas al recolector de basura

Inicializar siempre con nil si no sé qué hacer

A3F

Inicializar siempre con nil si no sé qué hacer

Page 34: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Herramientas

Analizadores de código

Profilers: buscan dónde pasa más tiempo la

aplicación

2c2011 34

Extractores de código muerto

Buscadores de código repetido

Compiladores que mejoran el desempeño

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Herramientas

Profilers: buscan dónde pasa más tiempo la

A3F

Extractores de código muerto

Buscadores de código repetido

Compiladores que mejoran el desempeño

Page 35: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Buenas prácticas ágiles

2c2011 35

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Buenas prácticas ágiles

A3F

Page 36: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Buenas prácticas XP (I)

¿Probar programas es bueno?

Hacer pruebas unitarias y funcionales todo el tiempo

El desarrollo es dirigido por las pruebas: TestDevelopment (TDD)

Se diseñan antes de codificar

2c2011 36

Se diseñan antes de codificar

Ojo: mucha disciplina

¿Los diseños de software son cambiantes?

El diseño evoluciona junto con la programaci

Lo hacen los propios programadores

Minimizar documentación que se guarda, si no se la va a mantener actualizada

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Buenas prácticas XP (I)

¿Probar programas es bueno?

Hacer pruebas unitarias y funcionales todo el tiempo

El desarrollo es dirigido por las pruebas: Test-Driven

A3F

os de software son cambiantes?

o evoluciona junto con la programación

Lo hacen los propios programadores

Minimizar documentación que se guarda, si no se la va a

Page 37: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Buenas prácticas XP (II)

¿Hacer pruebas de integración es importante?

Integración sigue inmediatamente a las pruebas unitarias

Evita que sea cada vez más complicado integrar código de varias fuentes

2c2011 37

código de varias fuentes

¿Revisar la calidad del código es recomendable?

Revisar código todo el tiempo

Pair-programming

Se mantiene más el foco

Refactorizaciones (cambio de diseño para hacerlo simple, sin cambiar funcionalidad)

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Buenas prácticas XP (II)

¿Hacer pruebas de integración es importante?

Integración sigue inmediatamente a las pruebas

Evita que sea cada vez más complicado integrar código de varias fuentes

A3F

código de varias fuentes

¿Revisar la calidad del código es

Revisar código todo el tiempo

Refactorizaciones (cambio de diseño para hacerlo simple, sin cambiar funcionalidad)

Page 38: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Buenas prácticas XP (III)

¿Estándares de codificación permiten una mejor comunicación y reducen errores?

Fijar estándares precisos y estrictos

¿El desarrollo incremental es positivo?

Hacer iteraciones muy cortas

2c2011 38

Hacer iteraciones muy cortas

Diseñar una pequeña porción, codificarla y probarla

Preocuparse sólo por lo que se está haciendo

Nada por adelantado

Recordar: el cliente pide (requerimientos), no necesariamente lo que quiere (expectativas), ni mucho menos lo que necesita (necesidad)

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Buenas prácticas XP (III)

¿Estándares de codificación permiten una mejor comunicación y reducen errores?

Fijar estándares precisos y estrictos

¿El desarrollo incremental es positivo?

A3F

Diseñar una pequeña porción, codificarla y probarla

Preocuparse sólo por lo que se está haciendo

el cliente pide (requerimientos), no necesariamente lo que quiere (expectativas), ni mucho menos lo que necesita (necesidad)

Page 39: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Buenas prácticas XP (IV)

¿Es importante tener una comunicación frecuente con el

cliente?

Un cliente acompañando el desarrollo

Fundamental para escribir pruebas de aceptación (UAT) y priorizar

tareas

2c2011 39

¿Es frecuente que los proyectos se suspendan por falta de

presupuesto?

Usar el alcance como variable de ajuste

Implementar primero lo que tiene mayor valor para el cliente

La primera iteración debe implementar un esqueleto, con

funcionalidades básicas

En la mayoría de los sistemas, el 20% del desarrollo genera el 80% del

beneficio

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Buenas prácticas XP (IV)

¿Es importante tener una comunicación frecuente con el

Un cliente acompañando el desarrollo

Fundamental para escribir pruebas de aceptación (UAT) y priorizar

A3F

¿Es frecuente que los proyectos se suspendan por falta de

Usar el alcance como variable de ajuste

Implementar primero lo que tiene mayor valor para el cliente

La primera iteración debe implementar un esqueleto, con

En la mayoría de los sistemas, el 20% del desarrollo genera el 80% del

Page 40: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Buenas prácticas XP (V)

Simplicidad

“The simplest thing that could possibly work”

Complejidad dificulta refactorizaciones, comunicación y depuraciones

No implementar lo que no se sabe si servirá,

y en el 80% de los casos no sirve

2c2011 40

y en el 80% de los casos no sirve

Se mantiene baja la inversión inicial en el proyecto

El código ejecutable permanece más chico

YAGNI

La simplicidad cuesta trabajo y es fruto de un buen diseño

Las prácticas de XP se realimentan: ¿somos ágiles

realmente?

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Buenas prácticas XP (V)

“The simplest thing that could possibly work”

Complejidad dificulta refactorizaciones, comunicación y depuraciones

No implementar lo que no se sabe si servirá,

A3F

Se mantiene baja la inversión inicial en el proyecto

El código ejecutable permanece más chico

La simplicidad cuesta trabajo y es fruto de un buen diseño

Las prácticas de XP se realimentan: ¿somos ágiles

Page 41: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Claves: los mandamientos del alumno de Algoritmos III (1ra parte)

No repetirás código

No dejarás a tu prójimo lo que no quieres que te dejen a ti

Escribirás código legible

2c2011 41

Escribirás código legible

Usarás la barra espaciadora y el salto de línea de tu teclado

“La optimización prematura es la raíz de todos los males” (Donald Knuth)

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Claves: los mandamientos del alumno de Algoritmos III (1ra parte)

No dejarás a tu prójimo lo que no quieres que

A3F

Usarás la barra espaciadora y el salto de línea

“La optimización prematura es la raíz de todos los males” (Donald Knuth)

Page 42: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Lectura obligatoria

“Continuous Integration”, de Martin Fowler

Lo tienen en:

http://www.martinfowler.com/articles/continuousIntegration.html

2c2011 42

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Lectura obligatoria

“Continuous Integration”, de Martin Fowler

http://www.martinfowler.com/articles/continuousInt

A3F

Page 43: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Lecturas opcionales

Code Complete, Steve McConnell

Capítulos 6 a 8, 10 a 13, 14 a 16, 18 a 19: buena parte del libro

No está en la Web ni en biblioteca

2c2011 43

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Lecturas opcionales

Code Complete, Steve McConnell

Capítulos 6 a 8, 10 a 13, 14 a 16, 18 a 19: buena

No está en la Web ni en biblioteca

A3F

Page 44: Código de calidad y buenas prácticas ágilesmaterias.fi.uba.ar/7507/content/2011-2/teoricas/7507_05_calidad_practicas.pdf · Código de calidad y buenas prácticas ágiles Carlos

Qué sigue

Primer parcial

POO en lenguajes con tipos estáticos

Desarrollo de software

2c2011 44

Desarrollo de software

Temas de diseño

No se puede mostrar la imagen. Puede que su equipo no tenga suficiente memoria para abrir la imagen o que ésta esté dañada. Reinicie el equipo y, a continuación, abra el archivo de nuevo. Si sigue apareciendo la x roja, puede que tenga que borrar la imagen e insertarla de nuevo.

Qué sigue

POO en lenguajes con tipos estáticos

Desarrollo de software

A3F

Desarrollo de software