Los fallos en los que sus tests no pensaron, seguidos de la petición a la base de datos.
SmartScan sigue cada punto de entrada - una acción web, un job, un consumidor de mensajes, una pantalla de una app - a través de servicios y handlers hasta la base de datos o la petición saliente, y señala lo que puede romperse: una búsqueda que puede volver vacía, dos escrituras que pueden quedarse a medias, una columna que la entrada puede desbordar. Cada riesgo llega con la cadena que lleva a él.
Pantallas de una instalación en funcionamiento
Qué busca
Cuatro tipos de riesgo, cada uno hallado en un camino real por su código - no en un patrón que alguien escribió.
Registro no encontrado
Una búsqueda con datos de la petición puede volver vacía y el código usa el resultado sin comprobar: un 500 en lugar de un 404, o un mensaje engañoso.
Escritura parcial
Dos commits separados en un mismo flujo sin transacción: si el segundo falla, el primero queda escrito.
Huecos de contrato
La petición puede traer más de lo que cabe en la columna, una columna obligatoria no se comprueba por el camino, o una columna única se escribe sin comprobar la unicidad.
Frontend y móvil
Una petición cuyo fallo nadie maneja, un error tomado por éxito, una respuesta usada sin comprobar: la pantalla se cae o se queda en silencio.
Lo que SmartScan ve en una sola petición
Un pedido se crea en seis pasos. Cada paso es una llamada real en el código; SmartScan los sigue y se detiene donde algo puede romperse.
- Punto de entrada
POST /api/ordersOrdersController.Create - Petición mediator
mediator.Send(CreateOrderCommand) - Handler
CreateOrderHandler.Handle - De la interfaz a la implementación
ICustomerRepository.FindAsyncCustomerRepository !No encontrado: el resultado se usa sin comprobarlo - Escrituras
SaveChangesAsync() ×2!Escritura parcial: dos commits, sin transacción - Base de datos
orders · order_lines
Cómo funciona
La unidad es una cadena: desde donde entra una petición hasta donde toca los datos.
- 01
Empezar en cada punto de entrada
Acciones web, jobs programados y consumidores de mensajes; en frontends y apps, eventos, efectos, rutas y pantallas.
- 02
Seguir la cadena
De la interfaz a la implementación, sobrescrituras, peticiones de mediator a sus handlers - hasta el ORM o la llamada HTTP.
- 03
Descartar lo protegido
Una comprobación, una búsqueda que lanza excepción, un validador con el límite correcto - en el propio camino de la escritura - cuentan. Una cadena sin riesgo no se informa.
- 04
Mostrar el camino
Cada riesgo lista sus pasos con archivo y línea, del punto de entrada a la columna.
Un aviso, no una barrera
SmartScan no es un conjunto de reglas: nunca baja una puntuación ni hace fallar un pipeline. Cada riesgo se cierra uno a uno, como cualquier hallazgo. Se activa por proyecto, viene desactivado y solo se ejecuta en análisis completos, así las comprobaciones de MR siguen siendo rápidas.
En los nueve lenguajes del collector
Una regla y un riesgo de SmartScan no son lo mismo
Ambos aparecen en el mismo panel, pero responden preguntas distintas y se comportan de forma diferente.
| Hallazgo de regla | Riesgo de SmartScan | |
|---|---|---|
| Qué busca | Un patrón conocido que alguien escribió | Una ruta a través de su propio código |
| Puntuación | La reduce, según la severidad | Nunca la toca |
| Pipeline | Puede detenerlo con un umbral fail-on | Nunca lo detiene |
| Cuándo se ejecuta | Revisiones de merge request y análisis completos | Solo análisis completos, activado por proyecto |
| Qué obtiene | Archivo, línea y el razonamiento de la regla | Toda la cadena, paso a paso, con archivo y línea |
Preguntas sobre SmartScan
¿Es otro conjunto de reglas?
¿Cómo se evitan las falsas alarmas?
¿Ralentiza las revisiones de merge request?
¿Qué lenguajes y frameworks?
Míralo en el producto
Todas las capturas
Encuentre los fallos antes que sus usuarios
Active SmartScan en un proyecto durante una PoC; el siguiente análisis completo muestra cada cadena en riesgo.