ingeniería de software, herramientas, métodos y procesos

Ingeniería de software, herramientas, métodos y procesos.



Realizado en Canva.com


Notas unidad 1

AEAE 2: Explicando las herramientas, métodos y procesos de la ingeniería de software


HERRAMIENTAS, MÉTODOS Y PROCESOS DE LA INGENIERÍA DE SOFTWARE


La ingeniería de software es una disciplina que nace a partir de la necesidad de construcción de herramientas de software que satisfagan las necesidades del cliente, el presupuesto asignado y el cronograma establecidos. Es decir, es la disciplina que está mayormente enfocada a aplicación de los recursos de las ciencias computacionales en informáticas a los diferentes mercados a los que aplique.


El software es una de las tecnologías más importantes a nivel mundial la cual está 

presente en todas las áreas de conocimiento apoyando sus respectivos procesos, además de en el día a día de una buena parte de la humanidad. Desde las organizaciones con sistemas CRM, ERP, entre otros, construidos y mantenidos por software, pasando por sus páginas webs, hasta productos propios, el desarrollo de software se ha vuelto fundamental en la operación de cualquier organización.


Las herramientas de software nos impactan también a nivel personal, modificando incluso conductas, como por ejemplo la interacción entre las personas; herramientas como redes sociales, mensajería instantánea, herramientas de teleconferencia, dispositivos móviles, han permitido diversificar los canales de comunicación. La programación está inmersa en la vida del mundo occidental y gracias a sus procesos inherentes de abstracción, ignoramos todo lo que está debajo de lo que usamos en nuestra cotidianidad.


Campos de la ingeniería de software

Podrían describirse entre otros:


  1. Creación de aplicaciones. 

  2. Diseño y desarrollo de aplicaciones móviles.

  3. Programación. 

  4. Cloud computing. 

  5. Diseño y desarrollo web. 

  6. Aplicación de metodologías para el desarrollo de software. 

  7. Gestión de proyectos de software. 

  8. Testing y aseguramiento de la calidad. 

  9. Arquitectura de software. 

  10. Ingeniería de requerimientos. 


¿Por qué aplicar a la ingeniería de software?


  1. Alta y creciente demanda laboral.

  2. Mercado asociado creciente y que demanda personal calificado.

  3. Porque está presente desde muchos de nuestros hogares hasta las diferentes instituciones y organizaciones.

  4. Para aportar valor desde los productos de software.


Ingeniería de Software

El software según la RAE se define como un conjunto de programas, instrucciones y reglas que permiten la ejecución de ciertas tareas en una computadora. Pero software va más allá de lo que produce, también debemos analizar todos los recursos necesarios para conseguirlo y como se ha generado una estructura alrededor de este.


La ingeniería de software por su parte, es una disciplina de ingeniería que se interesa por 

todos los aspectos de la producción de software, desde las primeras etapas de la 

especificación del sistema hasta el mantenimiento del sistema después de que se pone 

en operación (Sommerville, 2011) . Es llevar el concepto de ingeniería, más del lado de la industria, a la informática, que hasta hace un par de décadas tenía una mayor usabilidad a nivel académico, sobre todo desde las matemáticas, que otra cosa.


El concepto “Ingeniería de Software” se propuso por primera vez en 1968 por Fritz Bauer, 

en la primera conferencia de software organizada por la OTAN, este término se utilizó 

para describir los conocimientos que debían desarrollarse para dar solución a los 

problemas que se presentaban en el desarrollo de software en aquella época.


Durante la década de los 50 y principios de los años 60, el software que se generaba era un poco más “simple” y no existía una metodología para desarrollarlo. Con el avance de la electrónica, la potencia a nivel de hardware de las computadoras aumentó en los 60. Quizá la demanda de productos de software comenzó en los 70, pero su producción era costosa y poco fiable, al no dar los resultados esperados y ser de una alta complejidad para personas no especializadas,


Para dar solución a estos problemas, aparece entonces la “Ingeniería de Software” y con 

ella, una serie de estándares, herramientas y métodos, orientadas a mejorar los procesos 

de desarrollo de software y la calidad de los productos de software creados.


Etapas de la ingeniería de software




Procesos de software

También conocido como ciclo de vida del software. Los procesos en la ingeniería de software no componen de actividad rígidas, estos pueden ser adaptados dependiendo del problema a solucionar, el proyecto, el equipo y factores sociales; no hay una sola forma para llegar a una solución, pero con la ingeniería de software se busca hallar la solución con mayor efectividad y que se adapte mejor a la realidad del usuario final.


Existen diferentes modelos de procesos de software, los cuales representan diferentes 

enfoques para abordar el problema. Los modelos asociados a los enfoques para la resolución de un problema se pueden conocer como paradigmas, representados desde una perspectiva arquitectónica, mostrando como tal el marco de trabajo, más no las actividades específicas a desarrollar.


Metodologías tradicionales

Modelo cascada

Aplica un modelo sistemático y secuencial para el desarrollo de software, desde la comunicación con el cliente hasta el despliegue y soporte del proyecto. Este es conocido como el ciclo de vida del software, dedicado a trabajos de flujo “más lineal”, por ejemplo, con requisitos muy claros.


Modelo Cascada - Flujo lineal



  1. Análisis y definición de requisitos: definir características, restricciones y todas las propiedades del producto según las especificaciones del cliente-usuario.

  2. Diseño del sistema de software: establecer la arquitectura, identificar y describir los elementos de hardware y software que lo componen.

  3. Implementación y pruebas unitarias: desarrollar software por medio de los lenguajes y frameworks propuestos, hacer los test que validen el cumplimiento de requisitos.

  4. Integración y pruebas de integración: Integrar los componentes y generar los test necesarios para los requisitos del sistema en producción.

  5. Operación y mantenimiento: lanzar el producto, hacer seguimiento para mantener y corregir el producto, de ser necesario.


Modelo Proceso Incremental

Estos métodos permiten abordar grandes desarrollos en los cuales sea posible realizar entregas parciales del software. Este modelo aplica secuencias lineales en forma escalonada.

La primera entrega realizada es un producto funcional (MVP) el cual es evaluado por el cliente, la realimentación que el cliente haga de este primer producto, entra al flujo de desarrollo del incremento siguiente, junto con las nuevas funcionalidades que serán implementadas.


Modelos de proceso evolutivo

Es aplicado cuando se conocen bien el conjunto de requisitos, pero no como tal los detalles del producto, extensiones del sistema. Es difícil al momento de desarrollar software trazar una trayectoria directa hacia el producto final, ya que en el transcurso del desarrollo los 

Los requisitos pueden cambiar por múltiples razones. Este tipo de modelos son iterativos, permiten desarrollar versiones cada vez más completas (Pressman, 2010), algunos son:


  1. Prototipado: Es una técnica que permite la creación mostrar a los clientes versiones inicial del producto, en la cual se plasman de los requerimientos básicos, esta versión es incompleta, no posee estándares de calidad, y es elaborada de forma rápida con el fin de obtener realimentación del cliente para un mejor entendimiento de los requisitos del sistema.

 

  1. Modelo en espiral:


Estrategias y métodos del desarrollo de software

Los métodos de ingeniería de software proporcionan un enfoque organizado y sistemático 

para desarrollar software, el éxito de un proyecto de software puede depender de una adecuada elección de este. Existen algunas caracterizaciones:


  1. Diseño orientado a funciones:

  2. Diseño orientado a objetos:

Metodologías Ágiles

Nacen en la década de los 90, como una alternativa para disminuir la probabilidad de fracaso en los proyectos de software debido a la subestimación de costos, tiempo y funcionalidades de los proyectos de desarrollo.


Valores de la metodología

  1. Individuos e interacciones por encima de procesos y herramientas.

  2. Software funcionando por encima de documentación extensiva.

  3. Colaboración con el cliente por encima de negociación contractual.

  4. Respuesta ante el cambio, por encima de seguir un plan.


Derivado de estos valores, surgen los siguientes principios:


  1. La prioridad es satisfacer al cliente mediante tempranas y continuas entregas de software que le aporte un valor.

  2. Dar la bienvenida a los cambios incluso al final del desarrollo. Los cambios le darán una ventaja competitiva a nuestro cliente.

  3. Hacer entregas frecuentes de software que funcione, desde un par de semanas a un par de meses, con el menor intervalo de tiempo posible entre entregas.

  4. Las personas del negocio y los desarrolladores deben trabajar juntos diariamente a lo largo de todo el proyecto.

  5. Construir el proyecto en torno a individuos motivados. Darles el entorno y el apoyo que necesitan y confiar en ellos.

  6. El diálogo cara a cara es el método más eficiente y efectivo para comunicar información dentro de un equipo de desarrollo. 

  7. El software que funciona es la principal medida del progreso. 

  8. Los procesos ágiles promueven un desarrollo sostenido. Los promotores, usuarios y desarrolladores deben poder mantener un ritmo de trabajo constante de forma indefinida.

  9. La atención continua a la calidad técnica y al buen diseño mejoran la agilidad.

  10.  La simplicidad es esencial. Se ha de saber maximizar el trabajo que no se debe realizar.

  11. Las mejores arquitecturas, requisitos y diseños surgen de los equipos que se han organizado ellos mismos.

  12. En intervalos regulares, el equipo debe reflexionar con respecto a cómo llegar a ser más efectivo, y ajustar su comportamiento para conseguirlo.


Metodologías ágiles más comunes


  1. SCRUM

  2. RAD (Dynamic Systems Development Method)

  3. Crystal

  4. FDD (Features-Driven Development)

  5. XP (Xtreme programming)



Las herramientas

Proporcionan un apoyo para el proceso y los métodos, estas ayudan en la planeación de actividades, supervisan los procesos y ayudan a brindar calidad técnica a los productos de software.


Herramientas de requisitos del software y gestión de proyectos: 

• Jira Software 

• Trello 

• Redmine 


Herramientas de pruebas del software 

• Selenium 

• Visual Studio Test Professional 

• JUnit 


Herramientas de gestión de la configuración del software 

• Git 

• Subversion 

• Jenkins 


El desarrollo de software no solo involucra habilidades técnicas, también existen un rango de habilidades que son de gran utilidad tanto para el desempeño individual como en equipo.


  • Buena comunicación

  • Respeto mutuo

  • Compromiso

  • Capacidad de trabajo en equipo

  • Aprendizaje continuo

  • Autogestión


Roles dentro de un proyecto de software

Gerentes, analistas, arquitectos de software, desarrolladores, testers, administradores de infraestructura, soporte y mantenimiento.


Stakeholders


Los stakeholders son todas aquellas personas que influyen de alguna manera en la operación de una organización o de un proceso en particular. Estas personas deben ser tenidas en cuenta al momento de llevar a cabo el desarrollo del software, ya que pueden tener información importante que influya directamente sobre los requisitos del proyecto y el éxito del mismo..



El ciclo de vida del software es importante para la ingeniería de software, porque define 

de forma general las principales actividades que se deben llevar a cabo en el desarrollo 

de un proyecto de software, estas actividades pueden ser implementadas por medio de 

diferentes modelos o metodologías.



Modelo

Descripción

Tradicional: Cascada

Se enfoca más en el proceso

Ágiles

implementan el ciclo de vida del software

Comentarios

Entradas populares de este blog

La historia de nuestra institución

Diseño de una Base de Datos Orientada a Objetos (BDOO)