• Anelli nell'io

    “Sospesi a metà tra l’inconcepibile immensità cosmica dello spazio-tempo relativistico e il guizzare elusivo e indistinto di cariche quantiche, noi esseri umani, più simili ad arcobaleni e miraggi che ad architravi o macigni, siamo imprevedibili poemi che scrivono se stessi – vaghi, metaforici, ambigui, e a volte straordinariamente belli.”
    Douglas Hofstadter
  • Caos

    La relatività eliminò l'illusione newtoniana dello spazio e tempo assoluti;
    la teoria quantistica eliminò il sogno newtoniano di un processo di misurazione controllabile;
    il caos elimina la fantasia laplaciana della prevedibilità deterministica.

    Joseph Ford - "What is Chaos, that we should be mindful of it?"
  • Developer

    Il programmatore di computer è un creatore di universi per i quali è il solo legislatore. Non c'è commediografo, regista o imperatore, per quanto potente, che abbia mai esercitato una autorità così assoluta da disporre un palcoscenico o un campo di battaglia e da comandare attori o truppe altrettanto incorruttibilmente obbedienti.
    Joseph Weizenbaum
  • Patience

    Patience is a virtue, Savannah.
    To tolerate delay.
    It implies self-control and forbearance, as opposed to wanting what we want when we want it.
    Something to think about.

    Catherine Weaver - The Sarah Connor Chronicles
  • Computer Science

    La Computer Science riguarda i computer non più di quanto l'astronomia riguarda i telescopi.

    E.W. Dijkstra
 

Qualche giorno fa UgiDotNet ha pubblicato un mio semplice intervento dal titolo “Isolare la dipendenza da DateTime.Now”.

L’articolo  vuole  essere  un  semplice  esempio  per  porre  l’attenzione  sull’importanza  di  creare,  ove necessario, un codice che sia  facilmente  testabile. Questa semplice necessità conduce all’adozione di una serie  di  provvedimenti  che  rendono  il  codice  più  flessibile,  modulare  e  aderente  a  principi  utili indipendentemente dalla tipologia di sviluppo adottata, quali SRP, KISS o SoC.

Nello specifico,  la creazione di una semplice astrazione, come in questo esempio porta numerosi vantaggi, tra i quali il disaccoppiamento del modulo dal tempo di sistema,  la semplicità richiesta per scrivere test ed eseguirli  in un ambiente congelato e  la possibilità di creare situazioni di anomalia (facendo restituire date fuori range, o in ordine inaspettato, simulando eventuali errori non facilmente riproducibili).

L’astrazione,  più  in  generale,  permette  di  isolare  facilmente  le  responsabilità  di  ciascun  componente, inducendo a pensare alle funzionalità offerte piuttosto che all’implementazione, e permette sia una facile estensione  in  uno  scenario  futuro  che,  soprattutto,  rende  possibile  creare  implementazioni  ad  hoc (solitamente via mocking framework) da utilizzare per  isolare completamente  il componente sotto test da dipendenze  incontrollabili  (DateTime.Now),  lente  (HugeDBDataAccess),    remote  (GoogleResponse)  o indisponibili (WonderfulServiceIWillWriteTomorrow).

Markino dice:

L’articolo propone alcuni scenari di testing in merito ad una possibile dipendenza da DateTime.Now. Sebbene la cosa potrebbe sembrare banale, in realtà con un esempio molto semplice l’articolo mostra chiaramente il problema della dipedenza dei test dall’ambiente in cui lo stesso è eseguito; dipendenze che inficiano i test e che ne fanno gridare l’inutilità...

L’articolo è dal mio punto di vista un’ottima presentazione per capire la filosofia con cui occorre approciare al testing e alle metodologie di testing. L’articolo mostra l’importanza di isolare le dipendenza saprattutto per rende il codice quanto più testabile.

Creare batterie di test richiede tempo, e anche il mantenimento degli stessi pensa molto sul bilancio di un progetto... quindi sebbene il testing dovrebbe essere un must, posso capire – in alcuni contesti - la scelta di non operare batteria di test approfondite, tuttavia è importante - ed è una cosa che cerco di non trascurare mai - la testabilità del  codice! Scrivere codice in primis testabile non è costoso ed è investimento per quando sceglieremo di creare test più approfonditi su tutta la linea di progetto o su un subset dello stesso.

Ringrazio sia Markino per la recensione che UgiDotNet per l’opportunità offertami.


Categorie: Software
Vuoi condividere questo post? | | Google Reader | del.icio.us | E-mail | Permalink
Comments are closed
Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.© Copyright 2012 Mauro Bellati