¿Cuáles son algunos hábitos efectivos de lectura de códigos?

Depende de lo complicado que sea el código base y también el propósito de la lectura del código (por ejemplo, corrección de errores, nueva función, solo aprendizaje, …).

Para algo simple (unos pocos miles de líneas), puede simplemente recorrer cada archivo para dibujar el gráfico de llamadas y el gráfico de clase. Lo principal es centrarse en imágenes grandes en lugar de detalles hasta que sea necesario. Para proyectos complejos (por ejemplo, cuando comencé en Bing, la base del código tiene millones de líneas), debe leer algunos documentos y / o tener a alguien que lo guíe brevemente. Luego establecí un punto de interrupción en varios archivos para tener una idea del panorama general. Nuevamente, esto es como dibujar un gráfico de llamadas y familias de clases.

Para el código C / C ++, los archivos de encabezado deben proporcionar suficiente información (si no, se necesitan más comentarios) para que otra persona comprenda qué se usa cada variable / función miembro y cómo usar cada función.

En general, trato de averiguar dónde está el punto de entrada de la aplicación o al menos el punto de entrada para la funcionalidad que se está examinando.

Si la aplicación fue escrita por seres humanos decentes que se preocupan por la cordura de las personas, no debería ser demasiado difícil encontrar esto. A partir de ahí, puede rastrear el flujo de la aplicación.

Normalmente escribo notas y / o mapeo el flujo con lápiz y papel, ya que me ayuda a absorber la aplicación a un alto nivel.

Una vez que tengo una comprensión decente de alto nivel de cómo se junta la aplicación, comienzo un estudio más profundo.

Para retroceder un poco, las aplicaciones generalmente están en capas en sus dependencias, lo que significa que la capa más inferior es un módulo que no depende de nada más y la siguiente capa depende del módulo debajo de ella. Esto se repite hasta que llegas a la capa superior, una que depende de una o más cosas, pero nada depende de ella.

Lo que me gusta hacer es identificar qué módulos / clases / objetos están en la capa más inferior, ya que pueden estudiarse por sí solos sin conocimiento previo de nada más. Por lo general, no heredan ni usan ningún otro objeto que no sea el que proporciona el lenguaje o la plataforma.

El podcast de Software Engineering Radio tuvo un episodio hace varios años sobre este tema y vale la pena escucharlo. Uno de los consejos más útiles que uso una y otra vez es alejar el código fuente a aproximadamente 4 puntos, para que no pueda leerlo, pero puede ver la forma del código. Me ha ayudado infinitamente a ver códigos repetidos y tener una idea de la estructura del código (declaraciones de decisión, bucles, … (y la longitud de los diferentes métodos y clases).

Episodio 148: Arqueología de software con Dave Thomas

La mejor manera de entender el código es resolviendo errores. Abre JIRA y agrieta.

Sigo un patrón similar al de Allan. También trato de estar atento a cualquier patrón de diseño o patrón de código que se haya aplicado. Es mucho más fácil razonar sobre algo, si puedo llamarlo “ThingFactory” o “ThatStrategy”.

También encontré que este video (Play by Play: Katrina Owen) con Katrina Owen es realmente genial para examinar un proceso del mundo real de cómo alguien puede tomar una base de código que nunca ha visto e intentar averiguar qué está sucediendo.

La otra cosa que hacer es mirar las pruebas. Las pruebas son un conjunto extraído de lógica que debe representar la ejecución de su base de código. Esperemos que puedan proporcionar alguna información sobre el funcionamiento del sistema.

Casi todos los IDE / editores tienen las mismas características. Puede usar cualquier IDE que conozca sus características. Y hay algunos sitios web que puede codificar en muchos lenguajes de programación. Puedes usarlos. Escriba su código y convierta cualquier otro idioma para que pueda ver cuáles son las diferencias. En realidad es un trabajo divertido, creo: D.

More Interesting

¿Cuáles son las desventajas de la programación procesal?

¿Cuál es la diferencia entre DFD lógico y físico?

¿Hay alguna herramienta de programación gráfica basada en el flujo, como las tuberías de Yahoo, pero con algún software local?

¿Cuáles son las mejores tiendas de desarrollo web en Irlanda?

Cómo mostrar el nombre del paquete de una clase usando UML

¿Por qué la mayoría de los desarrolladores de software junior están presionados por más trabajo por una pequeña cantidad de dinero en comparación con otros puestos en la misma industria?

Mi aplicación es una aplicación basada en Windows, en la que proporcionamos una interfaz que contiene todo el software portátil y el usuario puede usar este software sin instalarlo. ¿Cómo puedo implementar esto en Internet?

¿Qué software de pedido / inventario está más orientado, por lo que para Amazon recomendaría como un arranque / menor costo para comenzar? Incorporación a un software más avanzado / costoso en el futuro.

¿Cuáles son las principales diferencias en los desafíos asociados con un rol de gerente de producto en una empresa B2C versus una empresa SaaS B2B, empresarial?

¿Puede un probador de software (pruebas de automatización) ganar más de 10-15 lacs por año dado que tiene el conjunto requerido de habilidades y experiencia?

¿Cuál es el software de monitoreo ideal para los empleados?

¿Cuál es el mejor actualizador de software para mantener actualizados todos mis programas de Windows?

¿Cuáles son los principales países especializados en la deslocalización de software y por qué?

¿Cuáles son algunas de las mejores prácticas al hacer la revisión de código para el código de automatización de prueba?

¿Qué formas de virtualización existen?