The Real World

Este fue un tema que considero muy muy importante. Ya que después de 4 capítulos del libro por fin tocamos el tema del código en el mundo real. Ya que a lo largo de la carrera son pocas las veces que en verdad enfrentamos nuestro código a la vida real. A lo factores que pueden arruinar nuestro código por completo; eso sin importar lo bien que funcionara en el laboratorio de pruebas. Y la mejor arma que tenemos para hacer de nuestro código un código funcional son los casos de uso.

Los casos de uso nos permiten desarrollar todos los posibles factores que a los que nuestro código se puede enfrentar. Y una vez que identifiquemos cuales son las circunstancias posibles podemos empezar a “proteger” nuestro código para que sepan como responder ante las posibles variables y cambios del mundo real.the-real-world.jpg

Mastery 14 – OO and Agile

Para esta entrada voy a dar una pequeña introducción al uso de Essential Scrum. Una metodología Agile muy útil para programación orientada a objetos.

Pero ¿qué es Essential Scrum? Tal como menciona Kenneth S. Rubin en su libro Essential Scrum: A Practical Guide to the Most Popular Agile Process

Scrum is based on a small set of core values, principles, and practices (collectively the Scrum framework). Organizations using Scrum should embrace the Scrum framework in its entirety, perhaps not through the entire organization all at once, but certainly within the initial teams that will use Scrum. Embracing all of Scrum does not mean, however, that organizations must implement Scrum according to some cookiecutter, one-size-fits-all formula. Rather, it means that organizations should always stay true to the Scrum framework while choosing an appropriate blend of approaches for their Scrum implementations.

Se puede decir que Essential Scrum combina los valores, principios y prácticas de Scrum con un conjunto de enfoques probados y eficaces que son consistentes. Algunos de estos enfoques serán apropiados para su situación; otros no lo serán. Cualquier enfoque deberá ser inspeccionado y adaptado a sus circunstancias. Y es muy importante tener esto en mente. Scrum no será exactamente igual para todos los problemas. Pero si podemos ajustarlo y adaptarlo a nuestras circunstancian y así poder desarrollar de la manera más eficaz nuestro código.51oKcyzlfBL.jpg

Aunque en lo personal nunca he tenido la oportunidad de trabajar con scrum por lo tanto desconozco como es la experiencia de desarrollar código con este enfoque, pero eso no cambian el hecho de que sea una de las metodologías más utilizadas en el mundo del desarrollo de software.

Mastery 13 – Test Driven Development

Test-driven development (TDD), o Desarrollo guiado por pruebas de software es una práctica de programación que consiste en escribir primero las pruebas (generalmente unitarias), después escribir el código fuente que pase la prueba satisfactoriamente y, por último, refactorizar el código escrito.

El primer objetivo que se busca con esta técnica es reducir la cantidad de bugs presentes en el programa, ya que los bugs se traducen en mayor costo de desarrollo y mantenimiento.

El segundo objetivo (el cual en lo personal considero mas importante) es reducir y eliminar la presencia de código innecesario.

El TDD fue creado por Kent Beck (quien también inventó Extreme Programming y JUnit), y en esencia, es un proceso a seguir, lo cual ya lo hace diferente a un simple enfoque de pruebas primero.

1_tZSwCigaTaJdovyWlp5uBQ.jpeg

A continuación se muestra un diagrama de como quedaría la mitología ágil, obtenido de la página paradigma digital 

Captura.PNG

Y me gustaría terminar añadiendo un pequeño video que resume de manera concisa en que consisten las bases de método TDD.

Course Evaluation

Esta es mi evaluación personal del curso a aparte de la ya realizada ECOA.

En lo personal me gusto mucho la materia. El profesor Ken me parece uno de los mejores profesores que he tenido. Me gusta que haga la clase tan dinámica. Por cuestiones personales tuve mas faltas en la materia de lo que me hubiera gustado. Me gustaría que la clase fuera mas temprano, pero me imagino que eso es cuestión administrativa. Lo único más relacionado a la clase que no me gusto fue la parte de los blogs. Pero eso es de manera muy personal, ya que no soy muy fan de escribir. Fuera de eso me pareció un excelente curso.

Mastery 12 – Testing in OO

Hacer las pruebas a nuestro código en busca de bugs o fallos en la lógica es algo esencial para obtener un código eficaz y robusto. Sin embargo, hay un problema. Y es que hacer esto de forma manual trae consigo dos problemas. El primero y mas obvio es que nos va a llevar mucho tiempo, ya que entre mas complejo sea nuestro código son mas las variables que debemos tomar en cuenta. El segundo es que deja abierta la puerta para el error humano o no haber revisado ciertas variables o pasarlas por alto. Y es ahí donde entra Junit.

junit5-banner.png

Yo he trabajado en lo personal condicha aplicacion para mis programas escritos en java implementado el frameworks de Junit en eclipse. Es una herramienta genial, ademas de ser gratuita y open-source.

JUnit se puede definir como

un Framework Open Source para la automatización de las pruebas (tanto unitarias, como de integración) en los proyectos Software. El framework provee al usuario de herramientas, clases y métodos que le facilitan la tarea de realizar pruebas en su sistema y así asegurar su consistencia y funcionalidad.

Segun la definicion de la pagina web de la junta de andalucia

Por último, los dejo con pequeño tutorial sobre JUnit en uno de sus ejemplos más básicos, es testeo de un código para implementar un calculadora básica.

 

Mastery 11 – Verification and Validation

La verificación y validación de software (V&V) es una parte esencial del ciclo de vida del desarrollo de software. El Institute of Electrical and Electronics Engineers (IEEE) lo tiene categorizado como V&V IEEE 1012. Y en su página web podemos encontrar una definición muy puntual de lo que implica la verificación y validación.

This verification and validation (V&V) standard is a process standard that addresses all system, software, and hardware life cycle processes including the Agreement, Organizational Project-Enabling, Project, Technical, Software Implementation, Software Support, and Software Reuse process groups. This standard is compatible with all life cycle models (e.g., system, software, and hardware); however, not all life cycle models use all of the processes listed in this standard. V&V processes determine whether the development products of a given activity conform to the requirements of that activity and whether the product satisfies its intended use and user needs. This determination may include the analysis, evaluation, review, inspection, assessment, and testing of products and processes.

1200px-IEEE_logo.svg.png

Cabe mencionar que contrario a lo que se pueda pensar verificación y validación son dos cosas diferentes. La verificación es el proceso, para asegurarnos de que estamos construyendo el producto correctamente, es decir, verificar los requisitos que tenemos y verificar si estamos desarrollando el producto en consecuencia o no.

Mientras que la validación es el proceso, ya sea que estemos construyendo el producto correcto, es decir, validar el producto que hemos desarrollado es correcto o no.

Mastery 10 – Code Revision

La Revisión de código o Control de versiones permite a los usuarios realizar un seguimiento de los cambios en los proyectos de desarrollo de software y permitirles colaborar en esos proyectos. Usándolo, los desarrolladores pueden trabajar juntos en el código y separar sus tareas a través de branches.1_YO3XrKVMEgTZ6UJZRntXPQ.jpeg

Imagen de la pagina hackernoon

Este tipo de sistemas tiene muchas ventajas, tal como mencionan en la pagina hackernoon

A version control system allows users to keep track of the changes in software development projects, and enable them to collaborate on those projects. Using it, the developers can work together on code and separate their tasks through branches.

Lo mejor de este tipo de control para software puede ser implementado desde los mas pequeño hasta en proyectos altamente complejos. Tal como se muestra en el video a continuación, el con trol de código puede ser implementado de manera muy trivial, como por ejemplo cuando tienes varios avances de un documento de Word y le vas cambiando al nombre cuando creas un respaldo de ese documento, pero con más avances. Claro que la efectividad de tu revisión de versión dependerá de la manera en que sea implementado.

Blogging and me

Antes de comenzar con esta entrada quiero aclarar que NO me gusta hacer uso de los blogs. No es que tenga nada en contra del sistema de tener tu identidad en la web y poder compartir el conocimiento obtenido a lo largo del tiempo. No me gusta porque me cuesta mucho trabajo expresar lo que quiero de manera escrita. Y me parece una actividad muy “solitaria” por así decirlo. Pero concuerdo con la autora del texto en muchas cosas. Por ejemplo, cuando dice

I felt like I was the only junior developer in the world.

No que yo sea desarrollador ni mucho menos, pero siempre que tengo problemas personales o académicos llego a sentirme de esa manera. Y tal vez, como ella comenta, hacer uso de los blogs pueda ayudar en con esos problemas. No lo sé.  Pero insisto que para mi gusto personal me parece una actividad poco interactiva. Disfrute mas cuando en primer semestre en solución de problemas con programación hacíamos videos con las soluciones a los problemas expuestos en clase.

Sin embargo también le veo su lado positivo al tener que sentarme a realizar una activad que no me resulta muy placentera, y eso lo veo en la forma de mejorar mis calidad de redacción y mejorar mi velocidad de escritura en el teclado.

Classes to Code

Para esta entrada tomare el diseño Singleton y lo implementare en el lenguaje Java. Hare dos clases muy sencillas una llamada conexión y la otra llamada app. Estas simularan un sencillo programa que conecta a la base de datos de nuestra aplicación.

Lo que buscamos es que no importa cuantas conexiones se hagan, solo se pueda tener una instancia de la conexión ya que seria muy poco eficiente crear una instancia para cada conexión que se lleva a cabo.

public class App {

public static void main(String[] args) {
//Instanciación por constructor prohíbido por ser “private”
//Conexion c = new Conexion();
Conexion c = Conexion.getInstancia();
c.conectar();
c.desconectar();

boolean rpta = c instanceof Conexion;
System.out.println(rpta);
}
}

 

public class Conexion {

//Declaración
private static Conexion instancia;
//private static Conexion instancia = new Conexion();

//Para evitar instancia mediante operador “new”
private Conexion() {

}

//Para obtener la instancia unicamente por este metodo
//Notese la palabra reservada “static” hace posible el acceso mediante Clase.metodo
public static Conexion getInstancia() {
if(instancia == null) {
instancia = new Conexion();
}
return instancia;
}

//Método de prueba
public void conectar() {
System.out.println(“Me conecté a la BD”);
}

//Método de prueba
public void desconectar() {
System.out.println(“Me desconecté de la BD”);
}

}

En el siguiente video se muestra un tutorial sobre el uso del modelo Singleton y su aplicación en Java

 

SimSE

SimSE es un pequeño simulador escrito en java. Me tomo un rato entenderle el rollo al juego, aunque al final me pareciogenial la idea. Un pequeño videojuego que simula un equipo de desarrollo de software. La iterfaz grafica es muy sencilla como podemos obserrvar en la imgane a contnuacion.

Captura.PNG

Lo que más me gusto es que tiene pequeños detalles como la experiencia laboral de cada empleado además de que te permite comprar herramientas de la vida real tales como eclipse y Junit.

Captura.PNG

Sin lugar a dudas es un juego genial para cualquiera interesado en desarrollo y arquitectura de software.