¿Hay alguna razón para no aceptar un software que se pueda entregar como máquina virtual?

40

Esta es una pregunta sobre logística, no una pregunta técnica.

Mi empresa ha externalizado algunos trabajos de software integrado. Específicamente, le hemos pagado a un contratista para que desarrolle un sistema integrado para nosotros, ya que no tenemos el conocimiento interno adecuado para hacerlo nosotros mismos (solo tenemos desarrolladores de aplicaciones de escritorio).

Entonces, los contratistas han terminado el software y han preguntado si pueden entregárnoslo en una máquina virtual. La VM es una máquina con Windows 8 que contiene el IDE CodeWarrior preconfigurado con el código fuente como un proyecto CodeWarrior. La idea es que esto nos permitirá realizar cambios de código dentro de la VM que ya está configurada para un mayor desarrollo de este proyecto.

¿Hay algún inconveniente en hacer esto en lugar de que nos guíen a través de cómo configurar nuestras propias máquinas de desarrollo para realizar cambios de código en el proyecto? El único problema que puedo prever es que la VM se ejecuta lentamente y que tarda mucho en reconstruir el proyecto cuando hacemos cambios en el código. Pero, por otro lado, me gusta la idea de obtener un entorno de desarrollo de sistema integrado preconfigurado para no tener que agregar otro IDE en mi máquina de desarrollo de aplicaciones de escritorio.

Realmente no puedo pensar en una buena razón por la que no aceptar una entrega de VM, pero solo quería ejecutarla en esta comunidad en caso de que haya algo que me falta.

CFL_Jeff
fuente
24
Me viene a la mente la licencia del software de Windows en la VM.
Robert Harvey
66
@RobertHarvey Una versión completa de Windows incluye derechos de licencia para dos máquinas virtuales. Y si tiene una licencia para Windows Datacenter, puede ejecutar tantas máquinas virtuales como pueda admitir ese servidor. Consulte el sitio web de licencias de virtualización para obtener más información.
Michael Brown
19
Esa es una forma de evitar el "Funciona en mi máquina". problema.
MichaelHouse
2
Sospecho que el código tiene errores, pero funciona en una sola máquina. Los desarrolladores no saben lo que están haciendo y no pueden recrear la configuración que lo hace funcionar, por lo que simplemente crearon una imagen de disco y la colocaron en una máquina virtual.
MGOwen
¿Alguna licencia que tenga cubriría las máquinas virtuales que le haya dado una parte externa (posiblemente sin los derechos para repartir máquinas virtuales de Windows)?
Burhan Ali

Respuestas:

66

El problema que veo es que el conocimiento de la configuración y la configuración de la máquina virtual no es interno, y si la configuración no es trivial, dependerá de la otra compañía cuando el software deba configurarse para diferentes versiones de el sistema operativo / bibliotecas / hardware / lo que sea. Aceptar la VM está bien para comenzar a funcionar más rápido, pero insisto en obtener una guía sobre cómo configurar su propio sistema para el mantenimiento futuro.

FrustratedWithFormsDesigner
fuente
9
+1, la parte aterradora es el problema de la "imagen dorada" que podrías tener en seis años.
Wyatt Barnett
8
Si el contratista también puede proporcionar una guía de configuración (que debe probarse), no tendría ningún problema con esto.
Jamie
2
@Jamie: Pero si prueba la guía de configuración, ya no hay necesidad de la VM,
mattnz
10
El término es procedimientos de "arranque en frío", lo que significa que si comenzó desde una máquina en frío, ¿qué tiene que hacer para obtener una imagen en ejecución? También me molesta el hecho de que pueden haber hecho algún cambio en la configuración, instalar software que no estaba documentado o incluso haber incluido una puerta trasera. Me gustaría saber todo lo que hay en esa máquina.
ipaul
Estoy de acuerdo con esta respuesta también. Está bien para una demostración de lo que se hizo, pero si estuviera a punto de aceptar este producto, solicitaría un script de documento / shell que describa / haga la configuración del entorno.
Tsvetomir Dimitrov
36

No veo un inconveniente masivo con él, pero diría que aceptar una VM con el código fuente debería implicar la misma paranoia que aceptar un envío de una máquina con el software y el entorno de desarrollo instalados, así que haga Asegúrese de que no haya nada malo instalado en la VM antes de activarlo en un entorno que tenga acceso a su red interna.

Si / cuando tiene la VM en funcionamiento, debería poder plegar el código fuente en sus repositorios de código normales, como lo habría hecho (probablemente) con solo un archivo de código fuente entregado.

Vatine
fuente
11
No es el único +1 que he dado a las respuestas a esta pregunta, sino la única respuesta que menciona llevar el código al control de versiones interno. Yo espero que la máquina virtual incluye un repositorio también, pero yo no apostaría por ello, y puede ser que sólo tienen la versión de lanzamiento del código.
Mike Sherrill 'Cat Recall'
18

Me preocuparía que haya algo configurado en la máquina que no esté documentado, que sea difícil de reproducir o que no sea aceptable en su configuración estándar.

Ymmv, pero realmente no considero el desarrollo realizado hasta que se pueda demostrar que el proyecto se basa en las máquinas de desarrollo estándar y se implementa en los servidores / clientes básicos.

Cuenta
fuente
1
+1 en asegurarse de que la VM sea solo una característica conveniente De lo contrario, podría terminar con algo que se basa solo en esa VM porque depende de un compilador parcheado indocumentado o una versión de enlazador o algo igualmente horrible.
ptyx
10

En algunos de mis proyectos, he tenido que luchar mucho para que el software se entregue de esta manera. Es un excelente formato.

Asegúrese:

  1. Obtenga el código fuente de cada versión que obtenga del contratista y combínelo en su propio sistema de control de fuente
  2. Obtenga documentación sobre la configuración del entorno de la VM y puede reproducirla internamente. Agregue la documentación a su control de origen también

Beneficios adicionales:

  1. Si archiva los lanzamientos en formato VM (guarde el .vhd o algo así) es mucho más fácil ponerlos en funcionamiento varios años más adelante, incluso si el equipo original está fragmentado o desaparecido.
  2. Es mucho más fácil ejecutar diferentes versiones una al lado de la otra.
  3. Con alguna integración de VMWare (también podría ser posible con HyperV), puede integrarlos en una compilación de CI automáticamente.
  4. Ahorra tiempo al desarrollador (al principio), porque hay poca o ninguna configuración del entorno.

Yo diría que lo haga.

Zachary Yates
fuente
Hmm Buenos puntos.
MGOwen
1
El tiempo de configuración del entorno es barato en comparación con el rendimiento lento en el tiempo. Tenemos una máquina virtual como esta en la que producimos versiones de lanzamiento, pero para el uso diario, el método de la máquina virtual es demasiado lento y solo puede usar una pantalla (en la mayoría de los casos). Es más como la muerte por 1000 cortes frente a una buena decapitación limpia.
Boatcoder
@ Mark0978 Creo que el n. ° 4 es una situación de YMMV, nos llevó tres semanas realizar ingeniería inversa en una configuración de entorno a partir de la documentación, porque ya no teníamos acceso a la configuración original del servidor (IIS 6+ un montón de bibliotecas de terceros / controladores http) . Mi punto es que tener un ejemplo de trabajo es útil. La mayoría de las críticas que he escuchado generalmente se deben a que el host VM no es lo suficientemente bueno. Jaja- 'buena decapitación limpia'.
Zachary Yates
1
De hecho, estaba pensando en ello como una penalización del entorno de desarrollo (que podría no ser lo que se pedía), ralentizar al desarrollador todo el tiempo simplemente no vale la pena. Todos nuestros servidores de producción se ejecutan en máquinas virtuales en una instalación de alojamiento, pero todos son servidores no gráficos.
Boatcoder
1
@ Mark0978 Me gusta la forma en que ese tipo escribe. Supongo que no he dejado claro mi punto con el # 4. No estoy abogando por trabajar desde una máquina virtual lenta. Cuando tenga un día o dos de trabajo por hacer, y le lleve tres semanas configurar el entorno, simplemente use el vm. Tienes que ser consciente de toda la situación.
Zachary Yates
6

Ese es realmente el tipo de cosas que deberían haberse resuelto en el contrato original. Puede que ya estén yendo más allá. No esperaría recibir instrucciones de configuración sin pagar más, porque requiere más trabajo de su parte.

He estado en una situación similar a la tuya antes. Nuestro entorno de desarrollo es Windows / Cygwin y tuvimos una visita del proveedor durante una semana para escribir un código de interfaz con nosotros. Utilizan principalmente Linux, por lo que nos instalamos con máquinas virtuales Linux durante la semana que estuvieron aquí. Funcionó bastante bien mientras estuvieron aquí y tuvimos pocos problemas para trasladarnos a Cygwin después de que se fueron.

Me parece que estás subestimando tus propias habilidades. Configurar un IDE no es tan difícil, incluso sin un ejemplo de trabajo para compararlo. Me preocuparía más la violación de los acuerdos de licencia de Windows y CodeWarrior. Si tiene la licencia adecuada, debería poder obtener soporte de Freescale para cualquier problema de configuración.

Karl Bielefeldt
fuente
4

Como dijo FrustratedWithFormsDesigner , debe saber cómo configurar la máquina usted mismo. Sin embargo, me gustaría agregar que potencialmente podría pedirles que proporcionen una secuencia de comandos que configure la máquina para usted, en lugar de una máquina virtual completa. Si el script está escrito lo suficientemente bien, tendrá una documentación actualizada exacta de cómo configurar la máquina (leyendo el código fuente), además el script lo hará por usted, ahorrándole tiempo cada vez que necesite un nueva máquina.

Una herramienta con la que estoy experimentando para ayudar a estandarizar / automatizar la configuración de una nueva máquina con Windows es Chocolatey .

Chocolatey NuGet es un Machine Package Manager, algo así como apt-get, pero construido con Windows en mente.

Potencialmente, puede crear sus propios paquetes de Chocolatey con bastante facilidad, luego crear un script de PowerShell que instalará y configurará prácticamente todo.

Phil
fuente
Según tengo entendido, hay una herramienta llamada Vagrant que está hecha específicamente para esta tarea.
M. Dudley
3

El entorno que se ejecuta lentamente no debería ser un problema, solo arroje memoria y CPU. La sobrecarga de la VM moderna para el trabajo de tipo escritorio como la mayoría del desarrollo de SW es ​​muy pequeña, se guarda muchas veces al no tener que hacer ninguna configuración al cambiar el hardware.

Hyde
fuente
3

Hubiera pensado que el contrato de desarrollo estipularía los entregables y las obligaciones del contratista para usted.

Como mínimo, solicitaría un recorrido y documentación sobre cómo funciona la configuración y qué es vital para que pueda recrear el proyecto, construirlo e implementarlo usted mismo.

En términos de tener algo listo para usar, creo que la VM es perfectamente aceptable.

Sin embargo, definitivamente estaría presionando para obtener documentación. Dudaría sin él porque, a menos que tenga un alto nivel de comprensión de cómo funciona, podría estar en el futuro, especialmente si necesita apoyar la aplicación usted mismo.

Sam
fuente
Desafortunadamente, no estaba en esta compañía cuando se hizo el contrato. No tengo acceso a él porque no soy miembro de la administración, por lo que no estoy seguro de lo que estipula.
CFL_Jeff
2

Incluso para los sistemas integrados desarrollados internamente es importante tener un documento que describa cómo configurar el entorno de compilación. También debe archivar todos los archivos binarios / instalar herramientas y las bibliotecas necesarias para configurar el entorno de compilación.

Keith Nicholas
fuente
1

No aceptaría VM como entregable de código porque dificulta la realización de actualizaciones. Tienes que tener esa VM como una imagen dorada para hacer el trabajo de desarrollo. Eso hace que sea más difícil hacer modificaciones. Un desarrollador tiene que formatear u obtener una nueva máquina, tiene que instalar una VM y extraer la VM.

Cuando realiza ediciones, debe confirmar una nueva "copia dorada" de la VM. ¿Por qué querrías administrar un gran archivo binario como ese en el control de código fuente? No es posible diferir, y en mi experiencia, intentar controlar la fuente una copia dorada de cualquier cosa binaria no termina bien. A menos que pueda mantener un control estricto sobre quién edita la copia dorada, terminará con cosas indocumentadas que nadie sabe.

Si un desarrollador quisiera entregarme software de esa forma, encontraría un desarrollador diferente. Esto me dice que no son lo suficientemente profesionales como para escribir sus dependencias, o al menos documentarlas.

Yo también los tendría:

  1. Cree un archivo de texto que se verifica en el control de origen con el código. Enumera todas las dependencias que necesita para poner en marcha el proyecto, que no forman parte del repositorio de control de origen (por ejemplo, CodeWarrior, cualquier herramienta de línea de comandos u otras aplicaciones externas de las que dependa).

  2. Un script para instalar las dependencias. Dado que está en Windows, no debería ser demasiado difícil crear un script Chocolatey para automatizar la configuración del entorno de desarrollo. Cualquier dependencia que tenga que aún no sean paquetes de chocolate, puede hacerla. Por ejemplo, puede instalar herramientas comerciales pesadas como Visual Studio y SQL Server a través de Chocolatey. Esos paquetes instalan las versiones de prueba, que tienen todas las funciones y se pueden desbloquear ingresando una clave de licencia. Por lo tanto, es posible que se pueda hacer lo mismo con CodeWarrior y cualquier otra dependencia que tenga para su entorno de desarrollo.

Tal vez su desarrollador sea lo suficientemente bueno como para que aún quiera trabajar con él / ella, pero no es bueno en estas cosas de automatización. Eso también está bien, si ese fuera el caso, yo haría la parte de automatización yo mismo, trabajando con él / ella para identificar las dependencias y hacer que el script funcione, o conseguiría otro desarrollador que sea bueno en la automatización para hacerlo . Debe hacerse al inicio del proyecto. Una copia limpia y básica de una VM Win8 aún sería útil porque puede usarla para probar su script chocolatey.

Giscard Biamby
fuente
0

No creo que haya un problema con esto, he visto sistemas de administración de contenido que se instalan como máquinas virtuales, y por lo que usted dice, los contratistas le han dado la capacidad de mantener y ampliar la aplicación.

Sin embargo, como han señalado otros carteles, hay dos cosas que debería hacer. Primero, asegúrese de que cuando instale la VM, póngala en una máquina que esté separada de su red. No descargaría un EXE desconocido de Internet y lo instalaría en su máquina.

En segundo lugar, si es posible, mantenga esta copia aislada como referencia para configurar la versión interna. Digo si es posible porque no sé las presiones comerciales a las que está sometido. En última instancia, serán los departamentos / programadores de TI de su empresa los responsables de esta aplicación. Por lo tanto, cuanto más sepa, mejor.

Daniel Hollinrake
fuente