Site Compass

Aplicación de cartografía de red

auditada y preparada para el futuro por Redwerk
×
¿A dónde desea que le enviemos nuestro caso de estudio de Site Compass?
Por favor ingrese su correo electrónico comercial

Reivernet Group es un integrador de sistemas de red con más de 20 años de experiencia internacional. Construyen, configuran y gestionan complejas redes de datos para los sectores de la hostelería, la educación y la administración pública. También ofrecen servicios de supervisión, resolución de problemas y seguridad las 24 horas del día, los 7 días de la semana.

Todos los clientes

Revisión de códigos

Nuestra revisión de un producto de software del Grupo Reivernet identificó problemas críticos y de gravedad media junto a un código bien aprobado. Aunque la arquitectura era escalable y sólida, la calidad y la cobertura del código requerían mejoras.

Más información

Automatización de procesos empresariales

Revisamos el código de una aplicación de cartografía de redes creada para simplificar la planificación presupuestaria, las licitaciones y la gestión de activos. Nuestra revisión imparcial ayudó al cliente a lanzarla con confianza, sabiendo que todos los problemas críticos estaban resueltos.

Más información

Desafío

Reivernet Group contrató a Redwerk para que les ayudara a auditar uno de sus productos de software antes de su lanzamiento oficial. Se trataba de Site Compass, una aplicación de cartografía de redes. Site Compass está pensada para empresas de construcción que quieren mejorar su rentabilidad.

Site Compass ayuda a los usuarios a gestionar las obras centralizando todos los datos necesarios relacionados con la planificación presupuestaria, las licitaciones y la gestión de activos. La aplicación también simplifica la elaboración de informes, incluida la generación de informes de auditoría y listas de materiales.

Para Reivernet Group era crucial que un tercero independiente realizara la revisión del código. Necesitaban una evaluación precisa e imparcial de la calidad de su producto. Nuestro ámbito de trabajo incluía:

  • Revisión de la arquitectura. En este paso, debíamos asegurarnos de que los cimientos del sistema estaban bien diseñados, cumplían los requisitos y podían adaptarse al crecimiento futuro.
  • Revisión de la base de datos. Aquí, nos aseguramos de que la base de datos está optimizada para el rendimiento, la seguridad y la integridad de los datos.
  • Revisión de la calidad del código. Esta parte incluye la evaluación de la legibilidad, el mantenimiento, la coherencia y el cumplimiento de las normas de codificación modernas. Se nos pidió que revisáramos únicamente el código backend.
  • Revisión de la cobertura de las pruebas. Aquí nos aseguramos de que el código se ha probado adecuadamente e identificamos las áreas en las que se necesitan pruebas adicionales.
  • Revisión de la seguridad. Nuestro objetivo era evaluar la aplicación con respecto a las 10 principales vulnerabilidades web de OWASP y proporcionar estrategias de mitigación.

Además de informar de los problemas encontrados, ofrecemos recomendaciones detalladas sobre cómo solucionarlos y cuánto tiempo se necesita para refactorizar el código.

Solución

Site Compass está construido en C# utilizando Uno Platform, que permite que las aplicaciones para iOS, Android y Windows estén todas en un mismo conjunto de código. Tenemos años de experiencia con todas las tecnologías utilizadas en este proyecto, por lo que fue una tarea bastante fácil para nosotros.

Para acelerar el proceso y asegurarnos de detectar todos los errores, completamos la comprobación manual con la automatización, utilizando herramientas especializadas como NDepend y PVS-Studio. He aquí un breve resumen de los problemas que encontramos en cada paso.

Revisión de la arquitectura

La aplicación tiene una arquitectura en capas con capas separadas de presentación, código y base de datos. Este enfoque es eficaz para soluciones multiplataforma como Site Compass debido a su base de código compartida, lo que reduce el tiempo y el coste de desarrollo. Sin embargo, puede llevar a que algunos tipos o clases de la base de código se vuelvan demasiado genéricos y difíciles de mantener.

En cuanto a los problemas críticos, descubrimos que algunos espacios de nombres eran mutuamente dependientes. Las dependencias circulares dificultan la modificación o prueba de un espacio de nombres sin afectar al otro. Este estrecho acoplamiento puede dificultar la flexibilidad del código y aumentar el tiempo de desarrollo.

Una solución sería trasladar uno o varios tipos de los espacios de nombres de bajo nivel al de alto nivel o viceversa. Otra opción es utilizar la inversión de control (IoC) para introducir una capa de abstracción entre los componentes dependientes y promover el acoplamiento débil.

Además, descubrimos que algunas clases eran demasiado profundas en el árbol de herencia, con una profundidad de herencia que alcanzaba los 5-8 niveles. Esto supone una desviación de la programación orientada a objetos, que favorece la composición frente a la herencia.

Las cadenas de herencia largas son problemáticas porque violan el principio de encapsulación, lo que significa que las clases “padre” pueden exponer detalles de implementación a las “hijas”. Esto último contradice el propósito de tener capas separadas, ya que cualquiera puede alterar la estructura interna, lo que conduce a la inestabilidad.

Para solucionarlo habría que analizar las funcionalidades estrechamente acopladas y cambiar su diseño mediante la composición.

Estructura de la base de datos

No encontramos ningún problema con la arquitectura y la escalabilidad de la base de datos. Azure Cosmos DB ofrece suficiente flexibilidad para escalarla y solucionar los problemas de rendimiento. El único aspecto que podría afectar al rendimiento de la aplicación es un escenario en el que la región del usuario difiera de la región de la nube, lo que provocaría tiempos de carga lentos.

Calidad del código backend

Informamos de varios problemas críticos y de gravedad media relativos a la calidad del código del backend.
Identificamos 38 métodos con entre 7 y 14 parámetros. Son demasiados parámetros. Los métodos con demasiados parámetros son dolorosos de llamar y pueden degradar el rendimiento.

Una solución es añadir más propiedades/campos al tipo declarante para manejar numerosos estados. Una alternativa es proporcionar una clase o una estructura dedicada a manejar el paso de argumentos.

El siguiente problema son los tipos demasiado grandes, que dan lugar al fenómeno denominado “clase dios”. La clase dios u objeto dios es una única clase que intenta hacerlo todo. Ejerce un control excesivo sobre otras clases del sistema, a menudo creciendo tanto que se convierte en responsable de realizar todas las tareas. El resultado es un código difícil de entender, mantener y probar.

Arreglar una clase dios requiere dividirla en clases más pequeñas con una única responsabilidad y límites bien definidos. Intente mantener la interfaz de la clase dios al principio y delegue las llamadas a las nuevas clases extraídas. Al final, la clase dios debería ser una pura fachada sin lógica propia. Entonces, puedes mantenerla por conveniencia o desecharla y empezar a usar sólo las nuevas clases.

Otra cuestión que afecta a la mantenibilidad y comprobabilidad del código es el uso de campos estáticos no legibles. Si el valor nunca cambia, hazlo de sólo lectura y establécelo directamente en el constructor estático o en línea con su declaración. Si el valor cambia ocasionalmente, deberíamos utilizar un campo de instancia en su lugar. Cada objeto tendrá su propia “caja”, evitando problemas de estado compartido.

También reportamos métodos demasiado complejos, potencialmente muertos o mal comentados y métodos con nombres excesivamente largos.

Cobertura de las pruebas

Sólo un pequeño porcentaje del código se cubría con pruebas. Una cobertura de pruebas baja significa que grandes partes del código quedan sin probar, lo que provoca que los errores se cuelen en la producción.

El control de calidad temprano y continuo es vital porque los errores detectados en producción son más caros y requieren más tiempo para solucionarlos, lo que altera los calendarios de lanzamiento y exige correcciones urgentes. Además, unas pruebas iniciales inadecuadas restan eficacia a las pruebas de regresión, ya que no está claro cuál era el comportamiento original en las áreas no probadas.

Revisión de seguridad

Nuestra revisión de seguridad incluyó la comprobación del código en busca de vulnerabilidades de inyección, como inyecciones NoSQL, LDAP y OS.

Nos aseguramos de que no hubiera casos de autenticación rota, exposición de datos sensibles, parsers XML mal configurados y configuraciones por defecto, incompletas o ad hoc.

Nuestros revisores también buscaron lagunas que permitieran amenazas persistentes. Estas permitirían a los atacantes pasar desapercibidos en caso de infracción, poniendo en peligro más sistemas y datos.

Resultado

Con nuestra ayuda, Reivernet Group obtuvo una imagen clara de la calidad de Site Compass y un plan de acción para las mejoras previas al lanzamiento. La aplicación de nuestras recomendaciones se tradujo en un aumento del 90% en la capacidad de mantenimiento del código, lo que redujo los costes de futuras actualizaciones.

Al refactorizar todo el código problemático, Reivernet Group también redujo el tiempo de incorporación de desarrolladores y protegió la integridad de sus datos.

¿Necesita una evaluación imparcial de la calidad de su código?

Hable con expertos

Tecnologías

C#
Uno PlatformUno Platform
Azure Cosmos DBAzure Cosmos DB
iOSAndroidWindows
NDependNDepend
PVS-StudioPVS-Studio
24.000líneas de código revisadas
60horas/hombre
7problemas críticos
90%más de facilidad de mantenimiento
350horas de refactorización de código

Comentario del equipo Redwerk

Dmitry

Dmitry
Jefe de equipo y desarrollador

Además de la revisión manual, utilicé herramientas especializadas como NDepend y PVS-Studio. Estas herramientas ayudaron a acelerar el proceso y marcar secciones de baja calidad difíciles de detectar manualmente. Nuestra revisión demostró que el proyecto es, en general, estable y sin problemas importantes. Sin embargo, algunos aspectos podrían complicar el mantenimiento en el futuro, como los métodos muy grandes o con muchos parámetros.

Relacionado en Blog

Arquitectura monolítica frente a la de microservicios para .Net

Arquitectura monolítica frente a la de microservicios para .Net

Este artículo es una introducción al desarrollo de aplicaciones basadas en microservicios y a su gestión. Describe el diseño arquitectónico y los enfoques de implementación utilizando .NET Core y contenedores Docker. Este artículo fue escrito para los desarrolladores de .NET y lo...

Leer más
Especificación en el desarrollo de software y estimación de proyectos

Especificación en el desarrollo de software y estimación de proyectos

Es importante que su equipo de desarrollo de software disponga de toda la información posible sobre su futuro producto para poder ofrecer estimaciones precisas. A veces, una característica que parece menor e insignificante puede tener un gran impacto en su presupuesto y en los p...

Leer más

¿Impresionado?

Contrátenos

Otros casos prácticos

Project Science

Project Science

Estados Unidos

Ayudamos a auditar y preparar para el futuro la API de backend para aumentar su mantenibilidad en un 80%.

KillerBee

KillerBee

Nueva Zelanda

Tradujo décadas de experiencia en materiales de construcción en la solución automatizada de precios inteligentes número 1 en todo el mundo.

Current

Current

Estados Unidos

Desarrollo de un SaaS de administración electrónica 100% conforme con la ADA, utilizado por las divisiones de asistencia social de todo EE.UU.