Ingeniería del Software · Unidad 1
Introducción a la Ingeniería del Software
Pasar de mirar el software como programador a mirarlo como director técnico de proyecto: qué es la disciplina, qué procesos abarca y cómo se decide con criterio económico gracias al TCO.
Punto de partida
Introducción y objetivos
La asignatura presenta los conocimientos y técnicas para la correcta especificación, diseño e implementación de proyectos software siguiendo buenas prácticas y metodologías de ingeniería. El objetivo último es aprender a planificar y desarrollar proyectos desde la perspectiva del director técnico de proyecto, no solo del programador:
- Planificar y gestionar proyectos con metodologías predictivas e iterativas.
- Formar equipos de trabajo para sacar adelante proyectos software.
- Describir arquitecturas y diseños de software mediante lenguajes gráficos.
Esta unidad introduce el concepto de Ingeniería del Software, da una visión de conjunto de sus disciplinas y campo de actuación y estudia un concepto clave en la gestión de departamentos de sistemas: el TCO (Total Cost of Ownership).
¿Qué otras disciplinas y actividades caen bajo el paraguas de la Ingeniería del Software sin ser desarrollo propiamente dicho?
Ver respuesta propuesta · a partir del contenido de la unidad
- Gestión de proyectos: alcance, plazos, costes, riesgos, equipo y comunicación (áreas del PMI).
- Requisitos, análisis y diseño: la esencia del trabajo del ingeniero.
- Validación y pruebas, aseguramiento de la calidad y auditoría.
- Gestión de la configuración, documentación y control de versiones.
- Operación y explotación: despliegue, monitorización, copias, continuidad.
- Integración de sistemas y elección de plataformas.
- Decisiones económicas: comprar, adaptar o construir (TCO), licencias y SaaS.
Objetivos de la unidad (6)
- Comprender qué es la Ingeniería del Software y por qué es necesaria hoy.
- Identificar las diferencias fundamentales entre programación y práctica ingenieril.
- Conocer los principales modelos de procesos de software: PMI e ISO/IEC 12207.
- Reflexionar sobre la industrialización del software frente al desarrollo académico o artesanal.
- Introducir el TCO como herramienta para decidir con información en proyectos software.
- Reconocer la diversidad de aplicaciones y plataformas y los retos de la integración y de los servicios en la nube.
Tema 1
La ingeniería del software
Naturaleza del software
No hay consenso sobre la definición de Ingeniería del Software. Pese a tener más de 50 años (y el software más de 70), se la sigue viendo como una rama nueva de la ingeniería que busca sistematizar de forma racional las prácticas de una industria muy distinta de las ingenierías tradicionales.
El software es mucho más que código. Se compone de:
Instrucciones
Programas que, al ejecutarse, proporcionan la función y el rendimiento deseados.
Estructuras de datos
Permiten a los programas manipular adecuadamente la información.
Documentos
Describen la construcción y el uso: requisitos, diseños, manuales.
Configuraciones
Parametrizaciones que hacen funcionar todo lo anterior en equipos físicos o virtuales.
Características distintivas (según Pressman)
- Se desarrolla con el intelecto, no se fabrica: el proceso se parece más al diseño que a la fabricación.
- No se desgasta, aunque se degrada: es intangible, sin desgaste, fatiga ni caducidad.
- La industria física ensambla componentes estándar; el software, en gran parte, sigue siendo a medida y único.
- El coste de réplica es casi nulo: casi todo el coste está en el desarrollo.
«Software is like entropy. It is difficult to grasp, weighs nothing, and obeys the second law of thermodynamics; i.e. it always increases.»
Atributos de calidad
Un buen software no basta con que funcione: debe ser mantenible, confiable, seguro, eficiente y aceptable para sus usuarios, tanto en ejecución como en su estructura interna, documentación y facilidad de uso. Un sistema bancario debe ser seguro; un videojuego, interactivo y receptivo. Son los atributos de calidad o atributos no funcionales.
| Atributo | Significado |
|---|---|
| Confiabilidad | Funciona correctamente según los requisitos y las necesidades del cliente (no tienen por qué coincidir). |
| Mantenibilidad | Capacidad de adaptarse a futuros requerimientos. |
| Eficiencia | Consumo proporcional de recursos. |
| Usabilidad | Interfaz adecuada y documentada para comunicarse con los usuarios. |
| Otros | Seguridad, cumplimiento (compliance), escalabilidad, accesibilidad, operatividad… (se verán como NFRs, requisitos no funcionales). |
Evolución del papel del software
Al principio el protagonista era el hardware, más caro y sofisticado. Hoy se han invertido los papeles: el software es lo más relevante y el hardware casi una commodity. El software es ya un recurso clave para la industria, los gobiernos y la sociedad.
Vídeo no transcrito: el estado actual del software a partir de la frase «El software se está comiendo el mundo».
Diversidad de sistemas
Un sistema embebido en un dispositivo médico no tiene los mismos requerimientos que un videojuego o una aplicación web.
No existe una metodología universal: cada tipo de sistema exige enfoques, herramientas y técnicas propias, y el profesional debe adaptarlos a cada proyecto.
Ingeniería
Ingeniería viene de «ingenio»: «facultad del ser humano para discurrir o inventar con prontitud y facilidad» o «industria, maña y artificio de alguien para conseguir lo que desea». También se llamaba así a las máquinas o «artificios mecánicos».
«Conjunto de conocimientos orientados a la invención y utilización de técnicas para el aprovechamiento de los recursos naturales o para la actividad industrial.»
Es, sobre todo, el uso de principios científicos para diseñar y construir máquinas, estructuras y otros elementos artificiales (puentes, edificios, vehículos, sistemas y procesos), aprovechando el conocimiento tecnológico para innovar y resolver problemas técnicos de las personas y de la sociedad.
Desarrollo de la ingeniería del software
La disciplina ha crecido rápido y sin mucho orden, a la par que la industria. Aún conviven empresas que desarrollan ad hoc, sin metodología, con otras que aplican con rigor métodos complejos y efectivos. Y todo en un mundo de cambio perpetuo:
- Evolución tecnológica: ordenadores a medida, mainframes, microcomputadores, PCs, Internet, servidores, móviles, IoT, computación distribuida y Cloud.
- Cambios de contexto: adaptarse rápido a nuevos requisitos de los clientes, a veces en cuestión de horas.
Entre 1940 y 1960 la inversión estaba en el hardware. Los programas eran independientes, de propósito único y hechos a medida de cada ordenador; se usaban para cálculo, sin atender a la interacción con el usuario (de especialistas para especialistas) y en sistemas aislados.
La crisis del software
Al crecer la escala de los sistemas aparecieron problemas que siguen siendo los grandes retos de la disciplina y la razón de su existencia:
Retrasos
Los proyectos tardan más de lo previsto.
Sobrecostes
Los costes superan lo estimado.
Mala calidad
El producto final tiene fallos y bugs.
No resuelve el problema
No se parece a lo esperado o, aun ajustándose a lo pedido, no soluciona el problema real.
Además, el mantenimiento resulta mucho más caro de lo previsto y es muy difícil medir el progreso.
En 1968 se convoca la conferencia de Ingeniería del Software, punto de partida de la disciplina. Su objetivo: definir la forma de trabajar más eficiente posible y crear metodologías abstractas que permitan adaptarse a los cambios tecnológicos y de contexto.
Aún hay muchos fracasos, por dos factores:
- Las exigencias del mercado obligan a sistemas más complejos, rápidos y funcionales, que superan las técnicas tradicionales.
- Muchas organizaciones desarrollan sin aplicar principios de ingeniería, con productos caros, poco fiables y difíciles de mantener.
La solución: mejor formación profesional en Ingeniería del Software y aplicar buenas prácticas desde el inicio.
Definición y alcance
No hay una definición única; casi cada autor tiene la suya. Las más relevantes:
«La ingeniería de software trata del establecimiento de los principios y métodos de la ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en máquinas reales.»
«Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos.»
«Aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación (funcionamiento) y mantenimiento del software.»
«La Ingeniería del Software es aplicar el sentido común al desarrollo de sistemas software.»
Cronología
- 1940-60El hardware es el protagonista; programas de cálculo, aislados y a medida.
- 1968Conferencia de Ingeniería del Software: nace la disciplina.
- 1969Se funda el PMI (Project Management Institute).
- 1972Definición de Bauer.
- 1976Definición de Boehm.
- 1987Gartner populariza el análisis TCO.
- 1993Definición del IEEE (610.12).
Ingeniería frente a programación personal
La Ingeniería del Software se ocupa de todos los aspectos de la producción de software, desde la especificación inicial hasta el mantenimiento. Frente a la programación personal (informal, individual), implica procesos sistemáticos, planificación, documentación y trabajo en equipo: el software profesional lo usarán y modificarán personas distintas de quien lo hizo.
La esencia del trabajo, como en la arquitectura, está en el análisis y el diseño: convertir necesidades y requisitos en la especificación de un sistema que resuelva el problema. El resto es «contingente»: un mismo diseño puede implementarse en distintos lenguajes o plataformas.
Ingeniería del Software tradicional
Métodos predictivos, lineales o en cascada: se centran más en el análisis y diseño.
Metodologías ágiles
Herederas de Extreme Programming: se centran más en el proceso de desarrollo en sí.
Ingeniería del software y Teoría de Sistemas
La Ingeniería del Software hereda en parte los principios de la Teoría de Sistemas:
- Cuanto más especializado es un sistema, menos capaz es de adaptarse a circunstancias diferentes.
- Cuanto mayor es, más recursos exige su mantenimiento diario.
- Los sistemas siempre forman parte de sistemas mayores y siempre pueden dividirse en menores.
- Los sistemas crecen.
Análisis de un sistema según la Teoría de Sistemas
- Definición del problema: elementos de insatisfacción, posibles cambios en entradas o salidas y objetivos del análisis.
- Comprensión y definición del sistema: descomposición jerárquica en subsistemas y sus relaciones.
- Elaboración de alternativas de modificación y mejora, según costes y viabilidad.
- Elección de una alternativa.
- Puesta en práctica de la solución elegida.
- Evaluación del impacto de los cambios.
Actividades fundamentales del proceso de software
Se use el modelo que se use, siempre están estas cuatro:
- Especificación: qué debe hacer el software y bajo qué condiciones (funcionalidad, características y restricciones).
- Desarrollo: diseño y programación para cumplir las especificaciones.
- Validación: comprobar que cumple los requisitos y lo que espera el cliente (que no es necesariamente lo que pide).
- Evolución/mantenimiento: adaptarlo a nuevas necesidades o corregir errores.
Hay además actividades adicionales (análisis, diseño, planificación, gestión, operación, medida, despliegue…). Las distintas formas de organizarlas dan lugar a los modelos de procesos de software.
Tema 2
El campo de acción de la ingeniería del software
Procesos del ciclo de vida
Para entender el alcance de la disciplina hay que conocer los procesos del ciclo de vida del software: desde su concepción hasta que deja de usarse.
Un proceso de software es un conjunto de actividades relacionadas que conducen a la producción de un producto software.
Puede implicar desarrollar desde cero, pero hoy, sobre todo en aplicaciones empresariales, es habitual modificar sistemas existentes o integrar componentes comerciales. Se estudian dos modelos: el del PMI (muy habitual en la industria) y el de ISO/IEC 12207:2008.
Actividades según el PMI
El PMI (Project Management Institute), fundado en 1969, promueve las buenas prácticas en gestión de proyectos con presencia mundial. Es conocido por:
- La Guía del PMBOK® (Project Management Body of Knowledge).
- Sus certificaciones, sobre todo la PMP (Project Management Professional).
- Fomentar la investigación y formación en dirección de proyectos.
La PMP acredita la capacidad de liderar proyectos; se basa en el PMBOK y exige experiencia previa, formación específica y un examen riguroso. Se enfoca en tres dominios: Personas (liderazgo), Procesos (gestión técnica) y Entorno empresarial (estrategia y valor).
Áreas de conocimiento
| # | Área | Qué gestiona |
|---|---|---|
| 1 | Integración | Coordina todo el proyecto: planificación, ejecución, seguimiento y cierre. Acta de constitución y plan de gestión. |
| 2 | Alcance | Qué está incluido y qué no; asegura la entrega de los requisitos acordados. |
| 3 | Cronograma | Tiempos: estimación de duración, secuenciación y cronograma. |
| 4 | Costes | Estimar, asignar y controlar costes dentro del presupuesto. |
| 5 | Calidad | Que el proyecto y sus entregables cumplan los requisitos de calidad. |
| 6 | Recursos | Equipo humano y recursos físicos. |
| 7 | Comunicaciones | Que la información se genere, distribuya y almacene adecuadamente. |
| 8 | Riesgos | Identificar, analizar y responder a los riesgos. |
| 9 | Adquisiciones | Compra de bienes y servicios externos. |
| 10 | Interesados | Identificar a los stakeholders y gestionar sus expectativas. |
Grupos de procesos
Para la Ingeniería del Software interesan más los 5 grupos de procesos, que son las fases del ciclo de vida de un proyecto (cada grupo incluye procesos de varias áreas):
- Inicio (Initiating): define y autoriza el proyecto o fase. Ej.: acta de constitución.
- Planificación (Planning): alcance, objetivos y curso de acción. Ej.: cronograma, costes, riesgos.
- Ejecución (Executing): se realiza el trabajo del plan. Ej.: gestión del equipo, calidad, recursos.
- Monitoreo y control (Monitoring and Controlling): se supervisa el progreso y se ajusta. Ej.: control de cambios, seguimiento.
- Cierre (Closing): fin formal del proyecto o fase. Ej.: cierre de contratos, lecciones aprendidas.
Todo proyecto software pasa por etapas similares, de forma secuencial o iterativa. El PMI, considerado durante mucho tiempo el estándar de la gestión predictiva (waterfall), es hoy agnóstico y aplica también los principios Agile, que se verán al final de la asignatura.
ISO/IEC 12207: procesos del ciclo de vida del software
«Un marco de referencia que contiene los procesos, las actividades y las tareas involucradas en el desarrollo, explotación y mantenimiento de un producto software, abarcando la vida del sistema desde la definición de requisitos hasta que se deja de utilizar.»
Según el material, define 17 procesos, divididos en tareas:
Procesos principales
El núcleo del ciclo de vida del software.
Procesos de soporte
Apoyan a los principales y aseguran la calidad y consistencia del producto y del proyecto.
Procesos generales
Transversales y comunes a toda la organización: el marco organizativo para aplicar y mejorar los procesos.
Complemento: nombres de los 17 procesos (no incluidos en el material)
En el material estas listas eran gráficos sin texto. El reparto 5 + 8 + 4 corresponde a la estructura clásica de la norma (edición original de 1995); la edición de 2008 reorganiza y amplía los procesos. Contrasta con los apuntes de clase.
| Grupo | Procesos |
|---|---|
| Principales (5) | Adquisición, Suministro, Desarrollo, Operación y Mantenimiento. |
| Soporte (8) | Documentación, Gestión de la configuración, Aseguramiento de la calidad, Verificación, Validación, Revisión conjunta, Auditoría y Resolución de problemas. |
| Organizativos (4) | Gestión, Infraestructura, Mejora y Formación. |
Muchas decisiones del profesional tienen que ver con comprar, usar, integrar o construir los componentes software que resuelven el problema del cliente. El cliente puede ser interno (atendido por el departamento de IT o Sistemas) o externo. Las salidas profesionales más habituales:
- Departamento que da servicio interno en una organización.
- Área de producción que genera producto nuevo, del que salen los ingresos.
- Consultoras que dan soporte a terceros en esas dos tareas (sobre todo la primera).
Actividades del proceso de desarrollo
Cada proceso se divide en actividades. Las del proceso de Desarrollo:
- Análisis de requisitos del sistema: necesidades del cliente y requisitos del sistema completo (hardware, software, personas).
- Análisis de requisitos del software: requisitos funcionales (qué hace) y no funcionales (rendimiento, seguridad, usabilidad…).
- Diseño de la arquitectura: módulos, componentes, interfaces y relaciones.
- Diseño detallado: algoritmos, estructuras de datos e interfaces internas de cada componente.
- Construcción (codificación): código fuente y pruebas unitarias.
- Integración: combinar los módulos con pruebas de integración.
- Pruebas del software: funcionales, de rendimiento, seguridad, usabilidad…
- Instalación: despliegue en el entorno del cliente, configuración, migración de datos y formación.
- Aceptación: el cliente confirma que cumple lo acordado; se documenta formalmente.
Industrialización del software
El desarrollo académico (prácticas individuales o en grupos pequeños, sin procesos definidos, sin despliegue ni usuarios finales) está muy lejos de la experiencia profesional.
La industrialización del software aplica principios, métodos y herramientas de la industria manufacturera al desarrollo para aumentar eficiencia, calidad, escalabilidad y previsibilidad. Es un cambio de paradigma frente a la programación artesanal.
Requisitos de operación
Todo software en uso necesita continuidad, estabilidad y fiabilidad: a los requisitos de usuario se suman los de Explotación, Operaciones o Sistemas. El software debe:
- Estar documentado (manuales de operación).
- Tener procedimientos de recuperación ante caídas o fallos.
- Facilitar su operación y continuidad (backups, logs…).
- Funcionar en la plataforma elegida (SO, lenguajes, bases de datos).
- Generar indicadores y alarmas sobre su estado.
Bases de la industrialización
- Automatizar tareas repetitivas (compilación, pruebas, despliegue).
- Frameworks y plataformas que permiten reutilizar componentes.
- Integración y entrega continuas (CI/CD).
- Control de calidad sistemático con pruebas automatizadas y métricas.
- Gestión de la configuración y versiones para la trazabilidad.
- Documentación estructurada y revisiones formales.
- Trabajo colaborativo con roles especializados (analistas, testers, devops…).
Cómo industrializar
- Adoptar metodologías formales: Scrum, Kanban, DevOps o cascada adaptada.
- Implementar automatización: integración continua, pruebas y despliegue automáticos.
- Estandarizar: plantillas, convenciones de código, revisiones y control de cambios.
- Formar equipos multidisciplinares con roles definidos.
- Medir y mejorar: cobertura de pruebas, velocidad, defectos por entrega…
Implicaciones
Beneficios
- Más calidad y fiabilidad.
- Menos errores humanos gracias a la automatización.
- Mejor gestión del tiempo y los recursos.
- Escalabilidad: equipos grandes coordinados.
- Mayor alineación con el negocio.
Coste
- Dependencia de herramientas y procesos complejos, que exigen inversión y formación.
Comparativa: industrial frente a académico
| Aspecto | Industrialización | Individual / académica |
|---|---|---|
| Objetivo | Entregar valor al cliente con calidad y eficiencia | Aprender, experimentar, cumplir una tarea |
| Escalabilidad | Alta: equipos grandes, varias versiones | Baja: individual o grupos pequeños |
| Automatización | Extensa (CI/CD, pruebas, despliegue) | Mínima o inexistente |
| Clientes reales | Sí, con requisitos formales y contratos | No: el «cliente» suele ser el profesor |
| Entorno de explotación | Real: servidores, usuarios, mantenimiento | Simulado o inexistente |
| Documentación y control | Exhaustivo y obligatorio | Opcional o superficial |
| Reutilización y estándares | Alta | Baja: cada proyecto parte de cero |
Ambos enfoques son valiosos, pero responden a contextos distintos: el académico prioriza el aprendizaje y la creatividad; el industrial, la eficiencia, la calidad y la sostenibilidad.
Ingeniería y programación
Hay que separar programación e ingeniería del software, algo que se aprende rápido al llegar al mundo laboral. La experiencia académica gira en torno a retos de programación; la profesional muestra que esa no es la tarea fundamental de un ingeniero del software.
Vídeos no transcritos: procesos del software con ejemplos de organizaciones reales, y diferencias entre programación e Ingeniería del Software.
Tema 3
Total Cost of Ownership
El TCO (Total Cost of Ownership) o Coste Total de Propiedad muestra cómo el ingeniero del software aporta valor más allá de programar: con una visión estratégica, sistémica y orientada al negocio.
Concepto de TCO
Desarrollar software no es la principal solución a un problema, ni siquiera la más frecuente. El profesional debe conocer las opciones disponibles: no es lo mismo un desarrollo a medida que un paquete comercial, ni el riesgo de un software propietario que el de uno Open Source. Y debe considerar lo económico a corto y a largo plazo, consolidando áreas muy distintas (infraestructura, plataforma, bases de datos, desarrollo, paquetes…).
Imagen no extraída: herramienta para estimar el esfuerzo de proyectos de desarrollo o mantenimiento (STIM).
Decisión: comprar, adaptar o construir
Ante una solicitud de servicio a Sistemas de Información hay cuatro opciones:
Comprar
Algo externo.
Adaptar
Algo existente.
Construir
Algo enteramente nuevo.
Descartar
Por inviable.
Pesan la viabilidad técnica y el alineamiento estratégico, pero el impacto económico es determinante. Para decidir si invertir y en qué modalidad (a medida o paquete; licencia propietaria u Open Source), la industria usa el TCO.
Método de cálculo para determinar los costes directos e indirectos, y los beneficios, de un producto o sistema. Se usa específicamente en la adquisición (desarrollo, integración, compra) de equipos o programas informáticos.
El error habitual es considerar solo algunos costes de implantación y operación y olvidar los que no son evidentes: la decisión se basa en supuestos erróneos.
El análisis TCO lo popularizó Gartner en 1987. En Ingeniería del Software cuantifica el impacto financiero de un producto tecnológico en todo su ciclo de vida (software, hardware, formación, personal…).
«Análisis exhaustivo del coste global de la tecnología de la información (TI) y otros costes para la organización a lo largo del tiempo. Incluye adquisición de hardware y software, gestión y soporte, comunicaciones, gastos de usuarios finales, formación, coste de oportunidad y cualquier otra pérdida de productividad.»
Costes potenciales del TCO
Hardware y software
- Red, servidor y estación de trabajo
- Instalación e integración
- Proceso de compra y gestión de proveedores
- Garantías y licencias
- Migración
- Riesgos: vulnerabilidades, parches, futuras políticas de licencias
Operaciones
- Infraestructura (espacio) y electricidad
- Pruebas
- Inactividad, interrupciones y fallos
- Pérdida de rendimiento
- Seguridad (incidentes, reputación)
- Copias y recuperación
- Formación, auditoría y seguros
- Personal de TI y tiempo de gestión
A largo plazo
- Reemplazo
- Actualización o escalabilidad futura
- Desmantelamiento
El TCO compara alternativas mirando mucho más allá del desembolso inicial: una inversión inicial alta puede compensarse con costes recurrentes bajos, y viceversa.
Ejemplo interactivo: comparar dos alternativas
El material anuncia un «ejemplo de cálculo de TCO» que no está en el texto exportado. Esta calculadora (propia, no incluida en el material) ilustra la idea anterior con un modelo simplificado: TCO acumulado = inversión inicial + coste anual × años, sin actualizar el valor del dinero.
Tipología de aplicaciones
Clasificación por tipo de software
| Tipo | Qué es | Ejemplos |
|---|---|---|
| Application suite | Aplicaciones empaquetadas e interrelacionadas que interactúan entre sí. | Microsoft Office, Open Office, iWork |
| Enterprise software | Soporta procesos y datos de toda la organización, a menudo distribuido. Subtipo: software departamental. | ERP, CRM, cadena de suministro; Helpdesk |
| Enterprise infrastructure | Plataforma común sobre la que funcionan los sistemas finales. | Bases de datos, correo, redes, seguridad |
| Information worker | Productividad personal: crear y gestionar información. | Procesador de textos, hoja de cálculo, correo |
| Content access | Acceso a contenido, normalmente sin edición. | Reproductores, navegadores, ayuda on-line |
| Educational | Contenido y funciones para docentes y alumnos. | Evaluaciones, seguimiento del progreso |
| Simulation | Simula sistemas físicos o ideales. | Investigación, formación, ocio |
| Media development | Genera gráficos y medios que consumen otros sistemas. | Autoedición, animación, audio y vídeo |
| Product engineering | Diseño y producción de productos de ingeniería. | CAD, CAE, compiladores, IDEs, APIs |
| Entertainment | Recreación en un dispositivo. | Videojuegos, salvapantallas |
Para el TCO interesa sobre todo el modelo de creación y provisión del software.
Aplicaciones a medida
Desarrolladas para los requerimientos de un cliente concreto; la única opción cuando no existe software comercial que cubra esas necesidades.
Ventajas
- Adaptabilidad máxima a la organización.
- Desarrollos parciales donde hace falta (p. ej., un front-end propio sobre un back-end estándar).
- Sin elementos superfluos.
- Flexibilidad sin depender de terceros.
- Las capacidades de desarrollo aportan valor y asesoramiento a la organización.
Desventajas
- La calidad depende del proceso y del equipo: los atajos dan software inestable.
- Si hay alternativa comercial, suele ser más caro.
- Riesgos mal gestionados (p. ej., no conservar el código fuente) causan problemas serios.
Rara vez un desarrollo a medida es íntegramente nuevo: casi siempre incorpora componentes comerciales o reutiliza otros de la organización. Es la integración.
Plataformas y aplicaciones cerradas
Plataforma informática: sistema que sirve de base para hacer funcionar los módulos de hardware o software compatibles con él. Se define por estándares: arquitectura, sistema operativo, lenguaje e interfaz de usuario.
Una plataforma puede ser: solo hardware (sistemas embebidos), un navegador, una aplicación anfitriona (macros de Excel), un framework, cloud/PaaS (también redes sociales con APIs), una máquina virtual (JVM) o un sistema completo virtualizado. La plataforma elegida determina costes, proveedores y soporte.
Las plataformas cerradas no pueden ser examinadas por programadores ajenos: se usa su funcionalidad sin conocer su interior. Suelen ser de empresas privadas que viven de explotarlas (Windows, iOS, Office, Edge, Chrome). Caso paradigmático: Apple, que controla el hardware y así reduce la complejidad y optimiza más fácilmente.
Plataformas y aplicaciones abiertas
Su diseño es público y puede auditarse, modificarse y copiarse. Las desarrollan comunidades, empresas, universidades y centros de investigación (Linux, LibreOffice, Firefox, Chrome hasta cierto punto). Tienen una capa de abstracción pública que facilita incorporar nuevo hardware; eso dificulta optimizar, pero han llegado a ser estándar de facto, como la plataforma LAMP (Linux, Apache, MySQL, PHP).
Software Open Source y licencias
Software de código abierto (OSS): su código fuente y otros derechos normalmente exclusivos del titular se publican bajo una licencia de código abierto o pasan al dominio público. Permite usar, cambiar, mejorar y redistribuir.
| Tipo | Características |
|---|---|
| Dominio público | Sin copyright. |
| Copyleft | Libre y no permite añadir restricciones: la versión modificada también debe ser libre. |
| Semi-libre | No es libre, pero permite a particulares sin ánimo de lucro usar, copiar, distribuir y modificar. |
| Freeware | Se puede redistribuir, pero no modificar (sin código fuente). |
| Shareware | Se puede redistribuir, pero el uso continuado exige pagar licencia. |
| Comercial | Una empresa lo desarrolla para ganar dinero con su uso. |
Licencias Open Source habituales: BSD, GPL, LGPL, W3C. El Open Source se ha extendido porque es cada vez más robusto, algunas comunidades responden muy rápido y hay empresas (como Red Hat) que venden soporte profesional para él.
Al pagar software comercial se paga, en realidad, por soporte:
- Directo: teléfono o web del fabricante.
- Indirecto: profesionales certificados por el fabricante.
- Longevidad: que la empresa sobreviva y saque nuevas versiones.
- Sentido de seguridad: tener a quién llamar o a quién reclamar. Es lo que más frena el uso de Open Source.
Integración de sistemas
La integración es clave en el diseño, la planificación y la gestión de sistemas: el megasistema que lo hace todo no es viable (incluso un ERP son módulos integrados). En la práctica no hay sistema informático sin integración.
Objetivo: conectar aplicaciones para compartir información. Si el proceso requiere intervención humana, se crea un cuello de botella y una fuente de errores. Integrar bien maximiza el valor de la información y libera recursos.
Imagen y carruseles no extraídos: bloques de un sistema IoT industrial y varios gráficos sin texto.
Cuándo integrar sistemas
- Si no es posible desarrollar una aplicación que cubra lo necesario.
- Si desarrollar cuesta más que integrar, gestionar y evolucionar la integración.
- Si lo obligan factores externos (regulatorios, legales).
- … y siempre que exista tecnología que lo permita.
También hay necesidades de origen hardware: dispositivos especializados con información de negocio, telefonía y call-center, TPV, dispositivos industriales.
Problemáticas y soluciones
| Área | Problemas | Soluciones |
|---|---|---|
| Diferencias tecnológicas | Canales, formatos de mensaje, codificación, estructura, containers, cifrado o firma distintos. | — |
| Monitorización | Sin monitorización centralizada; fallos fuera del radar; impacto difícil de evaluar y de resolver. | Centralizar en una herramienta; monitorizar todos los componentes (también infraestructura); E2E root cause analysis; pruebas periódicas de estrés. |
| Gestión de errores | Procesos sin reproceso ni control automático de errores «funcionales»; integraciones dispersas; extremos en distintas organizaciones. | Comprobaciones funcionales previas; formatos y esquemas para validar automáticamente; monitorización especializada; pruebas, pruebas, pruebas. |
| Mantenimiento | Escenarios complejos sin fraccionar; integraciones P2P sin herramienta; tecnologías muy particulares; falta de documentación. | Herramientas BPM, SOA, ESA; simulación; estándares; documentación técnica y funcional unida; representación de procesos (ARIS). |
| Seguridad | Acuerdos con terceros (canales, autenticación, cifrado, firma); ataques externos (DoS) e internos; manipulación de mensajes. | Seguridad sin obsesión ni rigidez; arquitectura según exposición; herramientas solo para administradores; proteger los puntos de entrada y salida de mensajes. |
La gestión de errores debe definirse en el propio escenario de integración, no delegarse solo en las aplicaciones, y tener en cuenta los escenarios relacionados de un mismo proceso (incluidos terceros).
Tecnologías de integración: CORBA, RPC, SOAP, DCOM, RPA… (darían para una asignatura entera).
SaaS
Para completar la visión del TCO hay que considerar las aplicaciones en pago por uso, que externalizan completamente la solución, y su integración en escenarios mixtos.
SaaS (Software as a Service): las aplicaciones y los datos del cliente se alojan en servidores de un tercero, accesibles por Internet. El proveedor se ocupa del mantenimiento, la operación diaria y el soporte; el cliente usa el software como un servicio integral.
Crece a medida que maduran los servicios web y la arquitectura orientada a servicios (SOA), y sobre todo gracias a la banda ancha. Está muy relacionado con el modelo ASP (Application Service Provider) y con el software bajo demanda. IDC distingue dos modelos de entrega, el primero de ellos la gestión alojada de aplicaciones (hosted AM), similar a ASP.
El texto del material se corta aquí: falta el segundo modelo de IDC, el «Ejemplo de cálculo de TCO» y las conclusiones de la unidad.
Autoevaluación
Repaso rápido
Intenta responder antes de desplegar cada pregunta.
¿De qué se compone el software, además del código?
De instrucciones (programas), estructuras de datos, documentos (requisitos, diseños, manuales) y configuraciones o parametrizaciones.
¿Qué cuatro características distinguen al software según Pressman?
Se desarrolla, no se fabrica; no se desgasta (aunque se degrada); suele hacerse a medida; su coste de réplica es casi nulo.
¿Qué son los atributos de calidad? Cita cuatro.
Los atributos no funcionales que hacen bueno a un software más allá de que funcione: confiabilidad, mantenibilidad, eficiencia y usabilidad (además de seguridad, escalabilidad, accesibilidad…).
¿Qué problemas caracterizaron la crisis del software y qué ocurrió en 1968?
Retrasos, sobrecostes, fallos de calidad y productos que no resolvían el problema, más un mantenimiento caro y difícil de medir. En 1968 se celebró la conferencia de Ingeniería del Software, origen de la disciplina.
¿Cómo define el IEEE la Ingeniería del Software?
Como la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software (IEEE 610.12, 1993).
¿Dónde está la esencia del trabajo del ingeniero del software?
En el análisis y el diseño: convertir necesidades y requisitos en la especificación de un sistema que resuelva el problema. La implementación es contingente.
¿Cuáles son las cuatro actividades fundamentales del proceso de software?
Especificación, desarrollo, validación y evolución (mantenimiento).
¿Qué principios hereda la Ingeniería del Software de la Teoría de Sistemas?
A más especialización, menos adaptabilidad; a más tamaño, más mantenimiento; los sistemas forman parte de otros mayores y se dividen en menores; los sistemas crecen.
¿Cuáles son los 5 grupos de procesos del PMI?
Inicio, planificación, ejecución, monitoreo y control, y cierre.
Nombra las 10 áreas de conocimiento del PMI.
Integración, alcance, cronograma, costes, calidad, recursos, comunicaciones, riesgos, adquisiciones e interesados.
¿Cuántos procesos define ISO/IEC 12207 según el material y cómo se reparten?
17: 5 principales, 8 de soporte y 4 generales u organizativos.
¿En qué se diferencia el desarrollo industrializado del académico?
Busca entregar valor a clientes reales con contratos, es escalable, está muy automatizado (CI/CD), opera en entornos reales, documenta exhaustivamente y reutiliza componentes y estándares.
¿Qué es el TCO y quién lo popularizó?
El coste total de propiedad: costes directos e indirectos (y beneficios) de un producto o sistema a lo largo de todo su ciclo de vida. Lo popularizó Gartner en 1987.
¿Qué opciones hay ante una solicitud a Sistemas de Información?
Comprar algo externo, adaptar algo existente, construir algo nuevo o descartarlo por inviable.
Diferencia entre copyleft, freeware y shareware.
Copyleft: libre y obliga a que las versiones modificadas sigan siendo libres. Freeware: se redistribuye pero no se modifica. Shareware: se redistribuye pero el uso continuado requiere pagar.
¿Cuándo conviene integrar sistemas?
Cuando no se puede desarrollar una aplicación que cubra lo necesario, cuando desarrollar cuesta más que integrar o cuando lo exigen factores regulatorios o legales; siempre que haya tecnología que lo permita.
¿Qué es SaaS?
Un modelo en el que aplicaciones y datos se alojan en servidores de un tercero accesibles por Internet; el proveedor se encarga del mantenimiento, la operación y el soporte.