C'è chi mi ha chiesto di cosa ho parlato nella Keynote del lancio di Visual Studio 2010 a Bucarest e quindi ho pensato di bloggarlo.
Ho parlato di come si è evoluto lo sviluppo del software in tutti questi anni, un discorso a me molto caro. Sono partito dalle foto delle scatole dei miei compilatori (C 5.1 per DOS, MASM 5.1, e numerosi altre scatole fino a quelle di VC++6.0), in cui la pratica di sviluppo era sostanzialmente priva di ciclo di vita dell'applicazione, anche grazie alla semplicità architetturale della soluzione. Poi sono passato al mismatch che esiste tra la richiesta attuale di avere software con standard qualitativi da linea di produzione industriale nonostante il mestiere dello sviluppo software sia ancora artigianale, e naturalmente ai DSL come naturale evoluzione dello sviluppo software verso l'industrializzazione.
Il passo successivo è stato di sottolineare la grossa illusione che il deploy dell'applicazione sia un traguardo mentre il ciclo di vita dello sviluppo sia una spirale infinita in cui il buon design e la corretta architettura sono fondamentali. Con una domanda retorica ho chiesto chi fosse così coraggioso di fare un upgrade su un sistema che ha una cattiva architettura, nonostante le batterie di test fossero tutti positivi. Nella vita reale non ho trovato coraggiosi ma solo incoscenti.
Questo argomento mi ha dato modo di sottolineare che il valore del sorgente è un falso mito. Il valore più alto sono la progettazione e il servizio perché gli spaghetti-code sono spazio sprecato su disco.
D'altra parte creare buone architetture è pregevole ma può anche essere non praticabile. Per poter realizzare buone architetture in tempi accettabili è necessario avere a disposizione strumenti efficienti che sono un anello fondamentale nello sviluppo del software. Strumenti come Visual Studio 2010 con la generazione del codice, i grafici delle dipendenze, l'architecture explorer, oppure TFS2010 con i nuovi gated check-in e i test automatizzati sono ciò che rendono possibile mettere in pratica le architetture software che altrimenti rimarrebbero solo buoni progetti. Un esempio di tutto ciò sono i DSL che, senza adeguati strumenti, non sono una soluzione realistica adottabile in uno scenario pratico.
Non poteva naturalmente mancare a tutto questo un diretto riferimento alla sicurezza che deve essere parte integrante del ciclo di vita dello sviluppo a partire dall'architettura. Lo strumento in questo caso è il template di TFS2010 sul Security Development Lifecycle [SDL] (che arriverà molto presto), e i tool per la creazione dei Threat Model.
A causa di problemi tecnici ho potuto mostrare solo la demo sui test. Sono partito dal nuovo Test Manager 2010 pianificando un nuovo test manuale su una applicazione web dove non si vuole che siano specificate quantità negative. Una volta inserite le istruzioni testuali per il tester, sono andato nella sezione test e ho avviato il test manuale specificando di voler registrare le "action". Il Test Manager 2010 è infatti in grado di fare hooking sul DOM di un browser (anche di Winform e WPF e a breve Silverlight) e registrare tutte le azioni eseguite dall'utente.
Il passo successivo è stato di aprire il work item associato a questa registrazione da Visual Studio e inserire dal codice una "assert" usando un tool che mi permette di scegliere la textbox da cui leggere il valore da confrontare. Lo strumento ci permette di scegliere visualmente la TextBox e generare il codice della "assert" con il valore desiderato (nel mio caso pur essendo stata inserita una quantità negativa, deve essere mostrato il valore "1" di default).
Una volta generato il codice ho fatto girare il test ... ed è fallito ;-) perché nel cart era già presente la quantità precedente (2) che non corrispondeva a uno. Grande (attesa) risata e stupore del pubblico e fine della sessione :)
Il mio feeling è stato positivo, nonostante i problemi tecnici ho cercato di essere giocoso e divertente e ho sentito più volte la platea ridere. Credo che il messaggio sia arrivato e spero che abbiano apprezzato il grande lavoro di preparazione necessario.