Pessoalmente, acredito que se pode obter muitos dos benefícios do TDD (sem realmente aderir ao TDD):
- Escreva o código do chamador e o chamado na mesma hora (definitivamente não mais de 24 horas).
- E use isso para influenciar o design da interface (objetos, chamadas de métodos e parâmetros).
- Para um componente que exige um algoritmo / código complicado, considere fortemente implementar primeiro um algoritmo mais simples, mas correto, mesmo que seja menos eficiente (ou estúpido, ou apenas funcione em uma situação mais restrita).
- Um método de teste muito simples seria executar os dois algoritmos e comparar seus resultados.
- Depois que um bug foi descoberto (por qualquer meio) em uma parte do código, essa parte do código merece ser testada com muito mais agressividade. Isso significa fazer testes mais sofisticados do que o TDD exigiria. (com base no raciocínio de que ocorrem erros nos clusters )
O TDD parece exigir que você tenha uma compreensão clara de qual função você planeja implementar ou quais requisitos você planeja satisfazer implementando o código. Em algumas situações, há simplesmente muito pouca compreensão do problema. Isso exigiria uma solução Spike . Dentro do escopo desta solução Spike, o TDD pode ser aplicado porque o problema foi reduzido a um nível gerenciável. Após a conclusão de alguns Spikes, cada um cobrindo alguns aspectos do problema original, é possível começar a trabalhar na solução completa, e a aplicação do TDD nesse ponto pode ser possível por causa do entendimento aprimorado.
Editado:
Depois de ler a página com mais cuidado,
Embora seja possível testar a maioria das funções do kernel em um driver de teste "testbed", coisas realmente "suculentas", como manipulação de interrupções, despacho de processos ou gerenciamento de memória, provavelmente não podem ser testadas por unidade. --- de http://wiki.osdev.org/Unit_Testing
Eles estão dizendo claramente que a maioria das peças é testável e que algumas peças exigem um tipo diferente de teste: teste de estresse .