Ingeniería inversa
En el caso concreto del software, se conoce por ingeniería inversa a la actividad que se ocupa de descubrir cómo funciona un programa, función o característica de cuyo código fuente no se dispone, hasta el punto de poder modificar ese código o generar código propio que cumpla las mismas funciones. La gran mayoría del software de pago incluye en su licencia una prohibición expresa de aplicar ingeniería inversa a su código, con el intento de evitar que se pueda modificar su código y que así los usuarios tengan que pagar si quieren usarlo.
Apache Cayenne
Cayenne soporta la ingeniería inversa y la generación de estructuras en materia de bases de datos, disponiendo además de un motor generador de clases basado en Velocity. Todas estas funciones se pueden controlar directamente por medio del "CayenneModeler", una herramienta GUI plenamente funcional. No rquiere de configuraciones basadas en XML o anotaciones. Permite realizar rápidamente un mapeo directo de todo un esquema de base de datos a un conjunto de objetos Java, gracias a la herramienta gráfica CayenneModeler. Estas características hacen de Cayenne una herramienta de interés para los usuarios que recién se inician en la informática empresarial.