Cómo determinar la calidad del código

17 February, 2020 |

La calidad de los productos o servicios es ahora mismo uno de los requisitos primordiales que debe cumplir cualquier empresa. En un mercado tan competitivo no basta solo con producir y distribuir productos o servicios en masa, la cantidad de ventas dependerá de la aceptación por parte del cliente, y esta a su vez depende completamente de la calidad propuesta.

Pero cuando hablamos de desarrollo de software, el concepto de “calidad” se vuelve un poco complejo, esto debido a que no se puede comparar con la calidad de un producto tradicional ya que posee sus propias mediciones y formas únicas de determinar su valor.
Mientras que la calidad viene siendo la capacidad de un producto o servicio para satisfacer las necesidades de un usuario, cuando se trata de desarrollo de software el concepto deberá analizarse desde un punto de vista cualitativo.

Calidad de software:
En este punto hay al menos dos tipos de calidad que se pueden evaluar: la calidad de diseño la cual se refiere a los rasgos distintivos que los diseñadores especifican para un elemento, y la calidad de concordancia, la cual se enfoca en cómo las especificaciones se llevan a cabo durante la fabricación. La calidad de concordancia será alta cuando la implementación esté guiada por el diseño y esto dé como resultado un sistema que ofrezca el mejor rendimiento.

La calidad de software hace referencia a aquellas características que son propias de dicho programa y que se buscan controlar y asegurar. Aunque a diferencia de los productos tradicionales, el software no se degrada con el tiempo, pero sí necesita ser actualizado. Un producto como el software puede presentar errores o inicidencias, por ello permanece en constante desarrollo.

Certificación de software:
Vale la pena aclarar que un software nunca se certifica, lo que recibe un certificado de calidad son los procedimientos usados para su desarrollo. Cada uno de estos procedimientos debe ser correctos y seguir parámetros de normalización como ISO 9000, CMMI, Moprosoft, entre otros.

¿Qué es la normativa ISO 9000?
La normativa ISO 9000 es una de las más reconocidas en el medio, da cuenta de un sistema que garantiza la calidad en desde una perspectiva genérica por lo que se puede aplicar a cualquier empresa sin importar los servicios o productos que ofrezca.

ISO 9000 dispone de un certificador o auditor que evalúa los procesos internos a fin de determinar si cumple a cabalidad con la normativa o no. Si los resultados son positivos, se entrega la certificación que debe ser renovada cada cierto tiempo a través de entrevistas semianuales donde se garantiza que la concordancia de calidad se mantiene de acuerdo a este estándar.

Medición del software:
La medición sirve para asignar números a atributos reales, también puede realizarse por medio de símbolos, para ello solo requiere de un modelo de medición que comprenda un conjunto existente de normas. Cuando se trata de desarrollo de software, una medida representa un indicador cuantitativo que puede derivarse de la extensión, la dimensión, la capacidad, la cantidad, o el tamaño de algún atributo del software o de su proceso de producción.

La medición no es más que el resultado de la recolección de uno o más datos. Partiendo de ello, la métrica de software relaciona estas medidas individuales y consigue desarrollar métricas que dan como resultado diversos indicadores.

Se entiende por indicador a una métrica o a una combinación de ellas que brindan información acerca de los procedimientos para el desarrollo de software. Los indicadores facilitan datos que permiten a los ingenieros de software ajustar el proceso o el producto, a fin de que mejore su calidad.

Es netamente necesario medir y controlar la complejidad en el desarrollo de software, a fin de tener la facilidad de desarrollar medidas de diferentes atributos internos del software. Sin embargo, antes de generar y utilizar ciertas métricas del software es importante asegurarse de que estas sean capaces de ayudar en la evaluación de los modelos de análisis y diseño. Además deben brindar un indicativo de la complejidad del código fuente y de los diseños procedimentales, y, finalmente, deben hacer más sencillo el diseño de pruebas con mejores resultados.

Tipos de medida

  • Cantidad de errores durante un tiempo determinado.
  • Incidencias en la codificación o diseño de un sistema, que ocasiona que el software falle o no funcione correctamente.
  • Tamaño de un producto informático (líneas de código)
  • Métrica de punto de fusión (IBM): combina funcionalidades que ofrece.
  • Análisis de costes y esfuerzos: COCOMO (Modelo Constructivo de Costos).

Utilidad de la medida del software:

  • Estándar ISO 9126: se encarga de medir la calidad de software descomponiendo atributos o cualidades, a fin de no tener márgenes de error, ni de interpretación.
  • Cualidad de funcionalidad.
  • Cualidad de capacidad de respuesta frente a errores externos.
  • Atributo de grado de seguridad. No es posible que exista la calidad sin un grado elevado de seguridad. Es el usuario final quien indicará cuáles atributos son los más importantes respecto a la seguridad.

¿Qué tipos de pruebas se realizan para mejorar la calidad de un software?
Test unitarios
Los desarrolladores se encargan casi de forma exclusiva de los tests unitarios, su importancia radica en que sin ellos, los bugs o errores se multiplican sin control. Es por ello que este tipo de test es considerada la principal barrera contra los bugs en un sistema, además, son también la base del Test Hiperlink.

Entre sus ventajas se encuentran su capacidad de agilizar el proceso de cambiar partes del código y reportar los fallos con mayor rapidez, lo que ayuda en gran medida a los nuevos desarrolladores que recién se incorporen a un proyecto.
Algunas personas sostienen que un diseño perfecto o una buena planificación puede arreglar muchos más errores y bugs que los test unitarios, no obstante, esto no es del todo cierto. Aunque un software posea el diseño más avanzado, no se puede garantizar que funciona sin problemas sin ayuda de estos test o de test mucho más avanzados.

Test de integración
A fin de comprobar que el sistema verdaderamente está funcionando, es necesario utilizar test de integración. Este tipo de test se encargan de unir las partes del sistema y determinar si estas encajan sin incidencias. Junto con los test funcionales, conforman las bases para el behaviour driven development. Una de sus características principales es que no tienen en cuenta elementos fundamentales como la base de datos, las peticiones de red o los accesos, por ende no son suficientes por sí solos para comprobar si el software se comporta correctamente.

Las ventajas de los test de integración es que consiguen que el sistema sea confiable, pudiendo fiarnos incluso de las partes protegidas por otros test debido a que tendrán el comportamiento esperado al ser llamados por otros elementos. Además, estos test sirven como protección para equipos de desarrolladores de manera que el código de otros elementos no les ocasionen sorpresas desagradables.
El lenguaje Gherkin usado en este tipo de pruebas permite obtener una documentación más completa sobre cómo funciona el sistema, de este modo es posible hallar de forma más rápida y sencilla qué se encuentra cubierto por los test y qué no.

Test funcionales
Los test funcionales van más allá de los test de integración y consisten en hacer la comprobación del sistema tal y como un usuario la haría. Un buen ejemplo de ello es la automatización de interfaces gráficas. Cabe destacar que son el tipo de pruebas más lentas y las que más mantenimiento requieren.
No obstante, pueden ofrecer beneficios valiosos como proteger contra interfaces fallidas y reducir procesos a la hora de realizar pruebas manuales. Sirven sobre todo para configurarlos y ejecutarlos en todos los entornos donde se distribuye el software.
Su importancia radica en que sin este test, los desarrolladores tendrían que probar todas las interfaces de forma manual, lo cual no es demasiado eficiente.

Conoce más sobre nuestros servicios de Desarrollo de Software aquí.