design - software - qué es una prueba de concepto de un producto?
¿La mejor manera de escribir una aplicación de prueba de concepto(PoC)? (8)
Actualmente estoy trabajando en un proyecto con el que necesito programar una aplicación de prueba de concepto. He escrito aplicaciones PoC antes, pero solo han sido realmente pequeñas y no han tenido muchas capas donde la aplicación que estoy escribiendo ahora tiene:
- Capa de formulario: habla con la capa de datos.
- Capa de datos: habla con la capa de Base de datos e Interoperabilidad.
- Interop Layer: habla con un objeto COM.
- El objeto COM
Cuál sería la mejor manera de escribir un programa para mostrar que puedo obtener de A a B y el proceso que se necesita, sin necesidad de invertir mucho tiempo en escribir el PoC.
Ya tengo la idea en mi cabeza sobre cómo debería ir todo junto, pero estoy teniendo problemas para mostrarles a mis compañeros lo que quiero decir.
¿Alguien puede recomendar consejos / 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?
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.
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 el beneficio adicional de poder extraer un bit específico y pedirle a tus colegas que pretendan que está separado. Si pueden hacer eso, no tienes que pasar el tiempo realmente haciéndolo.
Encuentro que dibujar dibujos y diagramas siempre me ayuda a transmitir mi punto. También me ayuda a pensar las cosas por mí mismo cuando tengo problemas.
Podrías darles a tus compañeros de equipo una mejor comprensión de lo que estás diciendo solo mostrándoles algunos dibujos de lo que tienes en mente.
Escriba tanto como sea posible en un marco de prueba de unidad en un lenguaje de alta productividad como Python.
Las pruebas unitarias de Python utilizan la reflexión para deducir que las cosas son pruebas y captan las asesorías 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 forma guiada por pruebas, evitará que su aplicación PoC se enrede demasiado y establecerá las bases para las pruebas en la implementación futura.
Incluso cuando 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.
Estoy de acuerdo con otras respuestas sobre cómo subir 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:
- Escribir un cliente de red con guiones
netcat
utilizando scripts de shell (netcat
y muchobash
) - Escriba un servidor en Python, Ruby u otro lenguaje RAD con el que esté familiarizado
- Utilice una tecnología que sea más simple que su tecnología de producción (comuníquese a través de 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 ser lanzado (la GPL es buena para esto, para cualquier cosa que realmente se distribuya).
- Escriba un formulario web como una página HTML estática (sin estilo ni nada, feo como el pecado)
- Si es posible, reemplace cualquier interacción remota (base de datos, red) con interacciones de objetos locales, con movimientos manuales para decir "realmente estos dos pasos ocurrirían por separado".
Para crear prototipos de aplicaciones de prueba de concepto, a veces puede ser útil utilizar lenguajes de programación que sean adecuados para el 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 puedes preparar un prototipo rápido para que tu equipo lo vea y juegue con él, ayudará a que los vasos caigan en su lugar.
Puede que tome un poco más de tiempo configurarlo inicialmente, pero si puede usar un marco 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.
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.).