jueves, 27 de septiembre de 2018

DESARROLLO DE METODOLOGIAS DE SOFTWARE


El desarrollo de software, ha ido evolucionando constantemente en las metodologías o maneras en las cuales se realiza la planeación para el diseño del software, con el objetivo de estructurar, controlar, mejorar y optimizar los procesos y ofrecer una mejor calidad.
Esta demanda de desarrollo de software se debe principalmente a la necesidad empresarial de gestionar sus procesos y facilitar, organizar y administrar las tareas en una empresa.

¿QUÉ ES UN MÉTODO?
Un Método se compone por un conjunto de herramientas y estrategias   que una vez ordenados y sistematizados nos permitirán conseguir una meta o lograr un objetivo definido. Permiten la ejecución de procesos que nos llevarán a cumplir los objetivos que buscamos.
¿QUÉ ES METODOLOGÍA?

Se encarga del estudio de los métodos .Una Metodología de desarrollo de software, consiste específicamente en hacer uso de diversas herramientas, técnicas, métodos y modelos para el desarrollo de un software.

METODOLOGÍA ÁGIL.


Existen numerosas metodologías para desarrollar software. Tradicionalmente estas metodologías se centran en el control del proceso, estableciendo rigurosamente las actividades, herramientas y notaciones en el desarrollo de un software, dado estas reglas estas metodologías se caracterizan por ser rígidos y dirigidos por la documentación que se genera en cada una de las actividades desarrolladas. Debido a esto es necesario el desarrollo de desarrollar metodologías más simples y sin tanta documentación durante el proceso.
Una metodología ágil es un método que permite incorporar cambios con rapidez en el desarrollo de un software. En muchas ocasiones, los modelos de gestión tradicionales no sirven para afrontar un reto que hoy en día resulta fundamental: incorporar cambios con rapidez y en cualquier fase del proyecto sin la necesidad de cambiar todo el desarrollo del proyecto.

 Principales características de las metodologías agiles:

  • ·         Una metodología ágil se caracteriza por ser rápida, dinámica, con contenido específico y por responder de manera apropiada a los cambios y orientada al crecimiento.
  • ·         Estimula las estructuras y actitudes de los equipos para que la comunicación sea fácil.
  • ·         Resalta la entrega rápida de software operativo y le resta importancia a los productos de trabajo intermedio.
  • ·         Adopta al cliente como una parte del equipo de desarrollo.
  • ·         Satisface al cliente mediante la entrega temprana y continua de software valioso.
  • ·         La estructura delos procesos ágiles cambia para le ventaja competitiva del cliente.
  • ·         Entrega software en funcionamiento frecuentemente demorando desde un par de semanas aun par de meses.
  • ·         Los desarrolladores y la gente de negocios deben trabajar juntos a diario durante el proyecto.
  • ·         Utilizan la conversación cara a cara para transmitir la información hacia y dentro de un equipo de desarrollo.
  • ·         Promueven el desarrollo sustentable.
  • ·         Utilizan la simplicidad que es el arte que maximiza la cantidad de trabajo no realizado.
  • ·         Su comportamiento se ajusta y se adecua en concordancia para volverse más efectivo.



METODOLOGÍA DE DESARROLLO PESADA
 
una metodología de desarrollo de software pesada Surge ante la necesidad de utilizar una serie de procedimientos, técnicas, herramientas y soporte documentada a la hora de desarrollar un producto (software). Se centra en la definición detallada de los procesos y tareas a realizar Y requiere una extensa documentación el cual debe ser seguido al pie de la letra para poder conseguir el producto final.
CARACTERÍSTICAS DE UNA METODOLOGÍA PESADA:
  • §  Son más complicadas .
  • §  Tienen mayor documentación y procesos que seguir al pie de la letra
  • §  Esta metodología solo es aplicable debido a que ya fue documentada.
  • §  Tiene modelos predeterminados para el desarrollo de un software
  • §  No son flexibles para el cambio durante el desarrollo de un so
    ftware.


Diferencias:

Metodologías pesadas
Metodologías Agiles
Basadas en normas provenientes de estándares seguidos por el entorno de desarrollo
Basadas en heurísticas provenientes de prácticas de producción de código
Cierta resistencia a los cambios
Especialmente preparados para cambios durante el proyecto
Impuestas externamente
Impuestas internamente (por el equipo)
Proceso mucho más controlado, con numerosas políticas/normas
Proceso menos controlado, con pocos principios.
El cliente interactúa con el equipo de desarrollo mediante reuniones
El cliente es parte del equipo de desarrollo
Más artefactos
Pocos artefactos
Más roles
Pocos roles
Grupos grandes y posiblemente distribuidos
Grupos pequeños (<10 integrantes) y trabajando en el mismo sitio
La arquitectura del software es esencial y se
expresa mediante modelos
Menos énfasis en la arquitectura del software
Existe un contrato prefijado
No existe contrato tradicional o al menos es bastante flexibles.


Metodologías Agiles
Metodologías Tradicionales
Están orientadas hacia las necesidades del cliente.
Están orientados hacia el proceso del software.
Basadas en heurísticas o estadísticas provenientes de prácticas de producción de código.
Basadas en normas provenientes de estándares seguidos por el entorno de desarrollo.
Especialmente preparadas para cambios durante el proyecto.
Cierta resistencia a los cambios.
Proceso menos controlado, con pocas políticas para el desarrollo.
Procesos mucha más controlados, con numerosas políticas o normas.
El cliente es parte del equipo de desarrollo
El cliente interactúa con el equipo de desarrollo mediante reuniones.
Grupos pequeños (<10 integrantes) y trabajando en el mismo sitio.
Grupos grandes y posiblemente distribuidos.
Pocos artefactos
Más artefactos
Pocos roles
Más roles.
Menos énfasis en la arquitectura del software.
La arquitectura del software es esencial y se expresa mediante modelos.


Que es PMI
El Project Management Institute (PMI) es una de las asociaciones profesionales estadounidense más grandes del mundo. Asocia a profesionales relacionados con la gestión de proyectos y cuenta con medio millón de miembros e individuos titulares de sus certificaciones en 180 países. Es una organización sin fines de lucro que avanza la profesión de la dirección de proyectos a través de estándares y certificaciones reconocidas mundialmente, a través de comunidades de colaboración, de un extenso programa de investigación y brinda oportunidades de desarrollo profesional.
La guía PMBOK
Project Management Body of Knowledge (PMBOK), es un instrumento de desarrollo del Project Management Institute (PMI). El guía más conocido internacionalmente en los estándares de gestión, administración y dirección de proyectos, conocido como manual de buenas prácticas.
 Tiene dos aspectos fundamentales: macroprocesos, que agrupan todos los procesos y las actividades implicadas en los proyectos estandarizados.
Los macroprocesos de la guía PMBOK
La guía PMBOK identifica 5 macroprocesos en los que se incluyen los 47 procesos estándares que intervienen en cualquier proyecto:

  1. Inicio: conformado por 2 procesos menores, cuyo fin es definir un nuevo proyecto o una nueva fase de ejecución del mismo, y obtener la autorización necesaria para llevarlo a cabo.
  1. Planificación: este macroproceso incluye 24 procesos destinados a la concreción y el establecimiento de objetivos, y al diseño de las estrategias más adecuadas para lograr su consecución.
  1. Ejecución: incluye 8 procesos implicados en el correcto desempeño, acorde a la estrategia adoptada, de las actividades definidas en el proyecto para la consecución de los fines establecidos.
  1. Control y monitorización: consta de once procesos que se inscriben en este macroproceso, todos ellos relacionados con la supervisión y la evaluación del desempeño del proyecto.
     5.Cierre: este último macroproceso, formado por dos procesos menores, que cierra el proyecto en      su totalidad o alguna fase del mismo refiriendo el grado de aceptación y la satisfacción con el           resultado obtenido.


LOS 47 PROCESOS DEL PMBOK

      1.(Inicio) Desarrollar el acta de constitución del proyecto. 
  1. 2.Identificar a los interesados.
     3.(Planeación) Desarrollar el plan para la dirección del proyecto.
  1. 4.Planificar el involucramiento de los interesados.
  2. 5.Planificar la gestión del alcance. 
  3. 6.Recopilar los requisitos. 
  4. 7.Definir el alcance.
  5. 8.Crear la EDT/WBS. 
  6. 9.Planificar la gestión del cronograma. 
  7. 10.Definir las actividades.
  8. 11.Secuenciar las actividades. 
  9. 12.Planificar la gestión de los riesgos. 
  10. 13.Identificar los riesgos.
  11. 14.Realizar el análisis cualitativo de riesgos.
  12. 15.Realizar el análisis cuantitativo de riesgos.
  13. 16.Planificar la respuesta a los riesgos. 
  14. 17.Planificar la gestión de recursos. 
  15. 18.Planificar la gestión de los costos. 
  16. 19.Estimar los costos. 
  17. 20.Estimar los recursos de las actividades. 
  18. 21.Estimar la duración de las actividades.
  19. 22.Desarrollar el cronograma.
  20. 23.Determinar el presupuesto. 
  21. 24.Planificar la gestión de la calidad. 
  22. 25.Planificar la gestión de las comunicaciones.
  23. 26.Planificar la gestión de las adquisiciones. 
  24. 27.(Ejecución) Dirigir y gestionar el trabajo del 28
  25. .proyecto. 
  26. 28.Gestionar el conocimiento del proyecto (Nuevo)
  27. 29.Gestionar la participación de los interesados. 
  28. 30.Adquirir recursos. 
  29. 31.Desarrollar el equipo. 
  30. 32.Dirigir al equipo.
  31. 33.Gestionar las comunicaciones.
  32. 34.Efectuar las adquisiciones. 
  33. 35.Gestionar la calidad. 
  34. 36.Implementar la respuesta a los riesgos (Nuevo)
  35. 37.(Monitoreo) Monitorear y controlar el trabajo del proyecto. 
  36. 38.Realizar el control integrado de cambios.
  37. 39.Monitorear el involucramiento de los interesados. 
  38. 40.Controlar el cronograma.
  39. 41.Controlar los costos. 
  40. 42.Monitorear las comunicaciones. 
  41. 43.Monitorear los riesgos.
  42. 44.Controlar la calidad. 
  43. 45.Controlar los recursos (Nuevo)
  44. 46.Validar el alcance.
  45. 47.Controlar el alcance. 
  46. 48.Controlar las adquisiciones. 
  47. 49.Cerrar el proyecto o fase















viernes, 6 de julio de 2018


ESTRUCTURA DE DATOS ARREGLOS (VECTORES Y MATRICES) (ARRAYS).
Un arreglo (array) es una estructura de datos con una capacidad predefinida en la cual se pueden almacenar datos del mismo tipo. Estos datos son almacenados en forma secuencial en la memoria y ocupan una determinada cantidad de bytes según cual sea el tipo de dato. La capacidad de un arreglo se declara desde el primer momento cuando este es construido, y no puede cambiar en tiempo de ejecución. Cada dato almacenado es considerado un elemento al cual se accede por un índice de posición (un número entero no negativo)
Arreglos:
Los arreglos se pueden definir como objetos en los que podemos guardar más de una variable, es decir, al tener un único arreglo, este puede guardar múltiples variables de acuerdo a su tamaño o capacidad, es importante recordar que las variables guardadas deben ser del mismo tipo.
·         Los arreglos son entidades “estáticas” en cuanto a que su tamaño no cambia una vez que han sido creadas.
·         Un arreglo es un grupo de posiciones de memoria contiguas. Todas las cuales tienen el mismo nombre y el mismo tipo.
·         Los arrays pueden ser unidimensionales (vectores) ó bidimensionales (matrices)
ARREGLOS UNIDIMENSIONALES
Un arreglo unidimensional es un tipo de datos estructurado que está formado por una colección finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. Los datos que se guarden en los arreglos todos deben ser del mismo tipo. El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un índice para cada elemento del arreglo que nos da su posición relativa.
Para implementar arreglos unidimensionales se debe reservar espacio en memoria.
Los arreglos nos permiten hacer un conjunto de operaciones para manipular los datos guardados en ellos, estas operaciones son: ordenar, buscar, insertar, eliminar, modificar entre otras.
Ejemplos de arreglos unidimensionales.
Ejercicio 1:
Programa que lee por teclado la nota de los alumnos de una clase y calcula la nota media del grupo. También muestra los alumnos con notas superiores a la media. El número de alumnos se lee por teclado.
Este programa crea un array de elementos de tipo doublé que contendrá las notas de los alumnos. El tamaño del array será el número de alumnos de la clase.

public class unidimensionales_ejercicio_1 {
     public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int numAlum, i;
        double suma = 0, media;
        do {
            System.out.print("Número de alumnos de la clase: ");
            numAlum = sc.nextInt();
        } while (numAlum <= 0);
        double[] notas = new double[numAlum]; //se crea el array
        // Entrada de datos. Se asigna a cada elemento del array
        // la nota introducida por teclado
        for (i = 0; i < notas.length; i++) {
            System.out.print("Alumno " + (i + 1) + " Nota final: ");
            notas[i] = sc.nextDouble();
        }
        // Sumar todas las notas
        for (i = 0; i < notas.length; i++) {
            suma = suma + notas[i];
        }
        // Calcular la media
        media = suma / notas.length;
        // Mostrar la media
        System.out.printf("Nota media del curso: %.2f %n", media);
        // Mostrar los valores superiores a la media
        System.out.println("Listado de notas superiores a la media: ");
        for (i = 0; i < notas.length; i++) {
            if (notas[i] > media) {
                System.out.println("Alumno numero " + (i + 1)+ " Nota final: " + notas[i]);
            }
        }
    }
}
Ejercicio 2:
Crea un array de 10 posiciones de números con valores pedidos por teclado. Muestra por consola el índice y el valor al que corresponde. Haz dos métodos, uno para rellenar valores y otro para mostrar.
public class ejercicio_2_unidimensionales {
   
    public static void main(String[] args) {

        //Esto es opcional
        final int TAMANIO=10;

        int num[]=new int[TAMANIO];

        //Invocamos las funciones
        rellenarArray(num);

        mostrarArray(num);
    }

    public static void rellenarArray(int lista[]){
        for(int i=0;i<lista.length;i++){
            String texto=JOptionPane.showInputDialog("Introduce un número");
            lista[i]=Integer.parseInt(texto);
        }
    }

    public static void mostrarArray(int lista[]){
        for(int i=0;i<lista.length;i++){
            System.out.println("En el indice "+i+" esta el valor "+lista[i]);
        }
    }
}



Ejercicio 3:
Ejercicio que muestra la primera y la última edad de una lista:
public class ejercico_3_unidimensionales {
     public static void main(String[] args) {     
      

        int edades[] = {10,15,20,25,30,35};

//Mostrar el primer elemento
System.out.println("la primera edad de la lista es:");
System.out.println(edades[0]);

//Mostrar el último elemento
System.out.println("la ultima edad de la lista es:");
System.out.println(edades[edades.length-1]);


//Mostrar todo el vector
System.out.println("todos los valores de las edades de la lista:");
for(int i=0; i<edades.length; i++)
    System.out.print(edades[i]+" ");
System.out.println();

//Mostrar todo el vector de otra forma
System.out.println("la lista de las edades:");
for(int edad:edades)
    System.out.print(edad+" ");
System.out.println();
      
    }
}



Ejercicio 4:
Ejercicio que muestra el valor mas pequeño de la lista de números:
public class ejercicio_4_unidimensionales {
        public static void main(String[] args) {     
      
int numeros[] = {1,2,3,4,5,6,7,8,9,10};

int min = numeros[0];
for(int i=1; i<numeros.length; i++) {
   if(numeros[i] < min)
      min = numeros[i];
}

System.out.println("El valor más pequeño es: "+min);
    }
}



EJERCICIOS DE ARREGLOS BIDIRECCIONALES:
Un array en programación Java puede tener más de una dimensión. El caso más general son los arrays bidimensionales también llamados matrices o tablas.
La dimensión de un array la determina el número de índices necesarios para acceder a sus elementos dentro del programa.
Una matriz necesita dos índices para acceder a sus elementos. Gráficamente podemos representar una matriz como una tabla de n filas y m columnas cuyos elementos son todos del mismo tipo.
La siguiente figura representa un array M de 3 filas y 5 columnas:

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhASE6WeeC0SdZVpbbXbwhT-xO5ksmOOAFKQGKG7KvCWImgmkOMon59shBaWmGL31a4rmo0jo-wildjw3nDZmxobw_NXNzOEnwJdFt9op9eluORj7G-vL3iZgRuzzRRAxQj5Q40A93YhbNf/s1600/matriz-java-1.jpg
Ejercicios de arreglos bidimensionales:
Ejercicio 1:
 Crear una tabla de 4x4 y mostrar la suma de cada fila y de cada columna:
public class ejercico_bidireccional_1 {
    public static void main(String[] args) {
        int[][] num = new int[4][4];
        Scanner numero = new Scanner(System.in);
        System.out.println("Ingrese los números.");
        for (int i = 0; i < num.length; i++) {//Dimensión Uno.
            for (int j = 0; j < num.length; j++) {//Dimensión Dos.
                  num[i][j]=numero.nextInt();             
            }           
        }
        System.out.println("Imprimiendo Tabla.");
        for (int i = 0; i < num.length; i++) {
            System.out.println();
            for (int j = 0; j < num.length; j++) {
                  System.out.print(num[i][j] + " ");             
            }           
        }
       
        System.out.println("\nSuma Fila.");
        int suma=0;
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num.length; j++) {
                  suma += num[i][j];             
            }
            System.out.println("Fila " + i + " =" + suma);
            suma=0;
        }
        System.out.println("\nSuma Columna");
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num.length; j++) {
                  suma += num[j][i];              
            }
            System.out.println("Columna " + i + " =" + suma);
            suma=0;
        }
       
    }
}


Ejercicio 2: se pide un programa en el cual el ususario ingrese números para conformar una tabla de  2 x 2
public class ejercicio_bidireccional_2 {
   
    public static void main(String args[])
 {
 Scanner EN=new Scanner(System.in);
 int M[][]=new int[2][2];
 System.out.println("ingrese los numeros a mostrar en la tabla");

 for(int i=0;i<2;i++)
 for(int j=0;j<2;j++)
 M[i][j]=EN.nextInt();
System.out.println("se muestra la tabla de los numeros ingresados");
 for(int i=0;i<2;i++)
 {
 for(int j=0;j<2;j++)
      System.out.print(M[i][j]+" ");
    

 System.out.println();
 }
 }
}
Ejercicio 3:
Se pide un programa q muestre una matriz de 3 x 3
public class ejercicio_bidireccional_3 {
     public static void main(String[] args) {
        
        int matriz[][]=new int[3][3];
        
        //i = filas y j = columnas
        System.out.println(" se muestra la tabla de 3 x 3 de los numeros del 1 al 9");
        for(int i=0;i<matriz.length;i++){
            for(int j=0;j<matriz[0].length;j++){
                matriz[i][j]=(i*matriz.length)+(j+1);
                System.out.print(matriz[i][j]+" ");
                
            }
            System.out.println(" ");
        }
        
    }
    
}
Ejercicio 4:
Crear una matriz de 5 filas y n columnas (se pide al usuario). Rellenarlo con números aleatorios entre 0 y 10.

public class ejercicio_bidireccionales_4 {
     public static void main(String[] args) {
        
        Scanner sn=new Scanner(System.in);
        
        System.out.println("Escriba un numero de columnas");
        int columnas=sn.nextInt();
        
        int matriz[][]=new int[5][columnas];
         System.out.println("se muestra la tabla con numeros del 0 al 9");
        for(int i=0;i<matriz.length;i++){
            for(int j=0;j<matriz[0].length;j++){
                matriz[i][j]=generaNumAleatorio(0,9);
                System.out.print(matriz[i][j]+" ");
            }
            System.out.println("");
            
        }
        
    }
    
    public static int generaNumAleatorio(int minimo,int maximo){
        
        return (int)Math.floor(Math.random()*(minimo-(maximo+1))+(maximo+1));
        
    }
    
}

DESARROLLO DE METODOLOGIAS DE SOFTWARE

El desarrollo de software, ha ido evolucionando constantemente en las metodologías o maneras en las cuales se realiza la planeación para e...