TESIS EMPRESARIAL DESARROLLO DE SOFTWARE ¿Por qué es importante el desarrollo de software? Características clave de un desarrollo de software eficaz Glosario Herramientas y soluciones de desarrollo de software Recursos para el desarrollo de software Dé el siguiente paso ¿Qué es el desarrollo de software? El desarrollo de software hace referencia a un conjunto de actividades informáticas dedicadas al proceso de creación, diseño, implementación y soporte de software. El software propiamente dicho es el conjunto de instrucciones o programas que indican a un ordenador lo que debe hacer. Es independiente del hardware y hace que los ordenadores sean programables. Hay tres tipos básicos: Software de sistema, que proporciona funciones básicas, como sistemas operativos, gestión de discos, servicios, gestión de hardware y otras necesidades operativas. Software de programación, que proporciona herramientas a los programadores, como editores de texto, compiladores, enlazadores, depuradores y otras herramientas para crear código. Software de aplicación (aplicaciones o apps), que ayuda a los usuarios a realizar tareas. Por ejemplo, conjuntos de productividad ofimática, software de gestión de datos, reproductores multimedia y programas de seguridad. Las aplicaciones también se refieren a aplicaciones web y móviles como las que se utilizan para comprar en Amazon.com, socializar con Facebook o publicar fotos en Instagram.1 Un posible cuarto tipo es el software embebido. El software de sistemas embebidos se utiliza para controlar máquinas y dispositivos que normalmente no se consideran ordenadores: redes de telecomunicaciones, automóviles, robots industriales, etc. Estos dispositivos, y su software pueden conectarse como parte del Internet de las cosas (IoT).2 El desarrollo de software lo llevan a cabo principalmente programadores, ingenieros de software y desarrolladores de software. Estos roles interactúan y se superponen, y la dinámica entre ellos varía mucho entre los departamentos de desarrollo y las comunidades. Los programadores escriben código fuente para programar ordenadores que realicen tareas específicas, como fusionar bases de datos, procesar pedidos en línea, enrutar comunicaciones, realizar búsquedas o mostrar textos y gráficos. Los programadores suelen interpretar las instrucciones de los desarrolladores e ingenieros de software y utilizan lenguajes de programación como C++ o Java para llevarlas a cabo. Los ingenieros de software aplican principios de ingeniería para crear software y sistemas para resolver problemas. Utilizan el lenguaje de modelado y otras herramientas para idear soluciones que a menudo se pueden aplicar a los problemas de una manera general en lugar de limitarse a resolver un caso o problema de un cliente concreto. Las soluciones de ingeniería de software se rigen por el método científico y deben funcionar en el mundo real, como ocurre con los puentes o los ascensores. Su responsabilidad ha crecido a medida que los productos se han vuelto cada vez más inteligentes con la incorporación de microprocesadores, sensores y software. Además de que cada vez más productos dependen del software para diferenciarse en el mercado, el desarrollo del software debe coordinarse con las tareas de diseño mecánico y eléctrico. Los desarrolladores de software tienen un papel menos formal que los ingenieros y pueden estar estrechamente involucrados en áreas específicas del proyecto, incluida la escritura de código. Al mismo tiempo, dirigen todo el ciclo de vida del desarrollo de software, lo que implica colaborar con los equipos funcionales para transformar los requisitos en características, gestionar los equipos y procesos de desarrollo, y realizar pruebas y mantenimiento del software.3 El trabajo de desarrollo de software no se limita a los programadores o a los equipos de desarrollo. Algunos profesionales, como los científicos, los fabricantes de dispositivos y los fabricantes de hardware, también crean código de software aunque no se dediquen principalmente al desarrollo de software. Tampoco se limita a los sectores tradicionales de la tecnología de la información, como las empresas de software o semiconductores. De hecho, según el Brookings Institute (enlace externo a ibm.com), esas empresas "representan menos de la mitad de las que se dedican al desarrollo de software". Una distinción importante es el desarrollo de software a medida en comparación con el desarrollo de software comercial. El desarrollo de software a medida consiste en diseñar, crear, implementar y mantener 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. GuíaLogre flexibilidad en el lugar de trabajo con DaaS Lea cómo el escritorio como servicio (DaaS) permite a las empresas lograr el mismo nivel de rendimiento y seguridad que la implementación de las aplicaciones en las instalaciones. Contenido relacionado Regístrese para recibir la guía sobre la nube híbrida Pasos en el proceso de desarrollo de software El desarrollo de software suele constar de los siguientes pasos: Seleccionar una metodología para establecer un marco en el que se apliquen los pasos del desarrollo de software. Implica describir un proceso de trabajo global o una hoja de ruta para el proyecto. Las metodologías pueden incluir el desarrollo ágil de software, las prácticas DevOps, el desarrollo rápido de aplicaciones (RAD), el marco Scaled Agile Framework (SAFe), el desarrollo en cascada y más. Recopilar requisitos para comprender y documentar lo que necesitan los usuarios y otras partes interesadas. Elegir o construir una arquitectura como estructura subyacente dentro de la cual operará el software. Desarrollar un diseño en torno a soluciones a los problemas presentados por los requisitos, lo que a menudo implica modelos de procesos y guiones gráficos. Crear un modelo con una herramienta de modelado que utilice un lenguaje de modelado como SysML o UML para llevar a cabo la validación temprana, la creación de prototipos y la simulación del diseño. Construir código en el lenguaje de programación adecuado. Implica la revisión por pares y en equipo para eliminar problemas de forma temprana y producir software de calidad más rápido. Realizar pruebas con escenarios planificados de antemano como parte del diseño y la codificación del 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, pruebas) y crear distintas versiones. Implica establecer prioridades de control de calidad y criterios de publicación para abordar y hacer un seguimiento de los defectos. Implementar el software para su uso y resolver los problemas de los usuarios. Migrar datos al software nuevo o actualizado desde aplicaciones o fuentes de datos existentes, si es necesario. Gestionar y medir el proyectopara mantener la calidad y la entrega a lo largo del ciclo de vida de la aplicación, y evaluar el proceso de desarrollo con modelos como el Modelo de Madurez de Capacidades (CMM). Los pasos del proceso de desarrollo de software encajan en la gestión del ciclo de vida de las aplicaciones (ALM). La solución IBM Engineering Management es un superconjunto de ALM que permite gestionar en paralelo el desarrollo mecánico, eléctrico y de software. Análisis y especificación de requisitos Diseño y desarrollo Pruebas Implementación Mantenimiento y soporte Los pasos del proceso de desarrollo de software se pueden agrupar en las fases del ciclo de vida, pero la importancia del ciclo de vida es que se recicla para permitir una mejora continua. Por ejemplo, los problemas de los usuarios que surgen en la fase de mantenimiento y soporte pueden convertirse en requisitos al inicio del siguiente ciclo. ¿Por qué es importante el desarrollo de software? El desarrollo de software también es importante porque es omnipresente. Como señala Dibbe Edwards, vicepresidenta y bloguera de IBM: "El software se ha convertido en un elemento diferenciador clave en muchos productos, desde coches y lavadoras hasta termostatos, con una creciente Internet de las cosas que los conecta". Por ejemplo: Soul Machines (enlace externo a ibm.com) utiliza software para crear asesores artificiales en línea que mejoran el servicio de 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 mejorar con el tiempo. Al utilizar IBM watsonx Assistant para incorporar capacidades de inteligencia artificial (IA) al proceso de desarrollo, Soul Machines puede crear y poner en marcha un asesor artificial de 8 a 12 semanas. "Estamos en una carrera", dice Erik Bak-Mikkelsen. "Tenemos que mantenernos al día con lo que sucede en el mercado". Bak-Mikkelsen es responsable de operaciones en la nube en car2go (enlace externo a ibm.com). Entiende que aportar nuevas características y funciones a las aplicaciones y vehículos de transporte compartido de car2go es clave para conseguir y mantener el liderazgo. Para ello, car2go trasladó su desarrollo de operaciones a un servicio gestionado en la nube y adoptó un modelo de desarrollo DevOps. El resultado son ciclos de desarrollo acelerados, plazos de comercialización más cortos y capacidad de ampliación para futuros crecimientos. Trabajar con líneas de alta tensión puede ser mortal. Para mantener la seguridad, los ingenieros establecen "bloqueos" eléctricos mediante etiquetas físicas y candados para desviar la corriente de los lugares de trabajo. La empresa energética francesa Enedis (enlace externo a ibm.com) colaboró con IBM Garage for Cloud para desarrollar un software que instrumentalizase estos candados y etiquetas y los vinculase a una red compartida. Las etiquetas y los candados detectan cada vez que se retiran de la furgoneta de un ingeniero y comunican la hora y la geolocalización. Cuando el ingeniero coloca los candados, su ubicación se registra en un mapa digital. Todas las partes interesadas comparten una vista del mapa para garantizar la seguridad, reducir el tiempo de inactividad y facilitar las reparaciones. El desarrollo en colaboración IBM Cloud Garage Approach permitió a Enedis desarrollar prototipos listos para usar en tres meses. Características clave de un desarrollo de software eficaz Utilizar el desarrollo de software para diferenciar las marcas y obtener ventajas competitivas exige dominar las técnicas y la tecnología que pueden acelerar la implementación, la calidad y la eficacia del software. Inteligencia artificial (IA): la IA permite a los programas informáticos emular la toma de decisiones y el aprendizaje humanos. Las redes neuronales, el machine learning, el procesamiento del lenguaje natural y las capacidades cognitivas presentan a desarrolladores y empresas la oportunidad de ofrecer productos y servicios que alteren los mercados y se adelanten a la competencia. IBM watsonx ofrece a los desarrolladores una forma de conectar con los servicios de inteligencia artificial y utilizarlos como parte de su aplicación a través de interfaces de programación de aplicaciones o API. También puede utilizar IBM watsonx para mejorar los requisitos de sus productos mediante la comprobación de ambigüedad, actores poco claros, requisitos compuestos o negativos, falta de unidades o tolerancias, requisitos incompletos y cantidades no específicas. Desarrollo nativo de la nube: el desarrollo nativo de la nube es una forma de construir aplicaciones para utilizar entornos en la nube. Una aplicación nativa de la nube consta de componentes discretos y reutilizables que se conocen como microservicios y que están diseñados para integrarse en cualquier entorno de nube. Estos microservicios actúan como bloques de construcción y a menudo se empaquetan en contenedores. Gracias a esta arquitectura, la aplicación nativa de la nube puede utilizar entornos de nube para mejorar el rendimiento, la flexibilidad y la extensibilidad de la aplicación. Desarrollo basado en la nube: al igual que las organizaciones de TI recurren a la nube para mejorar la gestión de recursos y reducir costes, también lo hacen las organizaciones de desarrollo de software. De este modo, la nube puede utilizarse como un entorno de desarrollo integrado (IDE) o plataforma como servicio (PaaS) de desarrollo rápido, flexible y rentable. Los entornos de desarrollo basados en la nube pueden apoyar la codificación, el diseño, la integración, las pruebas y otras funciones de desarrollo. También pueden ofrecer acceso a API, microservicios, DevOps y otras herramientas de desarrollo, servicios y experiencia. Blockchain: blockchain es un libro de contabilidad seguro y vinculado digitalmente que elimina los costes y la vulnerabilidad que introducen partes como bancos, organismos reguladores y otros intermediarios. Esta tecnología está transformando las empresas liberando capital, acelerando los procesos, reduciendo los costes de transacción y mucho más. Blockchain presenta una enorme oportunidad para el desarrollo de software. Los desarrolladores están trabajando con libros de contabilidad distribuidos y tecnología de código abierto Hyperledger (enlace externo a ibm.com) para cambiar el modo de operar de las empresas. Low code: Forrester define el low code de la siguiente forma: "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 que están disponibles para los clientes a bajo o ningún coste en dinero y formació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 construir o ayudar a construir aplicaciones rápidamente y a menor coste. Análisis: la demanda anual de científicos de datos, desarrolladores de datos e ingenieros de datos alcanzará cerca de 700 000 vacantes en 2020. La demanda pone de manifiesto lo crucial que es para las empresas obtener conocimiento y valor de la explosión de datos. En consecuencia, los desarrolladores de software están integrando capacidades avanzadas de análisis en sus aplicaciones. Los servicios basados en la nube y las API simplifican la exploración de datos, automatizan el análisis predictivo y crean paneles de control que ofrecen nuevas perspectivas 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 tempranos, simulación y análisis de diseños de software para su validación temprana. Construir diseños en MBSE le ayuda a analizar y elaborar los requisitos del proyecto y a pasar rápidamente del diseño a la implementación. Móvil: una de las capacidades clave para los desarrolladores de software es crear aplicaciones móviles con conexiones profundas a los datos que enriquezcan y eleven la experiencia del usuario. Forrester ha descubierto que "integrar profundamente los datos de los clientes digitales/móviles tiene un fuerte efecto en la forma en que los clientes interactúan con las marcas". Breve glosario El desarrollo ágil de software divide los requisitos en funciones consumibles y ofrece rápidamente esas funciones mediante un desarrollo incremental. Un bucle de retroalimentación ayuda a encontrar y corregir defectos a medida que la funcionalidad sigue implementándose. El Modelo de Madurez de Capacidades (CMM) evalúa la competencia de los procesos de desarrollo de software. Realiza un seguimiento del progreso desde las acciones ad hoc hasta los pasos definidos, los resultados medidos y los procesos optimizados. DevOps, una combinación de desarrollo y operaciones, es un enfoque ágil que aúna el desarrollo de software y las operaciones de TI en el diseño, desarrollo, implementación y soporte de software. El desarrollo rápido de aplicaciones (RAD) es un método no lineal que condensa el diseño y la construcción del código en un solo paso interconectado. El marco Scaled Agile Framework (SAFe) proporciona una manera de escalar la metodología ágil a un equipo u organización de desarrollo de software más grande. El desarrollo en cascada, a menudo considerada la metodología tradicional de desarrollo de software, es un conjunto de pasos lineales en cascada que van desde la planificación y la recopilación de requisitos hasta la implementación y el mantenimiento.