Best Practices
Experiencias del Desarrollo de
Software
David Rivera
DRAI - Universidad de Antioquia
Qué son las Best Practices y porquÉ son importantes
Principios
Escribir mejor codigo y obtener un producto exitoso“ Permiten dar estructura al software convirtiendolo más flexible y mantenible ”Robert C. Martin
Experiencias
Lineamientos aportados por desarrolladores para solucionar y evitar problemas durante el desarrolloDRY
Don't Repeat Yourself
DRY
Enfocada en reducir la repetición de información en todos sus aspectos
Formulado por Andy Hunt & Dave Thomas
"The Pragmatic Programmer" (1999)
"The Pragmatic Programmer" (1999)
DRY
Conocido como Single Source of Truth
Cada elemento es almacenado una única vez
Las modificaciones se realizan en un solo lugar
Evitar el Copy/Paste en el código
Ejemplo
console.log( fiveSquared() );
console.log( sixSquared() );
console.log( sevenSquared() );
function fiveSquared() {
return 5 * 5;
}
function sixSquared() {
return 6 * 6;
}
function sevenSquared() {
return 7 * 7;
}
Ejemplo (...cont)
console.log( squared(5) );
console.log( squared(6) );
console.log( squared(7) );
function squared( num ) {
return num * num;
}
KISS
Keep It Simple, Stupid!
KISS
La mayoría de sistemas funcionan mejor si se mantienen simples en lugar de hacerlo complicado.
Formulado por la U.S. Navy (1960)
Python Zen
Complex is better than complicated.
Simple is better than complex.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Simple is better than complex.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Example
public String weekday1(int dayOfWeek) {
switch (dayOfWeek) {
case 1: return "Monday";
case 2: return "Tuesday";
case 3: return "Wednesday";
case 4: return "Thursday";
case 5: return "Friday";
case 6: return "Saturday";
case 7: return "Sunday";
default:
throw new IllegalArgumentException(
"dayOfWeek must be in range 1..7");
}
}
public String weekday2(int dayOfWeek){
if ((dayOfWeek < 1) || (dayOfWeek > 7))
throw new
IllegalArgumentException(
"dayOfWeek must be in range 1..7");
final String[] weekdays = {
"Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday",
"Sunday"};
return weekdays[dayOfWeek-1];
}
Coding Standards
Coding Standards
Pautas para un lenguaje de programación especifico.
Usado en la Gestión de la configuración
Recomienda estilos de programación o practicas:
Usado en la Gestión de la configuración
Recomienda estilos de programación o practicas:
- Organización de archivos
- Indentación
- Commentarios
- Declaraciones
- Convenciones de nombramiento, espacios en blanco, etc.
Coding Standards
Dar estructura al software $\rightarrow$ Calidad de software.
Facilitar la lectura del código fuente.
Aumenta la mantenibilidad del software.
Facilitar la lectura del código fuente.
Aumenta la mantenibilidad del software.
Ejemplo
No
import os, sys
Sí
import os
import sys
private int x;
private Color color;
private int x;
private Color color;
Testing
Testing
Obtener información acerca de la calidad del producto.
Prevención de defectos $\rightarrow$ reducción del riesgo
Validar y verificar $\rightarrow$ requerimientos del cliente
Prevención de defectos $\rightarrow$ reducción del riesgo
Validar y verificar $\rightarrow$ requerimientos del cliente
Técnicas de pruebas
- Pruebas de unidad (TDD)
- Cobertura
- Integración
- Aceptación (BDD)
TDD
Test-Driven Development
Formulado por Kent Beck, 2003.
Probar unidades de código
Aspectos relacionados:
Probar unidades de código
Aspectos relacionados:
- Refactoring
- KISS
- YAGNI (You Aren't Gonna Need It)
- Aserciones
...focusing on writing only the code necessary to pass tests, designs can often be cleaner and clearer than is achieved by other methods.
Kent Beck
Test-Driven Development by Example (2003)
Test-Driven Development by Example (2003)
BDD
Behavior-Driven Development
Formulado por Dan North, 2006.
Probar funcionalidades del software
Aspectos relacionados:
Escritas en "lenguaje natural"
Probar funcionalidades del software
Aspectos relacionados:
- Historias de usuario
Escritas en "lenguaje natural"
Mocking
Objetos simulados que imitan el comportamiento de objetos reales de manera controlada.
Creados programáticamente
Usados en pruebas de unidad
Reproducen comportamientos que son difíciles de encontrar
Usados en pruebas de unidad
Reproducen comportamientos que son difíciles de encontrar
SCM
Source Code Management
SCM
Manejo de cambios en los archivos.
Registrar cambios de cada miembro del equipo.
Evitar perdidas de información.
Mantener siempre una versión actualizada del software
Registrar cambios de cada miembro del equipo.
Evitar perdidas de información.
Mantener siempre una versión actualizada del software
Tipos de SCM
Centralizados: Cliente-Servidor
Distribuido: Peer-to-Peer
- CVS
- Subversion
Distribuido: Peer-to-Peer
- Git
- Mercurial
Code Review
Revisión del código fuente. También conocido como Peer review
Mejorar la calidad del software y las habilidades del desarrollador.
Criticar el código, no la persona.
Ayudan a reducir errores: Typos.
Encontrar y remover vulnerabilidades.
Criticar el código, no la persona.
Ayudan a reducir errores: Typos.
Encontrar y remover vulnerabilidades.
Gracias!
Best Practices
By Dave Rivera
Best Practices
Experiencias en el desarrollo de software
- 709