Auditoría de código: algo necesario pero que nunca hacemos (parte 2)
En la entrada anterior de esta serie de posts dedicados a la auditoría de código, hicimos una introducción sobre los problemas derivados del trabajo habitual. Es muy normal que haya fallos, descuidos o simple desconocimiento en cualquier proceso en el que un humano participa.
Vimos que el desarrollo de software no es una excepción y pudimos comprobar cómo han ido evolucionando los proyectos para convertirse en auténticos mastodontes.
Llegamos a la conclusión de que auditar el código de grandes proyectos es algo necesario y establecimos un momento óptimo cercano al 70% de desarrollo sobre una rama estable y que pueda compilar. ¿Hasta aquí todo bien? ¿Seguimos?
Primer acercamiento al código fuente
Si el código no es nuestro (lo que es común en una auditoría) necesitamos saber a qué nos enfrentamos. No tardaremos lo mismo ni nos encontraremos con los mismos problemas en un proyecto con miles de líneas pero sencillo, que en otro con pocas pero excesivamente complejo.
Por lo tanto, nuestra primera misión es conocer elementos tales como:
- ¿Cuántas LOC (líneas de código) tiene?
- ¿Cuántas funciones? ¿Son sencillas o complejas?
- ¿Utiliza APIs de terceros?
- ¿Está bien comentado?
- ¿Existe documentación? ¿Está actualizada?
No podemos olvidarnos de requisitos externos que pueden complicar el proceso. Hace unos años participé en proyecto militar en el que recibí un código fuente con las siguientes características:
- El código fuente era de la versión 7.
- La documentación era de la versión 4 (a partir de ahí desarrollaron con prisa y no hubo tiempo para actualizar… ¿os suena?).
- Para compilar era necesaria una llave USB… que no tenía y que tardó varios meses en llegar.
Desde luego no es el mejor escenario. Cuando te enfrentas a un proyecto así, cuanta más información puedas obtener, más sencillo será tu trabajo.
Mi consejo cuando te enfrentes a un proceso de auditoría de código es: insiste, profundiza y no tengas miedo a ser pesado. Puede que preguntando tres veces en lugar de una obtengas datos que te sean de mucha ayuda.
Herramientas de información
En nuestro acercamiento al código fuente, nos será de mucha ayuda tener una visión de conjunto antes de entrar a saco con el código. Por suerte dispones de gran cantidad de herramientas que te pueden ayudar en este paso.
En la siguiente captura podéis ver un ejemplo de una de esas herramientas (en este caso Code Analyzer) evaluando un pequeño proyecto java.
Como podéis ver, de forma rápida nos ofrece una visión de conjunto indicando LOC, comentarios, espacios en blanco…
Complejidad del código
El siguiente paso será evaluar la complejidad funcional de lo que tenemos entre manos. Esto será una tarea sencilla si recibimos una buena documentación en la que todos los procesos estén descritos a nivel funcional (si hay diagramas de secuencia entonces será todo un éxito).
Si no lo tenemos, tendremos que evaluar el código realizando una tarea inicial de análisis de caminos independientes que se pueden tomar en los if-else, switches, cases, bucles… para trazar un mapa y poder contarlos.
¡Ojo! No te confundas, no se trata de contar sin más, debes evaluar las opciones. Mejor vemos un ejemplo, ¿no?
if (var > 10){ if (var > 20){ print "Mayor que 20"; } else{ print "Entre 10 y 20"; } } else{ print "Menor que 10"; }
En este caso podemos ver claramente que la existencia de dos condicionales hace que existan tres caminos diferentes de ejecución:
- Camino A: La variable es menor que 10.
- Camino B: La variable se encuentra entre 10 y 20.
- Camino C: La variable es mayor que 20.
Esto se puede hacer a mano, pero también dispones de herramientas que te ayudarán a hacerlo de forma más sencilla, aquí tienes algunas de ellas:
- OCLint – Para C y derivados.
- Reflector Add In – Para .NET.
- GMetrics o CheckStyle – Para JAVA.
En esta captura puedes ver el resultado de consultar la complejidad utilizando el plugin Metrics para Eclipse sobre el proyecto JAVA anterior:
El resultado lo podremos interpretar de la siguiente forma:
Medidad de complejidad |
Significado |
1-10 |
|
10-20 |
|
20-40 |
|
>40 |
|
NOTA: Si quieres profundizar más sobre el cálculo de la complejidad ciclomática, estos enlaces te serán de gran utilidad:
- https://es.wikipedia.org/wiki/Complejidad_ciclom%C3%A1tica
- http://www.dosideas.com/noticias/metodologias/320-como-entender-la-complejidad-ciclomatica.html
- http://blogs.msdn.com/b/zainnab/archive/2011/05/17/code-metrics-cyclomatic-complexity.aspx
Planificando la auditoría
Una vez tenemos el código y hemos comprendido a qué nos enfrentamos (LOC, complejidad, documentación…) estamos en condiciones de afrontar el proceso y qué mejor forma que haciendo eso que tanto nos gusta, planificar.
Lo principal será definir el equipo que se va a encargar de realizar la auditoría, puede ser una persona o muchas más (como siempre, dependerá del presupuesto, la urgencia y varios elementos específicos del proyecto).
La recomendación es que se trate de varias personas con formación y experiencia en ámbitos diferentes. Sería ideal contar con alguien especializado en diferentes entornos de desarrollo (escritorio, móvil, web), lenguajes o sistemas.
Planificaremos entonces una serie de sesiones semanales en las que cada miembro del equipo tendrá plena libertad para usar aquellas herramientas o técnicas con las que se sienta más cómodo (de ahí la importancia de que el equipo tenga diferentes perfiles).
Cada día se realizará una reunión de seguimiento corta (siguiendo la idea de SCRUM) y después se iniciará el proceso por el que cada miembro se encargará de un máximo de 1000 LOC/h y durante un máximo de 3 horas, ya que la concentración es muy importante en este proceso y no conviene que el equipo esté cansado o aburrido (lo cual es fácil cuando llevas un par de horas leyendo código de otro…).
¿Qué nos queda?
Tenemos y conocemos el código, longitud, complejidad, documentación y requisitos de funcionamiento. Tenemos al equipo listo con una cantidad de horas y LOC asignadas. ¿Tenemos ganas de empezar?
Pues nos vemos en la siguiente entrada en la que profundizaremos en las fases de la auditoría, en las tareas habituales y en un montón de cosas más.
Como siempre digo, si ves algún error, no estás de acuerdo con lo que cuento o quieres hacer alguna aportación, no dudes en pasarte por los comentarios.
- GuardDuty: Un viaje a través del tiempo en AWS Security - 21 noviembre, 2023
- Webinar – Seguridad para familias - 11 enero, 2021
- SecurityInside Live: CISO Day 2020 - 17 septiembre, 2020
mexican pharmacy: cmq mexican pharmacy online – mexican drugstore online
mexican online pharmacies prescription drugs
https://cmqpharma.online/# best online pharmacies in mexico
medication from mexico pharmacy
buying prescription drugs in mexico online: online mexican pharmacy – п»їbest mexican online pharmacies
mexican pharmaceuticals online: buying prescription drugs in mexico online – medication from mexico pharmacy
pharmacy wholesalers canada: legit canadian pharmacy – reliable canadian online pharmacy
indian pharmacy top online pharmacy india buy prescription drugs from india
https://indiapharmast.com/# world pharmacy india
pharmacies in mexico that ship to usa purple pharmacy mexico price list mexican drugstore online
top 10 online pharmacy in india: buy medicines online in india – mail order pharmacy india
http://indiapharmast.com/# buy medicines online in india
pharmacies in mexico that ship to usa: reputable mexican pharmacies online – mexico drug stores pharmacies
п»їlegitimate online pharmacies india world pharmacy india best india pharmacy
online canadian drugstore: best canadian online pharmacy – reliable canadian online pharmacy
mexican drugstore online: mexican pharmacy – mexican rx online
indian pharmacies safe indianpharmacy com india pharmacy
mexico drug stores pharmacies: medication from mexico pharmacy – mexican online pharmacies prescription drugs
top 10 pharmacies in india: Online medicine home delivery – top 10 online pharmacy in india
https://canadapharmast.com/# canadian pharmacy meds
reputable canadian pharmacy: canadian pharmacy king – escrow pharmacy canada
the canadian drugstore drugs from canada canadian drug pharmacy
http://canadapharmast.com/# canadian pharmacy drugs online
escrow pharmacy canada: canadian pharmacy phone number – canadian neighbor pharmacy
indianpharmacy com: best india pharmacy – best online pharmacy india
Online medicine order: indian pharmacies safe – indian pharmacies safe
canada pharmacy 24h reputable canadian online pharmacy buy canadian drugs
mexican pharmaceuticals online: reputable mexican pharmacies online – mexican pharmaceuticals online
canadian pharmacy india: canadian discount pharmacy – legal to buy prescription drugs from canada
http://canadapharmast.com/# online canadian pharmacy reviews
canadian pharmacy online store: canadian pharmacy review – best mail order pharmacy canada
medicine in mexico pharmacies: purple pharmacy mexico price list – reputable mexican pharmacies online
mexican mail order pharmacies mexico drug stores pharmacies reputable mexican pharmacies online
top 10 pharmacies in india: best online pharmacy india – buy medicines online in india
buy medicines online in india: buy prescription drugs from india – reputable indian pharmacies
mail order pharmacy india п»їlegitimate online pharmacies india india pharmacy mail order
https://foruspharma.com/# mexico drug stores pharmacies
canadian pharmacy 24 com: canadian drugs pharmacy – trusted canadian pharmacy
indian pharmacy paypal: india online pharmacy – mail order pharmacy india
paxlovid india: п»їpaxlovid – Paxlovid over the counter
http://amoxildelivery.pro/# amoxicillin capsules 250mg
http://paxloviddelivery.pro/# Paxlovid buy online
doxycycline tablets where to buy: where can i buy doxycycline no prescription – doxycycline 100 mg india
http://ciprodelivery.pro/# ciprofloxacin
https://paxloviddelivery.pro/# п»їpaxlovid
paxlovid pharmacy: paxlovid covid – paxlovid pill
how to get amoxicillin over the counter: amoxicillin 1000 mg capsule – medicine amoxicillin 500
http://ciprodelivery.pro/# buy cipro online
http://amoxildelivery.pro/# amoxicillin azithromycin
paxlovid pill: Paxlovid buy online – п»їpaxlovid
http://amoxildelivery.pro/# amoxicillin online canada
http://clomiddelivery.pro/# can you get clomid online
paxlovid cost without insurance: paxlovid cost without insurance – Paxlovid over the counter
https://doxycyclinedelivery.pro/# order doxycycline without prescription
http://ciprodelivery.pro/# where can i buy cipro online
can i purchase cheap clomid without a prescription: order generic clomid for sale – where can i get cheap clomid pill
http://amoxildelivery.pro/# amoxicillin 500mg no prescription
https://clomiddelivery.pro/# how to buy generic clomid without rx
doxycycline 75 mg tablet: vibramycin 100mg – doxycycline 100mg capsules price
http://amoxildelivery.pro/# amoxicillin 500 mg
http://doxycyclinedelivery.pro/# doxycyline online
paxlovid pill: paxlovid india – paxlovid pill
doxycycline prescription online: how to get doxycycline – buy generic doxycycline 40mg
https://clomiddelivery.pro/# get cheap clomid pills
http://amoxildelivery.pro/# amoxicillin buy no prescription
buy doxycycline 100mg online uk: average price of doxycycline – doxycycline purchase
https://paxloviddelivery.pro/# paxlovid pharmacy
how to buy amoxycillin: cost of amoxicillin prescription – amoxicillin price without insurance
cost doxycycline tablets: where can i order doxycycline – doxycycline 631311
Paxlovid buy online: buy paxlovid online – paxlovid price
how much is doxycycline in south africa: doxycycline over the counter singapore – doxycycline 50 mg coupon