QNA > C > Come Programmatore Di Software, Qual È Stato Il Miglior 'Easter Egg' Che Hai Messo In Un'applicazione E Perché?

Come programmatore di software, qual è stato il miglior 'Easter Egg' che hai messo in un'applicazione e perché?

All'epoca lavoravo come ingegnere di localizzazione del software. Abbiamo ricevuto il software "originale" in inglese ed eravamo responsabili di localizzarlo in 14 (a quel tempo) lingue, tra cui "bizzare" come il cinese, l'ebraico, il russo o l'ungherese. Il processo di localizzazione era piuttosto complicato, con un sacco di passaggi da realizzare come l'estrazione di tutti i testi, l'invio alla traduzione e il confezionamento di ritorno e il lavoro sul ridimensionamento e posizionamento corretto dei controlli UI per compensare le diverse lunghezze del testo, i tratti brevi e così via ...

Pertanto uno dei test di accettazione UI era passare attraverso tutte quelle versioni localizzate di ogni applicazione localizzata e controllare se questo è "bene". Un processo manuale enorme. Soprattutto se si tiene conto che abbiamo rilasciato questo per diverse versioni di Windows (come XP, XP SP1, XP SP2, Win2K...) allo stesso tempo e ognuno deve essere controllato separatamente.

[Descrizione troppo semplificata del processo]:

Per velocizzare il tutto abbiamo sviluppato internamente uno strumento che ha permesso a noi (o al team di tester in realtà) di registrare una "Sessione" con un particolare software che è stato poi inserito come parte del processo di test automatizzato che consisteva nel configurare il sistema operativo di base, poi installare il software (di solito fatto con tale script preregistrato), le patch richieste e poi fare la verifica effettiva dell'interfaccia utente.

I dati della sessione tipica contenevano "tutto" - quindi ogni interazione con il sistema operativo che l'oepratore faceva, come l'esecuzione di software, comandi, apertura e chiusura di finestre, modifica delle impostazioni. Dopo che la sessione era stata registrata, l'operatore poteva modificare la lista di operazioni creata e regolare i tempi di attesa o aggiungere alcuni passi di test extra.

L'interfaccia utente di registrazione era solo un'applicazione a finestre (scritta in Delphi) e tutta la roba "sotto il cofano" era scritta in C++. Ero personalmente responsabile della comunicazione tra le applicazioni agganciate (monitorate) e l'applicazione di registrazione. Comportava un sacco di intercettazioni di code di messaggi, intercettazioni di ganci di sistema, l'invio qui e avanti di pezzi di dati tra i processi e un'attenta gestione della memoria (compreso il rilascio delle suddette code e ganci) per evitare crash, corruzione di perdite di memoria su entrambe le estremità...

Quando avevo tutti i pezzi funzionanti e stavo facendo test intensivi, ho avuto questo momento "gotcha". So un po' come funzionava internamente MS Minesweeper...

Così, se qualcuno, durante la registrazione, avviava quel gioco e cliccava in qualsiasi punto del campo (il gioco non aveva controlli "reali" come hanno le applicazioni, solo tela e menu) veniva creato un passo speciale di script - "Play Minsweeper". Invece del solito "Clic sinistro a 342,2 x 343,4". Ora, quando tale script veniva riprodotto il corridore giocava effettivamente il gioco. Qualunque fosse la dimensione del campo minato veniva utilizzato. Vincendo sempre. E vincendo molto velocemente. E giocato in modo molto convincente.

Solo un po' di magia della funzione API ReadProcessMemory() e qualche altro voodoo di ordinamento ;-)

Ho sentito che durante la presentazione alla direzione superiore, questo easter-egg di meno di 3 ore di lavoro era un punto di vendita effettivo per dimostrare la potenza del nostro strumento. Non di meno la parte più semplice di esso.

Di Monjan

Quale dovrebbe essere l'abbreviazione di milione, M o MM? :: Cos'è il bloatware e quali telefoni ne sono privi?
Link utili