É viável a introdução de Test Driven Development (TDD) em um projeto maduro? [fechadas]

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

  •  01-07-2019
  •  | 
  •  

Pergunta

  • Say temos percebido um valor de TDD tarde demais. Projeto já está amadurecido, boa quantidade de clientes começaram a usá-lo.
  • Say automatizado testando o teste do sistema / principalmente funcional utilizados são e há uma boa dose de testes automatizados de GUI.
  • Say temos novos pedidos de funcionalidades e novos relatórios de erros (!). Então, boa dose de desenvolvimento continua.
  • Note que já seria bastante objeto de negócios com pouco ou nenhum teste de unidade.
  • O excesso de colaboração / relações entre eles, o que novamente é testada somente através de testes / sistema funcional de nível superior. Sem integração testar per se.
  • Big bancos de dados no lugar com abundância de tabelas, vistas, etc. Apenas para instanciar um objeto único negócio já vai boa dose de ida e volta de banco de dados.

Como podemos introduzir TDD nesta fase?

Mocking parece ser o caminho a percorrer. Mas a quantidade de escárnio que precisamos fazer aqui parece muito. Soa como as necessidades de infraestrutura elaborados a ser desenvolvido para o sistema de zombaria trabalhando para o material existente (BO, bancos de dados, etc.).

O que TDD média é uma metodologia adequada somente quando começar do zero? Estou interessado em ouvir sobre as estratégias viáveis ??para introduzir TDD em um produto já amadurecer.

Foi útil?

Solução

A criação de uma infra-estrutura de zombaria complexo provavelmente só irá esconder os problemas em seu código. Eu recomendaria que você comece com os testes de integração, com um banco de dados de teste, em torno das áreas da base de código que você pretende mudar. Depois de ter provas suficientes para garantir que você não vai quebrar nada se você fizer uma mudança, você pode começar a refatorar o código para torná-lo mais testável.

Se também Michael Feathers excelente livro Trabalho eficazmente com código legado , é uma deve ler para qualquer pensamento de introduzir TDD em uma base de código legado.

Outras dicas

Eu acho que é totalmente viável para introduzir TDD em uma aplicação existente, na verdade eu recentemente fiz isso.

É mais fácil de código nova funcionalidade de uma forma TDD e reestruturar o código existente para acomodar isso. Desta forma, você começar com uma pequena parte do seu código testado, mas os efeitos começam a se espalhar por toda a base de código.

Se você tem um erro, em seguida, escrever um teste de unidade para reproduzi-lo, refatoração do código conforme necessário (a menos que o esforço não é realmente vale a pena).

Pessoalmente, eu não acho que haja qualquer necessidade de ficar louco e tentar testes de retrofit no sistema existente como que pode ser muito tedioso, sem uma grande quantidade de benefícios.

Em resumo, começar pequeno e seu projeto se tornará mais e mais teste infectado.

Sim, pode. De sua descrição do projeto está em uma boa forma - sólida quantidade de automação de testes funcionais é um caminho a percorrer! Em alguns aspectos, é ainda mais útil do que o teste de unidade. Lembre-se que TDD! = Testes de unidade, é tudo sobre iterações curtas e critérios de aceitação sólidos.

Por favor, lembre-se que ter um projeto existente e aceita realmente facilita o teste - aplicação de trabalho é a melhor especificação de requisitos. Então você está em uma posição melhor do que alguém que só tem um pedaço de papel para trabalhar com ele.

Apenas começar a trabalhar em seus novos requisitos / correções de bugs com um TDD. Lembre-se que haverá uma sobrecarga associada à mudança da metodologia (certifique-se seus clientes estão cientes disso!) E, provavelmente, esperar uma boa dose de relutância dos membros da equipe que são usados ??para os 'bons velhos hábitos'.

Não toque as coisas velhas a menos que você precisa. Se você vai ter uma solicitação de melhoria que irá afectar o material já existente, em seguida, fator de tempo extra para fazer o set-up coisas extras.

Pessoalmente não vejo muito valor na introdução de uma infra-estrutura complexa de mock-ups - certamente há um caminho para alcançar os mesmos resultados em um modo leve, mas, obviamente, depende de suas circunstâncias

Uma ferramenta que pode ajudá-lo a testar o código legado (supondo que você não pode \ não terá o tempo para refatorar-lo, é Typemock Isolador: Typemock.com Ele permite injectar dependências em código existente sem a necessidade de extrair e interfaces de tais porque não utiliza técnicas padrão de reflexão (proxy dinâmica, etc ..), mas utiliza os APIs de perfil, em vez. Tem sido usada para aplicativos de teste que dependem de sharepoint, httpContext e outras áreas problemáticas. Eu recomendo que você dê uma olhada. (Eu trabalho como dev naquela empresa, mas é a única ferramenta que não forçá-lo a refatorar código legado existente, economizando tempo e dinheiro) Gostaria também altamente recomendado "Trabalho eficazmente com código legado" para mais técnicas.

Roy

Sim, pode. Não fazê-lo de uma só vez, mas introduzir apenas o que você precisa testar um módulo sempre que você tocá-lo.

Você também pode começar com testes de aceitação mais alto nível e trabalhar o seu caminho de lá (dê uma olhada Fitnesse para isso).

Gostaria de começar com alguns testes de integração básicos. Isso vai ficar buy-in do resto do pessoal. Em seguida, começar a separar as partes do código que têm dependências. Trabalho no sentido de utilizar injeção de dependência como ele vai fazer o seu código muito mais testável. erros tratar como uma oportunidade de escrever código testável.

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