¿Cuál es la mejor estrategia para comprender el flujo de código y el diseño del código de producción?

Insinuó la respuesta en los detalles de su pregunta. ” PD No hay documentación disponible

Una estrategia increíblemente valiosa para comprender una gran base de código desconocida es documentarla usted mismo. Su equipo apreciará muchísimo lo que está haciendo, y aprenderá toda la base de código en el proceso.

Comience en la parte inferior. Haga una lista de todos los archivos, clasifíquelos: “main.c” y sus amigos son “top dogs”, un montón de cosas estarán “soportando”, y utils.c db.c y tales serán “low level”.

Documente las rutinas de nivel más bajo primero. Estos NO tienen dependencias de otros módulos en la base del código (pero pueden tener dependencias del sistema, por supuesto).

¿Qué hacen? ¿Qué hacen que sea sorprendente ? ¿Qué hacen que te hace preguntarte por qué ? Documente el diablo de ellos.

Luego sube un nivel. Para cada archivo de bajo nivel, busque todos los archivos que lo incluyen. Ordénelos y encuentre los que SOLO lo incluyen y tal vez algunos otros archivos de bajo nivel. Documente esos. ¿Qué están haciendo? ¿Qué encapsulaciones proporcionan, convirtiendo las cosas de bajo nivel en algo más específico de dominio?

No dude en volver a sumergirse en los archivos de bajo nivel y refinar su documentación a medida que aprende más sobre lo que están haciendo sus consumidores y cómo están usando las cosas de bajo nivel.

Recorra todos los archivos de nivel más bajo y haga esa tarea de subir un nivel.

Una vez hecho esto, mueva su enfoque hacia arriba un nivel y repita el proceso. Pase sobre cada archivo “de apoyo”, documentándolo mejor, en función de lo que ha aprendido de lo que ha hecho hasta ahora.

Alcanza un nivel para cada archivo: busca los archivos que lo incluyen y comienza a documentar lo que están haciendo como consumidores de ese archivo. Documente el resto de lo que hay en cada uno de esos archivos.

Luego, tal como lo hizo antes … repita todos los archivos de soporte y haga esa tarea de un nivel superior. Encuentre todos los archivos que los incluyen y documente lo que están haciendo, ya que actúan como consumidores de esos archivos de soporte.

Si trata toda la base de código como un gráfico de dependencia, con main.c en la parte superior del árbol, y trabaja desde abajo como lo describí, terminará con una documentación extremadamente buena de lo que está haciendo cada archivo y por qué.

… y así es como aprende una base de código indocumentada: la documenta.

Diferentes cosas funcionan para diferentes personas. Personalmente, encontré que estas técnicas son útiles al aprender el sistema en el trabajo:

  1. Corregir errores

Muchas bases de código tienen errores categorizados y probablemente incluso un nivel de dificultad asignado. La depuración y el seguimiento a través del flujo para corregir errores es muy gratificante.

2. Cambiar una funcionalidad de manera trivial

Mira cómo se comporta una determinada característica. Por ejemplo, si tiene un analizador CSV que toma un delimitador, ¿puede extenderlo para tomar números arbitrarios? El objetivo no es escribir código enviable sino estar familiarizado con el estilo y los patrones utilizados en la base del código.

3. Siga el ciclo de vida de la solicitud.

¿Qué sucede desde el inicio de main hasta el punto en que el sistema se estabiliza? Sigue el código y no te sumerjas demasiado en una función. El punto es comprender cómo el código principal muestra todos los servicios y comprender las dependencias.

4. Código de documento y diseño

Si está trabajando en un sistema como el que estoy donde el código y el diseño no están documentados, puede intervenir y llenar el vacío. Comience con las funciones de utilidad y documente claramente, luego continúe con módulos más grandes.

Y en todo momento

1. El depurador es tu amigo

2. La documentación disponible debe leerse primero

3. Si se queda atascado durante demasiado tiempo, siempre pregunte a sus superiores o haga una “culpa” en el código para ver todos los confirmadores.

1) Use un buen navegador de código fuente o IDE.

Utilizo cscope desde vim para navegar el código fuente C / C ++ y me ha servido muy bien. Esto funciona mejor para código C puro ya que cscope no puede distinguir entre la función C ++ Foo :: a () v / s Bar :: a (). Sin embargo, después de algún tiempo usando el nombre del archivo, uno puede determinar fácilmente la definición / llamadas relevantes.

Autoenchufe: Puede encontrar útil la publicación de blog que había escrito sobre cómo configurar el mapeo cscope / vim: Bankim Bhavsar: cscope + vim

2) Solicite a los miembros del equipo que identifiquen errores simples para usted y los arreglen para que se acostumbren a ciertos módulos en la base del código.

3) Solicite a los miembros del equipo que realicen sesiones técnicas de inmersión profunda en una parte específica del sistema. Ofrézcase como voluntario para tomar notas durante dichas sesiones, lo que ayudará a desarrollar la documentación / base de conocimientos para su equipo / empresa. Grabe audio o video para que también puedan ser utilizados por futuros empleados.

4) Use el almuerzo y otras discusiones informales sobre enfriadores de agua para hacer preguntas sobre módulos específicos en la base del código.

More Interesting

¿Cómo funciona el sistema FastPass + de Disney desde el punto de vista de la informática y la programación? En otras palabras, ¿cómo sería el esquema de la base de datos y qué tipo de tecnologías se utilizan para que el sistema funcione?

¿Cuántas descargas necesita mi aplicación de Android para que sea un desarrollador respetado?

¿Debo ir a la Universidad de Waterloo para la ingeniería de software o la Universidad de Toronto para la ingeniería informática? Si decido ir a Waterloo, me costará el doble porque necesito mudarme.

¿Qué servidor de desarrollo utiliza habitualmente y por qué?

¿Cuáles son las técnicas eficientes de desarrollo de proyectos de TI desde una estimación aproximada hasta su finalización dentro del presupuesto, el tiempo y los requisitos?

Cómo identificar y calcular la cantidad de recursos necesarios para una tarea de desarrollo de software en particular

¿Debo usar == o === en Javascript y cuál es la diferencia entre los dos?

¿Qué metodología (s) de desarrollo de software utiliza Google?

Como desarrollador, ¿elegiría el monitor Samsung CHG90 (49 ") o LG 38UC99 (38") y por qué?

¿Cuál es mejor: ingeniería informática en DTU, ingeniería de software en DTU o ingeniería informática en NSIT?

¿Qué es el proceso de revisión en las pruebas de software?

¿Qué es el desarrollo de software CRM?

¿Cuáles son las mejores prácticas para probar el software insurtech?

¿Cucumber se usa mucho en pruebas de software hoy en día?

¿Cómo usan Python las grandes compañías tecnológicas de manera eficiente dada su falta de verificación de tipos estáticos y otros aspectos de la ingeniería de software moderna?