Qual é a primeira referência publicada à programação test-first?

11

Estou relendo Refatoração de Martin Fowler. No capítulo 4, Construindo testes, deparei-me com a seguinte passagem.

De fato, um dos momentos mais úteis para escrever testes é antes de você começar a programar. Quando você precisar adicionar um recurso, comece escrevendo o teste. Isso não é tão atrasado quanto parece. Ao escrever o teste, você está se perguntando o que precisa ser feito para adicionar a função. Escrever o teste também se concentra na interface e não na implementação (sempre uma coisa boa). Isso também significa que você tem um ponto claro no qual termina a codificação - quando o teste funciona.

Embora eu seja um defensor do desenvolvimento orientado a testes, não me lembrava de ter sido apresentado ao conceito quando li este livro originalmente há quase cinco anos.

Segundo a Amazon.com, este livro foi publicado originalmente em 8 de julho de 1999. Essa é a primeira referência publicada à programação de teste-primeiro ou há algo ainda mais cedo?

Eric Weilnau
fonte
Não é subjetivo. Isso é relevante? Acho que não. Se você tem um bom motivo para reabrir esta pergunta, poste em meta.programmers.stackexchange.com
Maniero
@ Bigown: Não sei se entendi. Você está dizendo que encerrou esta questão por não ser subjetiva ou por não ser relativa?
Eric Weilnau 30/09/10
É claramente objetivo.
Maniero
2
Também é relacionado à programação e interessante, e embora possa haver uma resposta verdadeira, provar que não é fácil. Para onde mais ele vai? ProgrammingHistory.stackexchange?
ASHelly
4
podemos permitir perguntas objetivas aqui - preferimos perguntas subjetivas, mas assim como o Stack Overflow tem algumas perguntas SUBJETIVAS que sobrevivem, este site pode ter algumas perguntas OBJETIVAS que sobrevivem. (Eu não esperaria ver aqui nenhuma pergunta sobre "como faço para que esse código Perl funcione")?
Jeff Atwood

Respostas:

9

O desenvolvimento orientado a teste é semelhante ao design por contrato, onde você tem pré-condições, invariantes e pós-condições.

O termo foi cunhado por Bertrand Meyer em conexão com o design da linguagem de programação Eiffel e descrito pela primeira vez em vários artigos a partir de 1986 [Wikipedia]

Os métodos formais datam de pelo menos 1983 e foram utilizados para sistemas críticos de segurança, como o metrô de Paris sem motorista, usando o método B:

Na primeira e na versão mais abstrata, chamada Abstract Machine, o designer deve especificar o objetivo do design. [Wikipedia]

Essas podem ser algumas das coisas pelas quais Kent Beck "ajudou a ser pioneiro ... a redescoberta da programação de teste primeiro".

Mais ao ponto: aparentemente, o Projeto Mercury da Nasa, nos anos 1960, foi o primeiro projeto de software que utilizava o desenvolvimento orientado a testes e outras práticas ágeis. Não encontrei nenhuma documentação inicial, mas aqui está um relatório de 2003 que cita a comunicação dos membros do projeto:

O Projeto Mercury foi executado com iterações muito curtas (de meio dia), com intervalo de tempo. A equipe de desenvolvimento conduziu uma revisão técnica de todas as alterações e, curiosamente, aplicou a prática de Programação Extrema do desenvolvimento do primeiro teste, planejamento e testes de gravação antes de cada micro incremento.

O restante do relatório também é interessante, continua dizendo:

A referência mais antiga que descobrimos que focada especificamente na descrição e recomendação do desenvolvimento iterativo foi um relatório de 1968 de Brian Randell e FW Zurcher no IBM TJ Watson Research.

Além do teste automatizado, o relatório de 1968 defende a codificação e o teste paralelos, se não o teste primeiro:

g. Projeto detalhado, codificação e documentação de cada bloco de programa.
h. Projeto e documentação de métodos de teste para cada bloco de programa em paralelo com a etapa (g).

Hugo
fonte
4

Jon Bently em Programming Pearls (publicado originalmente em 1986) não menciona especificamente a programação Test-First. Porém, no capítulo "Escrevendo programas corretos", ele descreve a criação de um algoritmo, definindo primeiro as pré-condições, invariantes e pós-condições, e no próximo capítulo descreve uma estrutura de teste automatizada.

Não é exatamente o primeiro teste, mas ele definitivamente estava lançando algumas das bases.

Além disso,

Revista CIO , março de 1993, Bug Busters , de Lucie Juneau, página 84 :

Casos de teste ... podem ser desenvolvidos antes mesmo de qualquer código ser escrito. Idealmente, esses casos são baseados nos requisitos de um aplicativo ... Se os desenvolvedores receberem testes baseados em requisitos antes de começarem a escrever código, eles projetarão um produto que possa passar nesses testes ... "

AShelly
fonte
A 2ª edição foi publicada em 7 de outubro de 1999, de acordo com a Amazon.com. A 1ª edição foi publicada em 1986. Esta referência foi na 1ª edição?
Eric Weilnau 29/09/10
Eu li apenas a 2ª edição. O prefácio parece indicar que o único capítulo "Writing Correct Programs" estava na 1ª edição, o capítulo de teste automatizado é mais recente.
AShelly
3

Isso foi Kent Beck , em seu livro Extreme Programming , também publicado em 1999 .

texto alternativo


fonte
Segundo a Amazon.com, este livro foi publicado originalmente em 5 de outubro de 1999. Isso ocorre quase 3 meses após a publicação da Refatoração. Editei minha pergunta para incluir a data exata da publicação, de acordo com a Amazon.com. Não li o livro de Kent, mas assumo que ele fornece muito mais informações sobre a programação do teste primeiro.
Eric Weilnau 29/09/10
3
É interessante que a contracapa desse livro diga que Kent Beck "ajudou a abrir caminho. A redescoberta da programação do primeiro teste". De onde ele a redescobriu?
ASHelly
Interessante encontrar AShelly!
1
@AShelly: Há alguns anos, Kent Beck fez uma palestra na RailsConf. Nele, ele descreveu como criou o TDD e menciona que leu sobre isso em um artigo antigo dos anos 60.
Jörg W Mittag