Caso práctico

La ingeniería inversa se define como el proceso de analizar código, documentación y comportamiento de una aplicación para identificar sus componentes actuales y sus dependencias y para extraer y crear una abstracción del sistema e información del diseño. El sistema en estudio no es alterado, sino que se produce un conocimiento adicional del mismo.
Tiene como caso particular la reingeniería que es el proceso de extraer el código fuente de un archivo ejecutable.
La ingeniería inversa puede ser de varios tipos:
Parte de un proyecto en Java que tengas ya hecho y obtén el el diagrama de clases correspondiente.
Tienes una buena descripción teórica sobre ingeniería inversa en el siguiente documento: