2009-02-02 11 views
7

Actualmente estoy trabajando en un proyecto con el que necesito programar una aplicación de prueba de concepto. He escrito aplicaciones PoC antes, pero que sólo han sido muy pequeña y realmente no he tenido un montón de capas en las que la aplicación que estoy escribiendo ahora tiene una capa:¿La mejor manera de escribir una aplicación de prueba de concepto (PoC)?

  • Formulario - habla con capa de datos.
  • Capa de datos: habla con la capa de Base de datos e Interoperabilidad.
  • Capa de interoperabilidad: habla con un objeto COM.
  • El objeto COM

¿Cuál sería la mejor manera de escribir un programa para demostrar que puedo ir de A a B y el proceso que se necesita, sin tener que invertir mucho tiempo en escribir el PoC.

Ya tengo la idea en mi cabeza de cómo debería ir todo junto, pero estoy teniendo problemas para mostrar a mis compañeros lo que quiero decir.

¿Alguien puede recomendar algún consejo o trucos al codificar PoCs? ¿O habría una mejor manera de explicar lo que quiero decir en lugar de tener que escribir el código?

+0

Con un teclado – Pyrolistical

Respuesta

8

Estoy de acuerdo con otras respuestas sobre cómo obtener un prototipo.Una forma de asegurarse de que su prototipo permanezca como tal es utilizar un lenguaje o una cadena de herramientas que definitivamente no se utilizarán en el producto final, forzándolo a reescribirse como calidad de producción. Algunas ideas que he usado:

  • construir un cliente de pre-guión red utilizando scripts de shell (netcat y una gran cantidad de bash)
  • Escribir un servidor en Python, Ruby, o en otro idioma RAD está familiarizado con
  • Utilice una tecnología que sea más simple que su tecnología de producción (comuníquese mediante archivos estáticos en lugar de TCP, o use un mecanismo RPC muy simple en lugar de un producto de middleware)
  • Utilice software con licencias incompatibles, para que el producto no pueda lanzado (GPL es bueno para esto, para cualquier cosa que realmente se distribuya).
  • Escribir un formulario web como una página HTML estático (sin estilo ni nada, feo como pecado)
  • Si es posible reemplazar cualquiera de las interacciones a distancia (base de datos, red) con interacción entre los objetos locales, con handwaving decir "realmente estos dos pasos ocurriría por separado "
+0

+1 por: utilice un lenguaje o una cadena de herramientas que definitivamente no se usarán en el producto final – Nifle

3

En mi experiencia, la mejor manera de hacer que esto se mueva rápidamente es codificar todo lo más rápido posible en una capa (o la menos posible), realmente desagradable y desgarradora. Luego, una vez que su código-barf esté funcionando, comience con una de las capas en su lista y sepárelas. Repita hasta que tenga las capas que desea.

Esto también tiene la ventaja adicional de poder extraer un bit específico y pedirle a sus colegas que pretendan que está separado. Si pueden hacer eso, no tienes que pasar el tiempo realmente haciéndolo.

+0

"muy desagradable y desgarrador" +1 Me encanta. –

+0

Aunque estoy de acuerdo contigo, más rápido llegas a la interfaz de usuario y realmente la usas, los errores más rápidos serán resueltos. Sin embargo ... presentaste dicho PoC al gerente ... Gerente sais ... esto es genial ... al día siguiente ... el gerente te dice: "Hablé con el cliente A y él lo compró, tienes 1 semana para instalarlo" – Newtopian

+0

Ahora bien, PoC se convierte en el producto real y usted acaba de saber que pasará los próximos 10 años bañándose en su propia Barf – Newtopian

2

Como una prueba de concepto, tomaría cada bit individualmente y escribiría envoltorios falsos para el resto. Uno de los peligros de hacer prototipos y pruebas de concepto es que si están lo suficientemente cerca como para funcionar, tienden a terminar como un producto final.

+0

+1 Estoy de acuerdo contigo Josh, PoC a menudo tienden a cruzar el puente y estar cerca del producto final. –

1

Puede que tome un poco más de tiempo configurarlo inicialmente, pero si puede usar un framework de inyección de dependencia/IoC inmediatamente, será mucho más fácil intercambiar varias implementaciones de cosas. Spring/Spring.NET me ha ayudado inmensamente.

1

Me parece que el dibujo de imágenes y diagramas siempre me ayuda a transmitir mi punto. También me ayuda a pensar las cosas por mí mismo cuando tengo problemas.

Es posible que pueda darles a sus compañeros una mejor comprensión de lo que está hablando simplemente mostrándoles algunos dibujos de lo que tiene en mente.

2

Para crear prototipos de aplicaciones de prueba de concepto, a veces puede ser útil utilizar lenguajes de programación que se adapten bien al desarrollo rápido de aplicaciones.

Python es un buen ejemplo. Tiene un marco enorme para aprovechar y crear las diversas capas de abstracción que mencionó en su publicación, manteniendo al mismo tiempo la prueba del concepto del tamaño del código de la aplicación.

Las aplicaciones de trabajo hablan más que las palabras, por lo que si puede preparar un prototipo rápido para que su equipo lo vea y juegue con él, ayudará a que las secadoras caigan en su lugar.

2

Escriba tanto como sea posible en un marco de prueba de unidad en un lenguaje de alta productividad como Python.

La prueba de la unidad de Python usa la reflexión para deducir que las cosas son pruebas y capta las asesoramientos normales. En resumidas cuentas, requiere muy poco esfuerzo para comenzar: he usado Python de esta manera para resolver los protocolos de red y también para envolver las transformaciones XSLT de línea de comando usando los jars sajones.

Al jugar con los fragmentos de manera controlada, evitará que su aplicación PoC se enrede demasiado y establecerá las bases para las pruebas en la implementación futura.

Incluso si está comprometido con un idioma particular para la aplicación principal, considere algo más ligero para cualquier ayudante, como servidores simples que prueban un protocolo de red.

1

Una vez hice un proyecto similar usando Delphi 7 y MIDAS. Implementé la capa Interop (AppServer en proceso en mi caso) como archivos DLL que permiten al proyecto acceder a varias fuentes de datos (por ejemplo, SQL, Access, Excel y objetos COM, etc.).

Cuestiones relacionadas