2009-05-26 10 views
13

En mi equipo tenemos un excelente sistema de control de fuente y tenemos excelentes especificaciones. El problema que me gustaría resolver es cómo mantener las especificaciones actualizadas con el código. Con el tiempo, las especificaciones tienden a envejecer y se vuelven obsoletas¿Cómo mantener el código y las especificaciones sincronizados? - ¿hay buenas herramientas?

Las personas que hacen las especificaciones tienden a disgustar el control de la fuente y los programadores tienden a no gustar compartir.

Me encantaría saber qué soluciones usan otras personas. ¿hay un medio feliz en algún lado?

+2

Este es TAN un gran problema. Gracias por plantear el problema aquí, Chris. – DOK

+0

Seré el segundo DOK, además, no me gusta SharePoint. +1 –

Respuesta

5

Creo que una wiki que no sea Sharepoint es buena para mantener la documentación actualizada. La mayoría de las personas no técnicas pueden entender cómo usar una wiki, y la mayoría de los programadores estarán más que felices de utilizar una buena wiki. El wiki y los sistemas de control de documentación en Sharepoint son torpes y frustrantes de usar, en mi opinión.

Mediawiki es una buena opción.

Me gustan mucho los wikis porque son, de lejos, el dolor más bajo para adoptar y mantener el ritmo. Le dan control automático de la versión, y suelen ser muy intuitivos para que todos puedan usar. Muchas empresas querrán usar Word, Excel u otros tipos de documentos para esto, pero tener acceso a todo en línea y accesible desde una interfaz común es clave.

1

No conozco ninguna solución especialmente buena para lo que estás describiendo exactamente; en general, las únicas soluciones que he visto que realmente mantienen este tipo de cosas sincronizadas son herramientas que generan documentación del código fuente (doxygen, Javadoc).

1

Una técnica utilizada para mantener la documentación sincronizada con el código es literate programming. Esto mantiene el código y la documentación en el mismo archivo y utiliza un preprocesador para generar el código compilable de la documentación. Por lo que sé, esta es una de las técnicas que usa Donald Knuth, y está feliz de tener pay people dinero si encuentran errores en su código.

+0

Esta no es una técnica de especificación realmente sólida. Ideal para producir código y documentación que siempre coinciden. No tan bueno para producir una especificación que ayudará a alguien a escribir un programa. –

+0

Estoy dando esto como una opción porque es diferente. Pero creo que un programa alfabetizado podría ser mejor para incorporar la información de la especificación en el código. Si observa el código de [enredo] [1], hay secciones que parecen muy específicas: la discusión sobre cómo se representan los personajes incluye los motivos de las decisiones de diseño. Pero supongo que la diferencia es realmente de énfasis y la falta de buenas herramientas de programación literate hace que los comentarios en línea sean mucho más útiles. [1]: http://tug.org/texlive/devsrc/Build/source/texk/web2c/tangle.web – garethm

11

Nope. No hay un medio feliz. Tienen diferentes audiencias y diferentes propósitos.

Esto es lo que aprendí como arquitecto y escritor de especificaciones: Las especificaciones tienen poco valor a largo plazo. superarlo.

Las especificaciones, aunque es agradable para comenzar la programación, pierden su valor con el tiempo sin importar lo que haga. La audiencia para la especificación es un programador que no tiene mucha información. Esos programadores se transforman en programadores profundamente conocedores que ya no necesitan las especificaciones.

Las partes de la especificación, en particular las descripciones, pueden tener algún valor a largo plazo.

Si el resto de las especificaciones tiene valor, los programadores las mantendrán actualizadas.

Lo que funciona bien es usar comentarios incrustados en el código y una herramienta para extraer esos comentarios y generar la documentación actual en vivo. Java hace esto con javadoc. Python lo hace con epydoc o Sphinx. C (y C++) usan Doxygen. Hay muchas opciones: http://en.wikipedia.org/wiki/Comparison_of_documentation_generators

Las vistas generales deben sacarse de las especificaciones originales y colocarse en el código.

Se debe extraer un documento final. Este documento puede reemplazar las especificaciones utilizando las vistas generales de las especificaciones y los detalles del código.

Cuando se requieren revisiones generales, habrá nuevas especificaciones. Puede haber una necesidad de revisiones a las especificaciones existentes. El punto de partida son los documentos de especificación generados automáticamente. La especificación los autores pueden comenzar con esos y agregar/cambiar/eliminar al contenido de su corazón.

+1

Sugeriría que las especificaciones tengan un buen valor histórico a largo plazo; entender por qué algunas elecciones de diseño se hicieron inicialmente puede ser muy útil en los puntos posteriores de un proyecto; pero estoy muy de acuerdo con usted –

+1

Las decisiones de diseño son importantes. Pertenecen a una visión general, específicamente una visión general arquitectónica, no a especificaciones de programación detalladas. –

4

Tanto como sea posible, la especificación debe ser ejecutable, a través de rspec o doctest y marcos similares. La especificación del código debe documentarse con pruebas unitarias y un código que tenga métodos y variables bien definidos.

Luego, la documentación de la especificación (preferiblemente en una wiki) debería brindarle una visión general de las cosas a mayor nivel, y eso no cambiará mucho ni se desalineará rápidamente.

Este enfoque sin duda mantendrá la especificación y el código en sincronización y las pruebas fallarán cuando se desincronicen.

Dicho esto, en muchos proyectos, lo anterior es una especie de pastel en el cielo. En ese caso, S. Lott tiene razón, superarlo. No se mantienen sincronizados. Mire la especificación como la hoja de ruta que recibieron los desarrolladores, no un documento de lo que hicieron.

Si tener una especificación actual es muy importante, entonces debe haber un tiempo específico en el proyecto asignado para escribir (o volver a escribir) la especificación después de el código está escrito. Entonces será preciso (hasta que el código cambie).

Una alternativa a todo esto es mantener las especificaciones y el código bajo el control de la fuente y revisar los registros para garantizar que las especificaciones cambien junto con el código. Se ralentizará el proceso de desarrollo, pero si realmente es tan importante ...

+0

sí. especificación en el código! – Sake

Cuestiones relacionadas