textos sirve segun que para niveles lectora escritos definicion comprensión comprension autores wine codebase

wine - sirve - ¿Comprender un conjunto de código fuente grande e indocumentado?



niveles de comprensión lectora (11)

Siempre me ha asombrado el Wine . A veces quiero piratearlo, arreglar pequeñas cosas y, en general, entender cómo funciona. Entonces, descargo el código fuente de Wine y justo después de eso me siento abrumado. La base de código es enorme y, a diferencia del Kernel de Linux, casi no hay guías sobre el código.

¿Cuáles son las mejores prácticas para comprender una base de código tan enorme?


(Esta es una respuesta que publiqué en una pregunta hace un tiempo. Lo modifiqué un poco para que se ajuste a esta pregunta).

La experiencia me ha demostrado que hay 3 objetivos principales que tiene al aprender un sistema heredado:

  1. Aprende lo que se supone que hace el código.
  2. Aprende cómo los hace.
  3. (crucialmente) Aprende por qué los hace como lo hace.

Las tres partes son muy importantes y hay algunos trucos que te ayudarán a comenzar.

Primero, resista la tentación de simplemente presionar ctrl-clic (o lo que sea que use su IDE) a su alrededor del código para entenderlo todo. Probablemente no podrá mantener todo en perspectiva en su mente de esta manera, especialmente cuando cada línea lo obliga a mirar otras clases para comprender qué es, por lo que debe poder mantener varios niveles de apilar en tu cabeza

Lea la documentación cuando sea posible; Por lo general, le ayuda a obtener rápidamente un marco mental sobre el cual construir todo lo que sigue.

Ejecutar casos de prueba cuando sea posible.

No tenga miedo de preguntar a alguien que sabe si tiene alguna pregunta. Por supuesto, no debería perder el tiempo de otros con consultas inane, pero si hay algo que simplemente no entiende (esto es especialmente cierto con preguntas más conceptuales como, "¿No tendría mucho más sentido implementar esto como un ___ "o algo así), probablemente valga la pena averiguar la respuesta antes de desordenar algo y no saber por qué.

Cuando finalmente termine de leer el código, comience en un lugar "principal" lógico y vaya desde allí. No solo lea el código de arriba a abajo, o en orden alfabético, o cualquier cosa (esto probablemente sea obvio).


(advertencia: marketing descarado por delante)

Para los desarrolladores de Java que utilizan Eclipse, hay nWire . Es un complemento de Eclipse para navegar y visualizar grandes bases de código.


Adéntrate. Piensa en una pregunta que te gustaría haber respondido e intenta encontrar la respuesta. Cuando te canses de leer el código, ve a leer la lista de correo de desarrolladores, la guía del desarrollador o la wiki .

Desafortunadamente, no hay un camino real para entender una base de código grande. Si disfrutas ese tipo de cosas (yo lo hago) te divertirás un poco. De lo contrario, las guías no servirán de nada, por lo que no estás peor.


Busca una característica peculiar que te interese mejorar. Buscar su implementación. Una vez que lo encuentres, tira de esa pajita y todo lo demás seguirá.


Como otros han sugerido, cavar en! Lea toda la documentación disponible que pueda absorber. Luego vea si puede encontrar a otras personas que estén interesadas o que tengan conocimiento y aprenda con / de ellos. Ayuda tener gente para intercambiar ideas y hacer preguntas.

Para el código fuente de C, una vez que tenga una idea de en qué áreas del código le gustaría trabajar, genere las bases de datos ctags y cscope para ese código. Estas herramientas hacen que sea mucho más fácil saltar y entender el código. Muchos editores de texto (un ejemplo es gvim ) tienen soporte para ctags y cscope para que puedas saltar fácilmente.


Con un código base complejo, el mayor error que puedes cometer es tratar de ser una computadora. Haga que la computadora ejecute el código y use un depurador para ayudar a descubrir qué está sucediendo.

  1. Averigüe cómo compilar, instalar y ejecutar su propia versión de Wine a partir del código fuente existente.

  2. Aprenda cómo depurar (por ejemplo, usar gdb) en una instancia en ejecución de su versión de Wine.

  3. Ejecute Wine debajo del depurador y haga que demuestre el comportamiento no deseado.

  4. La parte divertida: encuentra dónde va el camino de ejecución del código y comienza a aprender cómo va todo junto.

Sí, leer mucho y mucho código ayudará, pero el compilador / depurador / computadora puede ejecutar el código mucho más rápido que tú.


Intente implementar un pequeño cambio en el código, algo que será visible para usted. Eso podría ser descubrir una forma viable de generar declaraciones de depuración (y averiguar dónde aparece la salida), podría estar cambiando el tamaño predeterminado de las ventanas o el color del escritorio, o algo así. Una vez que puede hacer que suceda algo en la base de código, ha arañado la superficie de la comprensión y puede comenzar a avanzar hacia cosas más complicadas. En ese momento, seleccione el objetivo de algo un poco más útil que le gustaría que hiciera el código e implemente eso. O revisa el rastreador de errores del proyecto y busca algo pequeño para empezar.

Documente a medida que avanza y escriba pruebas unitarias a medida que avanza, y refactorice a medida que avanza. Cuando descubras lo que hace una rutina, ¡coméntala!


La mejor manera de familiarizarse con una base de código grande es sumergirse. Muchos proyectos tienen una lista de tareas fáciles que deben realizarse, y generalmente están reservadas para ayudar a las personas a ingresar. Debes encontrar y trabajar en algunas de ellas ; aprenderá mucho sobre el esquema y la estructura del código general, contribuirá al proyecto y obtendrá un pago fácil que lo ayudará a alentarlo a realizar tareas más amplias.

Como la mayoría de los proyectos, WINE tiene buenos recursos disponibles para sus desarrolladores; IRC, wiki, lista de correo y guías / descripciones generales. Con la mayoría de las bases de código desalentadoras, no es tan aterrador después de las primeras correcciones. WINE es realmente grande, y al igual que el kernel, dudo que haya expertos en todos los sistemas; No sientas que necesitas serlo tampoco. Comienza a trabajar en algo que te importa y tómalo desde allí.

Yo mismo empecé algunos parches para WINE, y es una buena comunidad y una buena estructura. Hay muchos mensajes de depuración muy útiles, y es un proyecto realmente genial para trabajar, por lo que también te ayuda a hacerlo durante más tiempo.

Todos apreciamos su valor y disposición para ayudar con WINE (lo necesita). Gracias y buena suerte.


La mejor manera es a través de comentarios. Estoy siendo irónico, ya que entiendes que pequeños fragmentos de la bestia agregan comentarios para que puedas seguir tu rastro. Los otros desarrolladores también lo disfrutarán si agrega las guías que faltan en el código.


Un profesor nos dijo una vez que comparáramos esa situación con escalar una montaña. Quizás estés escuchando a alguien que hizo esto y te dice cómo es mirar hacia el país. Y crees sin dudarlo que es una vista espectacular.

Sin embargo, debes comenzar a escalar para comprender realmente cómo es la vista desde la parte superior.

Y no es tan importante subir hasta la cima. Podría ser perfectamente suficiente para alcanzar una altura justa sobre el nivel del suelo.

Pero nunca tengas miedo de empezar a escalar. La vista siempre vale la pena cualquier esfuerzo.

Esta siempre ha sido una buena analogía para mí. Sé que esta pregunta fue más sobre consejos específicos sobre cómo tratar de manera eficiente las bases de códigos una vez que comenzó a escalar. Pero sin embargo, al instante me recordó a nuestras clases de física en aquel entonces.


Una buena manera de entender un sistema grande es dividirlo en sus partes constituyentes y centrarse en una ruta específica a través de la aplicación.

Tu depurador es tu amigo aquí, establece un punto de interrupción en el hilo que deseas investigar y luego recorre línea por línea para ver qué parte hace ... espero que eso ayude ...