2010-05-20 42 views
10

Soy un desarrollador en prácticas y he estado escribiendo aplicaciones .NET desde hace aproximadamente un año. La mayor parte del trabajo que he realizado ha supuesto la creación de nuevas aplicaciones (principalmente aplicaciones web) desde cero y me han dado más o menos control total sobre el diseño del software.Cómo entender los proyectos existentes

Esta ha sido una gran experiencia, sin embargo, como desarrollador aprendiz mi confianza sobre si los enfoques que he adoptado son los mejores es mínima. Idealmente, me encantaría colaborar con desarrolladores más experimentados (creo que esto es lo mejor que aprendí), sin embargo, en la empresa para la que trabajo, los desarrolladores tienden a trabajar de forma aislada (una gran pena para mí).

Recientemente decidí que una buena forma de aprender más sobre cómo los desarrolladores experimentados enfocan su diseño podría ser explorar algunos proyectos de código abierto. Me sentí un poco abrumado por los proyectos que miré. Con mi nivel de experiencia, era difícil entender el cuerpo del código que enfrentaba.

Mi pregunta es levemente confusa. ¿Cómo se acercan los desarrolladores a la tarea de comprender un nuevo proyecto de mediano a gran escala? Me encontré vertiendo mucho código y luchando por ver la madera de los árboles. En un momento dado, sentí que podía entender una pequeña porción del sistema pero no ver cómo encaja todo. ¿Los demás tienen este mismo sentimiento? En caso afirmativo, ¿qué enfoques llevas a la comprensión del proyecto? ¿Tiene algún otro consejo sobre cómo aprender las mejores prácticas de diseño?

Cualquier consejo será muy apreciado. Gracias.

+2

Dupe http://stackoverflow.com/questions/1307790/how-to-improve-your-reading-and-understanding-of-code y http://stackoverflow.com/questions/2777465/resources-for- aprender a leer mejor, por ejemplo. –

+0

por favor edite su pregunta para marcarla como Wiki de la comunidad, de lo contrario la gente lo cerrará. –

Respuesta

3

Comunicar

me suelen pedir un desarrollador que me diera una visión general del proyecto o cualquiera de los módulos de proyectos que me interesan. No he encontrado hasta ahora todo lo que es mejor que la comunicación con los desarrolladores involucrados para ser presentados a una base de código existente. No solo pueden ofrecerle una descripción general del proyecto y el código, sino que también recomiendan cualquier documentación disponible (por ejemplo, diagramas de clases) que pueda valer la pena examinar.

2

Siempre debe estar buscando una mejor manera. Eso, en esencia, es donde conduces para mejorar. Siempre es bueno preguntar siempre "tiene que haber una mejor manera", pero no dejes que te paralice. Establezca un momento para probar algo, si no está llegando a ninguna parte, abandónela, siga otra ruta.

Lo que sí cambia son las personas en las que confías, las personas con las que puedes intercambiar ideas y las comunidades a las que puedes acudir. Hago esto todo el tiempo con una breve lista de personas que han trabajado conmigo antes, que son mejores que yo en áreas que sé que soy asqueroso, y no me importa decirme "no, mal, debes hacerlo" (alguna otra idea).) ". Ese paso que ya ha tomado con publicar algo aquí :-)

En cuanto a los proyectos, cada vez que me acerco a un proyecto que ya existe, no es mío, las personas que lo escribieron no están, el código es antiguo, el la documentación es escasa, y así sucesivamente, tiendo a centrarme en UNA COSA y una sola cosa. No trates de entender todo el sistema, no es realista y no te preocupes demasiado si tus cambios son la solución/solución perfecta, eso saldrá a lo largo del tiempo y se volverá obvio a medida que mejores y entiendas más las cosas. . Sepa lo que no sabe y no sepa nada al respecto y aprenda un canal a la vez. Incluso saber un montón de trucos y cosas geniales no significa mucho cuando tienes que volver al 2003 con conjuntos de datos.

Mencionaste que la gente está muy enamorada ... eso es una lástima porque para desarrollar algo es necesario que mucha gente hable entre ellos. Sugiero que preguntes si puedes emparejar el programa con uno de ellos que sabe mucho sobre el sistema. Si esa persona presenta excusas o dice "no pueden" encontrar a alguien que lo haga.

+0

Gracias. Este es un consejo realmente útil. Me identifico de inmediato con lo que dice sobre no quedar paralizado con la experimentación de diseño. ¡Culpable! – John

8

Esta es una pregunta muy interesante. También me gustaría saber cómo lo hacen otros desarrolladores. Hasta ahora utilizo estas posibilidades sin ningún orden en particular:

  • Lea el código fuente, tiene la ventaja de que siempre está actualizado. También es la tarea más difícil de , pero es posible.
  • Lea las pruebas de unidad si están disponibles, a menudo muestran el uso previsto para una clase, biblioteca o marco.
  • Refactoriza una parte del código fuente. Mientras mejora la calidad del código fuente, aumenta su comprensión del código, o debería decir que solo puede mejorar el código fuente si sabe exactamente lo que hace.
  • Depure la aplicación, recorra el programa mientras utiliza un depurador.
  • Utilice una herramienta como NDepends, JDepends, Lattix, Visual Studio, etc. para realizar ingeniería inversa de la arquitectura o el diseño de la aplicación y utilícela como punto de partida.
  • Lea la documentación. Cualquier documentación que le permita comprender la aplicación servirá (documentación del usuario, documentación de diseño o documentación de arquitectura).
  • La comunicación con los desarrolladores originales como dijo Bruno también sería una buena opción.
2

Pregunta que me pregunté cuando comencé mi viaje. En primer lugar, requiere mucha paciencia y tiempo, dependiendo del tamaño del proyecto. Esto es lo que hago hoy para entender un proyecto existente y los proyectos en los que trabajo en su mayoría están centradas en la base de datos y esta lista no es necesariamente para proyectos de código abierto, sino también por lugar de trabajo proyectos

  1. Crear un diagrama ER de la base de datos (si se trata de una base de datos relacional)
  2. crear una hoja relacional ER con todas las relaciones de las mesas dispuestas (que aquí hay una consulta SQL http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/)
  3. utilizar la hoja de arriba para crear vistas para agrupar las mesas de manera lógica y ver los resultados Esto ayuda a entender el esquema y los datos detrás de aplicación
  4. Diagrama para diseñar los niveles y los componentes en el proyecto
  5. diagrama de secuencia y el flujo de datos diagramas para entender el flujo
  6. Por lo anterior necesita depurar la aplicación utilizando herramienta como visual Studio
  7. diagrama y de referencia mapas
  8. clase de métodos para undersand la cadena en el código (puede utilizar herramientas como ReSharper)
  9. especificaciones funcionales (o escribir su propia historia del proyecto) y el uso de diagramas de casos (para entender requisitos comerciales)
  10. Refactor una pequeña porción de entender mejor el código
  11. Hablar con los desarrolladores o comunidad o negocio
+0

He encontrado algunos consejos interesantes aquí http://programmers.stackexchange.com/questions/146471/understanding- already-existing-complex-code-base – brenmartin

3

Estos son algunos buenos pasos a considerar antes de sumergirse en el código fuente de cualquier proyecto que nunca examinado.

primer paso - intente comprender el propósito del proyecto (primera visión general y luego a bajo nivel), si es posible, tome la ayuda del comprobador.

2do paso - Antes de ir al código, intente diseñar el proyecto según su comprensión a un nivel muy alto. (No dedique mucho tiempo a esto, solo en un nivel muy alto).

3er paso - ejecutar el proyecto y ver el flujo le dará más claridad en la comprensión del diseño funcional.

cuarto paso - ver la estructura del proyecto, se le dará una idea muy básica de la arquitectura como de tres niveles, dos niveles, etc.

quinto paso - de nuevo ejecutar el programa en modo de depuración e intente comprender el flujo técnico a nivel de módulo y clase. significa qué módulo contiene la lógica comercial y dónde está escrita la lógica de acceso a los datos, también intenta comprender la entrada y la salida de estos módulos.

6to paso - Tenga en cuenta su comprensión para referencia futura.

7º paso - Ejecute nuevamente la aplicación en modo de depuración, esta vez comprenda el propósito de la clase y los métodos que contiene. ejecutar diferentes funcionalidades de la aplicación en modo de depuración y cada vez seguir el control donde quiera que vaya, ver las clases y todos los métodos de esta clase e intentar relacionarlo con la funcionalidad que está ejecutando, por ejemplo, si ha seleccionado una cuenta de página 'y llenó la entrada y la envió. (usted sabe que va a abrir una nueva cuenta para usted; simplemente siga el control en modo de depuración y vea cuáles son las clases involucradas y trate de comprender sus métodos, entonces, al final de este ciclo, entenderá muchas cosas sobre la apertura de cuentas técnicamente). aplican el mismo proceso para diferentes funcionalidades.

¡Salud!

Cuestiones relacionadas