SlideShare una empresa de Scribd logo
Buenas prácticas
para la construcción de software
Introducción

Índice de contenidos
   1. Definición.
   2. ¿Porqué se desarrolla mal?
   3.¿Porqué debo seguir buenas prácticas?
   4. Principios de la buena programación.
   5. Buenas prácticas en código.
   6. Consejos generales.
   7. Ejemplos basados en Java, pero aplicables a
   “cualquier” lenguaje de programación.
Introducción

Definición
 Por buenas prácticas se entiende un conjunto
 coherente de acciones que han rendido buen o incluso
 excelente servicio en un determinado contexto y que
 se espera que, en contextos similares, rindan similares
 resultados.
 Éstas dependen de las épocas, de las modas y hasta
 de la empresa consultora o del autor que las preconiza.
 No es de extrañar que algunas sean incluso
 contradictorias entre ellas.
                                              (Fuente: wikipedia)
Introducción

¿Porqué se desarrolla mal?
    Falta de tiempo.
    Falta de conocimiento.
    Falta de motivación.
    Acudir a las fuentes equivocadas.
    Fallos en las etapas iniciales de desarrollo de
   software (análisis, requisitos, etc.).
    Etc.
Introducción

¿Porqué buenas prácticas?
    Establece reglas y convenios.
    Aporta higiene al código.
    Estandariza el desarrollo.
    Fácil lectura = Fácil mantenimiento.
    Facilita la escalabilidad del código.
    Facilita la reutilización y la integración de manera
   homogénea.
Principios de buena programación

The Principles of Good Programming
by Christopher Diggins
Principios de buena programación

Listado de los principios
    DRY - Don’t repeat yourself .
    Abstraction Principle.
    KISS (Keep it simple, stupid!) .
    Avoid Creating a YAGNI (You aren’t going to need it).
    Do the simplest thing that could possibly work.
    Don’t make me think.
    Open/Closed Principle.
Principios de buena programación

Listado de los principios
    Write Code for the Maintainer.
    Principle of least astonishment.
    Single Responsibility Principle.
    Minimize Coupling.
    Maximize Cohesion.
    Hide Implementation Details.
    Law of Demeter.
Principios de buena programación

Listado de los principios
    Avoid Premature Optimization.
    Code Reuse is Good.
    Separation of Concerns.
    Embrace Change.
Principios de buena programación

DRY (Don’t repeat yourself)
    No repetirse a sí mismo → evitar la repetición.
Principios de buena programación

DRY (Don’t repeat yourself)
    Evitar la repetición en todas sus posibilidades:
       • No repetir código: funciones, métodos, clases,
       etc. → Reutilizar.
       • No repetir librerías.
       • No repetir documentación.
    En general: NO REPETIR CONOCIMIENTO.
Principios de buena programación

Abstraction Principle
    Principio de abstracción. “Cada pieza de
   funcionalidad significativa en un programa debe ser
   implementada en un sólo lugar del código fuente”
Principios de buena programación

    Abstraction Principle
 class Airplane implements Aircraft {          class Helicopter implements Aircraft {
     public void takeoff() {                       public void takeoff() {
       // algorithm taking off                       // algorithm taking off a helicopter
     }                                             }
     public void fly() {                           public void fly() {
       // algorithm flying an airplane               // algorithm flying a helicopter
     }                                             }
     public void land() {                          public void land() {
       // algorithm landing an airplane              // algorithm landing a helicopter
     }                                             }
 }                                             }

Implementa
                                                   class Pilot {
                        Implementa                    private Aircraft myShip;
                                                      public void setMyShip(Aircraft ship) {
 interface Aircraft {                                    myShip = ship;
     void takeoff();             Un piloto puede      }
     void fly();                                      public void flyMyShip() {
     void land();                pilotar tanto           myShip.takeoff();
 }                               Airplane como           myShip.fly();
                                 Helicopter              myShip.land();
                                                      }
                                                   }
Principios de buena programación

KISS (Keep it simple, stupid!)
    Manténgalo simple, ¡estúpido!. La mejor solución
   a un problema es la más simple.
   Menos código → menos bugs.
Principios de buena programación

KISS (Keep it simple, stupid!)
    Comentar código:
     for( i = 0, j = 100; i < j; i++, j--)   // count to 49
       System.out.println(i);                for( i = 0, j = 100; i < j; i++, j--)
                                               System.out.println(i);

    Hacer test unitarios.
    Nombres (variables, métodos, etc.) descriptivos.

     Date date1;                             Date birthday;
     Date date2;                             Date currentDate;
     Integer myInteger;                      Integer difference;
Principios de buena programación

Avoid Creating a YAGNI
    YAGNI (You aren’t going to need it) – Evitar crear
   algo que no vamos a necesitar. Es común tratar de
   ver el futuro y comenzar a crear abstracciones que
   todavía no estamos usando.
Principios de buena programación

Avoid Creating a YAGNI
    Se pierde tiempo al añadir, probar y documentar la
   funcionalidad no necesaria.
    Si la nueva característica no está bien definida,
   puede que no funcione correctamente, aunque con el
   tiempo sea necesaria.
    El software se hace más grande y más complicado
   innecesariamente.
Principios de buena programación

Avoid Creating a YAGNI
    A menos que existan especificaciones y control de
   revisiones, la funcionalidad no debería ser conocida
   por los programadores ya que podrían hacer uso de
   ella.
    Añadir una nueva característica innecesaria puede
   sugerir añadir otras nuevas características
   innecesarias.
Principios de buena programación

Do the simplest thing that ...
    Do the simplest thing that could possibly work.
   Haga lo más simple que funcione.
Principios de buena programación

Don’t make me think
    No me haga pensar. Evitar la pregunta ¿y ahora,
   cómo lo hago? Los nombres de las funciones,
   variables, etc. deben declarar claramente lo que
   hacen.
Principios de buena programación

Don’t make me think

public void print(String str1, Date date1, List myList) {

      // Algorithm ...
}




public void printBirthdayPartyInfo(String userName,
    Date birthday, List<Guest> guestsList) {

      // Algorithm...
}
Principios de buena programación

Open/Closed Principle
    Principio Abierto/Cerrado. Clases, módulos,
   funciones, etc. deben estar abiertas a la extensión.
   Escribir clases, no para que otros las modifiquen,
   sino para que se usen y extiendan.
Principios de buena programación

Open/Closed Principle
    Beneficios del principio Open/Closed:
       • Robustez → No se modifican las clases ya
       probadas.
       • Flexibilidad → Se facilita la implementación de
       nuevos requisitos o cambios en ellos.
       • Facilita las pruebas → menos propenso a
       errores.
Principios de buena programación

Open/Closed Principle
 class Student {
     String name;
     double percentage;
     int uid;
     [...]

 class StudentBatch {
     private List<Student> studentList;
     [...]
     public void getSutdentMarkMap(HashMap<Integer, Double> studentMarkMap) {
         for (Student student : studentList) {
             studentMarkMap.put(student.uid, student.percentage);
         }
     }
     [...]


 public void getSutdentMarkMap(Map<Integer, Double> studentMarkMap) {
     for (Student student : studentList) {
         studentMarkMap.put(student.uid, student.percentage);
     }
 }
Principios de buena programación

Write Code for the Maintainer
    Escriba código pensando en el que va a
   mantenerlo. “Escriba el código como si el que tuviera que
   mantenerlo fuera un psicópata asesino que conoce donde
   vives”.
Principios de buena programación

Principle of least astonishment
    Principio del menor asombro. Ejemplo: el
   nombre de una función debería corresponder con lo
   que hace.
Principios de buena programación

Principle of least astonishment
 public void addInstance(String className) {
     try {
         Class clazz = Class.forName(className);
         objectSet.add(clazz.newInstance());
     }catch (Exception ex) {
         throw new RuntimeException(ex);                Este método hace más
     }                                                  de lo que debería.
 }
                                                        Además de añadir una
                                                        instancia, también la
                                                        crea.
                                                        Se debería cambiar de
 public void createAndAddInstance(String className) {   nombre o crear dos
     try {
         Class clazz = Class.forName(className);        métodos.
         objectSet.add(clazz.newInstance());
     }catch (Exception ex) {
         throw new RuntimeException(ex);
     }
 }
Principios de buena programación

Single Responsibility Principle
     Principio de responsabilidad única. Un
    componente de código debe ejecutar una única y
    bien definida tarea.
Principios de buena programación

Single Responsibility Principle
 public void insertUser(User user){ … }
 public void deleteUser(User user){ … }
 public void updateUser(User user){ … }




                                                       ¿ QUÉ HACEN
 public void updateUser(User user) {
     //Se actualiza el propio usuario
                                                       ESTAS LLAMADAS
     userManager.update();                             AQUÍ ?
     //Se actualizan estadisticas para el usuario
     updateStatistics(user);

     //Se eliminan los ficheros asociados al usuario
     removeFiles(user);
 }
Principios de buena programación

Minimize Coupling
    Minimizar el acoplamiento. Cada componente
   (bloque de código, clase, función, etc.) debe
   minimizar las dependencias de otros componentes.
Principios de buena programación

Maximize Cohesion
    Maximizar cohesión. Evitar implementar en un
   componente dos funcionalidades que no están
   relacionadas, cumpliendo tareas que no tienen
   relación.
Principios de buena programación

      Maximize Cohesion
public class CoffeeCup {                        Public class CoffeeCup {
  private int innerCoffee;                        private int innerCoffee;
  public void add(int amount) {                   public void add(int amount) {
    innerCoffee += amount;                            innerCoffee += amount;
  }                                               }
  public int remove(boolean all, int amount){     public int releaseOneSip(int sipSize){
      int returnValue = 0;                            int sip = sipSize;
      if (all) {                                      if (innerCoffee < sipSize) {
          int allCoffee = innerCoffee;                    sip = innerCoffee;
          innerCoffee = 0;                            }
          returnValue = allCoffee;                    innerCoffee -= sip;
      } else {                                        return sip;
          int sip = amount;                       }
          if (innerCoffee < amount) {             public int spillEntireContents() {
               sip = innerCoffee;                     int all = innerCoffee;
      }                                               innerCoffee = 0;
          innerCoffee -= sip;                         return all;

                                                                        Hi cohesion
          returnValue = sip;                      }
      }                                         }
      return returnValue;

                           Low cohesion
  }
}
Principios de buena programación

Hide Implementation Details
    Ocultar detalles de implementación. En C# o Java
   → Interfaces. Usar correctamente modificadores de
   acceso: public, private y protected.
Principios de buena programación

Hide Implementation Details

ArrayList<String> users = new ArrayList<String>();


         Usar interfaces en vez de implementaciones.
         Se ocultan detalles de implementación y se
         deja libertad para elegir (ArrayList, LinkedList,
         etc.)
List<String> users = new ArrayList<String>();
Principios de buena programación

Avoid Premature Optimization
    Evitar la optimización prematura. Evitar pensar
   optimizar código, si apenas lo estamos armando. Ir
   armando el código de tal forma que podamos
   refactorizarlo.
Principios de buena programación

Code Reuse is Good
    La reutilización de código es buena. En Java →
   Apache Commons.
Principios de buena programación

Code Reuse is Good

     Necesito un método que
     abrevie un string en función
     de un tamaño determinado...




                     Apache Commons nos lo proporciona
                     public static String abbreviate(String str,
                     int maxWidth)

                     //Ejemplo:
                     StringUtils.abbreviate("abcd", 2) = "ab..."
Principios de buena programación

Embrace Change
    Abraza el cambio. El cambio es inevitable en el
   desarrollo de software. No hay que luchar contra el
   cambio, sino trabajar para estar preparado para él →
   Programación ágil, integración continua, Scrum, etc.
Buenas prácticas en código

Code conventions ¿para qué?
    Alto % del coste del software → mantenimiento.
    Casi ningún software se mantiene durante toda su
   vida por el autor original.
    Mejora la legibilidad del software, permitiendo a los
   ingenieros a entender el nuevo código con mayor
   rapidez y en profundidad.
    Código fuente es igual que cualquier otro producto
   → asegurarse de que está tan bien empaquetado y
   limpio como cualquier otro producto.
Buenas prácticas en código

Java Code conventions
    Convenciones estándar de Sun (Oracle) para
   seguir y recomendar que otros sigan.
    Cubre los nombres de archivo, organización de
   archivos, sangría, comentarios, declaraciones,
   sentencias, espacios en blanco e incluye un ejemplo
   de código.
 codeconventions-150003.pdf
Ejemplos Code conventions

Indentación
 //DON’T USE THIS INDENTATION
 if ((condition1 && condition2)
             || (condition3 && condition4)
             ||!(condition5 && condition6)) { //BAD WRAPS
             doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS
 }
 //USE THIS INDENTATION INSTEAD
 if ((condition1 && condition2)
                         || (condition3 && condition4)
                         ||!(condition5 && condition6)) {
             doSomethingAboutIt();
 }
 //OR USE THIS
 if ((condition1 && condition2) || (condition3 && condition4)
                         ||!(condition5 && condition6)) {
             doSomethingAboutIt();
 }
Ejemplos Code conventions

Comentarios
   Cuatro tipos de comentarios:
      • Block
      • Single-line
      • Trailing
      • End-of-line
Ejemplos Code conventions

Clases e Interfaces
    Para programar Clases e Interfaces en Java:
       • Sin espacios entre el nombre de un método y
       el paréntesis “(“.
       • La llave “{” debe aparecer al final de la línea y
       en la misma línea que la declaración.
       • La llave “}” empieza una línea por sí misma,
       indentada con la línea que contiene la llave “{”.
Ejemplos Code conventions

Clases e Interfaces
  class Sample extends Object {
          int ivar1;
          int ivar2;

         Sample(int i, int j) {
                ivar1 = i;
                ivar2 = j;
         }

         int emptyMethod() {}

         ...
  }
Ejemplos Code conventions

Excepciones
   No dejar bloques “catch” vacíos.
   Los bloques de excepciones seguirán el siguiente
  formato:
      try {
              statements;
      } catch (ExceptionClass e) {
              statements;
      }
Buenas prácticas en código

Herramientas Java
    Checkstyle: Herramienta para ayudar a escribir
   código que siga estándares. Plugin para Eclipse.
    PMD: Analiza y busca potenciales problemas en el
   código. Plugin para Eclipse.
       • Sentencias vacías try/catch, etc.
       • Variables, parámetros, etc. no usados
       • Mal uso de String/StringBuffer
       • Sentencias "if" innecesarias, for → while, etc.
       • Código copiado y pegado.
Buenas prácticas

Recursos Java
    Libro “Effective Java” (Joshua Bloch)
    Java Best Practices: http://www.javapractices.com/
    J2EE Best Practices: http://www.precisejava.com/
Buenas prácticas

Programación: Errores comunes
    Fiabilidad de los parámetros de entrada: No
   asegurarse de que los parámetros recibidos son los
   que esperamos.
    Fiabilidad de los valores: No comprobar si un
   elemento tiene valor antes de acceder a él.
    Elementos en colecciones: No asegurar se de
   que un array o colección tenga valor y contenga
   elementos antes de acceder a ellos.
    No comentar. (Sin comentarios...).
Buenas prácticas

Programación: Errores comunes
    Acceso a colecciones: No comprobar si existe
   elemento para un índice antes de acceder a él en
   una colección indexada.
    No liberar recursos adecuadamente.
    Recursividad: El método recursivo infinito.
    Malas prácticas: Utilizar incorrectamente técnicas
   conocidas.
Programación: Errores comunes

  Fiabilidad de parámetros de entrada
          Los parámetros recibidos por un método «público»,
         es decir expuesto al mundo exterior, nunca son
         confiables.
public static double metodoExpuesto(int nuncaMenorQue4, int nunca0){
    return nuncaMenorQue4 / nunca0 ;
}
public static void main(String... args){
    StaticDemo.metodoExpuesto(2, 0);
    //El metodo fallara despues de ejecutarse
}


public void publicarNoticia(Noticia noticia, int importancia){
    if (noticia== null){
        throw new ArgumentNullException("Parametro noticia no puede ser null");
    }
    //A partir de aqui, ira el codigo para publicar la noticia...
}
Programación: Errores comunes

 Fiabilidad de los valores
         Acceder a los elementos sin antes comprobar si
        tienen un valor.
Bar foo = getFooBar();
foo.ToString();

//Acceder a metodos de "foo" sin comprobar, puede fallar si getFooBar
devuelve null




Bar foo = getFooBar();
if(foo != null) {
    foo.ToString();
}
Programación: Errores comunes

 Elementos en colecciones
         No asegurarse de que un array o colección tenga
        valor y contenga elementos antes de acceder a ellos.
List<MiNumero> numeros= obtenerNumeros();
txtNumero1.text = numeros[0].toString();
txtNumero2.text = numeros[1].toString();

//Si numeros es null o numeros no tiene elementos este codigo fallara



List<MiNumero> numeros= obtenerNumeros();
if (numeros != null && numeros.size() > 0) {
    txtNumero1.text = numeros.get(0).toString();
    txtNumero2.text = numeros.get(1).toString();
}
Programación: Errores comunes

No comentar
   Comentar el código también es programar,pero se
  debe comentar con criterio.
Programación: Errores comunes

    Acceso a colecciones
         Antes de acceder a un elemento de una colección
         indexada se debe comprobar si la colección tiene al
         menos el número de elementos que necesitamos.
for (int i = 0; i < cargarEmpresas().size(); i++) {

     if (cargarEmpresas().get(i) == ""){
         gridView.rows[i].cells[7].visible = false;
     }                                                        ¡HORROR!
}


for (int i = 0; i < empresasSize; i++) {
    if (gridView.rows.count > i && "".equals(empresas.get(i))){
        gridView.rows[i].cells[7].visible = false;
    }
}
Programación: Errores comunes

 No liberar recursos
         Grave error no liberar recursos adecuadamente.
public void saveData() {
    Connection cnn;
    try{
         cnn = new SqlConnection(cnnString);
         cnn.open();
    } catch (Exception e) {
         System.out.println("Se ha producido un erro de base de datos");
         e.printStackTrace();
    }
    finally {
         if (cnn != null) {
             cnn.close();
          }
    }
}
Programación: Errores comunes

    Recursividad
          El típico fallo al utilizar recursividad es no poner un
         límite a las llamadas recursivas.
static long LastFibonacciNumber(long anterior1, long anterior2) {

     long numero = anterior1 + anterior2;
     Console.write(numero + " ");
     numero = lastFibonacciNumber(anterior2, numero);
     return numero;
}

          Para evitar el conocido error de "stack overflow" →
         utilizar líneas de control que permitan dar fin al
         anidamiento de llamadas recursivas.
Programación: Errores comunes

Malas prácticas
   Utilizar incorrectamente técnicas conocidas.
   Habitualmente se implementa mal una técnica o
  patrón conocidos.
   Avoid basic style errors → javapractices.
   Common Java Mistakes → javaprogrammingforums
   Java Anti-Patterns → www.odi.ch
Buenas prácticas




Ejemplos
Buenas prácticas

Consejos generales
    Seguir estándares.
    Seguir patrones de diseño.
    Reutilizar código → No reinventar la rueda.
    Usar librerías “reconocidas”, documentadas, etc.
   Ejemplo: Apache Commons
    Test unitarios.
    Conocer bien nuestro entorno de desarrollo (IDE):
   shortcuts, plugins, etc.
Buenas prácticas

Consejos generales
    Refactorización: Técnica de ingeniería de
   software para reestructurar código fuente, alterando
   su estructura interna sin cambiar su comportamiento
   externo.
    Comentar de forma completa pero no excesiva.
    Seguir “buenas prácticas” del Framework elegido.
    Nombrar “con sentido” las clases, variables, etc.
Buenas prácticas

Consejos generales
    Leer código ajeno. Que otros lean tú código.
    Pautas para leer código de una manera efectiva:
Buenas prácticas

Consejos generales
    Tener en cuenta el rendimiento: El rendimiento
   de nuestras aplicaciones es tan importante como
   otros criterios de aceptación. Criterios a tener en
   cuenta para medir el rendimiento:
       • Recursos hardware del cliente.
       • Realizar pruebas de rendimiento en un entorno
       que simule el hardware mínimo aceptado.
       • Hacer pruebas REALES.
Buenas prácticas

Consejos generales
  Buena gestión de logs: Los logs son las trazas o
 rastros que deja una aplicación. Nos brindarán
 información valiosa sobre qué está ocurriendo en
 nuestro sistema y dónde aplicar las mejoras más
 inmediatas.
Buenas prácticas

Consejos generales
    Organiza el desarrollo:
       • Define una sintaxis de programación común
       para tu equipo de trabajo.
       • Define una estructura de directorios basada
       en la separación de conceptos:
              • Código fuente.
              • Documentación.
              • Recursos.
              • Productos finales.
              • Divide proyectos en librerías.
Buenas prácticas

Consejos generales
    Usa sistemas de control de versiones para
   compartir el trabajo con el equipo. Usándolos se
   aprende a usarlos.
   Libro gratuito → http://www.ericsink.com/vcbe/
    Usa herramientas o prepara scripts que te permitan
   automatizar procesos productivos. → ANT, Maven
   etc.
    Nightly builds → Generar productos finales
   “frescos” todos los días.
Buenas prácticas

Consejos generales
    Comparte conocimiento. Wiki, blogs, reuniones,
   charlas, etc.
Buenas prácticas

Consejos generales
    Cobertura TDD: Test Driven Development →
   http://cobertura.sourceforge.net/
    Integración continua →
   http://continuum.apache.org/
    Software para la gestión de tareas/bugs →
   http://www.redmine.org/, http://www.mantisbt.org/,
   http://trac.edgewall.org/, etc.
Material extra


Buenas prácticas
  en el uso de
  repositorios
Buenas prácticas

Referencias
    Principios de buena programación: The Principles
   of Good Programming, Christopher Diggins.
    Java Code Conventions:
   http://www.oracle.com/technetwork/java/codeconvent
   ions-150003.pdf
    Effective Java. Joshua Bloch.
    MasterDISS_DesignPatterns, Iker Jamardo.
Buenas prácticas

Referencias
    Imágenes
       • DRY: http://www.dreamstime.com/royalty-free-stock-photo-don
       %27t-repeat-yourself-acronym-image20103645
       • Abstraction Principle: http://www.danpontefract.com/give-
       piece-a-chance/
       • Open/Closed Principle:
       http://www.vitalygorn.com/blog/image.axd?picture=Open-Closed.jpg
       • YAGNI: http://blog.thescrumster.com/?tag=yagni
       • Don't make me think:
       http://riyajs.files.wordpress.com/2011/03/usability_testing.jpg
       • KISS: http://milldesk.com.br/en/k-i-s-s-keep-it-simple-stupid/
       • Write Code for the Maintainer:
       http://notio.com.ar/adjuntos/imagenes/000/102/0000102304.jpg
Buenas prácticas

Referencias
    Imágenes
       • YAGNI: http://blog.thescrumster.com/?tag=yagni
       • Don't make me think:
       http://riyajs.files.wordpress.com/2011/03/usability_testing.jpg
       • KISS: http://milldesk.com.br/en/k-i-s-s-keep-it-simple-stupid/
       • Write Code for the Maintainer:
       http://notio.com.ar/adjuntos/imagenes/000/102/0000102304.jpg
       • Single Responsibility Principle:
       http://www.colourbox.com/preview/1995285-118643-3d-
       illustration-of-one-selected-target-with-three-arrows-right-target-
       concept.jpg
Buenas prácticas

Referencias
    Imágenes
       • Maximize Cohesion: http://vision2030.bwd.public-
       i.tv/viewfinder_core/public/images/uploaded/l_1259326852_cohe
       sion.png
       • Hide Implementation Details: http://geek.pe /wp-
       content/uploads/2010/04/como-ocultar-tu-ip-al-enviar-un-correo-
       gmail-hotmail.jpg
       • Avoid Premature Optimization:
       http://rlv.zcache.es/la_optimizacion_prematura_es_la_raiz_de_to
       do_el_ma_im%C3%A1n-p147403910183181037en878_210.jpg
       • Code Reuse is Good:
       http://www.alexanderinteractive.com/blog/reuse-code.jpg
Buenas prácticas

Referencias
    Imágenes
       • Embrace Change: http://static.eharmony.com/dating-
       advice/wp-content/uploads/images/are-you-caught-in-the-
       comfort-zone-trap-learning-to-embrace-change-large.jpg
       • Minimize Coupling:
       http://lh3.ggpht.com/_huul_BKMb4M/S2wKiTapibI/AAAAAAAAG
       ek/h9Qs-AKcGa8/tuerca.gif
Buenas prácticas
para la construcción de software


           FIN
                              Iker Canarias
                       iker.canarias (gmail)

Más contenido relacionado

La actualidad más candente

Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Sérgio Souza Costa
 
Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison
Raul Hernandez Mayo
 
Programacion orientada a componentes
Programacion orientada a componentesProgramacion orientada a componentes
Programacion orientada a componentes
mellcv
 
Tipos De Ensambladores
Tipos De EnsambladoresTipos De Ensambladores
Tipos De Ensambladores
SpiderHal
 
Principais Técnicas de Elicitação de Requisitos
Principais Técnicas de Elicitação de RequisitosPrincipais Técnicas de Elicitação de Requisitos
Principais Técnicas de Elicitação de Requisitos
Norton Guimarães
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
Denis L Presciliano
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Zahra Heydari
 
Lógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetiçãoLógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetição
Wesley R. Bezerra
 
Estructuras algoritmicas representación
Estructuras algoritmicas representaciónEstructuras algoritmicas representación
Estructuras algoritmicas representación
Benjamin Medina Ramirez
 
Plsql y paquetes
Plsql y paquetesPlsql y paquetes
Plsql y paquetes
Fabián Alexander Moya
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
Elaine Cecília Gatto
 
Algoritmo recursivo
Algoritmo recursivoAlgoritmo recursivo
Algoritmo recursivo
Carlos Rodrigo de Araujo
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos Java
José Mendoza
 
Introduction to android testing
Introduction to android testingIntroduction to android testing
Introduction to android testing
Diego Torres Milano
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandra
AlexandraMolinaSanchez
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
Luiz Ricardo Silva
 
3. diseño de bases de datos distribuidas
3. diseño de bases de datos distribuidas3. diseño de bases de datos distribuidas
3. diseño de bases de datos distribuidas
Janoé Antonio González Reyes
 
Trabalho de sgbd
Trabalho de sgbdTrabalho de sgbd
Trabalho de sgbd
Junior Cesar
 
Noción de archivo real y virtual
Noción de archivo real y virtual Noción de archivo real y virtual
Noción de archivo real y virtual
Laura Guadalupe Rosado Hernández
 
Modelos concurrentes
Modelos concurrentesModelos concurrentes
Modelos concurrentes
Juan Acevedo Solis
 

La actualidad más candente (20)

Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
 
Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison Procedimiento Para Utilizar Flex Y Bison
Procedimiento Para Utilizar Flex Y Bison
 
Programacion orientada a componentes
Programacion orientada a componentesProgramacion orientada a componentes
Programacion orientada a componentes
 
Tipos De Ensambladores
Tipos De EnsambladoresTipos De Ensambladores
Tipos De Ensambladores
 
Principais Técnicas de Elicitação de Requisitos
Principais Técnicas de Elicitação de RequisitosPrincipais Técnicas de Elicitação de Requisitos
Principais Técnicas de Elicitação de Requisitos
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Lógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetiçãoLógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetição
 
Estructuras algoritmicas representación
Estructuras algoritmicas representaciónEstructuras algoritmicas representación
Estructuras algoritmicas representación
 
Plsql y paquetes
Plsql y paquetesPlsql y paquetes
Plsql y paquetes
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Algoritmo recursivo
Algoritmo recursivoAlgoritmo recursivo
Algoritmo recursivo
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos Java
 
Introduction to android testing
Introduction to android testingIntroduction to android testing
Introduction to android testing
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandra
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 
3. diseño de bases de datos distribuidas
3. diseño de bases de datos distribuidas3. diseño de bases de datos distribuidas
3. diseño de bases de datos distribuidas
 
Trabalho de sgbd
Trabalho de sgbdTrabalho de sgbd
Trabalho de sgbd
 
Noción de archivo real y virtual
Noción de archivo real y virtual Noción de archivo real y virtual
Noción de archivo real y virtual
 
Modelos concurrentes
Modelos concurrentesModelos concurrentes
Modelos concurrentes
 

Similar a Buenas prácticas para la construcción de software

Buenasprcticas
BuenasprcticasBuenasprcticas
Buenasprcticas
Juan Baudazio Sanchez
 
Informatica
InformaticaInformatica
Tap04 poo
Tap04 pooTap04 poo
Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)
jmiguel rodriguez
 
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
jaircazarin
 
PRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEBPRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEB
Yeison11020
 
Adapter pattern easy
Adapter pattern easyAdapter pattern easy
Adapter pattern easy
Laura Gonzalez Fernandez
 
Jordan solis (1)
Jordan solis (1)Jordan solis (1)
Jordan solis (1)
giovanni ascencio
 
Lenguaje c ++ guía para programadores
Lenguaje c ++  guía para programadoresLenguaje c ++  guía para programadores
Lenguaje c ++ guía para programadores
Aldo Hernán Zanabria Gálvez
 
Cuestionario
CuestionarioCuestionario
Cuestionario
Leonardo Moctezuma
 
Cuestionario
CuestionarioCuestionario
Cuestionario
Jose Nava
 
Guia practica secuenciales eclipse java 01
Guia practica secuenciales eclipse java 01Guia practica secuenciales eclipse java 01
Guia practica secuenciales eclipse java 01
Emerson Garay
 
Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
Aldo Hernán Zanabria Gálvez
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
kaolong
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
Fernando Perez
 
01 fundamentos-java
01 fundamentos-java01 fundamentos-java
01 fundamentos-java
JAVIER CAJAHUAMAN MALLCCO
 
Tc2 301403 21
Tc2 301403 21Tc2 301403 21
Tc2 301403 21
Emerson Quintero
 
Segundo laboratorio de Android
Segundo laboratorio de AndroidSegundo laboratorio de Android
Segundo laboratorio de Android
GDG Cali
 
Greenfoot 6
Greenfoot 6Greenfoot 6
Greenfoot 6
Christian Medina
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
Gabriel Chertok
 

Similar a Buenas prácticas para la construcción de software (20)

Buenasprcticas
BuenasprcticasBuenasprcticas
Buenasprcticas
 
Informatica
InformaticaInformatica
Informatica
 
Tap04 poo
Tap04 pooTap04 poo
Tap04 poo
 
Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)
 
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
Rompiendo dependencias contenidas en ensamblados .NET mediante la refactoriza...
 
PRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEBPRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEB
 
Adapter pattern easy
Adapter pattern easyAdapter pattern easy
Adapter pattern easy
 
Jordan solis (1)
Jordan solis (1)Jordan solis (1)
Jordan solis (1)
 
Lenguaje c ++ guía para programadores
Lenguaje c ++  guía para programadoresLenguaje c ++  guía para programadores
Lenguaje c ++ guía para programadores
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Guia practica secuenciales eclipse java 01
Guia practica secuenciales eclipse java 01Guia practica secuenciales eclipse java 01
Guia practica secuenciales eclipse java 01
 
Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
 
01 fundamentos-java
01 fundamentos-java01 fundamentos-java
01 fundamentos-java
 
Tc2 301403 21
Tc2 301403 21Tc2 301403 21
Tc2 301403 21
 
Segundo laboratorio de Android
Segundo laboratorio de AndroidSegundo laboratorio de Android
Segundo laboratorio de Android
 
Greenfoot 6
Greenfoot 6Greenfoot 6
Greenfoot 6
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
 

Más de Iker Canarias

Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
Iker Canarias
 
Subversion - buenas prácticas
Subversion - buenas prácticasSubversion - buenas prácticas
Subversion - buenas prácticas
Iker Canarias
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache Ant
Iker Canarias
 
Introducción a JUnit
Introducción a JUnitIntroducción a JUnit
Introducción a JUnit
Iker Canarias
 
Integración de aplicaciones Java
Integración de aplicaciones JavaIntegración de aplicaciones Java
Integración de aplicaciones Java
Iker Canarias
 
Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
Iker Canarias
 
Persistencia de datos en Java
Persistencia de datos en JavaPersistencia de datos en Java
Persistencia de datos en Java
Iker Canarias
 
Introducción a JEE
Introducción a JEEIntroducción a JEE
Introducción a JEE
Iker Canarias
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
Iker Canarias
 
Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBoss
Iker Canarias
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP Apache
Iker Canarias
 

Más de Iker Canarias (11)

Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Subversion - buenas prácticas
Subversion - buenas prácticasSubversion - buenas prácticas
Subversion - buenas prácticas
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache Ant
 
Introducción a JUnit
Introducción a JUnitIntroducción a JUnit
Introducción a JUnit
 
Integración de aplicaciones Java
Integración de aplicaciones JavaIntegración de aplicaciones Java
Integración de aplicaciones Java
 
Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
 
Persistencia de datos en Java
Persistencia de datos en JavaPersistencia de datos en Java
Persistencia de datos en Java
 
Introducción a JEE
Introducción a JEEIntroducción a JEE
Introducción a JEE
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBoss
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP Apache
 

Último

Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
AMADO SALVADOR
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
AMADO SALVADOR
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
JuanaNT7
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
Festibity
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
evelinglilibethpeafi
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
NicandroMartinez2
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
Miguel Rebollo
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 

Último (20)

Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 

Buenas prácticas para la construcción de software

  • 1. Buenas prácticas para la construcción de software
  • 2. Introducción Índice de contenidos 1. Definición. 2. ¿Porqué se desarrolla mal? 3.¿Porqué debo seguir buenas prácticas? 4. Principios de la buena programación. 5. Buenas prácticas en código. 6. Consejos generales. 7. Ejemplos basados en Java, pero aplicables a “cualquier” lenguaje de programación.
  • 3. Introducción Definición Por buenas prácticas se entiende un conjunto coherente de acciones que han rendido buen o incluso excelente servicio en un determinado contexto y que se espera que, en contextos similares, rindan similares resultados. Éstas dependen de las épocas, de las modas y hasta de la empresa consultora o del autor que las preconiza. No es de extrañar que algunas sean incluso contradictorias entre ellas. (Fuente: wikipedia)
  • 4. Introducción ¿Porqué se desarrolla mal?  Falta de tiempo.  Falta de conocimiento.  Falta de motivación.  Acudir a las fuentes equivocadas.  Fallos en las etapas iniciales de desarrollo de software (análisis, requisitos, etc.).  Etc.
  • 5. Introducción ¿Porqué buenas prácticas?  Establece reglas y convenios.  Aporta higiene al código.  Estandariza el desarrollo.  Fácil lectura = Fácil mantenimiento.  Facilita la escalabilidad del código.  Facilita la reutilización y la integración de manera homogénea.
  • 6. Principios de buena programación The Principles of Good Programming by Christopher Diggins
  • 7. Principios de buena programación Listado de los principios  DRY - Don’t repeat yourself .  Abstraction Principle.  KISS (Keep it simple, stupid!) .  Avoid Creating a YAGNI (You aren’t going to need it).  Do the simplest thing that could possibly work.  Don’t make me think.  Open/Closed Principle.
  • 8. Principios de buena programación Listado de los principios  Write Code for the Maintainer.  Principle of least astonishment.  Single Responsibility Principle.  Minimize Coupling.  Maximize Cohesion.  Hide Implementation Details.  Law of Demeter.
  • 9. Principios de buena programación Listado de los principios  Avoid Premature Optimization.  Code Reuse is Good.  Separation of Concerns.  Embrace Change.
  • 10. Principios de buena programación DRY (Don’t repeat yourself)  No repetirse a sí mismo → evitar la repetición.
  • 11. Principios de buena programación DRY (Don’t repeat yourself)  Evitar la repetición en todas sus posibilidades: • No repetir código: funciones, métodos, clases, etc. → Reutilizar. • No repetir librerías. • No repetir documentación.  En general: NO REPETIR CONOCIMIENTO.
  • 12. Principios de buena programación Abstraction Principle  Principio de abstracción. “Cada pieza de funcionalidad significativa en un programa debe ser implementada en un sólo lugar del código fuente”
  • 13. Principios de buena programación Abstraction Principle class Airplane implements Aircraft { class Helicopter implements Aircraft { public void takeoff() { public void takeoff() { // algorithm taking off // algorithm taking off a helicopter } } public void fly() { public void fly() { // algorithm flying an airplane // algorithm flying a helicopter } } public void land() { public void land() { // algorithm landing an airplane // algorithm landing a helicopter } } } } Implementa class Pilot { Implementa private Aircraft myShip; public void setMyShip(Aircraft ship) { interface Aircraft { myShip = ship; void takeoff(); Un piloto puede } void fly(); public void flyMyShip() { void land(); pilotar tanto myShip.takeoff(); } Airplane como myShip.fly(); Helicopter myShip.land(); } }
  • 14. Principios de buena programación KISS (Keep it simple, stupid!)  Manténgalo simple, ¡estúpido!. La mejor solución a un problema es la más simple. Menos código → menos bugs.
  • 15. Principios de buena programación KISS (Keep it simple, stupid!)  Comentar código: for( i = 0, j = 100; i < j; i++, j--) // count to 49 System.out.println(i); for( i = 0, j = 100; i < j; i++, j--) System.out.println(i);  Hacer test unitarios.  Nombres (variables, métodos, etc.) descriptivos. Date date1; Date birthday; Date date2; Date currentDate; Integer myInteger; Integer difference;
  • 16. Principios de buena programación Avoid Creating a YAGNI  YAGNI (You aren’t going to need it) – Evitar crear algo que no vamos a necesitar. Es común tratar de ver el futuro y comenzar a crear abstracciones que todavía no estamos usando.
  • 17. Principios de buena programación Avoid Creating a YAGNI  Se pierde tiempo al añadir, probar y documentar la funcionalidad no necesaria.  Si la nueva característica no está bien definida, puede que no funcione correctamente, aunque con el tiempo sea necesaria.  El software se hace más grande y más complicado innecesariamente.
  • 18. Principios de buena programación Avoid Creating a YAGNI  A menos que existan especificaciones y control de revisiones, la funcionalidad no debería ser conocida por los programadores ya que podrían hacer uso de ella.  Añadir una nueva característica innecesaria puede sugerir añadir otras nuevas características innecesarias.
  • 19. Principios de buena programación Do the simplest thing that ...  Do the simplest thing that could possibly work. Haga lo más simple que funcione.
  • 20. Principios de buena programación Don’t make me think  No me haga pensar. Evitar la pregunta ¿y ahora, cómo lo hago? Los nombres de las funciones, variables, etc. deben declarar claramente lo que hacen.
  • 21. Principios de buena programación Don’t make me think public void print(String str1, Date date1, List myList) { // Algorithm ... } public void printBirthdayPartyInfo(String userName, Date birthday, List<Guest> guestsList) { // Algorithm... }
  • 22. Principios de buena programación Open/Closed Principle  Principio Abierto/Cerrado. Clases, módulos, funciones, etc. deben estar abiertas a la extensión. Escribir clases, no para que otros las modifiquen, sino para que se usen y extiendan.
  • 23. Principios de buena programación Open/Closed Principle  Beneficios del principio Open/Closed: • Robustez → No se modifican las clases ya probadas. • Flexibilidad → Se facilita la implementación de nuevos requisitos o cambios en ellos. • Facilita las pruebas → menos propenso a errores.
  • 24. Principios de buena programación Open/Closed Principle class Student { String name; double percentage; int uid; [...] class StudentBatch { private List<Student> studentList; [...] public void getSutdentMarkMap(HashMap<Integer, Double> studentMarkMap) { for (Student student : studentList) { studentMarkMap.put(student.uid, student.percentage); } } [...] public void getSutdentMarkMap(Map<Integer, Double> studentMarkMap) { for (Student student : studentList) { studentMarkMap.put(student.uid, student.percentage); } }
  • 25. Principios de buena programación Write Code for the Maintainer  Escriba código pensando en el que va a mantenerlo. “Escriba el código como si el que tuviera que mantenerlo fuera un psicópata asesino que conoce donde vives”.
  • 26. Principios de buena programación Principle of least astonishment  Principio del menor asombro. Ejemplo: el nombre de una función debería corresponder con lo que hace.
  • 27. Principios de buena programación Principle of least astonishment public void addInstance(String className) { try { Class clazz = Class.forName(className); objectSet.add(clazz.newInstance()); }catch (Exception ex) { throw new RuntimeException(ex); Este método hace más } de lo que debería. } Además de añadir una instancia, también la crea. Se debería cambiar de public void createAndAddInstance(String className) { nombre o crear dos try { Class clazz = Class.forName(className); métodos. objectSet.add(clazz.newInstance()); }catch (Exception ex) { throw new RuntimeException(ex); } }
  • 28. Principios de buena programación Single Responsibility Principle  Principio de responsabilidad única. Un componente de código debe ejecutar una única y bien definida tarea.
  • 29. Principios de buena programación Single Responsibility Principle public void insertUser(User user){ … } public void deleteUser(User user){ … } public void updateUser(User user){ … } ¿ QUÉ HACEN public void updateUser(User user) { //Se actualiza el propio usuario ESTAS LLAMADAS userManager.update(); AQUÍ ? //Se actualizan estadisticas para el usuario updateStatistics(user); //Se eliminan los ficheros asociados al usuario removeFiles(user); }
  • 30. Principios de buena programación Minimize Coupling  Minimizar el acoplamiento. Cada componente (bloque de código, clase, función, etc.) debe minimizar las dependencias de otros componentes.
  • 31. Principios de buena programación Maximize Cohesion  Maximizar cohesión. Evitar implementar en un componente dos funcionalidades que no están relacionadas, cumpliendo tareas que no tienen relación.
  • 32. Principios de buena programación Maximize Cohesion public class CoffeeCup { Public class CoffeeCup { private int innerCoffee; private int innerCoffee; public void add(int amount) { public void add(int amount) { innerCoffee += amount; innerCoffee += amount; } } public int remove(boolean all, int amount){ public int releaseOneSip(int sipSize){ int returnValue = 0; int sip = sipSize; if (all) { if (innerCoffee < sipSize) { int allCoffee = innerCoffee; sip = innerCoffee; innerCoffee = 0; } returnValue = allCoffee; innerCoffee -= sip; } else { return sip; int sip = amount; } if (innerCoffee < amount) { public int spillEntireContents() { sip = innerCoffee; int all = innerCoffee; } innerCoffee = 0; innerCoffee -= sip; return all; Hi cohesion returnValue = sip; } } } return returnValue; Low cohesion } }
  • 33. Principios de buena programación Hide Implementation Details  Ocultar detalles de implementación. En C# o Java → Interfaces. Usar correctamente modificadores de acceso: public, private y protected.
  • 34. Principios de buena programación Hide Implementation Details ArrayList<String> users = new ArrayList<String>(); Usar interfaces en vez de implementaciones. Se ocultan detalles de implementación y se deja libertad para elegir (ArrayList, LinkedList, etc.) List<String> users = new ArrayList<String>();
  • 35. Principios de buena programación Avoid Premature Optimization  Evitar la optimización prematura. Evitar pensar optimizar código, si apenas lo estamos armando. Ir armando el código de tal forma que podamos refactorizarlo.
  • 36. Principios de buena programación Code Reuse is Good  La reutilización de código es buena. En Java → Apache Commons.
  • 37. Principios de buena programación Code Reuse is Good Necesito un método que abrevie un string en función de un tamaño determinado... Apache Commons nos lo proporciona public static String abbreviate(String str, int maxWidth) //Ejemplo: StringUtils.abbreviate("abcd", 2) = "ab..."
  • 38. Principios de buena programación Embrace Change  Abraza el cambio. El cambio es inevitable en el desarrollo de software. No hay que luchar contra el cambio, sino trabajar para estar preparado para él → Programación ágil, integración continua, Scrum, etc.
  • 39. Buenas prácticas en código Code conventions ¿para qué?  Alto % del coste del software → mantenimiento.  Casi ningún software se mantiene durante toda su vida por el autor original.  Mejora la legibilidad del software, permitiendo a los ingenieros a entender el nuevo código con mayor rapidez y en profundidad.  Código fuente es igual que cualquier otro producto → asegurarse de que está tan bien empaquetado y limpio como cualquier otro producto.
  • 40. Buenas prácticas en código Java Code conventions  Convenciones estándar de Sun (Oracle) para seguir y recomendar que otros sigan.  Cubre los nombres de archivo, organización de archivos, sangría, comentarios, declaraciones, sentencias, espacios en blanco e incluye un ejemplo de código. codeconventions-150003.pdf
  • 41. Ejemplos Code conventions Indentación //DON’T USE THIS INDENTATION if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { //BAD WRAPS doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS } //USE THIS INDENTATION INSTEAD if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); } //OR USE THIS if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); }
  • 42. Ejemplos Code conventions Comentarios  Cuatro tipos de comentarios: • Block • Single-line • Trailing • End-of-line
  • 43. Ejemplos Code conventions Clases e Interfaces  Para programar Clases e Interfaces en Java: • Sin espacios entre el nombre de un método y el paréntesis “(“. • La llave “{” debe aparecer al final de la línea y en la misma línea que la declaración. • La llave “}” empieza una línea por sí misma, indentada con la línea que contiene la llave “{”.
  • 44. Ejemplos Code conventions Clases e Interfaces class Sample extends Object { int ivar1; int ivar2; Sample(int i, int j) { ivar1 = i; ivar2 = j; } int emptyMethod() {} ... }
  • 45. Ejemplos Code conventions Excepciones  No dejar bloques “catch” vacíos.  Los bloques de excepciones seguirán el siguiente formato: try { statements; } catch (ExceptionClass e) { statements; }
  • 46. Buenas prácticas en código Herramientas Java  Checkstyle: Herramienta para ayudar a escribir código que siga estándares. Plugin para Eclipse.  PMD: Analiza y busca potenciales problemas en el código. Plugin para Eclipse. • Sentencias vacías try/catch, etc. • Variables, parámetros, etc. no usados • Mal uso de String/StringBuffer • Sentencias "if" innecesarias, for → while, etc. • Código copiado y pegado.
  • 47. Buenas prácticas Recursos Java  Libro “Effective Java” (Joshua Bloch)  Java Best Practices: http://www.javapractices.com/  J2EE Best Practices: http://www.precisejava.com/
  • 48. Buenas prácticas Programación: Errores comunes  Fiabilidad de los parámetros de entrada: No asegurarse de que los parámetros recibidos son los que esperamos.  Fiabilidad de los valores: No comprobar si un elemento tiene valor antes de acceder a él.  Elementos en colecciones: No asegurar se de que un array o colección tenga valor y contenga elementos antes de acceder a ellos.  No comentar. (Sin comentarios...).
  • 49. Buenas prácticas Programación: Errores comunes  Acceso a colecciones: No comprobar si existe elemento para un índice antes de acceder a él en una colección indexada.  No liberar recursos adecuadamente.  Recursividad: El método recursivo infinito.  Malas prácticas: Utilizar incorrectamente técnicas conocidas.
  • 50. Programación: Errores comunes Fiabilidad de parámetros de entrada  Los parámetros recibidos por un método «público», es decir expuesto al mundo exterior, nunca son confiables. public static double metodoExpuesto(int nuncaMenorQue4, int nunca0){ return nuncaMenorQue4 / nunca0 ; } public static void main(String... args){ StaticDemo.metodoExpuesto(2, 0); //El metodo fallara despues de ejecutarse } public void publicarNoticia(Noticia noticia, int importancia){ if (noticia== null){ throw new ArgumentNullException("Parametro noticia no puede ser null"); } //A partir de aqui, ira el codigo para publicar la noticia... }
  • 51. Programación: Errores comunes Fiabilidad de los valores  Acceder a los elementos sin antes comprobar si tienen un valor. Bar foo = getFooBar(); foo.ToString(); //Acceder a metodos de "foo" sin comprobar, puede fallar si getFooBar devuelve null Bar foo = getFooBar(); if(foo != null) { foo.ToString(); }
  • 52. Programación: Errores comunes Elementos en colecciones  No asegurarse de que un array o colección tenga valor y contenga elementos antes de acceder a ellos. List<MiNumero> numeros= obtenerNumeros(); txtNumero1.text = numeros[0].toString(); txtNumero2.text = numeros[1].toString(); //Si numeros es null o numeros no tiene elementos este codigo fallara List<MiNumero> numeros= obtenerNumeros(); if (numeros != null && numeros.size() > 0) { txtNumero1.text = numeros.get(0).toString(); txtNumero2.text = numeros.get(1).toString(); }
  • 53. Programación: Errores comunes No comentar  Comentar el código también es programar,pero se debe comentar con criterio.
  • 54. Programación: Errores comunes Acceso a colecciones Antes de acceder a un elemento de una colección indexada se debe comprobar si la colección tiene al menos el número de elementos que necesitamos. for (int i = 0; i < cargarEmpresas().size(); i++) { if (cargarEmpresas().get(i) == ""){ gridView.rows[i].cells[7].visible = false; } ¡HORROR! } for (int i = 0; i < empresasSize; i++) { if (gridView.rows.count > i && "".equals(empresas.get(i))){ gridView.rows[i].cells[7].visible = false; } }
  • 55. Programación: Errores comunes No liberar recursos  Grave error no liberar recursos adecuadamente. public void saveData() { Connection cnn; try{ cnn = new SqlConnection(cnnString); cnn.open(); } catch (Exception e) { System.out.println("Se ha producido un erro de base de datos"); e.printStackTrace(); } finally { if (cnn != null) { cnn.close(); } } }
  • 56. Programación: Errores comunes Recursividad  El típico fallo al utilizar recursividad es no poner un límite a las llamadas recursivas. static long LastFibonacciNumber(long anterior1, long anterior2) { long numero = anterior1 + anterior2; Console.write(numero + " "); numero = lastFibonacciNumber(anterior2, numero); return numero; }  Para evitar el conocido error de "stack overflow" → utilizar líneas de control que permitan dar fin al anidamiento de llamadas recursivas.
  • 57. Programación: Errores comunes Malas prácticas  Utilizar incorrectamente técnicas conocidas.  Habitualmente se implementa mal una técnica o patrón conocidos.  Avoid basic style errors → javapractices.  Common Java Mistakes → javaprogrammingforums  Java Anti-Patterns → www.odi.ch
  • 59. Buenas prácticas Consejos generales  Seguir estándares.  Seguir patrones de diseño.  Reutilizar código → No reinventar la rueda.  Usar librerías “reconocidas”, documentadas, etc. Ejemplo: Apache Commons  Test unitarios.  Conocer bien nuestro entorno de desarrollo (IDE): shortcuts, plugins, etc.
  • 60. Buenas prácticas Consejos generales  Refactorización: Técnica de ingeniería de software para reestructurar código fuente, alterando su estructura interna sin cambiar su comportamiento externo.  Comentar de forma completa pero no excesiva.  Seguir “buenas prácticas” del Framework elegido.  Nombrar “con sentido” las clases, variables, etc.
  • 61. Buenas prácticas Consejos generales  Leer código ajeno. Que otros lean tú código.  Pautas para leer código de una manera efectiva:
  • 62. Buenas prácticas Consejos generales  Tener en cuenta el rendimiento: El rendimiento de nuestras aplicaciones es tan importante como otros criterios de aceptación. Criterios a tener en cuenta para medir el rendimiento: • Recursos hardware del cliente. • Realizar pruebas de rendimiento en un entorno que simule el hardware mínimo aceptado. • Hacer pruebas REALES.
  • 63. Buenas prácticas Consejos generales Buena gestión de logs: Los logs son las trazas o rastros que deja una aplicación. Nos brindarán información valiosa sobre qué está ocurriendo en nuestro sistema y dónde aplicar las mejoras más inmediatas.
  • 64. Buenas prácticas Consejos generales  Organiza el desarrollo: • Define una sintaxis de programación común para tu equipo de trabajo. • Define una estructura de directorios basada en la separación de conceptos: • Código fuente. • Documentación. • Recursos. • Productos finales. • Divide proyectos en librerías.
  • 65. Buenas prácticas Consejos generales  Usa sistemas de control de versiones para compartir el trabajo con el equipo. Usándolos se aprende a usarlos. Libro gratuito → http://www.ericsink.com/vcbe/  Usa herramientas o prepara scripts que te permitan automatizar procesos productivos. → ANT, Maven etc.  Nightly builds → Generar productos finales “frescos” todos los días.
  • 66. Buenas prácticas Consejos generales  Comparte conocimiento. Wiki, blogs, reuniones, charlas, etc.
  • 67. Buenas prácticas Consejos generales  Cobertura TDD: Test Driven Development → http://cobertura.sourceforge.net/  Integración continua → http://continuum.apache.org/  Software para la gestión de tareas/bugs → http://www.redmine.org/, http://www.mantisbt.org/, http://trac.edgewall.org/, etc.
  • 68. Material extra Buenas prácticas en el uso de repositorios
  • 69. Buenas prácticas Referencias  Principios de buena programación: The Principles of Good Programming, Christopher Diggins.  Java Code Conventions: http://www.oracle.com/technetwork/java/codeconvent ions-150003.pdf  Effective Java. Joshua Bloch.  MasterDISS_DesignPatterns, Iker Jamardo.
  • 70. Buenas prácticas Referencias  Imágenes • DRY: http://www.dreamstime.com/royalty-free-stock-photo-don %27t-repeat-yourself-acronym-image20103645 • Abstraction Principle: http://www.danpontefract.com/give- piece-a-chance/ • Open/Closed Principle: http://www.vitalygorn.com/blog/image.axd?picture=Open-Closed.jpg • YAGNI: http://blog.thescrumster.com/?tag=yagni • Don't make me think: http://riyajs.files.wordpress.com/2011/03/usability_testing.jpg • KISS: http://milldesk.com.br/en/k-i-s-s-keep-it-simple-stupid/ • Write Code for the Maintainer: http://notio.com.ar/adjuntos/imagenes/000/102/0000102304.jpg
  • 71. Buenas prácticas Referencias  Imágenes • YAGNI: http://blog.thescrumster.com/?tag=yagni • Don't make me think: http://riyajs.files.wordpress.com/2011/03/usability_testing.jpg • KISS: http://milldesk.com.br/en/k-i-s-s-keep-it-simple-stupid/ • Write Code for the Maintainer: http://notio.com.ar/adjuntos/imagenes/000/102/0000102304.jpg • Single Responsibility Principle: http://www.colourbox.com/preview/1995285-118643-3d- illustration-of-one-selected-target-with-three-arrows-right-target- concept.jpg
  • 72. Buenas prácticas Referencias  Imágenes • Maximize Cohesion: http://vision2030.bwd.public- i.tv/viewfinder_core/public/images/uploaded/l_1259326852_cohe sion.png • Hide Implementation Details: http://geek.pe /wp- content/uploads/2010/04/como-ocultar-tu-ip-al-enviar-un-correo- gmail-hotmail.jpg • Avoid Premature Optimization: http://rlv.zcache.es/la_optimizacion_prematura_es_la_raiz_de_to do_el_ma_im%C3%A1n-p147403910183181037en878_210.jpg • Code Reuse is Good: http://www.alexanderinteractive.com/blog/reuse-code.jpg
  • 73. Buenas prácticas Referencias  Imágenes • Embrace Change: http://static.eharmony.com/dating- advice/wp-content/uploads/images/are-you-caught-in-the- comfort-zone-trap-learning-to-embrace-change-large.jpg • Minimize Coupling: http://lh3.ggpht.com/_huul_BKMb4M/S2wKiTapibI/AAAAAAAAG ek/h9Qs-AKcGa8/tuerca.gif
  • 74. Buenas prácticas para la construcción de software FIN Iker Canarias iker.canarias (gmail)