Qual é a diferença entre um protótipo e uma solução em nível de produção?


10

Esta pergunta é apenas para aprendizado e aprimoramento do meu entendimento técnico. Sei que não há uma solução perfeita e essa pergunta é possível, sem fim, lista de soluções, mas acho que é muito importante para todo arquiteto entender a diferença entre demo e um projeto ao vivo.

Eu criei muitas soluções de demonstração em .Net no passado. Agora, fui designado para arquitetar e implementar uma solução da web em nível de produção, então eu queria perguntar - em um nível muito alto, o que é necessário para converter uma demonstração em uma solução em nível de produção. Pelo meu entendimento, isso exigirá (além da implementação funcional dos requisitos dos clientes):

  1. Unidade de teste de todos os métodos
  2. Garantindo ~ 100% de cobertura do código
  3. Registrando todas as exceções e possíveis cortes de pontos - possível com o AOP
  4. Usando padrão de design de interface, injeção de dependência, possivelmente usando uma estrutura, por exemplo, spring.net
  5. Usando contadores e criadores de perfil de desempenho para instrumentação
  6. Aplicação de segurança apropriada - ou seja, autenticação do Windows (se for o que for exigido pelo cliente).
  7. Gerenciamento de transações em todos os métodos
  8. Backup dos arquivos de aplicativos da web antes da nova implantação da solução

O quê mais?

Minha pergunta está mais relacionada ao lado técnico, em vez de funcional / documentação, caso contrário, iremos para outro caminho :-)

Obrigado.


5
A resposta cínica seria "Seu gerente vendo".
Peter Taylor

Respostas:


11

Eu acho que a diferença mais importante é que o objetivo de um protótipo é:
1. Provar que um problema pode ser resolvido de uma certa maneira OU
2. Dar ao cliente / gerência uma ideia de como o produto seria e se pareceria

considerando que o objetivo de um sistema ativo é:
1. Solucionar um determinado problema / resolver um problema.

Observe que os objetivos dos dois são completamente diferentes .
Portanto, na minha opinião, um protótipo deve ser jogado fora antes de desenvolver um sistema ativo .

Isso também ocorre porque um protótipo geralmente é um projeto 'rápido e sujo', reunido sem nenhuma das considerações que você apontou corretamente na sua pergunta (como teste, desempenho, segurança e muito mais).
Portanto, seria melhor iniciar um projeto novo e adequado do que tentar melhorar um projeto ruim.


2
+1 para obter o ponto principal: os protótipos são criados para serem jogados fora. Tentar transformar um protótipo em um release de produção pode facilmente condenar um projeto desde o início.
Péter Török

11
Eu acho que isso é possível, mas depende de como o protótipo original foi desenvolvido. De uma perspectiva comercial que pode ser uma péssima decisão a ser tomada, dependendo do esforço e da viabilidade do protótipo.
Kieren Johnstone

@Kieren, participei de um projeto em que a gerência tomou a decisão "sensata" de reutilizar um protótipo da GUI para criar o aplicativo de produção. Sofremos dessa decisão nos anos seguintes. Devido à decisão original, o aplicativo praticamente não tinha design e arquitetura, e foi muito difícil mudar isso depois.
Péter Török

11
Eu segundo @Kieren. Por que não fazer o protótipo de um encolhido & versão simplificada do aplicativo de produção prospectiva (retrospectivamente) - de que maneira você não tem que jogá-lo fora
treecoder

11
Eu trabalhei em três empresas diferentes nos últimos 10 anos, com algumas consultorias misturadas. Nesse período, não me lembro de um único protótipo que foi descartado quando o projeto foi aprovado. Em um ambiente corporativo, o protótipo quase sempre se torna a base do aplicativo de produção. Geralmente exigido pela alta gerência ou no nível executivo quando você começa a colocar estimativas em seu plano de projeto.
Toby

2

Nem todas essas coisas são necessárias, dependendo das suas necessidades, ou pode ser muito mais necessário. Se você entende o que quero dizer;) Testes de unidade e cobertura de código são coisas boas, mas dependendo de como você realiza outras partes do processo, pode não ser necessário. Alguns diriam que mais importante do que a criação de perfil de desempenho é um código bem documentado ou um manual de treinamento. Varia!

Sei que você está olhando para o lado técnico, mas espero que você entenda meu ponto, isso varia dependendo do lado não técnico. Ou pelo menos deveria.

O uso de contadores e criadores de perfil de desempenho para instrumentação .. pode ser adequado, mas pode ser um exagero maciço. Pode não ser necessário.

O que você está perdendo aqui é deixar de levar em conta o contexto, o escopo e os requisitos de negócios do projeto.

Por contexto e escopo, quero dizer - você está criando algo para ser usado internamente por uma empresa? Voltado para o cliente? Utilizado pelos usuários finais? É de fato uma versão jazzística do Bloco de Notas ou um novo RDBMS do zero? O que deve ser incluído variará enormemente (massivamente!) De acordo com o projeto que você está visualizando.

Por requisitos de negócios, não quero dizer os casos de uso do software, mas os requisitos do processo de gerenciamento / produção do projeto. Se você insistir em precisar de todas essas coisas para um projeto de produção, o custo será refletido de acordo (muito alto). Isso pode significar que está acima do orçamento, atrasado, ou nem mesmo recebe luz verde para iniciar o desenvolvimento.

Pode ser que mais importante do que ter um conjunto fixo de critérios agora seja simplesmente ter uma boa estrutura de produção / desenvolvimento, alta visibilidade e liberações regulares para que a qualidade possa ser avaliada dessa maneira. Pode ser que ninguém envolvido se importe com a cobertura do código.


2

Curiosamente, acho que os pontos 1, 2, 4 e 7 já devem ser feitos durante a concepção do seu protótipo, exceto que eu não acho que você deva testar todos os métodos em todas as classes. Teste o código crítico, não se os métodos get / set se comportam corretamente.

Dependendo do objetivo do seu aplicativo, onde a segurança é um grande problema, o ponto 6 pode ser crítico o suficiente para que você precise atingi-lo no protótipo. Dependendo do objetivo do seu aplicativo, onde o desempenho é a chave, o ponto 5 pode ser crítico ... Você entende o que quero dizer. Minha opinião é que os pontos 3, 5 e 6 podem ser necessários no protótipo se forem considerados críticos (o ponto 8 é realmente válido para aplicações de produção)

Edit: parece que minha opinião difere completamente da de sJhonny, porque insinuo que considero o protótipo a base / invólucro / esqueleto de seus desenvolvimentos futuros, portanto, para mim, o protótipo não deve ser jogado fora.


1

Além do que já foi mencionado, em um projeto de produção você precisa do seguinte (entre outros):

0-Escolha uma metodologia de implementação

1-Finalize e publique os principais requisitos (incluindo casos de uso, etc.)

2-Faça a arquitetura certa

3-Selecione as ferramentas corretas

Banco de dados de 4 projetos para desempenho

5-Produza seu design de classe e design de fluxo de trabalho

6-Determinar e implementar uma estratégia para integrar bancos de dados / fontes de dados / feeds suportados

7-Definir e implementar requisitos de segurança

8-Organize a implementação física (servidores, conectividade, licenças, etc.)

9 - Planeje os requisitos de armazenamento e determine as medidas de desempenho

10-Produza todos os artefatos e instale no ambiente de produção

11-Test

12-Forneça a solução final e implemente o feedback


1

A característica mais importante das soluções de qualidade de produção é - na minha opinião - robustez .

Independentemente do que aconteça, a solução lida com a situação de maneira sensata, notifica quem precisa saber e continua (se o erro for recuperável).


Concordo que um sistema com qualidade de produção deve ser capaz de recuperar exceções, validar dados etc. Um protótipo normalmente contém apenas as funções que você deseja explicar / mostrar.
Kwebble

0

Existem dois tipos de protótipos:

  • Aplicações rápidas e sujas de "prova de conceito" que são "limpas" e se tornam código de produção. O estágio "limpeza" tende a ser um pesadelo ou é realmente um estágio "varrer os problemas para baixo do tapete", resultando em uma enorme dívida técnica.

  • Protótipos de "Maquete" ou "wireframes". Podem ser esboços de interface do usuário em papel e lápis ou até maquetes interativas feitas em um idioma em que você pode reunir rapidamente esse tipo de coisa sem pensar muito em como ela se encaixa. Ele deve usar dados falsos, sem arquitetura real, etc. O ponto é que eles dão às partes interessadas uma idéia de como será o sistema, para que você possa refinar seus requisitos, mas eles não podem ser usados ​​como parte da sua solução final .

Eu prefiro o segundo tipo. Eles são jogados fora, porque não há realmente uma escolha.


0

Digo construí-lo como um projeto sem demonstração, mas agora você pode incluir o que aprendeu com a demonstração em seu design. A codificação inicial pode ser ruim mesmo quando você inicia a produção. Você terá que refatorar muito disso de qualquer maneira.

O verdadeiro problema para resolver é a sua contra-indicação do tempo. Quando os tomadores de decisão querem que você continue trabalhando na demonstração, eles têm a impressão de que grande parte do aplicativo está pronta, por isso não vai demorar. Ouvi outras pessoas usarem essa lógica sobre o motivo pelo qual preferem mostrar esboços aos clientes, em vez de modelos muito realistas. Preste atenção ao código de demonstração, pois ele pode ter descoberto problemas nos quais você nunca pensou e provavelmente não documentou esse processo. Agora você precisa considerá-los (simplificado demais, mas sim, o banco de dados pode não estar acessível, por exemplo).

Todos os protótipos e demonstrações não são criados iguais. O código inteiro pode ser inútil ou certas partes podem ter sido muito bem executadas. Não importa se é uma demonstração, você precisa saber a diferença. Você não jogaria apenas um aplicativo legacay e começaria do zero? Esqueça eu perguntei.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.