Desarrollo de software de TI: ciclo de vida, arquitectura y costes

Respuesta corta

En el desarrollo de software de TI, se sigue un ciclo de ingeniería sistemático que avanza desde los requisitos iniciales mediante compilaciones automatizadas hasta el despliegue en múltiples fases. Los equipos programan con herramientas fundamentales como HTML, CSS y JavaScript, y envían commits que activan pipelines de pruebas automatizadas. Los lanzamientos suelen pasar por al menos 3 entornos —desarrollo, pruebas o QA, y producción— antes de llegar a los usuarios finales. Durante este proceso, los desarrolladores equilibran la velocidad de entrega con la deuda técnica para garantizar que las arquitecturas sigan siendo sostenibles en el tiempo.

Fotografía editorial que ilustra el desarrollo de software de TI
Repaying architectural technical debt increased class connectivity in open-source systems, raising FAN-IN by an average of 57.5% and FAN-OUT by 26.7%. — arxiv.org

“The problem is that software engineering does not have an adequate set of proven principles for defining quantifiable metrics.”

National Institute of Standards and Technology, Federal Agency

El desarrollo de software de TI empresarial separa las operaciones sostenibles de los gastos de capital descontrolados a través de una disciplina de ingeniería estructurada.

Principios fundamentales y alcance en el desarrollo de software de TI#

Principios rigurosos de ingeniería rigen el desarrollo a través de tecnologías de interfaz y estándares formales de sistemas.

Alcance del desarrollo web y tecnologías fundamentales#

El desarrollo web se centra en los puntos de contacto con el cliente y las capas de interfaz. Específicamente, el desarrollo web implica el diseño de la apariencia del sitio web, la navegación y la organización del contenido (Eicc). Los profesionales utilizan lenguajes de codificación de interfaz del lado del cliente como HTML, CSS y JavaScript para gestionar gráficos, aplicaciones interactivas y contenido del sitio (Eicc).

El desarrollo empresarial no puede detenerse únicamente en las capas de presentación. Tratar el código de presentación como la totalidad de un programa de software de TI ignora la confiabilidad subyacente del sistema, la integridad de la base de datos y los requisitos operativos posteriores.

Estándares formales de ingeniería de software#

El desarrollo de software de TI empresarial exige un cumplimiento riguroso de los estándares operativos establecidos. El IEEE define la ingeniería de software como la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, mantenimiento y operación del software (Nvlpubs).

Abordar el desarrollo a través de disciplinas formales de ingeniería evita que los equipos adopten correcciones ad-hoc no validadas. Garantiza que el mantenimiento del sistema y las operaciones cotidianas sigan siendo tan cuantificables y disciplinados como la creación inicial de funciones.

Ciclos de vida del desarrollo de software y marcos de entrega#

Engineer gesturing during a discussion with a coworker by a standing counter in a modern software office.

Seleccionar un marco de entrega requiere equilibrar los requisitos de planificación estructurada con la automatización rápida de pipelines y las capacidades del personal. El modelo tradicional Waterfall exige la recopilación de requisitos integrales al comienzo de un proyecto y permite pocos o ningún cambio durante el desarrollo y las pruebas de software (Ieeexplore). Cuando los cronogramas de entrega requieren una automatización continua, los equipos implementan en su lugar pipelines de integración y despliegue continuos.

Los sistemas de integración continua (CI) permiten a los desarrolladores crear ramas de código independientes, tomar instantáneas del código fuente e incorporar código en sistemas automatizados que ejecutan scripts para compilar y probar los cambios (IBM). Estos flujos de trabajo dependen de pipelines de automatización estructurados de múltiples etapas para garantizar la estabilidad del software:

Continuous Delivery Pipeline
  1. Developer commit
  2. Automated build & static analysis
  3. Independent development deployment
  4. QA validation
  5. Manual approval gate
  6. Production release

Durante la etapa de compilación, el sistema CI/CD compila el código fuente en artefactos mientras ejecuta comprobaciones previas a la compilación, como el linting de código y el análisis estático (Circleci). Un pipeline de compilación opera entre el commit de código de un desarrollador y la creación de un paquete o artefacto desplegable como parte de la integración continua (Octopus). Los flujos de trabajo funcionan como una capa de orquestación dentro de los pipelines de CI/CD que define secuencias de ejecución, reglas de dependencia y condiciones de activación para los trabajos (Circleci).

Un pipeline de despliegue completo se activa automáticamente a través de un webhook o una integración incorporada cuando un desarrollador envía código a un sistema de control de versiones (Octopus). Este pipeline comienza cuando se confirma el código y finaliza cuando una versión llega a manos de los usuarios, abarcando la confirmación del código, las pruebas, la compilación, el empaquetado y el despliegue a través de los entornos (Octopus). El despliegue independiente implementa artefactos compilados y probados en entornos de desarrollo que idealmente reflejan la infraestructura de producción para realizar pruebas funcionales (BMC).

Una estructura mínima de entornos de despliegue suele promocionar versiones a través de al menos 3 entornos: desarrollo, prueba o QA, y producción (Octopus). Además, los flujos de trabajo de CI/CD pueden incorporar pasos de aprobación manual para requerir una revisión humana antes de ejecutar tareas específicas como los despliegues (Circleci).

La competencia técnica de un ingeniero de software requiere un conocimiento práctico de frameworks y librerías, gestión de bases de datos y sistemas de control de versiones para desarrollar y mantener aplicaciones de software (Coursera). Para evaluar y organizar estas habilidades en todos los equipos, las empresas utilizan modelos de competencias estructurados.

Componente del Framework Métrica o Categoría Alcance Operativo
UComGSP Competency Gate 62 Hard, 63 Soft, 25 Essential Competencies (Sciencedirect) Categoriza las capacidades de ingeniería e identifica los requisitos profesionales de referencia
UComGSP Satisfaction Tiers Basic, Performance, Delighter (Sciencedirect) Evalúa los niveles de satisfacción de las partes interesadas durante las evaluaciones de competencias
Engineering Skill Matrix Niveles IC1 a IC6 (Sprad) Define expectativas, ejemplos de comportamiento y alcance a lo largo de 6 niveles de contribuidor individual

Evaluación de los Costes de Mantenimiento y la Deuda Técnica#

La deuda técnica en una base de código comprende elementos estructurales que contribuyen a acumular mayores costes de operación y mantenimiento si no se reelaboran (SEI). La deuda técnica arquitectónica tiene sus raíces en problemas relacionados con la arquitectura y el diseño, así como en el retrabajo causado por dichos problemas (SEI).

Cuando se ignoran los atajos arquitectónicos, el coste de reparar los defectos posteriores se incrementa. En las arquitecturas empresariales, los componentes centrales estrechamente acoplados cuestan significativamente más de mantener en términos de actividad relacionada con defectos que los componentes periféricos débilmente acoplados (HBS). Los componentes centralizados del sistema con dependencias pesadas generan una proporción desmesurada del esfuerzo total de mantenimiento a lo largo de su vida operativa.

Total Component Coupling = FAN-IN + FAN-OUT

En esta fórmula, FAN-IN representa el número de dependencias entrantes que llaman a un componente arquitectónico, mientras que FAN-OUT mide el número de componentes externos a los que llama dicho componente.

Los cambios en las dependencias de acoplamiento indican que remediar la deuda arquitectónica puede centralizar las dependencias y aumentar la complejidad estructural en los componentes supervivientes, incluso al eliminar fallos de diseño específicos (Arxiv).

Para preservar la estabilidad del sistema a largo plazo, las organizaciones de ingeniería deberían auditar su arquitectura esta semana:

  1. Mapear los módulos del sistema de alto riesgo extrayendo métricas de FAN-IN y FAN-OUT a nivel de clase en todos los repositorios internos.
  2. Marcar los componentes centrales estrechamente acoplados que generan un retrabajo desproporcionado por defectos durante los sprints semanales de mantenimiento.
  3. Establecer quality gates automatizados dentro de las pipelines de CI para bloquear commits de código que aumenten el acoplamiento entre módulos críticos.
Comparación detallada del alcance de los pipelines automatizados en la entrega continua de software
Tipo de pipelineDisparador inicial / Límite inicialLímite finalEtapas principales incluidasPráctica asociada
Pipeline de compilaciónCommit de código del desarrolladorCreación de un paquete o artefacto desplegableCompilación de código, pruebas, creación de artefactosIntegración continua (CI)
Pipeline de desplieguePush del desarrollador que activa un webhook o integración nativaLanzamiento entregado a los usuariosCommit de código, pruebas, compilación, empaquetado y promoción entre entornosIntegración continua y entrega continua (CI/CD)
Características de acoplamiento estructural e impactos arquitectónicos en los componentes del sistema
Componente / Tipo de deudaNivel de acoplamientoImpacto observado en el mantenimientoImpacto de subsanar la deuda
Componentes centrales / CoreEstrechamente acopladoGenera un volumen significativamente mayor de actividad por defectos y costes de mantenimientoCentraliza dependencias; incrementa el FAN-IN (+57.5% de media) y el FAN-OUT (+26.7% de media) al amortizarse
Componentes periféricosDébilmente acopladoGenera una proporción menor de la actividad global de mantenimiento por defectosActúa como lógica periférica de bajo coste con una mínima concentración de dependencias

Fuentes