Como codificador de software, qual foi o melhor 'Ovo de Páscoa' que você colocou em uma aplicação e por quê?
Naquela época eu estava trabalhando como Engenheiro de Localização de Software. Temos recebido software "original" em inglês e fomos responsáveis por localizá-lo em 14 (naquela época) idiomas, incluindo tais "bizzare" como chinês, hebraico, russo ou húngaro. O processo de localização era bastante complicado, involvendo muitos passos para conseguir como extrair todos os textos, enviá-los para tradução e embalá-los de volta e trabalhar no redimensionamento e posicionamento adequado dos controles de IU para compensar os diferentes lengts de texto, shorttucts e assim...Por isso um dos testes de aceitação de IU estava passando por todas aquelas versões localizadas de cada aplicação localizada e verificar se isso é "bom". Tremendo processo manual. Especialmente se você levar em conta que estamos lançando isto para várias versões diferentes do Windows (como XP, XP SP1, XP SP2, Win2K...) ao mesmo tempo e cada uma tem que ser verificada separadamente.
[Descrição simplificada do processo]:
Para acelerar o processo, desenvolvemos internamente uma ferramenta que nos permitiu (ou equipe de teste) gravar uma "Sessão" com um software específico que foi colocado como parte do processo de teste automatizado que consistia em configurar o SO básico, depois instalar o software (normalmente feito com esse script pré-gravado), requereu correções e depois fazer a verificação real da IU.
Dados de sessão típicos continham "tudo" - assim qualquer interação com o SO que o oeprator fazia, como executar software, comandos, abrir e fechar janelas, alterar configurações. Após a sessão ser gravada o operador podia editar a lista de operações criadas e ajustar os tempos de espera ou adicionar alguns passos extras de teste.
Recording UI era apenas uma aplicação de janela (escrita em Delphi) e todo o material "under-the-hood" era escrito em C++. Eu era pessoalmente responsável pela comunicação entre as aplicações hooked (monitoradas) e a aplicação de gravação. Envolveu um monte de interceptação de filas de mensagens, interceptando ganchos do sistema, enviando aqui e ali pedaços de dados entre processos e cuidadoso gerenciamento de memória (incluindo a liberação das filas e ganchos mencionados acima) para evitar travamento, corrupção de vazamentos de memória em ambos os lados...
Quando eu tinha todas as peças funcionando e tenho feito testes intensivos com ela, eu acabei de ter esse momento. Eu sei um pouco sobre como o MS Minesweeper funcionava internamente...
Por isso, se alguém, durante a gravação, começou aquele jogo e clicou em qualquer lugar do campo (o jogo não tinha controles "reais" como as aplicações têm, apenas tela e menu) o passo especial do script foi criado - "Play Minsweeper". Em vez do habitual "Left-Click at 342.2 x 343.4". Agora, quando esse script foi jogado de volta, o corredor realmente jogou o jogo. Qualquer que seja o tamanho do campo minado que foi usado. Sempre a ganhar. E a ganhar muito rápido. E jogado de forma muito convincente.
Apenas alguma magia da função ReadProcessMemory() API e algum voodoo de classificação extra ;-)
Ouvi dizer, que durante a apresentação para a gerência superior, este ovo de páscoa com menos de 3 horas de trabalho foi um verdadeiro ponto de venda para demonstrar o poder da nossa ferramenta. Não tanto quanto a parte mais simples da mesma.