Métricas de Calidad

Uno de los temas del trabajo de final de materia de informática, es el modelo de calidad de software.

Bajo mi punto de vista, uno de los aspectos más complejos que identifique es el de las métricas para medir las características de calidad, por lo cual me permito compartir unos apartes que encontré en la web, respecto de este tema:

Durante  el  proceso  de  desarrollo  de  un software, es  muy  probable  la aparición  de  problemas (bugs) causados  por  fallas  humanas.   Las  exigencias   cada  vez  se  incrementan, exigiendo un mejor desempeño de las aplicaciones que creamos. La problemática va asociada a cómo mejorar la calidad de las aplicaciones. Justamente,  es donde se deriva el de las métricas de software,  las cuales son un "conjunto de medidas utilizadas para estimar la calidad de un proyecto a desarrollar", entre otros conceptos, y que permiten "comparar o planificar estas aplicaciones".

Aplicar métricas puede ser complejo,  ya  que  no  existe  una  precisión  absoluta  para determinar  cuáles  son  los  elementos  o  procedimientos  relevantes  que  deben  ser  aplicados  a  la hora  de  escribir  código. 

A continuación se relacionan algunas métricas para determinar la calidad de un código.

Acoplamiento  (Coupling)  se  refiere  al  nivel  de "conectividad"  de  un  módulo  con  otros  módulos, datos globales y entorno exterior. Durante  el  desarrollo  de  la  aplicación, uno  de  los  objetivos  es  mantener  una  baja  dependencia  o acoplamiento, esto quiere decir que, un módulo debe ser capaz de interactuar con otro a través de una interfaz estable y sin depender de otros, para su correcta implementación.

Un problema común con este tipo de aplicaciones es que, en caso de un cambio en algún módulo, puede  desencadenar  un  efecto  dominó  en  otros  módulos,  por  lo  que  será  necesario  rehacer código en el resto de los módulos dependientes.

Cohesión (Cohesion) define el grado de relación que existe entre los elementos de un módulo.

Un  módulo  que  siga  el  Principio  de  Responsabilidad  Única  o  SRP  por  sus  siglas  en  inglés debe realizar una única cosa. Es muy habitual, si no prestamos atención a esto, que acabemos teniendo clases que tienen varias responsabilidades lógicas a la vez.

Cuando se tienen clases con baja cohesión implica, entre otras cosas, falta de comprensibilidad, Difícil mantención y reutilización de código.

Complejidad es una de  las  métricas  más  importantes con la que contamos en el desarrollo es la complejidad ciclomática, que puede ser usada en las fases de desarrollo o mantenimiento entre otras.

La  complejidad  ciclomática  está  fuertemente  relacionada  a  un  algoritmo  claro  y  eficaz,  que,  a  su vez, se relaciona a otro tipo de complejidad, la complejidad cognitiva.

La  Complejidad  Cognitiva  mide  qué  tan  difícil  es  entender  intuitivamente  un  bloque  de  código,  a diferencia de la Complejidad Ciclomática, que determina qué dificultad tiene probar el código.

Algunos  estudios  han  probado  una  correlación  directa  entre  la  complejidad  ciclomática  y  la cantidad de bugs de un trozo de código, o el número de líneas de este.

Code Churn es  la  frecuencia  con  la  que  se  añade,  quita  o  altera  el  código  a  través  del  tiempo.  En  palabras simples, es la cantidad de veces en la que el fichero ha sido modificado.

Esta métrica presenta una relación directa con código defectuoso. esto quiere decir, mientras más modificaciones sufra un código, mayor es la posibilidad de introducir un bug.

Code Coverage mide el porcentaje de código que se encuentra testeado. Tener test de calidad en nuestro proyecto, ayudará  a  incrementar  el  valor  de  esta  métrica  y,  a  su  vez,  será  menos  probable  que  el código contenga bugs.

El  código  muerto  (Dead  code)  es  código  que  no  es  ejecutado.  Es  difícil  de  identificar  ya  que,  no siempre sabemos si cierto extracto de código se está ejecutando en producción o no. Esta métrica es útil para verificar la calidad del código, sin embargo, no existe ningún método que detecte este código muerto y sea infalible.

Código duplicado  (Code  duplication)  es  el  término  utilizado  para  una  estructura  de  código  que  se declara  más  de  una  vez  dentro  de  una  aplicación.  La  existencia  del  código  duplicado  ocurre frecuentemente  cuando  el  programador  no  está  familiarizado  con  el  código,  lo  que  lo  lleva  a replicar trozos de código. 

Una  organización  que  aplica  métricas  en  sus  procesos  busca  incrementar  el  retorno  de  la inversión, identificar las áreas a mejorar, optimizar el tiempo invertido en el proceso, y reducir los costos de operación.

Al  aplicar  estas  métricas,  busca mejorar la  comunicación,  buscando conocer el estado  de nuestros  proyectos,  ayudándonos  a  mejorar  la  estimación  de  tiempos  de  desarrollo, prevenir posibles  fallos,  reducir  costos  y  mejorar  el  manejo  del  proceso  priorizando  los  puntos  realmente importantes.



Imagen Tomada de: https://marcribo.wordpress.com/2015/04/16/kpis-para-obtener-metricas-en-las-distintas-redes-sociales/

Cada  vez  es  más  común  utilizar  herramientas, con métricas mucho más exactas, que nos permiten optimizar nuestro código.

Ni  siquiera  las  mejores  métricas  garantizarán  una  aplicación  exitosa.  Sin embargo,  la  combinación  de  estas  métricas,  un  buen  proceso  de  trabajo,  la  aplicación  de  buenas prácticas  al  programar,  y  pasión  por  nuestro  proyecto,  nos  ayudará  a  entregar  una  aplicación  de calidad al usuario final, dándole un valor adicional a nuestro trabajo.

Fuente: https://marcribo.wordpress.com/2015/04/16/kpis-para-obtener-metricas-en-las-distintas-redes-sociales/


Comentarios

Entradas populares de este blog

Minería de Texto en posible propuesta de grado

Opinión UML

Impresiones Orange - Minería de Datos