¿Cómo se puede comenzar a leer el código fuente?

Los resúmenes se pueden producir con herramientas, o más aproximadamente con un poco de secuencia de comandos.


Solía ​​hacer muchos proyectos que incluían evaluaciones de las bases de código que nos daban. En general, lo que haría es lo siguiente:

  1. Cuente los archivos, por extensión. Esto le da una idea de la tecnología utilizada.
  2. Para archivos no binarios, enumérelos por número de líneas. También enumere el número total de líneas. Esto le da una idea de las cantidades de los distintos tipos de código en la base de código.
  3. Si se utiliza una base de datos, enumere las tablas y columnas y, si tiene datos, sus tamaños. Volcar cualquier código (por ejemplo, procedimientos almacenados) al archivo.
  4. Ahora desea informar sobre estructuras de contención: qué unidades están contenidas en qué otras unidades. Los tipos de unidades son específicos del idioma y también pueden depender de sus herramientas. Por ejemplo, una base de código C # consiste en archivos C # en un árbol de directorios; puede informar eso simplemente haciendo una lista recursiva del directorio. Pero también agrupa las clases en proyectos y los proyectos en soluciones; esa estructura es más interesante, pero necesita mejores herramientas para descubrirla y mostrarla (por ejemplo, Visual Studio o los scripts de Perl que escribí para este propósito). Y el código C # agrupado clasifica las clases en ensamblajes, ensamblajes en aplicaciones, otra estructura de contención con informes, y las herramientas pueden hacer esto. Para Java, la situación es muy parecida. Cada idioma tiene su propia forma de organizar su código, pero siempre puede hacer informes como este.
  5. A continuación, desea mostrar las dependencias entre unidades. Los tipos de dependencias que se incluirán nuevamente dependerán del idioma y sus herramientas, pero también del tamaño de la base del código. Por ejemplo, en una base de código C # que consta de 1 proyecto con 10 clases, le gustaría ver una descripción general de las llamadas a métodos (qué método llama a qué otro método); en una base de código C # con cientos de proyectos, solo desea mostrar dependencias entre proyectos y entre ensamblajes. Muchas herramientas pueden hacer esto. Algunos son gratis. Las formas populares de visualizar los resultados son diagramas de nodos y flechas (bonitos) y matrices (más informativos). Idealmente, puede ajustar las visualizaciones filtrando y reorganizando. A menudo, tendría un script o herramienta para extraer las dependencias, luego usaría otro conjunto de scripts para filtrar, agregar y convertir en una entrada válida para una herramienta de visualización, por ejemplo Graphviz o Gephi. Algunas herramientas gratuitas hacen cosas como esta para muchos idiomas, por ejemplo, Doxygen. Para una base de datos, siempre intentaré construir un diagrama de base de datos. Incluso tengo una utilidad para inferir dependencias entre tablas (claves foráneas) que quedan implícitas en la base de datos.
  6. También realizamos la detección de copiar y pegar, ya sea simplemente comparando nombres o ejecutando una herramienta de detección de clones.

Las herramientas modernas de análisis de código pueden hacer todo esto y más, pero las mejores cuestan dinero real.

Esto nos daría una buena idea de cuán grande es la base del código, qué tan bien estructurada y bien nombrada, qué abarrotada, qué edad, qué obsoleta en términos de tecnologías utilizadas, etc. También le da una idea de lo que hace el código y cómo está estructurado en tiempo de ejecución. Te da una guía para navegar por el código.

En general, la mezcla de idiomas y dinamismo dificulta el análisis. Las dependencias entre el código en diferentes idiomas y las dependencias establecidas en tiempo de ejecución generalmente no son reportadas por herramientas que operan en el código fuente. Por ejemplo, es difícil producir buenas descripciones de las aplicaciones web modernas con muchos JavaScript y Ajax en el navegador o con una combinación de idiomas en el servidor.