Existem razões para não aceitar um produto entregue como uma máquina virtual?

40

Esta é uma pergunta sobre logística, não uma questão técnica.

Minha empresa terceirizou alguns trabalhos de software incorporado. Especificamente, pagamos um contratado para desenvolver um sistema incorporado para nós, pois não temos conhecimento interno suficiente para fazer isso sozinhos (temos apenas desenvolvedores de aplicativos de desktop).

Portanto, os contratados concluíram o software e perguntaram se poderiam entregá-lo em uma máquina virtual. A VM é uma máquina Windows 8 que contém o CodeWarrior IDE pré-configurado com o código-fonte como um projeto CodeWarrior. A idéia é que isso nos permita fazer alterações de código na VM que já está configurada para o desenvolvimento deste projeto.

Há alguma desvantagem em fazer isso, em vez de fazer com que eles nos orientem sobre como configurar nossas próprias máquinas de desenvolvimento para fazer alterações de código no projeto? O único problema que posso prever é a VM rodando lentamente e demorando muito tempo para reconstruir o projeto quando fazemos alterações no código. Mas, por outro lado, gosto da ideia de obter um ambiente de desenvolvimento de sistema embarcado pré-configurado para não precisar adicionar mais um IDE na minha máquina de desenvolvimento de aplicativos de desktop.

Eu realmente não consigo pensar em um bom motivo para não aceitar uma entrega de VM, mas eu só queria executá-la por essa comunidade, caso faltasse algo.

CFL_Jeff
fonte
24
O licenciamento do software Windows na VM vem à mente.
Robert Harvey
6
@RobertHarvey Uma versão completa do Windows inclui direitos de licença para duas máquinas virtuais. E se você possui uma licença para o Windows Datacenter, pode executar o número de VMs que esse servidor suportar, confira o site de licenciamento de virtualização para obter mais informações.
Michael Brown
19
Essa é uma maneira de contornar o "Funciona na minha máquina". problema.
22413 MichaelHouse
2
Suspeito que o código esteja com erros, mas funciona em apenas uma máquina. Os desenvolvedores não sabem o que estão fazendo e não podem recriar a configuração que a faz funcionar; portanto, eles criaram uma imagem de disco e a colocaram em uma VM.
MGOwen
Alguma licença que você possui cobre as VMs fornecidas por uma parte externa (possivelmente sem os direitos de distribuir as VMs do Windows)?
Burhan Ali 27/03

Respostas:

66

O problema que vejo é que o conhecimento de instalação e configuração da máquina virtual não é interno e, se a configuração não for trivial, você estará confiando na outra empresa quando o software precisar ser configurado para diferentes versões do o SO / bibliotecas / hardware / o que for. Aceitar a VM é bom para começar a funcionar mais rapidamente, mas eu insisto em saber como configurar seu próprio sistema para manutenção futura.

FrustratedWithFormsDesigner
fonte
9
+1, a parte mais assustadora é a questão da "imagem de ouro" que você pode ter em seis anos.
Wyatt Barnett
8
Se o contratado também puder fornecer um guia de configuração (que deve ser testado), eu não teria problemas com isso.
Jamie
2
@Jamie: Mas se você testar o guia de configuração, não há mais a necessidade de VM,
mattnz
10
O termo é procedimentos de "partida a frio", ou seja, se você iniciou a partir de uma máquina a frio - o que você precisa fazer para obter uma imagem em execução? Também estou incomodado com o fato de que eles podem ter feito alguma alteração na configuração, instalado software que não foi documentado ou que podem até incluir uma porta dos fundos. Eu gostaria de saber tudo o que está nessa máquina.
Ipaul
Também concordo com esta resposta. Não há problema em uma demonstração do que foi feito, mas se eu estivesse prestes a aceitar este produto, solicitaria um script de documento / shell que descreva / faça a configuração do ambiente.
Tsvetomir Dimitrov 23/03
36

Eu não vejo uma grande desvantagem com isso, mas eu diria que aceitar uma VM com o código-fonte deve implicar a mesma paranóia que aceitar uma remessa de uma máquina com o software e o ambiente de desenvolvimento instalados, portanto, faça verifique se não há nada de ruim instalado na VM antes de ativá-la em um ambiente que tenha acesso à sua rede interna.

Se / quando você tiver a VM em funcionamento, poderá dobrar o código-fonte em seus repositórios de código normais, como você (provavelmente) faria com apenas um arquivo de código-fonte entregue.

Vatine
fonte
11
Não é o único +1 que eu dei às respostas para essa pergunta, mas a única resposta que menciona trazer o código para o controle de versão interno. Eu espero que o VM inclui um repositório bem, mas eu não apostaria nele, e que poderia ter apenas a versão lançada do código.
Mike Sherrill 'Cat Recall'
18

Eu ficaria preocupado que haja algo configurado na máquina que não seja documentado, difícil de reproduzir ou não seja aceitável na sua configuração padrão.

Sim, mas eu realmente não considero o desenvolvimento feito até que o projeto possa demonstrar as máquinas de desenvolvimento padrão e implementadas nos servidores / clientes básicos.

Conta
fonte
11
+1 em garantir que a VM seja apenas um recurso de conveniência. Caso contrário, você pode acabar com algo que se baseia apenas nessa VM, porque depende de alguma versão não documentada do compilador ou vinculador corrigida ou algo igualmente horrível.
Ptyx
10

Em alguns dos meus projetos, tive que lutar muito para que o software fosse entregue dessa maneira. É um excelente formato.

Assegure-se de que você:

  1. Obtenha o código-fonte de cada versão que você recebe do contratado e mescla-o ao seu próprio sistema de controle de origem
  2. Obtenha documentação sobre a configuração do ambiente da VM e pode reproduzi-la internamente. Adicione a documentação ao seu controle de origem também

Benefícios adicionais:

  1. Se você arquivar as versões no formato VM (salve o .vhd ou algo assim), é muito mais fácil colocá-las em funcionamento vários anos depois, mesmo que a equipe original esteja fragmentada ou ausente.
  2. É muito mais fácil executar versões diferentes lado a lado.
  3. Com alguma integração do VMWare (também pode ser possível com o HyperV), você pode integrá-los automaticamente à criação de um IC.
  4. Isso economiza tempo do desenvolvedor (no início), porque há pouca ou nenhuma configuração de ambiente.

Eu diria que vá em frente.

Zachary Yates
fonte
Hmm. Bons pontos.
MGOwen
11
O tempo de configuração do ambiente é barato comparado ao desempenho lento ao longo do tempo. Temos uma VM como essa internamente em que produzimos versões, mas para o uso diário, o método da VM é muito lento e você usa apenas uma tela (na maioria dos casos). É mais como a morte por mil cortes versus uma boa decapitação limpa.
boatcoder
@ Mark0978 Acho que o nº 4 é uma situação do YMMV, levamos três semanas para fazer engenharia reversa de uma configuração de ambiente a partir da documentação, porque não tínhamos mais acesso à configuração original do servidor (IIS 6+, várias bibliotecas de terceiros / manipuladores http) . O que quero dizer é que ter um exemplo prático é útil. A maioria das críticas que ouvi é geralmente porque o host da VM não é bom o suficiente. Haha - 'boa decapitação limpa.'
Zachary Yates
11
Na verdade, eu estava pensando nisso como uma penalidade no ambiente de desenvolvimento (que pode não ser o que estava sendo pedido), atrasar o desenvolvedor o tempo todo simplesmente não vale a pena. Todos os nossos servidores de produção são executados em VMs em um recurso de hospedagem, mas todos são servidores não gráficos.
boatcoder
11
@ Mark0978 Eu gosto do jeito que esse cara escreve. Acho que não deixei claro meu argumento com o # 4. Não estou defendendo o trabalho com uma VM lenta. Quando você tem um dia ou dois de trabalho a fazer e leva três semanas para configurar o ambiente, basta usar o vm. Você tem que estar ciente de toda a situação.
Zachary Yates
6

Esse é realmente o tipo de coisa que deveria ter sido elaborada no contrato original. Eles já podem estar indo além. Eu não esperaria obter instruções de configuração sem pagar mais, porque requer mais trabalho da parte deles.

Eu já estive em uma situação semelhante à sua antes. Nosso ambiente de desenvolvimento é o Windows / Cygwin e tivemos uma visita de um fornecedor por uma semana para incluir algum código de interface conosco. Eles usam principalmente o Linux, então montamos máquinas virtuais Linux para a semana em que eles estiveram aqui. Isso funcionou muito bem enquanto eles estavam aqui e tivemos poucos problemas em migrar para Cygwin depois que eles saíram.

Parece-me que você está subestimando suas próprias habilidades. A configuração de um IDE não é tão difícil, mesmo sem um exemplo prático para compará-lo. Eu ficaria mais preocupado em violar os acordos de licenciamento do Windows e do CodeWarrior. Se você estiver devidamente licenciado, poderá obter suporte da Freescale para quaisquer problemas de configuração.

Karl Bielefeldt
fonte
4

Como FrustratedWithFormsDesigner disse , você precisa saber como configurar a máquina para si mesmo. No entanto, gostaria de acrescentar que você pode pedir que eles forneçam um script que configure a máquina para você, em vez de uma VM inteira. Se o script estiver escrito suficientemente bem, você terá a documentação exata e atualizada de como configurar a máquina (lendo o código-fonte), e o script fará isso por você, economizando seu tempo sempre que precisar de um nova máquina.

Uma ferramenta que estou experimentando para ajudar a padronizar / automatizar a configuração de uma nova máquina Windows é o Chocolatey .

O Chocolatey NuGet é um gerenciador de pacotes de máquinas, semelhante ao apt-get, mas construído com o Windows em mente.

Você pode criar seus próprios pacotes Chocolatey com bastante facilidade e criar um script do PowerShell que instalará e configurará praticamente tudo.

Phil
fonte
Pelo que entendi, há uma ferramenta chamada Vagrant, feita especificamente para esta tarefa.
M. Dudley
3

O ambiente em execução lenta não deve ser um problema, basta jogar memória e CPU nele. A sobrecarga da VM moderna para o trabalho de tipo desktop, como a maioria do desenvolvimento de SW, é muito pequena, é salva muitas vezes por não precisar fazer nenhuma configuração ao alterar o hardware.

hyde
fonte
3

Eu teria pensado que o contrato de desenvolvimento estipularia as entregas e obrigações do contratante para você.

No mínimo, eu estaria solicitando uma explicação e documentação de como a configuração funciona e o que é vital para o ponto em que você pode recriar o projeto, criar e implantar você mesmo.

Em termos de ter algo pronto, acho que a VM é perfeitamente aceitável.

Eu definitivamente estaria pressionando por documentação. Eu ficaria hesitante sem isso, porque, a menos que você tenha um alto nível de entendimento de como funciona, poderá estar acima do barril no futuro, principalmente se precisar dar suporte ao aplicativo.

Sam
fonte
Infelizmente, eu não estava nessa empresa quando o contrato foi feito. Não tenho acesso a ele porque não sou membro da gerência, por isso não tenho certeza do que estipula.
CFL_Jeff
2

Mesmo para sistemas embarcados desenvolvidos internamente, é importante ter um documento descrevendo como configurar o ambiente de construção. Você também precisa arquivar todos os binários / instalar arquivos de ferramentas e bibliotecas necessárias para configurar o ambiente de construção.

Keith Nicholas
fonte
1

Eu não aceitaria a VM como um código de entrega, pois dificulta as atualizações. Você precisa ter essa VM como uma imagem de ouro para fazer o trabalho de desenvolvimento. Isso torna mais difícil fazer mods. Um desenvolvedor precisa reformatar ou obter uma nova máquina; ele precisa instalar uma VM e puxar a VM.

Ao fazer edições, você deve confirmar uma nova "cópia dourada" da VM. Por que você deseja gerenciar um grande arquivo binário como esse no controle de origem? Não é possível diferenciar e, na minha experiência, tentar controlar a fonte de uma cópia de ouro de qualquer coisa binária não termina bem. A menos que você possa manter um controle estrito sobre quem edita a cópia de ouro, você terminará com coisas que não estão documentadas e que ninguém sabe.

Se um desenvolvedor quisesse entregar software para mim dessa forma, eu encontraria um desenvolvedor diferente. Isso me diz que eles não são profissionais o suficiente para escrever suas dependências ou, pelo menos, documentá-las.

Eu os teria também:

  1. Crie um arquivo de texto verificado no controle de origem com o código. Ele lista todas as dependências que você precisa para iniciar o projeto, que não fazem parte do repositório de controle de origem (por exemplo, CodeWarrior, quaisquer ferramentas de linha de comando ou outros aplicativos externos dos quais você depende).

  2. Um script para instalar as dependências. Como você está no Windows, não deve ser muito difícil criar um script Chocolatey para automatizar a configuração do ambiente de desenvolvimento. Quaisquer dependências que você possua que ainda não sejam pacotes de chocolate, você pode criar. Por exemplo, você pode instalar ferramentas comerciais pesadas como o Visual Studio e o SQL Server via Chocolatey. Esses pacotes instalam as versões de avaliação, com todos os recursos, e podem ser desbloqueadas digitando uma chave de licença. Portanto, é possível que o mesmo possa ser feito com o CodeWarrior e outras dependências que você possui para o seu ambiente de desenvolvimento.

Talvez o seu desenvolvedor seja realmente bom o suficiente para que você ainda queira trabalhar com ele, mas não seja bom nessas coisas de automação. Tudo bem também, se esse fosse o caso, eu faria a parte da automação, trabalhando com ele para identificar as dependências e fazer o script funcionar, ou contrataria outro desenvolvedor que seja bom em automação para fazer isso . Isso deve ser feito no início do projeto. Uma cópia limpa e básica de uma VM do Win8 ainda seria útil porque você pode usá-la para testar seu script cor de chocolate.

Giscard Biamby
fonte
0

Eu não acho que exista um problema com isso, vi sistemas de gerenciamento de conteúdo que são instalados como VMs e, pelo que você diz, os contratados deram a você a capacidade de manter e estender o aplicativo.

No entanto, como outros pôsteres observaram, há duas coisas que eu faria. Primeiro, verifique se, ao instalar a VM, coloque-a em uma máquina separada da sua rede. Você não faria o download de um EXE desconhecido da Internet e o instalaria em sua máquina.

Segundo, se possível, mantenha essa cópia isolada como referência para definir a versão interna. Digo, se possível, porque não conheço as pressões comerciais que você está enfrentando. Por fim, serão os departamentos / programadores de TI da sua empresa que serão responsáveis ​​por esse aplicativo. Então, quanto mais você souber, melhor.

Daniel Hollinrake
fonte