ingeniería de software, herramientas, métodos y procesos
Ingeniería de software, herramientas, métodos y procesos.
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:
Creación de aplicaciones.
Diseño y desarrollo de aplicaciones móviles.
Programación.
Cloud computing.
Diseño y desarrollo web.
Aplicación de metodologías para el desarrollo de software.
Gestión de proyectos de software.
Testing y aseguramiento de la calidad.
Arquitectura de software.
Ingeniería de requerimientos.
¿Por qué aplicar a la ingeniería de software?
Alta y creciente demanda laboral.
Mercado asociado creciente y que demanda personal calificado.
Porque está presente desde muchos de nuestros hogares hasta las diferentes instituciones y organizaciones.
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
Análisis y definición de requisitos: definir características, restricciones y todas las propiedades del producto según las especificaciones del cliente-usuario.
Diseño del sistema de software: establecer la arquitectura, identificar y describir los elementos de hardware y software que lo componen.
Implementación y pruebas unitarias: desarrollar software por medio de los lenguajes y frameworks propuestos, hacer los test que validen el cumplimiento de requisitos.
Integración y pruebas de integración: Integrar los componentes y generar los test necesarios para los requisitos del sistema en producción.
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:
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.
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:
Diseño orientado a funciones:
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
Individuos e interacciones por encima de procesos y herramientas.
Software funcionando por encima de documentación extensiva.
Colaboración con el cliente por encima de negociación contractual.
Respuesta ante el cambio, por encima de seguir un plan.
Derivado de estos valores, surgen los siguientes principios:
La prioridad es satisfacer al cliente mediante tempranas y continuas entregas de software que le aporte un valor.
Dar la bienvenida a los cambios incluso al final del desarrollo. Los cambios le darán una ventaja competitiva a nuestro cliente.
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.
Las personas del negocio y los desarrolladores deben trabajar juntos diariamente a lo largo de todo el proyecto.
Construir el proyecto en torno a individuos motivados. Darles el entorno y el apoyo que necesitan y confiar en ellos.
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.
El software que funciona es la principal medida del progreso.
Los procesos ágiles promueven un desarrollo sostenido. Los promotores, usuarios y desarrolladores deben poder mantener un ritmo de trabajo constante de forma indefinida.
La atención continua a la calidad técnica y al buen diseño mejoran la agilidad.
La simplicidad es esencial. Se ha de saber maximizar el trabajo que no se debe realizar.
Las mejores arquitecturas, requisitos y diseños surgen de los equipos que se han organizado ellos mismos.
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
SCRUM
RAD (Dynamic Systems Development Method)
Crystal
FDD (Features-Driven Development)
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.
Comentarios
Publicar un comentario