Mejor comprensión del código con Sourcetrail

Mejor comprensión del código con Sourcetrail

¿Escribes código el 100 % de tu tiempo de trabajo?

Supongo que la respuesta es no. Ignorando toda la parte de administración, reuniones, café, youtube, gatos, etc., incluso si está sentado en su teclado, no está escribiendo todo el tiempo. Entonces, ¿qué más estás haciendo?

La respuesta corta:probablemente esté averiguando qué escribir y dónde agregar nuevas características (y qué arreglar)... así que principalmente está leyendo e intentando entender el código.

Existen herramientas para ayudarlo a comprender mejor el código que no son solo editores de texto. Una de esas aplicaciones es Sourcetrail, veamos qué puede hacer por nosotros.

¡Bonificación! , sigue leyendo para ver los detalles de nuestro nuevo sorteo :)

Nota promocional: Este artículo está patrocinado por Coati Software. Escrito por mí.

Introducción

Los números provienen de linkandlink.

Podemos discutir sobre los números exactos, ya sea que escribir código sea solo 2 o 5% o tal vez más. O si la comprensión del código es 50 o 75%. Pero estoy completamente de acuerdo en que se requiere X veces más tiempo para comprender y leer el código que para escribir partes nuevas.

Piense en una nueva característica que agregue a su proyecto. ¿Cómo abordas esa tarea?

Para mí, por lo general es comprender la especificación (o escribirla), más tarde, suponiendo que conozca la mayoría de los requisitos, puedo comenzar a pensar dónde colocar un nuevo código.

Estoy feliz cuando estoy familiarizado con el área del proyecto donde se incluirá la nueva función. Aún así, incluso en una parte "conocida" del sistema, siempre aprendo algo nuevo. Por lo general, termino analizando el código existente.

O imagina que te lanzan a un proyecto completamente nuevo. Te sientas frente a una enorme base de código... ¿cómo empezar y profundizar?

¿Qué podemos usar para entender el código? ¿Solo un editor de texto? ¿Tal vez podamos visualizar el proyecto?

Las herramientas

¿Qué opciones tenemos?

Por supuesto, está el editor de texto de su IDE favorito. Suponiendo que no solo esté usando un Bloc de notas, su editor contendrá algunas funciones avanzadas:

Herramientas básicas

  • Búsqueda - y muchas de sus variaciones, como buscar en archivos, buscar cualquier símbolo, etc.
  • Navegación eficiente, moverse entre archivos, últimas ubicaciones visitadas, símbolos.
  • Ir a la definición/declaración de un método/clase/nombre.
  • Encontrar (todas) las referencias de un símbolo/nombre.
  • Lista de todos los métodos/tipos en un archivo/proyecto.
  • Y, por supuesto, colorear la sintaxis, ver todo en blanco y negro sería una pesadilla.

Recientemente, se ha vuelto bastante común incluir una versión extendida de ascrollbar (Code Map, Mini-Map). Esta es una pequeña herramienta que le permite mirar un archivo en particular desde una distancia mayor y ver su diseño o lugares con cambios/errores.

Ok… esos son algunos elementos esenciales. ¿Qué otras herramientas podemos usar?

Jerarquías de clases y símbolos relacionados

Con Visual Studio y algunas de sus extensiones (como VisualAssist), también puede navegar fácilmente entre jerarquías de clases. Para que pueda saber qué es una clase base, la cadena de clases base o cuáles son los tipos derivados.

Además, es genial si puede navegar a símbolos relacionados:si tiene una lista de variables miembro, métodos, constructores, etc.
Tal herramienta puede reducir significativamente el tiempo necesario para escanear el código fuente donde se declara un tipo.

Otra herramienta útil es Call Hierarchy:para saber dónde se llama tu función. Está disponible en todas las versiones de Visual Studio:vea un enlace aquí.

Bien, pero ¿qué más podemos usar?

Gráficos

¡Gráficos!

Sería fantástico ver el código como un gráfico de objetos y sus relaciones... algo así como un UML dinámico, donde se puede ver la imagen completa o parte de ella.

Y tenemos algunas herramientas existentes que pueden ayudarnos (y trabajar con C++):

  • CppDepend:CppDepend ofrece una amplia variedad de funciones. A menudo se describe como una navaja suiza para los desarrolladores de C y C++. Ofrece análisis de código, visualización de código, métricas de CodeQuality y mucho más.
  • SciToolsUnderstand:muy avanzado. Understand es un IDE diseñado desde cero para ayudarlo a "comprender" su código. Se puede utilizar para mantener el código existente o escribir código nuevo desde cero.
  • Source Insight:un potente editor de programación orientado a proyectos y navegador de código, con análisis incorporado para grandes programas C/C++, C#, Objective-C++, Java, así como otros lenguajes. Source Insight no solo es un excelente editor de programas, sino que también puede mostrar árboles de referencia, diagramas de herencia de clases y árboles de llamadas. (239 $ por licencia).
  • Mapa de código de Visual StudioEnterprise.
    • Puedes ver esto en acción en este curso:
      Fundamentos de Visual Studio 2017 y más -> IntelliTrace y CodeMap por Kate Gregory @Pluralsight.
  • Doxygen y otras herramientas de documentación que también dibujarán un "mapa" de su código.
  • Y :el héroe de este artículo:Sourcetrail - una poderosa herramienta para la visualización de código, multiplataforma e independiente de su IDE.

POR CIERTO:
Si desea echar un vistazo a esta discusión en ingeniería de software@Stack Exchange:¿Cómo visualizar código? o ¿Visualización de código fuente C/C++? - Desbordamiento de pila.

Sourcetrail

¿Qué puede Sourcetrail hacer por nosotros?

En primer lugar, es una herramienta que no intenta reemplazar su editor de texto. Su objetivo es ayudar con la exploración de código mediante la creación de gráficos dinámicos que muestran su proyecto desde una perspectiva diferente.

Cuando trabaja con código, construye un modelo mental de las relaciones entre tipos. Sourcetrail ayuda con la tarea dibujando todas las imágenes similares a UML para usted.

Sourcetrail se basa en los tres conceptos básicos:

  • Código - se muestra el código alrededor de un tipo/nombre seleccionado, y en cualquier momento puede leerlo como con otros editores de texto.
  • Gráfico - gráfico interactivo y dinámico construido a partir del nombre del símbolo seleccionado. Puede centrarse en una clase, archivo, macro, función... o incluso un parámetro de plantilla.
  • Búsqueda y navegación - Se requiere una búsqueda poderosa para encontrar y navegar a un símbolo rápidamente. Además, viene con autocompletado.

Vea a continuación un diseño predeterminado de las ventanas:

Por supuesto, la parte más complicada es el Gráfico .

Pero primero, la breve historia detrás del equipo y el producto.

Sobre la empresa, Coati Software

Imagen tomada de:su entrada de blog.

Primero, presentemos a la empresa detrás de Sourcetrail; los fundadores pueden compartir la fascinante historia de por qué comenzó todo.

Brevemente, la herramienta se creó a partir de la frustración de trabajar con bases de código grandes (cuando Eberhard trabajaba como pasante en Google). Leer solo texto no es la forma más eficiente de comprender un código nuevo, por lo que después de un par de experimentos, el equipo comenzó a implementar el proyecto.

La versión completa de la historia se puede encontrar en la siguiente publicación de blog:
Por qué trabajar en Chrome me hizo desarrollar una herramienta para leer el código fuente.

La empresa tiene su sede en Salzburgo/Austria.

Recientemente, en CppCon 2017, uno de los fundadores de Sourcetrail, dio una pequeña charla/demostración. Solo mire esa breve charla de 4 minutos:

Bien, ¡pero pasemos a la descripción de la herramienta!

Sourcetrail

Algunos detalles básicos:

Sourcetrail funciona sin conexión, con todos los sistemas operativos populares:Windows, Linux y MacOS.

Sourcetrail estuvo en Beta desde la primavera de 2016 y ha estado disponible como versión estable desde junio de 2017. Ahora, en noviembre tenemos la versión 2017.4.

Lo bueno es que desde hace unos días (anunciado el 25 de octubre) Sourcetrail ahora es gratis para uso no comercial . ¡Así que puedes simplemente descargarlo y jugar! Vea más en esta publicación de blog reciente:Sourcetrail2017.4 – Sourcetrail DeveloperBlog.

Soporta bases de código C++ y Java. Si está utilizando CMake, es muy fácil configurar la base de datos de compilación. Para Visual Studio, existe un complemento independiente que hará el trabajo duro.

El equipo responde muy bien a los comentarios de los usuarios y está abierto a las sugerencias de funciones. Así que eche un vistazo a este rastreador de errores abierto:github.com/SourcetrailBugTracker/issues. ¡Sugiera sus ideas si lo desea!

Experimentando con la herramienta

Para mis experimentos, he seleccionado un proyecto llamado Celero (v 2.1). Es una biblioteca de microbenchmarking (escribí sobre ella en esta publicación).

Es un proyecto de un tamaño decente. Por lo tanto, debería ser relativamente rápido analizar y aún ver la herramienta funcionando en algo más importante que una aplicación "hola mundo".

Quería pasar por todo el proceso de configuración y puesta en marcha de la herramienta. En el sitio de Sourcetrail hay proyectos de ejemplo si solo desea un vistazo breve:sourcetrail/downloads - likeclang source code. Y en la imagen de instalación de la herramienta también se incluyen algunos tutoriales.

Cargando un proyecto

Antes de que podamos ver algunos diagramas atractivos, necesitamos procesar el código.

Sourcetrail bajo el capó utiliza herramientas de Clang, por lo que, en otras palabras, su código debe compilarse en Clang. Con el árbol de sintaxis abstracta generado, Sourcetrail puede extraer todos los detalles y construir los modelos de código deseados.

Puede ser una tarea bastante difícil configurar todo, pero Sourcetrail brinda mucha ayuda aquí. En el caso de Visual Studio, hay un complemento adjunto que puede ayudarnos:Extensión Sourcetrail para VisualStudio.

Indización

Una vez que el proyecto esté configurado correctamente, puede cargarlo en la aplicación y le preguntará acerca de la indexación.

Este proceso puede llevar algún tiempo, dependiendo del tamaño del proyecto, pero por lo general solo tiene que hacerlo una vez. Se utilizan datos almacenados en caché más tarde, por lo que solo se volverán a analizar los archivos modificados.

No estoy seguro de los detalles exactos, pero aunque su código está compilado con Clang, no es necesario compilar todo por completo. Incluso si obtiene algunos errores, el archivo se indexará. (Excepto los errores fatales), consulte este número para obtener más información sobre error versus fatal.

Por cierto:también probé esto en mi gran proyecto, con 2 millones de líneas de código. Tengo muchos errores de compilación, pero solo unos pocos fatales en archivos no importantes. A pesar de eso, todavía podía navegar por el código y Sourcetrail funcionó bien con un proyecto tan grande.

Una vez completados los pasos anteriores, podemos empezar a mirar los diagramas.

Esto es lo que obtengo cuando cargo el proyecto Celero:

El diagrama de arriba es su lugar de origen. Si desea restablecer el gráfico, simplemente haga clic en el ícono "Inicio" en la barra de herramientas de búsqueda y navegación.

O también puede escribir "resumen" (o parte de él) en el cuadro de búsqueda.

Ahora intentemos entender algo de código de Celero.

Por ejemplo, después de hacer clic aleatoriamente en nodos y clases, he visto muchos pimpl idioma utilizado. Incluso hay una clase separada para ello:

Cuando hago clic en la clase de nodo, obtengo la siguiente vista:

Lo importante aquí es que en un microsegundo obtengo mucha información valiosa:

  • A la derecha hay código de la clase para que pueda leerlo "normalmente". Por ejemplo, hay algunos constructores y tal vez sería genial actualizarlo a plantillas variadas :)
  • A la izquierda, vemos todas las relaciones:
    • variables miembro
    • parámetros de plantilla
    • plantilla de especializaciones
    • símbolos de referencia

Mencioné que hice clic aleatoriamente en un nodo, pero si sabe lo que está buscando, puede escribirlo y un cuadro de búsqueda de coincidencia aproximada lo encontrará rápidamente.

Sourcetrail funciona bien con tipos anidados como Pimpl anidado en el Archive clase:

  • Los nodos azules representan variables y campos
  • El amarillo es para funciones y métodos

Por ejemplo, cuando hago clic en filename Veré dónde se está utilizando el campo:

¡Estoy impresionado con esta vista! Las líneas azules en el diagrama representan dónde se está utilizando un campo, además obtenemos una vista de "fragmento" en el editor de código fuente. De esa manera puedo leer inmediatamente el código en los lugares relevantes.

En esta vista, se presenta el borde de "anulación":

Puedes ver dónde están todas las implementaciones de Factory::Create los métodos son.

Además, obtuve un diagrama genial. Echa un vistazo:

La imagen de arriba muestra todos los lugares donde std::string se hace referencia.

  • amarillo son todas las funciones donde se usa la cadena (también como parámetros de entrada)
  • grises son las clases
  • las líneas rojas representan lugares donde string se utiliza como parámetro de plantilla

Tal vez, no es el diagrama más útil, pero es divertido de ver. Tal vez ese sea otro buen punto de usar este software (u otras herramientas similares):puedes simplemente jugar con el código/arquitectura y divertirte al mismo tiempo.

En este proyecto en particular, no hay mucha herencia y la estructura de clases es bastante plana. Pero, por supuesto, Sourcetrail le permite ver clases base y tipos derivados. Puede subir o bajar sin problemas en una familia de clases.

Para las funciones de navegación, Sourcetrail presenta gráficos de llamadas:Por ejemplo, aquí hay uno para la función llamada Run() :

Puede ver tanto el lado de la persona que llama como el de la persona a la que llama.

Como puede ver, podemos ir una y otra vez y buscar más código. Detengámonos por ahora, ya que espero que ese pequeño viaje te haya dado una base básica detrás de Sourcetrail. Hay mucho más que podemos hacer.

Entonces, ¿quizás puedas descargar Sourcetrail y verlo por ti mismo?

Resumen

Puntos fuertes:

  • Una búsqueda potente
  • Diagramas/gráficos de aspecto agradable... ¡Quiero decir que se ven realmente asombrosos!
  • Diseñado para C++/Java, pero creo que será posible obtener soporte para otros lenguajes.
  • El proceso de indexación inicial puede llevar mucho tiempo, pero usted tiene el control de cuántos subprocesos se invocan, incluso puede detenerlo y usar solo una parte de la información. Por supuesto, hay caché, por lo que solo los archivos modificados deben actualizarse/reanalizarse.
    • Podría, por ejemplo, ejecutar la indexación en segundo plano (asignando solo algunos subprocesos para el trabajo) y seguir trabajando en mis tareas para que Sourcetrail pueda terminar su parte.
  • Complementos listos para usar (como para Visual Studio) para ayudarlo a importar proyectos en Sourcetrail.
  • Multiplataforma:funciona en Windows, Linux y MacOS.
  • Ligero:podría llenar un vacío entre ningún software de visualización y herramientas súper avanzadas (y costosas) (como SciTools o SonarQube)
  • Herramienta útil para jugar con plantillas:puede ver especializaciones, parámetros, etc.
  • Desarrollo activo, nuevas características cada tres meses.

Más:
Es gratis para usos no comerciales :)

Puntos débiles:

  • ("problema" general para tales aplicaciones adicionales) Es necesario cambiar entre herramientas. Aunque hay un ayudante IDE que permite cambiar un poco más rápido, tal vez sería
    ¿Es mejor tener la vista completamente dentro de un IDE? ¿Te gusta una ventana separada al lado de tu archivo cpp?
    • Si el cambio es una operación "pesada", es posible que se desaconseje a los desarrolladores ejecutar la herramienta con frecuencia.
  • A veces puede recibir muchos errores de sonido, principalmente si usa otros compiladores para su proyecto (como Visual
    Estudio). Aún así, incluso con errores, el símbolo del archivo aparece en los gráficos.
    • Haga un seguimiento de este problema para obtener más información sobre errores y diferencias fatales.

Para ser honesto, no puedo encontrar problemas más serios. Estoy explorando la herramienta y, en general, estoy impresionado. Funciona muy bien; la configuración es fácil de hacer, hay mucha ayuda, diagramas hermosos y dinámicos (incluso con animaciones fluidas), en desarrollo activo... ¿qué más querría? :)

Por cierto:si desea obtener la licencia comercial completa, busque muchas opciones de descuento (consulte SourcetrailPricing ):como el 50 % para autónomos y empresas emergentes.

O también puede participar en el sorteo para obtener una licencia completa, consulte a continuación :)

  • Descargas
  • Precios
  • Sourcetrail:documentación, guía de inicio rápido
  • IssueTracker:puede enviar ideas y errores a través de ese repositorio.
  • El registro de cambios
    • La información de la última versión:Sourcetrail 2017.4 – SourcetrailDeveloperBlog

Regalo

Junto con Coati Software, queremos invitarte a un nuevo sorteo. ¡Puedes obtener una licencia comercial para Sourcetrail!

Ingrese sus datos en la herramienta a continuación y comente a continuación respondiendo a uno de los siguientes temas:

  • ¿Qué usas para visualizar el código? ¿Alguna herramienta avanzada o solo un editor de texto?
  • ¿Has jugado con Source Trail? Por favor comparte tu opinión. (puedes descargarlo gratis y probar).

(por favor escriba más de una oración/palabra)

Sorteo de Sourcetrail

El sorteo finaliza en dos semanas (el lunes 13 de noviembre a las 7:59 hora PL) y los ganadores serán notificados el 13 de noviembre.