Está en la página 1de 18

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.

También podría gustarte