Vaya al Contenido

Código y programación - Calidad de Software

Saltar menú
CÓDIGO Y PROGRAMACIÓN
En el ámbito de la calidad del software, el código fuente no se evalúa únicamente por su capacidad de ejecutar una funcionalidad, sino por el grado en que facilita el mantenimiento, la comprensión, la prueba, la seguridad y la evolución del sistema. El código es la materialización técnica de los requisitos y del diseño, por lo que su calidad incide directamente en la calidad global del producto.
Un código de calidad es aquel que:
  • responde correctamente a los requisitos funcionales y no funcionales;
  • puede ser entendido por otros desarrolladores;
  • permite ser modificado con un costo razonable;
  • puede probarse de forma aislada o integrada;
  • no introduce vulnerabilidades conocidas.
Objetivos de la programación orientada a la calidad
La programación alineada con la calidad del software persigue, entre otros, los siguientes objetivos:
  1. Minimizar defectos mediante una escritura clara, estructurada y revisable.
  2. Facilitar el mantenimiento y la evolución del sistema, reduciendo la complejidad innecesaria.
  3. Aumentar la confiabilidad del software, de modo que se comporte de forma predecible.
  4. Elevar la comprobabilidad (testabilidad), haciendo posible la automatización de pruebas.
  5. Promover la reutilización de componentes para evitar duplicidad de lógica.
  6. Favorecer la auditoría y la trazabilidad, permitiendo relacionar código con requisitos.
  7. Incorporar criterios de seguridad desde la construcción del código.
Características de un código considerado de calidad
A continuación se describen las características más relevantes:
  1. Corrección
    El código implementa lo solicitado en los requisitos, maneja casos límite y utiliza tipos y estructuras adecuadas.
  2. Legibilidad
    • Uso de nombres descriptivos para variables, funciones, clases y módulos.
    • Estilo de sangría y formato uniforme.
    • Organización lógica de los archivos.
      La legibilidad es un factor central porque la mayoría del costo del software está en su mantenimiento.
  3. Mantenibilidad
    • Funciones o métodos con una única responsabilidad.
    • Separación de preocupaciones (presentación, lógica, acceso a datos).
    • Dependencias controladas.
      Un código mantenible reduce el riesgo de introducir errores al modificarlo.
  4. Modularidad
    El sistema se divide en módulos o componentes con responsabilidades bien definidas, lo que facilita el reemplazo o mejora de partes del sistema sin afectar el resto.
  5. Alta cohesión y bajo acoplamiento
    • Cohesión alta: los elementos de un mismo módulo están relacionados con un mismo propósito.
    • Acoplamiento bajo: los módulos dependen poco entre sí, lo que facilita pruebas y cambios.
  6. Reusabilidad
    Se evitan repeticiones de código (principio DRY: Don’t Repeat Yourself) y se extrae lógica común en funciones reutilizables.
  7. Eficiencia razonable
    Se utilizan estructuras de datos y algoritmos acordes con el volumen y el tipo de operaciones previstas, evitando ineficiencias evidentes.
  8. Seguridad en el código
    Se validan entradas, se gestionan errores adecuadamente y se evita exponer información sensible. La programación segura forma parte de la calidad.
  9. Testabilidad
    El código se diseña de forma que pueda probarse por partes (unidades, servicios, controladores), evitando dependencias ocultas o globales.
  10. Trazabilidad
    Es posible vincular el código a requisitos, casos de uso o historias de usuario, lo cual es útil en contextos auditables.
Principios y buenas prácticas de codificación
Para alcanzar las características anteriores suelen aplicarse los siguientes principios:
  1. Nombrado significativo
    El nombre debe expresar la intención. Por ejemplo, calcularTotalPedido() es preferible a procesar().
  2. Funciones o métodos pequeños
    Cada unidad de código debe realizar una sola tarea. Esto mejora la comprensión y facilita las pruebas.
  3. Evitar duplicación
    La duplicación incrementa el costo de mantenimiento y el riesgo de inconsistencias. Se recomienda abstraer en funciones o clases reutilizables.
  4. KISS (Keep It Simple)
    La solución más simple que cumple el requisito suele ser la preferible. La complejidad debe estar justificada.
  5. YAGNI (You Aren’t Gonna Need It)
    No se deben desarrollar funcionalidades que no han sido solicitadas o justificadas, ya que incrementan el tamaño y la complejidad del código.
  6. Manejo adecuado de errores y excepciones
    Se deben capturar y tratar las condiciones excepcionales, informando al sistema o al usuario según corresponda, sin ocultar fallos de forma silenciosa.
  7. Documentación mínima y pertinente
    Los comentarios deben explicar el “por qué” y no repetir lo que ya dice el código. Un exceso de comentarios puede volverse obsoleto.
  8. Separación de capas
    Mantener separadas la capa de presentación, la de negocio y la de datos permite sustituir o probar capas de forma independiente.
  9. Uso prudente de patrones de diseño
    Los patrones se aplican cuando resuelven un problema concreto de extensibilidad, variabilidad o desacoplamiento, no por moda.
Actividades de aseguramiento de calidad sobre el código
En un proceso que busca calidad se realizan actividades específicas sobre el código:
  1. Revisión por pares (code review)
    Otro desarrollador revisa el código para detectar problemas de estilo, complejidad, seguridad o incumplimiento de estándares internos.
  2. Análisis estático
    Se utilizan herramientas automáticas (por ejemplo, linters o plataformas de análisis estático) para identificar code smells, complejidad excesiva, duplicación y posibles riesgos.
  3. Pruebas unitarias e integración temprana
    La existencia de pruebas automatizadas es un indicador de que el código fue escrito pensando en su verificación.
  4. Refactorización controlada
    Se mejora la estructura interna del código sin alterar su comportamiento externo, con el fin de reducir deuda técnica.
  5. Integración continua
    Cada cambio de código es verificado automáticamente mediante compilación, análisis y pruebas, lo cual ayuda a conservar el nivel de calidad.
Errores frecuentes que afectan la calidad del código
  • Uso de nombres ambiguos o genéricos.
  • Funciones demasiado extensas que realizan múltiples tareas.
  • Código duplicado en varios módulos.
  • Mezcla de lógica de negocio con presentación.
  • Manejo de excepciones vacío o inexistente.
  • Validaciones insuficientes de datos de entrada.
  • Comentarios desactualizados respecto del código real.
  • Ausencia de control de versiones o de estándares de equipo.
Métricas aplicables al código
Para objetivar la calidad del código se emplean métricas tales como:
  1. Complejidad ciclomática: indica el número de caminos lógicos de un módulo; valores altos implican mayor dificultad de prueba y mantenimiento.
  2. Porcentaje de duplicación: muestra cuánto código está repetido; la duplicación elevada es una señal de baja calidad.
  3. Cobertura de pruebas: porcentaje del código ejecutado por pruebas automatizadas.
  4. Defectos por tamaño (defectos por KLOC): mide la tasa de errores en relación con el volumen de código.
  5. Indicadores de code smells: presencia de métodos largos, clases demasiado grandes, exceso de parámetros, etc.
Estas métricas no sustituyen al criterio profesional, pero proporcionan evidencias medibles.
Seguridad como parte de la calidad del código
La programación debe contemplar desde el inicio prácticas de codificación segura, tales como:
  • validación estricta de entradas;
  • prevención de inyecciones (SQL, script);
  • protección de datos sensibles;
  • gestión adecuada de sesiones y autenticación;
  • registro (logging) sin exponer información confidencial.
Un software funcional pero vulnerable no puede considerarse de calidad.
Deuda técnica
Se denomina deuda técnica a las decisiones de implementación que permiten avanzar más rápido pero que dejan partes del código en un estado subóptimo. La gestión de la deuda técnica es parte de la calidad: debe identificarse, registrarse y planificarse su reducción mediante refactorización.
Qué se suele dejar documentado
En una parte de “código y programación” dentro de un trabajo de calidad de software normalmente se incluyen:
  1. Lineamientos de codificación (nombres, estructura de carpetas, estilo).
  2. Política de revisiones de código.
  3. Herramientas de análisis estático que se usan.
  4. Criterios de aceptación del código (sin duplicación > X%, complejidad < Y).
  5. Reglas de manejo de errores y logs.
  6. Reglas de seguridad en código.
  7. Reglas de pruebas (mínimo unitarias).
Realizado por Yefer Auzaque
Regreso al contenido