¿Cómo entregarle al cliente un sistema en Java?

Hola que tal,

Bueno pues aquí estoy escribiendo después de un buen tiempo ya, bueno esta es una duda que tengo, ya que me están pidiendo desarrollar varios sistemitas en java algunos clientes y como realmente estos son mis primeros pasos como programador freelance (si lo quieren ver así) me gustaría recibir algunos consejos suyos, además de la duda que les voy a plantear:

Me pidieron desarrollar un sistema de inventarios para una autorefaccionaria, ya saben lo tipico (Registrar los productos, almacenar la información de los clientes y las compras, y bla bla) mi duda es: ¿Me recomiendan utilizar una BD? Digamos MySQL.

Otra cosa, uno de estos clientes me estaba mostrando un sistema que le estaban vendiendo y pues ya saben, ejecutó el programa como cualquier otro más en el mundo. Mi otra duda es, tratándose de un programa Java, como debiera yo entregar el sistema de manera que el cliente lo abriera por medio de digamos un acceso directo que va a ejecutar un ejecutable, valga la redundancia. Lo digo, por que según yo no creo que sea bien visto decirle al cliente: "Mira, abre tu consola de Windows, te vas a la carpeta del proyecto principal y escribes el comando java para ejecutarlo".

Una duda mas, es si digamos, opto por utilizar una BD digamos MySQL que es con la que siempre he trabajado, creo que sería muy tedioso para el cliente tener que instalar la BD, despues configurarla, y luego digamos (incluyendo la problemática anterior) lidiar con la ejecución del programa.

Probablemente lo de la instalación y ejecución de la BD, podría cobrarse en lo que respecta a la implementación y configuración del sistema el día de la entrega. Pero me gustaría saber cómo es que ustedes programadores experimentados suelen hacer esto e igual manera si tienen algún plus que no tenga nada que ver con lo que he planteado pero piensan que puede servirme me encartaría leerlos. La idea de todo esto es por que en mi mente puedo imagnar el desarrollo de un programa "perfecto" en el que en la instalación solo requiera un típico "Siguiente -> Siguiente" al modo de Windows con el acceso directo a tu escritorio para que posteriormente el cliente pueda hacer uso de esto.

¡Estaré esperando sus respuestas muy anciosamente!

Hasta pronto.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Consejos...

Según yo, Windows ya soporta JARs ejecutables, no? Es decir un simple JAR que adentro trae un Main-Class...? eso se logra con una extensión que el JDK o JRE de Sun le agrega a Windows. Pero si no, por ahí existen productos baratos (tal vez ya haya versiones de software libre, gratuitas) que que hacen un solo JAR de tu aplicación y la convierten en un ejecutable de Windows (un EXE, aunque no deja de necesitar la JRE) y hasta te hacen wizard de la instalación.

En cuanto a lo demás, esto es un consejo nada más: primero habla con el cliente, ve lo que quiere, arma tu propia especificación (porque pedirle al ciente que haga una es perder el tiempo), y entrégale una propuesta de desarrollo en forma de los siguientes documentos:

1)un documento de texto que describe la finalidad del sistema, los módulos que lo conforman, la relación entre ellos, las reglas de negocio, etc.
2)una cotización (tuviste que haber hecho tu estimado de tiempos, ponerle precio a tus horas y ver cuánto sale, pero no entregas el estimado con cada tarea sino solamente la cotización describiendo el costo total y el desglose por módulo)
3)un diagrama de Gantt que describe la manera en que voy a hacer el desarrollo e indica el tiempo que me va a tomar cada tarea, como soy yo solo pues todo es secuencial, y le pongo milestones indicando entregas parciales
4)otro documento que indique que el diagrama de Gantt contiene fechas tentativas, se comienza a trabajar el día que se recibe el primer pago parcial, que será de X cantidad, y posteriormente se hará una junta para cada entrega parcial, durante la cual se muestra el avance y si el cliente está satisfecho, debe entregar el siguiente pago parcial para continuar con el proyecto; si hay que realizar correcciones a entregar previas o a la actual, se programan primero antes de continuar con el proyecto y se programa una junta posterior para revisar dichas correcciones; cuando el cliente las acepte entonces ya realiza ese pago parcial y se continúa con la siguiente fase (algo así como el contrato de trabajo, o de proyecto)

Desde el principio debes haber considerado los costos y tiempos del deployment, que incluye instalar y configurar la base de datos, etc. y también debes indicar los pre-requisitos de cada fase que indique el Gantt para que el cliente vaya preparando la compra de hardware y licencias de software que se requieran para la entrega final.

Imagen de Shadonwk

asi es windows ya soporta

asi es windows ya soporta los JARs ademas las aplicaciones como Eclipse y Netbeans ya te generan de manera automatica dichos JARs a la hora de compilar tu proyecto, ahor bien para configurar la bd ya debes tener las conexiones a la bd en el programa de java si esque nunca van a cambiar o bien hacer una funcion que te lea u archivo donde vas a guardar la ip y el nombre de la bd por ejemplo y que al cargar tu programa leea estos datos y autoconfigure el phat de la conexion a la bd, y pues como dice ezamudio la configuracion del servidor de la bd la haces tu pero la cobras en tu proyecto...

Acerca de la base de datos

Sobre lo que comentas de la base datos, te recomiendo que veas HSQLDB, es una base datos escrita 100% en java no necesita de instalación, yo la he usado con gran exito
el sitio web es

Imagen de cfpmx

Hola ezamudio, Como siempre,

Hola ezamudio,

Como siempre, tú eres el primero en todo post que sale en javamexico, gracias por tu respuesta que me ha servido de mucho además de ser bastante clara y completa. Por cierto, cuando hablas de la cotización, ¿te refieres a que tengo que desglosar cada una de las tareas que voy a desempeñar, sin necesidad de indicar el precio individual de cada tarea?. La instalación y configuración de la BD supongo que debo incluirla en la cotización, ¿No es así?.

Respecto a los documentos de los que me hablas, ¿sabrás dónde podría encontrar algunos formatos o algunos ejemplos para tener idea de como ir armándolos y estructurándolos o dónde puedo leer información al respecto?.

Bueno eso es todo por ahora gracias.

PD: ¿A que te refieres cuando dices "milestones"?

Imagen de cfpmx

Perfecto, si ya vi como

Perfecto, si ya vi como generar el JAR, y lo detecta como ejecutable al menos en Win 7, recuerdo que en XP no lo detectaba como tal. Respecto a lo que comentas de las bases de datos, pues sería una buena alternativa lo del archivo externo, aún no lo consideraba. Ahora me falta ver el problema de el wizard de instalación, por ahí me comentaron que es muy sencillo hacerlo con C#, pero ni idea de cómo hacerlo.

Imagen de cfpmx

Voy a checarlo, ¿Cómo se

Voy a checarlo, ¿Cómo se supone que funciona? ¿ya la incluye Java? ¿qué ventajas me traería?, esto si que no lo conocía. Gracias.

Imagen de ezamudio

Cotización, milestones

Para hacer una buena cotización tienes que hacer un buen estimado primero. Para hacer un buen estimado necesitas crear una buena especificación, definiendo los módulos que necesita tu aplicación/sistema, la complejidad de cada uno, etc. Puedes irte a nivel pantalla o página o el nivel de detalle que mejor se adapte al caso. Haces una hoja de cálculo donde vas desglosando todo, por ejemplo:

Usuarios
Alta
Baja
Cambio
Búsquedas
Pendientes
Alta
Asignación
Modificación
Consulta

Usuarios y Pendientes son módulos; Alta/Baja/Cambio/Búsquedas son las partes que conforman el módulo de Usuarios. Sabes que realmente vas a terminar haciendo un DAO para Usuarios, un objeto de entidad, etc pero si realizas el desglose de manera funcional puedes acomodar esos tiempos aquí. Pero al cliente final le dices solamente que hay un módulo de usuarios, en el cual van a poder registrar usuarios nuevos, buscar usuarios existentes, eliminar usuarios que ya no deben entrar al sistema, bloquearlos, editar sus datos, etc y que ese módulo te va a tomar X horas realizar (pero ese X lo calculaste de calcular cuánto te va a tomar realizar cada tarea de ese módulo, desde hacer la clase Usuario y su DAO hasta la página de alta, la página para borrar un usuario, buscar usuarios por nombre o fecha de alta etc).

Por lo tanto la instalación y configuración de la base de datos son una tarea (o dos) que debes cotizar e indicarle al cliente el tiempo que te van a tomar y el costo de dichas tareas.

En cuanto a los documentos, no tengo formatos que te pueda mostrar.

Y con milestones me refiero a los puntos en el proyecto en que llegas a poder mostrar algo. Por ejemplo, si ya tienes terminado el diseño de toda la base de datos con integridad referencial, normalización etc tal vez para ti es un milestone porque ya puedes empezar a diseñar y programar algunos módulos, pero para el cliente no (a menos que sepa leer un diagrama entidad-relación). En el contexto de mi comentario original, un milestone es un marcador de que ya le puedes mostrar en ese momento al cliente algo más tangible; por ejemplo puedes terminar un módulo que por sí mismo no sirve de mucho pero una vez que tienes avance parcial en otro módulo ya lo puedes mostrar; ahí haces una junta de avance (y eso está marcado como milestone en tu Gantt).

IzPack, crea wizard

Existe un generador de instalaciones que se llama IzPack basado en java, es distribuido bajo la licencia Apache License, Version 2.0.
Para hacer un instalador simplemente tienes que crear un xml para que IzPack lo lea y genere un JAR como instalador. Espero te sirva

Suerte!!!

Imagen de gabo

Para crear exes

En lo personal he usado:

  • JSmoth - Esta algo abandonado el proyecto, cuando lo utilice fallaba de vez en cuando
  • Launch4j - Me resulto muy bueno para wrappear JAR's y para crear splash screen
  • NativeJ - No lo he usado pero pues parece buena opción

SUGERENCIA

PUEDES USAR BITROCK, ES UN CREADOR DE INSTALADORES, CON UN ASISTENTE, HASTA TE CREA UN ACCESO DIRECTO, LA VENTAJA ES PUEDES CREAR UN SCRIPT Y EL ACCESO DIRECTO SE ENCARGA DE EJECUTAR EL SCRIPT, EL SCRIPT TE PUEDE SERVIR PARA ANADIR RECURSOS COMO LIBRERIAS (DLL) SI ES QUE NECESITARAS ALGUNA, EN CUANTO A LA BASE DE DATOS PUEDES USAR HSQLDB O DERBY, NO TE OLVIDAS DE CREAR EL SCRIPT QUE SE ENCARGARA DE EJECUTAR TODAS LAS SENTENCIAS PARA LA CREACION DE LA BASE DE DATOS, TABLAS RESCTRICCIONES, ETC
PUEDES INVESTIGAR MAS DE BITROCK EN GOOGLE, O IR A SU SITIO OFICIAL, POR AHORA NO RECUERDO LA PAGINA, PERO CHECALO EN GOOGLE
SALUDOS

Imagen de paranoid_android

Los entregables podrian ser:

1. Archivo Empaquetado (jar, war, ear)
2. Manual de usuario
3. Manual de instalación (Incluiria instrucciones técnicas y prerequisitos ej: variable de ambiente CLASSPATH, JDK 1.6, etc)
4. Código fuente - (Si se vendió un servicio y no un paquete)
5. Script de base de datos, carga de tablas de configuración - (Si se vendió un servicio y no un paquete)
6. Licencias, contrato, garantía
7. Instalación primera vez y carga inicial (Depende el proyecto y el cliente, pero es común que los clientes lo den por hecho)

No olvidar apartados agregar datos de contacto y soporte técnico por si el cliente decide contratar otro servicio