domingo, 4 de marzo de 2018

Sistemas Heredados

Conclusión:
En múltiples ocasiones, el uso de un sistema heredado supone una gran perdida d e tiempo o recursos, por lo que cada empresa que los utilice debe idear y elegir la opción que menos costo/riesgo conlleven. Cada situación es diferente la solución a los problemas de los sistemas heredados producen: Por esta razón, deben de seguir siendo estudiados, pues la tecnología sigue avanzando y proporcionando nuevas y mejores soluciones.

domingo, 25 de febrero de 2018

Métodos Ágiles y Manifiesto

Conclusión:
En muchas ocasiones, los métodos tradicionales utilizados de antaño para desarrollar software pueden ser demasiado complicados y costosos; sobre todo para las pequeñas empresas de software, con proyectos que no llegan a ser los complejos sistemas de administración y control de las grandes compañías, cuyo desarrollo puede durar varios años. Por esta razón los métodos alternativos son, en muchas ocasiones, la mejor opción a la hora de realizar un proyecto de software, pues se reducen grandes costes en la plantación y se enfoca más a su desarrollo. Sin embargo, ninguno va a ser mejor que otro; cada método, véase métodos ágiles o cascada, tienen maneras diferentes de operar, de acuerdo al proyecto para el que sean recurridos. La elección de un método u otro está en los beneficios que estos den a futuro.

Leyes de Lehman

Conclusión:
Debido al gran coste que suponen los sistemas informáticos para las empresas, estos deben de tener contante actualización, con el propósito de no quedar obsoletos y pases e ser sistemas heredados o legados. Por dicha razón la evolución de un software debe de estar acorde con las leyes descritas por Lehman y, de esta manera, abordar con mayor eficiencia los nuevos problemas relacionados con software que surgen al pasar los años y el software evolucione.

domingo, 11 de febrero de 2018

Soporte de Software, Soporte técnico y mantenimiento de software

Conclusión

El soporte de software es una de las actividades con más importancia dentro del mundo del desarrollo de software, llegando a ser, el soporte técnico y el mantenimiento, tan importantes como la fase del desarrollo de un programa o aplicación. Es por ello que es necesario estudiar las metodologías para su realización e idear nuevas, y así hacer un trabajo quesea de calidad y competitivo en el mercado.

lunes, 27 de noviembre de 2017

Cifrado Hash


La tecnología relacionada e la seguridad web es uno de los pambitos más importantes y estudiados del desarrollo de software, pues  la cantidad de información que se mueve cada día por la web es mucha. Por ello se han desarrollado métodos que aseguran la calidad cada vez más complejos y eficaces. Uno de los más utilizados es la función criptográfica hash, el cual es un algoritmo matemático que transforma cualquier bloque arbitrario de datos en una nueva serie de caracteres con una longitud fija. Independientemente de la longitud de los datos de entrada, el valor hash de salida tendrá siempre la misma longitud.

A partir de un hash o huella digital, no podemos recuperar el conjunto de datos originales. Los más conocidos son el MD5 y el SHA-1. Cifrar una huella digital se conoce como firma digital. Una función hash es un algoritmo matemático que nos da un resultado B al aplicarlo a un valor inicial A.

Propiedades que debe cumplir un hash Sea cual sea la longitud del texto base A, la longitud de su hash resultante B siempre va a ser la misma. Para cada entrada A, la función generará una salida B única. Dado un texto base, es fácil y rápido (para un ordenador) calcular su número resumen. Es imposible reconstruir el texto base a partir del número resumen.

Ejemplo:

public class Empleado {
    int        IDempleado;
    String     nombre;
    Departamento dept;

    // Métodos de la Clase 

    @Override
    public int hashCode() {
        int hash = 1;
        hash = hash * 17 + IDempleado;
        hash = hash * 31 + nombre.hashCode();
        hash = hash * 13 + ((dept == null) ? 0 : dept.hashCode());
        return hash;
    }
}

La encriptación hash supone un gran avance en la materia de seguridad web debido a su fácil implementación y ejecución, ademas de ser un método seguro a la hora de realizar transacciones por internet, ya sea recuperando una contraseña o pagando por un producto en una tienda virtual.

Referencias:

Anónimo. (2017). Función Hash. 27/11/2017, de Wikipedia Sitio web: https://es.wikipedia.org/wiki/Funci%C3%B3n_hash

Donohue, B.. (2014). ¿Qué Es Un Hash Y Cómo Funciona?. 27/11/2017, de Kaspersky Sitio web: https://latam.kaspersky.com/blog/que-es-un-hash-y-como-funciona/2806/

sábado, 25 de noviembre de 2017

JUnit


JUnit es un marco de pruebas unitarias para el lenguaje de programación Java. Juega un papel crucial en el desarrollo impulsado por pruebas, y es una familia de marcos de pruebas unitarias conocidas colectivamente como xUnit.

JUnit promueve la idea de "primero probar y luego codificar", que hace hincapié en la configuración de los datos de prueba para una pieza de código que se puede probar primero y luego implementar. Este enfoque es como "prueba un poco, codifica un poco, prueba un poco, codifica un poco". Aumenta la productividad del programador y la estabilidad del código del programa, lo que a su vez reduce el estrés en el programador y el tiempo dedicado a la depuración.

Para su implementación se dará como ejemplo el siguiente código.
Las pruebas de software son uno de los procesos y actividades más importantes a la hora de desarrollar proyectos relacionados con la ingeniería de software, pues de estas depende la calidad que el proyecto posea. Por tanto, la utilización de métodos que faciliten, optimicen y sobretodo automatice dicho proceso de pruebas supone una gran mejoría en el desarrollo del proyecto y su calidad final.

Crear un nuevo archivo llamado Calculator.java
public class Calculator {
public int evaluate(String expression) {
int sum = 0;
for (String summand: expression.split("\\+"))
sum += Integer.valueOf(summand);
return sum;
}
}
Crear una prueba:
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CalculatorTest {
  @Test
  public void evaluatesExpression() {
    Calculator calculator = new Calculator();
    int sum = calculator.evaluate("1+2+3");
    assertEquals(6, sum);
  }
}
Ejecutar con la siguiente línea:
javac -cp .;junit-4.XX.jar;hamcrest-core-1.3.jar CalculatorTest.java

Es necesario hacer múltiples pruebas en las que incluyan resultados fallidos.


Las pruebas de software son uno de los procesos y actividades más importantes a la hora de desarrollar proyectos relacionados con la ingeniería de software, pues de estas depende la calidad que el proyecto posea. Por tanto, la utilización de métodos que faciliten, optimicen y sobretodo automatice dicho proceso de pruebas supone una gran mejoría en el desarrollo del proyecto y su calidad final.

Referencias:
Anónimo. (2009). Unit Testing and JUnit. 25/11/2017, de Indraprastha Institute of Information Technology Sitio web: https://www.iiitd.edu.in/~jalote/jalotesebook/JaloteSEbook/tmp/UnitTesting.pdf

Augusto, F. (2012). Getting started. 25/11/2017, de GitHub Sitio web: https://github.com/junit-team/junit4/wiki/getting-started

domingo, 19 de noviembre de 2017

RMI

Existen una gran cantidad de mecanismos ofrecidos por java que simplifican y optimizan tareas en las aplicaciones en gran medida. Dentro de los sistemas distribuidos, unos de los más importantes es el Remote Method Invocation (RMI),  en el cual se puede invocar un método de manera remota. Es una manera sencilla para la comunicación de servidores de aplicaciones distribuidas que estén basados en Java.

Debido a que esta basado exclusivamente en java, su uso resulta de gran facilidad, pues proporciona el paso de objetos por referencia, el cual no esta permitido en otros métodos similares, recolección de basura distribuida y el paso de tipos arbitrarios.

El uso de RMI supone exportar un objeto el cual estará disponible en la red con un programa que permanecerá en espera en un puerto. El cliente puede invocar los métodos que tenga dicho objeto en la red de acuerdo a los siguiente pasos: encapsulamiento, invocación del método, regreso del valor de retorno en caso de que haya y por último el cliente recibe la respuesta y continúa como si la invocación hubiera sido local.

La arquitectura del RMI se divide en cuatro capas. La primera capa es la de aplicación y se corresponde con la implementación real de las aplicaciones cliente y servidor. La segunda capa es la correspondiente al proxy, interactúa con la capa de aplicación y es en donde están todas las llamadas a objetos remotos. La tercer capa es la de referencia remota y es la responsable de la semántica de las invocaciones. Por último, la capa de transporte se encarga de llevar la información de una máquina a otra mediante el protocolo JRMP. 

Es así como se lleva a cabo uno de los mecanismos más fáciles de implementar y cuyo utilidad es muy basta, pues el cliente tiene el acceso de objetos y sus métodos de un servidor, ejecutándolo como si fuera local.