5) SMC (State Machine Compiler), un generatore di codice per realizzare macchine a stati finiti (realizzate secondo il pattern State) in pochi minuti. Consuma un linguaggio di markup proprietario in cui si elencano gli stati, le transizioni, le azioni da fare prima, dopo e durante l’ingresso ad ogni stato. E’ stato utilizzato in GestioneSinistri2007 e nel nuovo PlasmaFrost.
6) PostSharp, un framework (composto da una class library e un addin per Visual Studio) per lo sviluppo dei componenti dedicati all’AOP (Aspect Oriented Programming). In altri termini, con questo tool (ora Open Source, ma frutto di molti anni di sviluppo) potrete definire degli attributi (con cui marcare classi, metodi o interi assembly), detti “aspects” (in quanto trasversali a tutta l’applicazione, come ad es. la tematica della sicurezza o della gestione delle eccezioni, o il logging, ecc.) che in fase di compilazione permetteranno a PostSharp di “iniettare” della logica custom che modifichi il comportamento del metodo o della classe o dell’assembly cui è applicato. Un esempio per tutti è quello dell”instrumenting” di un’applicazione per generare un log utile ad una analisi post-mortem a seguito di un bug riscontrato solo dal cliente: non so quali metodi “decorare” e quindi o azzardo o me li passo tutti; aggiungo codice sempre uguale ma non abbastanza generico, come quello per loggare i valori dei parametri in ingresso e dei valori di ritorno di ciascun metodo (a meno di voler usare la reflection); dopo aver deciso che nel logging voglio aggiungere qualcosa mi affido a qualche avventuroso “trova e sostituisci”, ecc. ecc.
7) PLINQO, un insieme di template per codesmith che generano codice Linq2Sql (dbml, classi entità, datacontext e varie altre amenità) molto più completo e utile di quello generato dal tool built-in di Visual Studio. Ad es. è possibile così gestire la sincronizzazione di entità disconnesse o realizzare relazioni molti-a-molti, tra le altre cose
8) SqlCe, un database simile a SqlLite ma compatibile al 100% con il T-SQL di SQL Server, che lavora “in-process” con il proprio client e può essere deployato insieme alla propria applicazione (è rappresentato da uno sparuto numero di dll). Il database è rappresentato da un file e può essere utilizzato dall’omonimo (e omologo) DB su sistema operativo Windows CE. Adattissimo per applicazioni desktop monoutente e/o per data layer molto semplici e/o per hardware poco carrozzati. Noi lo utilizziamo sul progetto PlasmaFrost insieme a PLINQO e Linq2sql.
9) PEX, uno spaventoso framework corredato di add-in per Visual Studio che non mancherà di impressionare chi utilizza lo Unit Testing come pratica per aumentare la qualità e la robustezza del proprio codice. In due parole, PEX estende il concetto di Unit Test alla sua forma “parametrica”, in cui un certo test viene eseguito non in una sola forma, ma viene sottoposto a differenti “condizioni” di esercizio, rappresentate da altrettante combinazioni dei parametri del test. Certo è che però che se dovessimo testare un metodo che prende una lista di string e due int in ingresso non riusciremmo a provare tutte le combinazioni neanche se avessimo a disposizione 1000 anni di tempo. Non senza PEX, per lo meno. PEX infatti effettua un’analisi “white-box” per capire qual’è il set minimo di parametri da utilizzare per mettere alla prova un certo metodo ed effettua il test con il set di valori individuati. Nel caso di un metodo di media complessità, con meno di 100 esecuzioni PEX “capisce” se esistono vulnerabilità ed eventualmente suggerisce una soluzione. PEX si porta dietro inoltre un generatore di Stubs pe il Mocking di interfacce e classi astratte.
10) FileHelper: sapere che esisteva ci sarebbe stato utile in più di un’occasione…
11) Watin e Selenium, per il test automatico delle applicazioni web. Belli e utili. A mio avviso, contando un risparmio di 2 minuti a sessione di debug per poter arrivare navigando a mano fino al punto in cui l’applicazione non funziona a dovere, il test automatico può far risparmiare il 50% del tempo.
12) Coolite: non ne so niente, ma mi piacerebbe vederlo in azione…