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 desarrollo

DRY

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)

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.

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");
        }
    }
    
Con KISS

    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];

    }
    
Sin KISS

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:
  • 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.

Ejemplo

No

import os, sys
            

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

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:
  • 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)

BDD

Behavior-Driven Development

Formulado por Dan North, 2006.

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

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

Tipos de SCM

Centralizados: Cliente-Servidor
  • 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.


Gracias!

Best Practices

By Dave Rivera

Best Practices

Experiencias en el desarrollo de software

  • 709