herramientas, mÉtodos y procesos de la ingenierÍa …

18
t HERRAMIENTAS, MÉTODOS Y PROCESOS DE LA INGENIERÍA DE SOFTWARE Experto temático: Samayda Herrera Betancur Año: 2020

Upload: others

Post on 18-Nov-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

t

HERRAMIENTAS,

MÉTODOS Y PROCESOS

DE LA INGENIERÍA DE

SOFTWARE

Experto temático:

Samayda Herrera Betancur

Año: 2020

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

Desarrollo del Contenido

Introducción Unidad 1

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. La construcción de estas

herramientas en una tarea compleja que debe ser desarrollada con altos estándares de

calidad que permitan su correcto funcionamiento y posterior mantenimiento. A partir de

estas necesidades nacen una serie de métodos que estandarizan la ejecución de los

procesos de software con el fin aumentar la probabilidad de éxito en el desarrollo de estas

herramientas.

En esta unidad conocerás las herramientas, métodos y procesos que componen la

ingeniería de software y algunas de las principales metodologías que se utilizan para

llevar a cabo este tipo de proyectos. Conocerás también los diferentes perfiles que

intervienen en el desarrollo de software y la importancia que tienen los Stakeholders en el

proceso de desarrollo.

1. La Ingeniería de Software

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. Es

difícil en este momento concebir nuestro estilo de vida sin las herramientas de software.

En la actualidad utilizamos software incluso hasta de forma inconsciente, las

organizaciones por ejemplo tienen sistemas que apoyan sus procesos como software de

facturación, de contabilidad, de inventario, o sistemas ERP (sistemas de Planificación de

Recursos Empresariales) los cuales integran muchas de estas funcionalidades. Las

empresas utilizan herramientas de software para administrar procesos específicos como

por ejemplo la administración de sistemas de transporte, procesos médicos, procesos

industriales, telecomunicaciones, comercio, procesos educativos, entre otros.

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.

Con el pasar del tiempo han aparecido muchos más campos de acción en los que el

software juega un papel muy importante, Tecnologías como el Internet de las Cosas (IoT),

Big Data y analítica de datos, Inteligencia Artificial, Computación en la nube entre muchas

otras más, nos obliga a una mejora continua los procesos de desarrollo de software y aquí

es donde se hace necesaria la Ingeniería de Software.

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

• El software ha hecho presencia en casi todos los aspectos de nuestra vida, por tal

motivo, la demanda de herramientas de software y el interés de las personas hacia

este tipo de herramientas, ha crecido considerablemente.

• A medida que pasa el tiempo, las nuevas tecnologías que demandan las

organizaciones, las empresas y los gobiernos se hacen más complejas, por lo

tanto, las herramientas de software requeridas son cada vez más sofisticadas, y

requieren para su implementación una mayor cantidad de personas calificadas,

estas herramientas requieren una atención cuidadosa de todos los elementos del

sistema, si diseño y planificación.

• Las organizaciones y los individuos dependen cada vez más de herramientas de

software para tomar decisiones estratégicas y para la operación de sus negocios,

la información se ha convertido en un activo muy valioso para las organizaciones y

los gobiernos. El software construido debe tener alta calidad, una falla puede

representar pérdidas catastróficas.

• Muchas herramientas se pueden convertir en un activo importante de la

organización, ya que en estas se soporta su operación o valor agregado. Estas

herramientas pueden perdurar en el tiempo, por lo tanto, se requiere que sean

escalables y mantenibles·

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 en un

sentido más amplio, el software no son solo los programas, sino también la configuración

de datos que se necesitan para hacer que estos programas operen de manera correcta,

los archivos de configuración que se utilizan para su ejecución, el sistema de

documentación de la estructura y documentación de usuario (Sommerville, 2011) .

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) . Otros autores definen la ingeniería de software como

la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo,

operación y mantenimiento de software; es decir, la aplicación de la ingeniería al software

(Pressman, 2010) .

Otras definiciones de la ingeniería de software son “Es el establecimiento y uso de

principios sólidos de ingeniería, orientados a obtener software económico que sea fiable y

trabaje de manera eficiente en máquinas reales” (Bauer, 1968) .

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.

Desde mediados de la década de los 60 comenzó a percibirse lo que en década de los 70

llamaron La crisis del software; 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. A finales de los años 60 la potencia de las computadoras a nivel de

hardware aumentó considerablemente, lo cual generó una mayor demanda de software

especializado, se comenzó a concebir el Software como un producto, pero aparecieron

problemas que provocaron grandes pérdidas en la década de los 70, la mayoría de los

productos de software excedían la estimación de costes, tenían escasa fiabilidad, no

satisfacían las necesidades del usuario, el mantenimiento y posibles actualizaciones era

difíciles y en ocasiones, demasiado costosas; en resumen, el software era de mala

calidad.

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. La utilización

de estos recursos, depende en gran medida de la magnitud de los proyectos, la empresa

que lo desarrolla, la experiencia del equipo de trabajo y el presupuesto con que se cuenta.

La ingeniería de software está compuesta por varias capas:

Figura 1: Capas de la ingeniería de de software. Elementos que componen la ingeniería

de software

Proceso de Software: Se define como un conjunto actividades, acciones y tareas que se

ejecutan con la intención de lograr un objetivo, en este caso, la obtención de un producto

de software de calidad. Al proceso de desarrollo de software también se le conoce como

Ciclo de vida del Software. Este comprende las diferentes etapas por las que debe

pasar un proyecto de software, desde el momento en que es concebido hasta que es

puesto en producción, incluso su posterior mantenimiento (Pressman, 2010) .

Los Métodos: Proporcionan un enfoque organizado y sistemático para desarrollar

software, los cuales facilitan la producción de software de alta calidad y acorde al

presupuesto y tiempo estimado. Proporcionan la experiencia técnica para elaborar

software, estos incluyen un conjunto de tareas como comunicación, análisis de requisitos,

modelación del diseño, construcción del programa, pruebas. Los métodos indican cómo

construir técnicamente el software.

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 calidades

técnicas a los productos de software.

Procesos de software

Un proceso se define como un conjunto de actividades, acciones o tareas que se llevan a

cabo para el desarrollo de un producto, a diferencia de algunas áreas, los procesos en

ingeniería de software no se compone de actividades rígidas, estas pueden ser adaptadas

por el equipo de desarrollo de software dependiendo del problema a solucionar, el

proyecto, el equipo y la cultura organizacional, con el fin de alcanzar el objetivo principal

que es entregar un software que cumpla con los requerimientos del clientes, respetando

los tiempos acordados y el presupuesto estimado (Pressman, 2010)

Un proceso está conformado por actividades las cuales a su vez agrupan un conjunto de

tareas. Un ejemplo de la estructura de un proceso se muestra a continuación.

Figura 2: Estructura de un proyecto de software. Se representan los procesos, activi

y tareas en un proyecto de software.

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

enfoques para abordar el problema. Estos modelos pueden incluir actividades que son

parte de los procesos y productos de software, estos modelos de procesos son también

llamados paradigmas de procesos y se representan desde una perspectiva arquitectónica,

mostrando de forma general el marco de trabajo, sin hacer énfasis en las actividades

específicas. Estos modelos son aplicados en el proceso de desarrollo de software, en

algunos casos pueden aplicarse a un proyecto en conjunto con otros modelos

(Sommerville, 2011) .

A continuación, se describen algunos de estos modelos o metodologías tradicionales:

Metodologías tradicionales

• El modelo en cascada:

Este modelo aplica un enfoque sistemático y secuencial para el desarrollo de software

que va desde la comunicación con el cliente hasta despliegue y el soporte al proyecto

terminado. También es conocido como el ciclo de vida del software, y es utilizado

principalmente cuando el trabajo fluye de forma razonablemente lineal, por ejemplo,

cuando los requisitos son extremadamente claros, o cuando se requiere hacer

adaptaciones o mejoras definidas a un sistema existente (Pressman, 2010) .

Figura 3: Ciclo de vida del software. Actividades del ciclo de vida del software, también

llamado modelo en cascada

1. Análisis y definición de requisitos:

A partir de la comunicación con los usuarios, se especifican las características del

sistema, las posibles restricciones y los diferentes elementos con los que el

software debe contar para suplir las necesidades del cliente.

2. Diseño del sistema de Software:

Establece la arquitectura del software, identifica y describe los elementos de

hardware y software que lo componen y sus relaciones.

3. Implementación y pruebas de unidad:

Durante esta etapa se lleva a cabo el desarrollo del software por medio de un

lenguaje de programación, finalizado el desarrollo se realizan las pruebas

correspondientes para validar que cumpla con los requisitos esperados de forma

adecuada.

4. Integración y pruebas:

Se realiza la integración del software desarrollado en su entorno de producción,

también es posible realizar la integración de parte de este con el sistema

completo. Se realizan las pruebas correspondientes para validar su correcto

funcionamiento y se libera al cliente.

5. Operación y mantenimiento:

Durante esta etapa es posible detectar y corregir posibles errores no detectados

en etapas anteriores, también es posible realizar seguimiento a funcionamiento y

mantenimiento que garantice siempre su estabilidad. A partir de la interacción con

los clientes, es posible que surjan nuevos requisitos, la implementación de estos

iniciaría nuevamente la ejecución del ciclo.

• El modelo de 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.

Figura 4: El modelo incremental. Modelo aplicado para describir la secuencia de

actividades de la ingeniería de software.

La primera entrega realizada es un producto funcional 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:

Son aplicados principalmente herramienta de software en las que se comprende bien el

conjunto de requisitos, pero no se tiene, pero los detalles del producto o extensiones del

sistema, aún están por definir. Es difícil al momento de desarrollar software trazar una

trayectoria directa hacia el producto final, ya que en el transcurso del desarrollo los

requisitos pueden cambiar por múltiples razones, incluso se pueden encontrar elementos

que han sido identificados que pueden generar modificaciones en el sistema, por tal

motivo se dice que el software evoluciona. Este tipo de modelos son iterativos, permiten

desarrollar versiones cada vez más completas (Pressman, 2010) , algunos de estos

modelos 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. Normalmente el prototipo del producto realizado, no se convierte en la versión

final del software, este normalmente es desechado. Y a partir de la realimentación

obtenida, se inicia el desarrollo del proyecto con los estándares de calidad requeridos.

Para llevar a cabo el desarrollo de un prototipo, se inicia con la comunicación con el

cliente, lo cual permite realizar un análisis preliminar de los requisitos del sistema, a partir

del análisis de esta información se identifican cuáles son las funcionalidades en las cuales

se requiere un mayor entendimiento del problema para estas se inicia entonces la

planeación para la construcción del prototipo y se lleva a cabo el modelado del sistema,

teniendo como objetivo principal la presentación de aspectos del software que son visibles

para los usuarios finales, este diseño lleva entonces a la construcción del prototipo, el

desarrollo de este prototipo debe ser rápido. Cuando el prototipo se encuentra finalizado,

es presentado al cliente para poder obtener de este la realimentación que ayudará a

aclarar las dudas sobre la funcionalidad evaluada (Pressman, 2010) .

Figura 5: Flujo de desarrollo de prototipos. Actividades propuestas para el desarrollo de

un prototipo

Algunas técnicas para el prototipado de productos son:

• Bocetos (esbozos)

• Storyboarding

• Prototipos de papel

• Maquetas (digitales)

• Mapa/Storyboard Navegacional (Whiteboarding)

• Wireframes

• Vídeos

• Prototipos software

Algunas herramientas que pueden ser de utilidad para crear prototipos de software son:

• Justinmind (www.justinmind.com)

• Balsamiq (www.balsamiq.com)

• Mockplus.com (www.mockplus.com)

• Moqups (https://moqups.com/)

Modelo en espiral

El un modelo evolutivo del proceso de software y fue propuesto por Barry Boehm, el cual

lo describe de la siguiente manera:

“El modelo de desarrollo espiral es un generador de modelo de proceso impulsado por el

riesgo, que se usa para guiar la ingeniería concurrente con participantes múltiples de

sistemas intensivos en software. Tiene dos características distintivas principales. La

primera es el enfoque cíclico para el crecimiento incremental del grado de definición de un

sistema y su implementación, mientras que disminuye su grado de riesgo. La otra es un

conjunto de puntos de referencia de anclaje puntual para asegurar el compromiso del

participante con soluciones factibles y mutuamente satisfactorias”.

El proceso de software se representa como una espiral, cada ciclo de la espiral

representa una fase del proceso, de esta manera, los ciclos más internos se relacionan

principalmente con la definición de requisitos y los ciclos más externos con su

implementación. A diferencia de los otros modelos de procesos, el modelo en espiral hace

énfasis en la identificación y reducción del riesgo.

Figura 6: Modelo en espiral de Boehm del proceso de software. Modelo propuesto para el

desarrollo de las actividades del proceso de desarrollo de software.

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, existen múltiples métodos, por lo tanto, es importante

seleccionar adecuadamente el o los métodos y herramientas que se utilizarán para el

desarrollo de software, porque de esto puede depender el éxito del proyecto. Existen

varias categorizaciones de métodos en ingeniería de software (Abran et al., 2001) .

Diseño (estructurado) orientado a funciones: Es un método clásico de diseño de

software que se centra en identificar las principales funciones, implementarlas y refinarlas.

Este tipo de método se utiliza principalmente cuando se hace un análisis estructurado de

la información el cual puede producir diagramas de flujo de procesos.

Diseño orientado a objetos: este es uno de los métodos más utilizados, este paradigma

se destacan elementos como los objetos, métodos y atributos, y también juega un papel

importante características como la herencia y el polimorfismo.

Para profundizar un poco más en esos paradigmas, se recomienda la

lectura del Capítulo 1 del libro Programación Orientada a Objetos

(Rodríguez et al., 2012) .

Metodologías ágiles

Las metodologías de desarrollo de software ágiles, nacieron 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. Estas Este tipo de metodologías se rigen por el manifiesto ágil, creado en el

2001 y en el cual se acuerdan 4 principios básicos que diferencian los proyectos ágiles

con los proyectos tradicionales: 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; y respuesta ante el

cambio, por encima de seguir un plan (Beck et al., 2001) .

Cómo consecuencia de estos 4 valores, el manifiesto ágil enuncia 12 principios que

caracterizan un proceso ágil, estos principios son:

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.

metodologías se diferencian de las tradicionales principalmente porque se adaptan al

cambio y están enfocadas principalmente en las personas, no en los procesos (Navarro et

al., 2013) .

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.

Dentro de las metodologías ágiles más comunes se encuentran:

• SCRUM

• RAD (Dynamic Systems Development Method)

• Crystal Methodologies

• FDD (Feature-Driven Development)

• XP (EXtreme Programming)

Para conocer más sobre cada una de estas metodologías, te recomiendo leer el siguiente artículo Revisión de metodologías ágiles para el desarrollo de software (Navarro et al., 2013) .

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.

A continuación, se presentan una serie de herramientas que pueden apoyar el desarrollo

de software en sus diferentes procesos, esto es sólo una pequeña muestra, ya que

comercialmente existe una gran cantidad de herramientas que apoyan la automatización

del proceso de desarrollo 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

Roles del equipo de desarrollo de software

Llevar a cabo el desarrollo de una herramienta de software involucra una serie de

procesos en los cuales se ven involucradas personas con diferentes capacidades y

habilidades. Los conocimientos técnicos o áreas específicas son muy importantes, pero

también se requiere que las personas que conforman estos equipos tengan o desarrollen

ciertas habilidades blandas que permitan una mayor cohesión entre sus integrantes, ya

que esto favorece en gran medida el desarrollo de los proyectos.

Algunas de las cualidades que debe tener un equipo de desarrollo de software son:

• Buena comunicación

• Respeto mutuo

• Compromiso

• Capacidad de trabajo en equipo

• Capacidad de auto-formación

Los roles que se identifican en un proyecto de desarrollo de software pueden variar

dependiendo del tamaño o alcance del proyecto o de las metodología o estándares de

calidad de los procesos de desarrollo que se utilice:

Algunos de los roles más comunes son:

• Gerente del proyecto: administra los recursos del proyecto con el fin de cumplir

con los objetivos establecidos.

• Analista: es el encargado de identificar las necesidades del cliente y los requisitos

del sistema y transmitir esta información al equipo de trabajo.

• Arquitecto de software: realiza el diseño arquitectónico de la herramienta,

basado en los requisitos del sistema. Vela porque el producto final cumpla con los

requisitos previamente establecidos.

• Desarrolladores: Es el encargado de llevar a cabo la codificación del software

según los requisitos y el diseño arquitectónico realizado.

• Diseñador gráfico

• Tester: es el encargado del aseguramiento de la calidad del software. Esta

persona realiza las pruebas necesarias sobre el sistema para validar su correcto

funcionamiento, teniendo como base la especificación de requisitos.

• Administradores de infraestructura o de configuración del software: es la

persona encargada de la administración del hardware o de las diferentes

herramientas necesarias para que el software funcione correctamente.

• Soporte y mantenimiento: esta persona es la encargada de mantener el software

cuando se encuentra en producción, identifica anomalías o posibles acciones de

mejora.

Una configuración de equipo altamente reconocida es la que se presenta en la

metodología Scrum, a continuación, se presentan una imagen los diferentes perfiles y su

relación en la metodología.

Figura 7: Roles equipo centra Scrum. Roles pertenecientes a la metodología Scrum

Flujo de trabajo en Scrum (Exceltic, 2017)

https://www.youtube.com/watch?v=P25JP0u6UKw

Los Stakeholder (interesados o grupos de interés)

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.

En la siguiente imagen (Grochim, 2008) , se muestran algunos de los principales

stakeholders de una compañía:

Figura 8: Stakeholders. Descripción gráfica de los diferentes tipos de stakeholders

Conclusiones

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.

Los modelos tradicionales se enfocan principalmente en el proceso, en el modelo en

cascada, por ejemplo, las actividades se realizan de forma ordenada y secuencial,

dedicando un tiempo específico a cada una de ellas, la actividad siguiente no se realiza

hasta que finalice la actividad anterior, ejemplo, la fase de diseño no se lleva a cabo sino

hasta el momento en el que termine la fase de análisis. Por su parte los procesos

iterativos (evolutivo e incremental) dividen el proyecto en subconjuntos y en cada iteración

se lleva a cabo todo el ciclo de vida del software, haciendo al cliente entregas parciales

del desarrollo.

Las metodologías ágiles por su parte, también implementan el ciclo de vida del software,

pero estas se rigen principalmente por el manifiesto ágil, se caracterizan por mantener

una comunicación constante con el cliente, y por ser abiertas al cambio. Existen muchas

metodologías conocidas como Scrum, XP, Crystal, pero las metodologías ágiles en

general son flexibles y pueden ser modificadas para que se ajusten a la realidad de cada

equipo y proyecto, lo cual puede llevar a que las empresas creen su propia metodología.