Material de Apoyo Pro103-1 Desarrollo de SW
Material de Apoyo Pro103-1 Desarrollo de SW
Material de Apoyo Pro103-1 Desarrollo de SW
ALC
AIEP
IBM nos brinda su apreciación respecto a:
Los desarrolladores de software tienen un rol menos formal que los ingenieros y pueden
participar de cerca en áreas específicas del proyecto, incluida la escritura de código. Al
mismo tiempo, impulsan el ciclo de vida general del desarrollo de software mediante el
trabajo en equipos funcionales para transformar los requisitos en funciones, la gestión de
equipos y procesos de desarrollo y la realización de pruebas y mantenimiento de
software.
El trabajo del desarrollo de software no se limita a codificadores o equipos de desarrollo.
Profesionales como científicos, fabricantes de dispositivos y fabricantes de hardware
también crean código de software, aunque no son principalmente desarrolladores de
software. Tampoco se limita a las industrias tradicionales de tecnología de la información,
como las empresas de software o semiconductores. De hecho, según Brookings Institute
(enlace externo a ibm.com), esas empresas "representan menos de la mitad de las
empresas que realizan desarrollo de software".
Una diferencia importante es el desarrollo de software personalizado, contrario al
desarrollo de software comercial. El desarrollo de software personalizado es el proceso
de diseño, creación, despliegue y mantenimiento de software para un conjunto específico
de usuarios, funciones u organizaciones. Por el contrario, el software comercial listo para
usar (COTS) está diseñado para un amplio conjunto de requisitos, lo que permite
empaquetarlo, comercializarlo y distribuirlo.
2
https://www.ibm.com/es-es/topics/software-development
Crear código en el lenguaje de programación apropiado. Involucra la revisión de expertos
y en equipo para solucionar problemas en etapas tempranas y producir software de
calidad más rápido.
Realizar pruebas con escenarios planificados previamente como parte del diseño y
codificación de software, y realizar pruebas de rendimiento para simular pruebas de carga
en la aplicación.
Gestionar la configuración y los defectos para comprender todos los artefactos del
software (requisitos, diseño, código, prueba) y crear distintas versiones del software.
Establecer prioridades de garantía de calidad y criterios de lanzamiento para abordar y
realizar un seguimiento de los defectos.
Desplegar el software para su uso y responder y resolver problemas del usuario.
Migrar datos al software nuevo o actualizado desde aplicaciones o fuentes de datos
existentes si es necesario.
Gestionar y medir el proyecto para mantener la calidad y la entrega durante el ciclo de
vida de la aplicación, y evaluar el proceso de desarrollo con modelos como el Modelo de
capacidad de madurez (CMM).
Los pasos del proceso de desarrollo de software se integran en la gestión del ciclo de vida
de aplicaciones (ALM). La solución IBM Engineering Management es un superconjunto
de ALM que permite la gestión del desarrollo mecánico, eléctrico y de software al mismo
tiempo.
Análisis y especificación de requisitos
Diseño y desarrollo
Pruebas
Despliegue
Mantenimiento y soporte
Los pasos del proceso de desarrollo de software se pueden agrupar en las etapas del
ciclo de vida, pero la importancia de este es que vuelve a repetirse para permitir la
mejora continua. Por ejemplo, los problemas de los usuarios que surgen en la etapa de
mantenimiento y soporte pueden convertirse en requisitos al comienzo del siguiente ciclo.
¿Por qué es importante el desarrollo de software?
El desarrollo de software también es importante porque es generalizado. Como el
vicepresidente de IBM y bloguero Dibbe Edwards señala: "El software ha surgido como un
diferenciador fundamental en muchos productos, desde automóviles hasta lavadoras y
termostatos, con un creciente Internet de las cosas que los conecta".
Algunos ejemplos son:
Soul Machines (enlace externo a ibm.com) utiliza software para crear asesores en línea
artificiales que mejoran la atención al cliente y la eficiencia. Los asesores tienen rostros,
expresiones y voces humanas que reaccionan de manera inteligente, empática y eficiente
a las preguntas y necesidades de los clientes. Pueden responder a más del 40 % de las
consultas de los clientes sin intervención humana y aprenden de sus interacciones para
3
https://www.ibm.com/es-es/topics/software-development
mejorar con el tiempo. Usando IBM Watson Assistant para incorporar funciones de IA en
el proceso de desarrollo, Soul Machines puede crear y desplegar un asesor artificial en
aproximadamente 8 a 12 semanas.
"Es una carrera", indica Erik Bak-Mikkelsen. "Tenemos que mantenernos al día con lo
que está sucediendo en el mercado". Bak-Mikkelsen es Jefe de operaciones en la nube
de car2go (enlace externo a ibm.com). Entiende que ofrecer nuevas características y
funciones en las aplicaciones y vehículos de viajes compartidos de car2go es esencial
para obtener una ventaja competitiva y mantenerse a la vanguardia. Para hacerlo, car2go
migró sus operaciones de desarrollo a una nube de servicios gestionados y adoptó un
modelo de desarrollo DevOps. Como resultado, obtuvo ciclos de desarrollo acelerados, un
tiempo de comercialización más rápido y la capacidad de escalar para crecer en el futuro.
Trabajar con líneas de energía eléctrica puede ser mortal. Para mantenerse seguros, los
ingenieros establecen "bloqueos" eléctricos utilizando etiquetas físicas y candados para
desviar la energía de los lugares de trabajo. La empresa francesa de energía Enedis
(enlace externo a ibm.com) trabajó con IBM Garage for Cloud para desarrollar software
que equipa estos candados y etiquetas y los vincula a una red compartida. Las etiquetas y
los candados detectan cada vez que son retirados de la camioneta de un ingeniero y
comunican la hora y la ubicación geográfica. A medida que el ingeniero coloca los
candados, su ubicación se registra en un mapa digital. Todos los stakeholders comparten
una vista del mapa para garantizar la seguridad, reducir el tiempo de inactividad y facilitar
las reparaciones. El enfoque de desarrollo colaborativo de IBM Cloud Garage permitió a
Enedis desarrollar prototipos listos para usar en terreno en tres meses.
Características principales del desarrollo de software eficaz
Usar el desarrollo de software para diferenciar marcas y ganar ventaja competitiva
requiere dominio de las técnicas y tecnologías que pueden acelerar el despliegue, la
calidad y la eficacia del software.
Inteligencia artificial (IA): La IA permite que el software imite la toma de decisiones y el
aprendizaje humanos. Las redes neuronales, el machine learning, el procesamiento del
lenguaje natural y las capacidades cognitivas ofrecen a los desarrolladores y empresas la
oportunidad de ofrecer productos y servicios que revolucionan los mercados y se
adelantan a la competencia. IBM Watson ofrece a los desarrolladores una forma de
conectarse y utilizar servicios de inteligencia artificial como parte de sus aplicaciones a
través de interfaces de programación de aplicaciones o API. También puede utilizar IBM
Watson para mejorar los requisitos de su producto comprobando la ambigüedad, actores
poco claros, requisitos compuestos o negativos, unidades o tolerancias faltantes,
requisitos incompletos y cantidades no específicas.
Desarrollo nativo de la nube: El desarrollo nativo de la nube es una forma de crear
aplicaciones para aprovechar los entornos de la nube. Una aplicación nativa de la nube
consta de componentes discretos y reutilizables conocidos como microservicios,
diseñados para integrarse en cualquier entorno de nube. Estos microservicios actúan
como elementos básicos y a menudo se empaquetan en contenedores. Debido a esta
arquitectura, las aplicaciones nativas de la nube pueden utilizar entornos de nube para
mejorar el rendimiento, la flexibilidad y la extensibilidad de las aplicaciones.
4
https://www.ibm.com/es-es/topics/software-development
Desarrollo basado en la nube: Así como las organizaciones de TI utilizan la nube para
mejorar la gestión de recursos y reducir costos, también lo hacen las organizaciones de
desarrollo de software. De esta manera, la nube se puede utilizar como un entorno de
desarrollo integrado (IDE) rápido, flexible y rentable o una plataforma como servicio
(PaaS). Los entornos de desarrollo basados en la nube pueden admitir codificación,
diseño, integración, pruebas y otras funciones de desarrollo. También pueden ofrecer
acceso a API, microservicios, DevOps y otras herramientas, servicios y experiencia de
desarrollo.
Blockchain: Blockchain es un libro mayor seguro y vinculado digitalmente que elimina el
costo y la vulnerabilidad generados por bancos, organismos reguladores y otros
intermediarios. Está transformando empresas al liberar capital, acelerar procesos, reducir
costos de transacción y más. Blockchain presenta una gran oportunidad para el
desarrollo de software. Los desarrolladores están trabajando con libros mayores
distribuidos y tecnología Hyperledger (enlace externo a ibm.com) de código abierto para
cambiar la forma en que operan las empresas.
Código bajo: Forrester define el código bajo como: "Productos y/o servicios en la nube
para el desarrollo de aplicaciones que emplean técnicas visuales y declarativas en lugar
de programación, y están disponibles para los clientes a un bajo costo o sin costo en
cuanto a dinero y capacitación (...)". 4 En resumen, es una práctica de desarrollo que
reduce la necesidad de codificar y permite a los no codificadores o desarrolladores
ciudadanos crear o ayudar a crear aplicaciones rápidamente y a un costo menor.
Analítica: La demanda anual de científicos de datos, desarrolladores de datos e
ingenieros de datos llegó a casi 700,000 vacantes en 2020. La demanda destaca lo
importante que es para las empresas obtener insights y valor de los datos. En
consecuencia, los desarrolladores de software están integrando funciones analíticas
avanzadas en sus aplicaciones. Los servicios basados en la nube y las API simplifican la
tarea de guiar la exploración de datos, automatizar la analítica predictiva y crear paneles
de control que brindan nuevos insights y mejoran la toma de decisiones.
Ingeniería de sistemas basada en modelos (MBSE): En MBSE, los lenguajes de
modelado de software se utilizan para realizar prototipos, simulaciones y análisis
tempranos de diseños de software para su validación temprana. La creación de diseños
en MBSE le ayuda a analizar y elaborar los requisitos del proyecto y pasar rápidamente
del diseño a la implementación.
Móvil: Muchas de estas experiencias ocurren en entornos móviles. Una de las funciones
principales de los desarrolladores de software es la creación de aplicaciones móviles con
conexiones profundas a los datos que enriquecen y mejoran las experiencias de los
usuarios. Forrester ha descubierto que "la integración profunda de los datos
digitales/móviles de los clientes tiene un fuerte impacto en la forma en que los clientes
interactúan con las marcas".
5
https://www.ibm.com/es-es/topics/software-development
Glosario
Desarrollo ágil divide los requisitos en funciones consumibles y ofrece
rápidamente esas funciones a través del desarrollo incremental. Un circuito de
retroalimentación ayuda a encontrar y corregir defectos a medida que la
funcionalidad continúa desplegándose.
Modelo de capacidad de madurez (CMM) evalúa la competencia de los procesos
de desarrollo de software. Realiza un seguimiento del progreso desde acciones ad
hoc hasta pasos definidos, resultados medidos y procesos optimizados.
DevOps, una combinación de desarrollo y operaciones, es un enfoque ágil que
une el desarrollo de software y las operaciones de TI en el diseño, desarrollo,
despliegue y soporte de software.
El desarrollo rápido de aplicaciones (RAD) es un enfoque no lineal que fusiona
el diseño y la creación del código en un paso interconectado.
El marco ágil escalado (SAFe) proporciona una forma de escalar la metodología
ágil a un equipo u organización de desarrollo de software más grande.
La cascada, a menudo considerada la metodología de desarrollo de software
tradicional, es un conjunto de pasos lineales en cascada desde la planificación y la
recopilación de requisitos hasta el despliegue y el mantenimiento.
6
https://www.ibm.com/es-es/topics/software-development
CICLO DE VIDA DE UN SOFTWARE
https://www.solbyte.com/blog/ciclo-de-vida-del-software/
7
https://www.ibm.com/es-es/topics/software-development
Es importante tener en cuenta la adquisición de productos necesarios para que el
software funcione.
Pruebas
Conseguiremos detectar los fallos que se hayan cometido en etapas anteriores, para que
no repercuta en el usuario final.
Esta fase del ciclo de vida del software hay que repetirla tantas veces como sea
necesaria, ya que la calidad y estabilidad final del software dependerá de esta fase.
Instalación
En esta fase pondremos el software en funcionamiento.
Uso y mantenimiento
Este es un momento crucial dentro del ciclo de vida de un software.
Dentro del mantenimiento se pueden distinguir tres puntos importantes:
Correctivo: Eliminar defectos que se van detectando.
Adaptativo: Adaptarlo a nuevas necesidades.
Perfectivo: Añadir nuevas funcionalidades.
8
https://www.ibm.com/es-es/topics/software-development
Modelo de desarrollo incremental
Combina el modelo en cascada con el de prototipos.
Está basado en la filosofía de construir incrementando las funcionalidades del programa.
Se sigue un proceso lineal y cada uno de ellos va incrementando funcionalidades del
software hasta llegar al producto final.
Modelo en espiral
Las actividades de este modelo forman una espiral, y cada bucle representa un conjunto
de actividades.
Cada actividad se va eligiendo en función del análisis de riesgos del bucle anterior.
Se necesita un equipo con experiencia para detectar correctamente los riesgos.
En cada bucle se siguen cuatro tareas:
Fijar objetivos
Análisis del riesgo
Desarrollar, verificar y probar
Planificar
Modelo de prototipos
Comienza con la recolección de requisitos y definición de objetivos globales, llevando a un
diseño rápido y a un prototipo.
El prototipo es evaluado por el cliente, y nos permite refinar los requisitos hasta llegar a lo
que el cliente espera.
9
https://www.ibm.com/es-es/topics/software-development