tipos procedimientos procedimiento funciones example español ejemplos ejecutar bloques almacenado 11g oracle plsql continuous-integration build-automation code-analysis

oracle - procedimientos - ¿Compilación previa de PL/SQL y controles de calidad de código en un entorno de compilación automatizado?



procedimientos y funciones oracle pl/sql (3)

Creo que este blog describe el proceso necesario:

http://www.theserverlabs.com/blog/?p=435

Por favor revisa y hazme saber lo que piensas al respecto.

Construimos software usando Hudson y Maven. Tenemos C #, java y por último, pero no menos importante las fuentes PL / SQL (sprocs, packages, DDL, crud)

Para C # y Java, realizamos pruebas unitarias y análisis de código, pero realmente no conocemos la salud de nuestras fuentes PL / SQL antes de publicarlas en la base de datos de destino.

Requerimientos

Hay un par de cosas que no queremos probar en la siguiente prioridad:

  1. ¿Son válidas las fuentes, por lo tanto "compilables"?
  2. Para los paquetes, con respecto a una cierta base de datos, ¿se compilarían?
  3. Calidad del código: ¿Tenemos fallas en el código como duplicados, métodos demasiado complejos u otras violaciones a un conjunto definido de reglas?

También,

  • la herramienta debe ejecutarse sin cabeza (línea de comando, ant, ...)
  • queremos hacer un análisis sobre una base de código parcial (solo fuentes modificadas)

Herramientas

Investigamos un poco y encontramos las siguientes herramientas que podrían ayudar:

Hasta ahora, Toad for Oracle junto con Sonar parece ser una solución elegante. Pero puede que nos falte algo aquí?

¿Algunas ideas? ¿Otros productos? ¿Experiencias?

Preguntas relacionadas sobre SO:


Nuestro kit de herramientas de reingeniería de software DMS es la base de herramientas personalizables arbitrarias. Tiene un front-end PL / SQL que puede usarse para construir verificaciones de calidad de código fuente arbitrarias. Sí, tiene una versión de línea de comandos.

Hay una variedad de herramientas COTS PL / SQL basadas en DMS que podrían usarse para verificar la calidad:

  • Formateador - Limpia el diseño. Efecto secundario: comprobación estática de la sintaxis PL / SQL legal
  • Motor de búsqueda de código fuente: permite una búsqueda rápida de la base de código fuente indexada. Calcula las métricas de Halstead y Cyclomatic como un efecto secundario de la configuración del índice.
  • CloneDR - encuentra e informa código PL / SQL duplicado
  • Cobertura de prueba: determina parte del código PL / SQL no ejecutado por pruebas (pruebas ad hoc, de unidad o funcionales)

Todos estos tienen versiones de línea de comandos.


Nuestro enfoque es mantener cada objeto de la base de datos (tablas, vistas, funciones, paquetes, etc.) en su propio archivo bajo control de fuente y tener un servidor de integración ( TeamCity , Hudson , etc.) para hacer una compilación nocturna de la base de datos, desde la fuente, donde descarta y vuelve a crear el esquema antes de buscar errores de compilación en la tabla del sistema user_errors . Esto le permite saber cuándo alguien ha introducido errores de compilación en la compilación.

El siguiente paso es usar algo como PLUTO para agregar pruebas unitarias a su código PL / SQL y agregarlas a la tarea de compilación nocturna. Para nosotros, esto ha implicado tener conjuntos de datos de prueba de muestra (también bajo control de código fuente) que nos permiten llevar la base de datos a un "estado conocido" para los fines de la prueba.

No he encontrado nada que nos ayude mucho con ninguno de los anteriores, por lo que es principalmente una colección de tareas Ant, scripts de shell personalizados y magia, que básicamente aplican el DDL requerido a una base de datos vacía y usan DBMS_UTILITY.COMPILE_SCHEMA() para, uh , compila el esquema. Puede agregar cosas más sofisticadas más adelante, como hacer un seguimiento de los objetos que no compilan o fallan las pruebas a un envío específico en el control de código fuente, y emiten "culpar al correo".

¡Me gustaría mucho ver si alguien más tiene un mejor enfoque o si hay un producto comercial que haga esto por mí!