Quanto tempo e esforço deve um gasto projeto sobre compatibilidade com versões anteriores? [fechadas]

StackOverflow https://stackoverflow.com/questions/527499

Pergunta

Tendo em conta que todo projeto de software só tem tantas programador horas dedicadas a ele, o quanto você gastaria em certificando-se o produto é compatível com as versões anteriores? Na verdade, existem vários pontos a considerar:

  • Será que a idade do software afetar sua decisão? você vai investir menos tempo em compatibilidade com versões anteriores quando o programa é mais recente?
  • A decisão baseada exclusivamente no número de clientes com cópias instaladas?
  • Você faz um esforço ativo para código e formatos de arquivo produzir que as mudanças apoios futuros?
  • Quando você está desenvolvendo v1.0, você tenta construído para tornar mais fácil para v2.0 para ser compatível com v1.0? (Deixando de "reservado" campos é um exemplo.)
  • Como você decide que "Não, nós não vamos apoiar mais isso" sobre os recursos?
Foi útil?

Solução

A base de clientes é fundamental para determinar se você deve ou não apoiar grande problema de compatibilidade com versões anteriores.

Basicamente, você precisa avaliar que, como quaisquer outros requisitos não-funcionais que você precisa para implementar, e você precisa especificar cuidadosamente o que está incluído em um "compatibilidade" recurso :

  • API compatibilidade . Isto significa que as versões subsequentes de uma biblioteca fornecem a mesma API que as versões anteriores fazer, então os programas escritos contra a versão anterior ainda será capaz de compilar e executar com a nova versão. Além de realmente deixar as mesmas funções ao redor, isso também implica que essas funções todos fazem a mesma coisa na versão mais recente que eles fizeram nos mais velhos
  • Application Binary Interface, ou ABI, a compatibilidade . Isto significa que a compatibilidade é preservado no nível do código objeto binário produzido quando compilar a biblioteca.
    Geralmente, há alguma sobreposição entre API e compatibilidade ABI, mas há diferenças importantes. Para manter a compatibilidade ABI, tudo que você tem a fazer é assegurar que seu programa exporta todos dos mesmos símbolos.
    Isso significa que todas as mesmas funções e objetos globalmente acessíveis precisa estar lá, de modo que os programas ligados contra a versão anterior ainda será capaz de rodar com a nova versão.
    É possível manter a compatibilidade ABI enquanto quebrar a compatibilidade API . No código C, símbolos de licença nos arquivos C, mas removê-los dos cabeçalhos públicos, de modo novo código que tenta acessar os símbolos não será compilado, enquanto o código antigo que os usuários compilados com a versão anterior continuará a ser executado
  • compatibilidade de protocolo cliente-servidor . Isso significa que um cliente usando a versão do protocolo de rede fornecido nas versões mais antigas continuarão a funcionar quando confrontados com um servidor mais recente, e que os programas de cliente mais recentes vai continuar a trabalhar com um servidor mais antigo.
  • formato de dados compatibilidade . As versões mais recentes da necessidade código para ser capaz de trabalhar com arquivos de dados gravados por versões mais antigas, e vice-versa. Idealmente, você também deve ser capaz de construir alguma compatibilidade para a frente em formatos de dados. Se suas rotinas de manipulação de arquivo pode ignorar e preservar áreas não reconhecidas, em seguida, uma nova funcionalidade pode modificar formatos de dados de maneiras que não quebram as versões mais antigas. Este é um dos mais tipos críticos de compatibilidade, simplesmente porque os usuários tornam-se muito chateado quando instalar uma nova versão de um programa e de repente não pode acessar seus dados antigos.

Se você combinar os critérios anteriores (natureza da compatibilidade com versões anteriores) com a natureza da sua base de clientes, você pode decidir que:

  • Se seus clientes são internos à sua empresa, a necessidade é menor, e 2.0 pode quebrar funções importantes.

  • Se seus clientes são externos, um 2.0 ainda pode quebrar as coisas, mas você pode precisar de fornecer guia de migração

  • No extremo, se os seus clientes estão a todo mundo, como já mencionada nesta SO pergunta sobre java , você pode acabar fornecendo novas funcionalidades sem nunca depreciativo antigos! Ou mesmo preservar PROBLEMAS de seus produtos antigos , porque as aplicações do cliente depende desses erros !!


  • Será que a idade do software afetar sua decisão? você vai investir menos tempo na compatibilidade com versões anteriores quando o programa émais recente?
    Eu acredito que isso tem a ver com o que já está implantado: um programa recente terá que lidar com menos necessidades compatibilidade com versões anteriores do que um que é de cerca de 20 anos

  • .
  • A decisão baseada exclusivamente no número de clientes com cópias instaladas?
    Deve ser baseado em um caso de negócios: (por causa de todas as novas funcionalidades brilhantes que ela traz) faz sua migração - - se necessário por causa de uma falta de compatibilidade com versões anteriores é capaz de ser "vendido" de forma eficaz para seus clientes

  • Você faz um esforço ativo para código e formatos de arquivo produzir que as mudanças apoios futuros?
    Tentar prever "mudança futura" pode ser muito contra-produtivo e rapidamente fronteira para YAGNI (yagni):. Um bom conjunto de migração ferramentas podem ser muito mais eficaz

  • Quando você está desenvolvendo v1.0, você tenta construído para tornar mais fácil para v2.0 para ser compatível com v1.0? (Deixando de "reservado" campos é um exemplo.)
    Para os Interno aplicações Eu tenho trabalhado em, não. A Paralelo Run é a nossa maneira de garantir a compatibilidade com versões anteriores "funcional". Mas isso não é uma solução universal.

  • Como você decide que "Não, nós não vamos apoiar mais isso" sobre os recursos?
    Novamente, para Interno aplicações, o processo de decisão pode ser muito diferente do que para um único implantado externamente. Se um recurso não traz qualquer valor acrescentado para o negócio, uma tarefa interna "coerência" está definido para verificar com cada outra aplicação interna o custo da sua migração (ou seja, "não mais usar esse recurso"). A mesma tarefa é muito mais difícil fazer com os clientes fora da sua organização.

Outras dicas

Quanto mais o seu sistema é o dia-a-dia utilizado, mais você deve se concentrar nele.

Quanto mais o seu sistema está profundamente enraizado nos principais processos de seus clientes, mais você deve se concentrar nele.

Quanto mais o seu sistema tem concorrentes, mais você deve se concentrar nele.

Quanto mais usuários que usam versões mais antigas, mais você deve se concentrar nele.

O mais complexo e profundo buy-in existe para um cliente para seu sistema, em termos de quão grande de um impacto que seu software tem em seu negócio, mais você deve se concentrar em compatibilidade com versões anteriores.

Se você não pode ajudá-los junto para novas versões através de preços atraentes, etc., pode valer a pena considerar o risco de forçar todos para cima.

Como Vista ou Office 2007. Aqueles foram fantástico em ajudar-me a Apple.

Minha opinião sobre a compatibilidade de software:

1.) Se é um produto amplamente utilizado já por muitos clientes, então gostaria de certificar-se de que a nova versão deste produto ainda está usando o mesmo "código base" (Código que atinge funcionalidade básica do aplicativo em desenvolvimento) . Os novos recursos devem ser tidos em conta esta base de código ou construída em cima desta base de código com o mínimo de mudanças necessárias no ambiente de execução desta aplicação possível. Você não quer fazer seus usuários existentes realizar muitas mudanças em suas instalações existentes. Então, é um trade-off entre apoiar uma nova funcionalidade e reformulação no processo de configuração e uso existente para o cliente.

2.) Em um novo produto, Se possível identificar todos os recursos possíveis de que o direito aplicação no início mesmo antes v1.0 está fora. Identificar que apresenta u vai navio em v1.0. e quais seriam mantidos em versões posteriores. Sempre que possível manter esses "tempo depois apresenta" em mente durante a execução do projeto, código, finalizando a saída do / da aplicação para acomodar recursos em versões futuras. por exemplo. Deixar elementos adicionais / campos de bits em suas estruturas de dados.

-AD.

Um monte. Se você não quer irritar a cada um de seus clientes fiéis!

Minha experiência é com sistemas complexos shrink wrap com relativamente poucos (100 - 5000). Usuários
Comercialização tem muitas vezes um tem que ter atitude em compatibilidade com versões anteriores, sem uma apreciação completa dos custos do ciclo de vida. Por exemplo, as economias para manter erros em seu sistema para a base de usuários atual pode facilmente ser ofuscado pelos custos de suporte para novos usuários durante a vida útil do sistema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top