2012-01-11 17 views
11

Hacemos que los estudiantes envíen ejercicios en un curso mientras que tienen que cumplir con algunas convenciones de códigos. Por ejemplo, los nombres de las funciones deben estar en camelCase. La longitud de la función no debe exceder 50 líneas (las tareas son lo suficientemente simples como para dividir) etc. Estoy buscando una herramienta que pueda verificar automáticamente que C/C++ (ambos son necesarios). Es decir, me gustaría que la herramienta se queje cuando algo está mal para que el alumno pueda arreglarlo. Hasta ahora no he podido encontrar algo que se ajuste bien. Si la cosa es de código abierto y se puede configurar fácilmente para nuestras necesidades que será o.k.Herramienta automática para verificar convenciones de códigos para C/C++

+2

No es probable que encuentre una herramienta para forzar los nombres de las funciones camelCase en el código C++, porque el estilo dominante es lowercase_with_underscores, con un número sustancial de desviadores que prefieren PascalCasing. Tu mejor esperanza es algo configurable. –

+1

¿Por qué quieres hacer eso automáticamente? Al menos podría leer y corregir la tarea manualmente, ese es su trabajo. No puedes cuantificar el estilo. Puede cuantificar el cumplimiento, pero eso es completamente diferente. – wildplasser

+3

Estamos cuantificando el cumplimiento. Queremos hacerlo de forma automática, de modo que cuando un alumno tenga un error en uno de esos problemas, pueda recibir un correo electrónico automático para solucionarlo y dejar el tiempo del verificador humano para asuntos más serios. – Shiroko

Respuesta

2

Puede usar la herramienta Unix indent en forzar un poco de estilo de codificación C.

Ver

man 1 indent

cuando se instala.

+0

y ejecuta los resultados a través de un diff con el original ... –

+0

La sangría no puede "forzar" el número máximo de líneas de una función y ninguna regla que implique saltos de línea destruiría la salida de diff ... – log0

0

AFAIK visual studio premium y ultimate tiene tales opciones avanzadas a través de herramientas de análisis y prueba. pero los que no son libres :(

+0

Sí, pero desafortunadamente eso no es útil para nuestro caso. – Shiroko

+0

/analizar realiza análisis de código estático. Esto no tiene nada que ver con las convenciones de estilo. – pmr

0

Doxygen produce una salida XML que sería muy fácil de procesar ... Bueno, al menos tan fácil como encontrar los límites de palabra en identificadores siempre es.

0

Usted puede utilizar ORDENADO de depuración modo, con un poco de scripts de shell/perl

Básicamente, la idea es dejar que se corrija y proporcionar la salida en otro archivo .txt, que luego se puede analizar para proporcionar solo los resultados de error y puede obtener el líneas originales de código y ejecutar un DIFF :-)

Puede que necesite un poco de codificación y secuencias de comandos para hacerlo bien. Estábamos usando algo similar, pero para un proyecto y objetivo completamente diferente.

De lo contrario se puede tratar de utilizar estos:

http://gcgreatcode.sourceforge.net/ 
http://universalindent.sourceforge.net/ 

Podría ayudar un poco con el problema, con un poco de codificación para llegar a su cuenta de cheques automatizado específico.

0

Dependiendo del nivel de detalle y las precisiones necesarias y la voluntad de invertir (ya sea para hacerlo usted mismo o para pagarle a alguien), es posible que desee ver clang: Es un C, C++ y Object-C co mpiler escribió C++ que expone sus estructuras internas de datos. Sin embargo, he usado un complemento para comprobar el código en busca de varios errores, en su mayoría pequeños y pequeños detalles. Dado que el compilador expone un AST, fue trivial, por ejemplo, escupir advertencias cuando se encuentran moldes de estilo C (puede ser un poco ruidoso en el código C).

Aunque no lo he usado, clang aparentemente también puede emitir una representación XML de sus estructuras internas de datos. Si no necesita hacer preguntas como "es la clase A, una clase base de acceso público de B" (es decir,preguntas no triviales que requieren la inspección semántica de la AST), este puede ser un camino más fácil hacia una herramienta que usted describió. De hecho, en cualquier caso puede hacer que sus estudiantes implementen los cheques: si tiene suficientes estudiantes y asigna los mismos cheques más de una vez para asegurarse de obtener al menos una buena implementación, podría reunir una colección ordenada con bastante rapidez. ... y si tus alumnos son como yo (bueno, realmente no te deseo un destino tan terrible como este), incluso disfrutarían el ejercicio.

Una cosa, sin embargo: no hacer marca cualquier programador de C++ abajo para no utilizando CamelCase! Aquí es simple e invaluable. Los programadores de C++ tienden a hacer lo correcto. Por lo tanto, las abominaciones tontas como CamelCase y la notación húngara son no usado.

1

QA-CPP puede ayudar aquí. Ha pasado más de un año desde que lo usé pero puedes configurarlo para hacer ese tipo de cosas.

Es posible que desee llamar a los chicos de Programming Research y verificar si puede hacerlo.

Sin embargo, la pregunta sigue siendo ¿por qué? Si mi conferencista empezara a criticarme por el estilo del código sobre la funcionalidad, pensaría que se le escapó un tornillo. Como alguien que ha pasado por el sistema universitario, deberías estar preparándolos para trabajar en el mundo real. Dios sabe que las cosas que veo que salen ahora dejan mucho que desear.

+0

En mi experiencia, en el mundo real, debe cumplir con los estándares de codificación. – dangerousdave

+1

Él no está en el mundo real, él trabaja en una universidad. –

1

Existe EditorConfig, que parece que pretende ser una herramienta para aplicar los estándares de codificación en varios editores. El soporte y la funcionalidad son limitados, pero es una muy buena idea. http://editorconfig.org/

Cuestiones relacionadas