{"id":78,"date":"2015-09-11T11:05:48","date_gmt":"2015-09-11T09:05:48","guid":{"rendered":"http:\/\/www.3dgis.it\/?page_id=78"},"modified":"2015-10-15T17:15:20","modified_gmt":"2015-10-15T15:15:20","slug":"metodologia-di-lavoro","status":"publish","type":"page","link":"https:\/\/www.3dgis.it\/it\/metodologia-di-lavoro\/","title":{"rendered":"Metodologia di lavoro"},"content":{"rendered":"<h1>Sviluppare un software<\/h1>\n<p>Quando si costruisce una soluzione software, di qualsiasi complessit\u00e0 essa sia, si dovrebbero percorrere una serie di passi con lo scopo di individuare tutte le complessit\u00e0 e gestire tutti gli imprevisti che, volenti o nolenti, si troveranno durante lo sviluppo del progetto.<\/p>\n<p>Questo percorso \u00e8 chiamato <strong>processo di sviluppo software\u00a0<\/strong>e serve per minimizzare il numero di bug e incoerenze all&#8217;interno del prodotto finito. <br \/>Esistono diverse tipologie di processo e il metodo pi\u00f9 semplice prevede una serie di attivit\u00e0 da sviluppare una dietro l&#8217;altra, fino al termine del progetto.<\/p>\n<p>Questo metodo, noto come waterfall, consiste in cinque passi successivi, dove ogni passo consegna un deliverable alla fase successiva:<\/p>\n<ol>\n<li>\n<p align=\"left\"><strong>Analisi e stesura delle specifiche<\/strong><\/p>\n<\/li>\n<li>\n<p align=\"left\"><strong>Progettazione<\/strong><\/p>\n<\/li>\n<li>\n<p align=\"left\"><strong>Sviluppo del software<\/strong><\/p>\n<\/li>\n<li>\n<p align=\"left\"><strong>Test e avviamento del software<\/strong><\/p>\n<\/li>\n<li>\n<p align=\"left\"><strong>Manutenzione del software<\/strong><\/p>\n<\/li>\n<\/ol>\n<h1>Gli imprevisti da evitare pi\u00f9 comuni<\/h1>\n<p>La semplicit\u00e0 del metodo waterfall non \u00e8 in grado di individuare i problemi pi\u00f9 comuni e di evitarli adeguatamente:<\/p>\n<h2>Errore di analisi o di specifica del software<\/h2>\n<p>L&#8217;analisi \u00e8 frutto di comunicazione tra cliente e fornitore e di incontri con il cliente al fine di carpire le necessit\u00e0 da soddisfare con il software.<\/p>\n<p>I sistemi complessi sono, per definizione, difficili da studiare ed \u00e8 possibile che non si riesca ad interpretare la criticit\u00e0 di alcune parti del sistema, che risulteranno in seguito necessarie.<\/p>\n<p>Questi errori richiedono modifiche pi\u00f9 o meno impattanti nel software, che allungano i tempi e creano malumori tra cliente e fornitore.<\/p>\n<h2>Mancata progettazione<\/h2>\n<p>Ritenere un software semplice e quindi saltarne la progettazione \u00e8 un errore tipico di chi non ha esperienza di analisi.<\/p>\n<p>A volte, anche i sistemi pi\u00f9 semplici nascondono insidie che possono essere individuate solo con la fase di progettazione. Ad esempio potrebbe essere necessario un dato di input non presente, che per essere ottenuto richiede numerose altre componenti. O molto pi\u00f9 semplicemente, la mole di dati sulla quale effettuare una semplice operazione \u00e8 maggiore della quantit\u00e0 disponibile di memoria, costringendo ad un cambio di paradigma e quindi ad una complessit\u00e0 estremamente pi\u00f9 elevata.<\/p>\n<p>Mancata progettazione significa allungare i tempi e aumentare i costi di sviluppo.<\/p>\n<h2>Mancanza di test<\/h2>\n<p>Quando un software \u00e8 funzionalmente completo (feature complete) lo si vorrebbe vedere in produzione quanto prima, soprattutto se \u00e8 una componente importante o migliora drasticamente la versione corrente della soluzione.<\/p>\n<p>Meglio non avere fretta quando si sviluppa un nuovo software, al termine del ciclo di sviluppo dovranno essere effettuati tutti i test del caso, con dati reali e con moli di dati adeguate ed equivalenti alla produzione.<\/p>\n<p>Non testare significa individuare i bug in produzione e potenzialmente causare disastri. Ci spiace dirvelo ma no, non esistono software senza bug.<\/p>\n<h2>Cambiamento di specifiche in corso d&#8217;opera<\/h2>\n<p>Capita di accorgersi di una funzionalit\u00e0 mancante o di non essere soddisfatti da una certa funzionalit\u00e0. Cambiare idea fa parte della bellezza degli esseri umani ma reagire al cambiamento pu\u00f2 essere problematico se il software \u00e8 in avanzato stato di sviluppo.<\/p>\n<p>Cambiare le specifiche in corso d&#8217;opera, con l&#8217;approccio waterfall, risulta spesso notevolmente dannoso e aumentando tempi e costi.<\/p>\n<h1>Il processo di sviluppo software 3DGIS<\/h1>\n<p>Il dilemma \u00e8 quindi come evitare gli imprevisti pur seguendo un processo di sviluppo software?\u00a0A 3DGIS seguiamo una approccio interattivo nei confronti del cliente e basato sulle <strong>tecniche di sviluppo agili\u00a0<\/strong>(metodologia agile).<\/p>\n<p>Nello sviluppo dei nostri progetti cerchiamo di seguire il concetto &#8221; <strong>consegna presto \/ consegna frequentemente<\/strong>&#8220;, che corrisponde alla scomposizioni in fasi di un progetto complesso al fine di minimizzare gli imprevisti di cui sopra.<\/p>\n<p>Il progetto viene <strong>scomposto di pi\u00f9 sprint\u00a0<\/strong>all&#8217;interno dei quali convogliare le funzionalit\u00e0 rilasciare in un dato periodo, in funzione del valore che questa hanno per il cliente. Ad ogni sprint corrisponde un rilascio e un&#8217;avvio dei test: in questo modo il cliente pu\u00f2 verificare l&#8217;andamento dello sviluppo, l&#8217;aderenza delle specifiche e identificare eventuali problemi trascurati nell&#8217;analisi.<\/p>\n<p>Questa metodologia di sviluppo lavora <strong>fianco a fianco con il cliente<\/strong>, coinvolgendolo nelle decisioni e verificando puntualmente che quanto in sviluppo sia conforme a quanto atteso.<\/p>\n<p><em>Pi\u00f9 il cliente collaborer\u00e0 pi\u00f9 si otterranno risultati migliori e soddisfacenti.<\/em><\/p>\n<h1>Gestione delle versioni del codice<\/h1>\n<p>I prodotti software sono il risultato della compilazione e dell&#8217;assemblaggio del codice sorgente, insieme alle altre risorse dati che compongono l&#8217;applicazione. Ogni soluzione ha un ciclo di vita composto da versioni, rilasciate in date diverse per clienti diversi e che devono essere mantenute nel tempo in modo efficace e privo di errori.<\/p>\n<p>3DGIS adotta un <strong>sistema di gestione delle versioni<\/strong>, o Control Version System, al fine di:<\/p>\n<ul>\n<li>tracciare l&#8217;evoluzione di un progetto e poter lavorare con le versioni precedenti<\/li>\n<li>permettere la collaborazione di pi\u00f9 persone allo stesso progetto<\/li>\n<li>organizzare e semplificare l&#8217;andamento del progetto, grazie ai branch di sviluppo di nuove funzionalit\u00e0.<\/li>\n<\/ul>\n<p>Utilizziamo il sistema di gestione del versioning adottato dal kernel Linux noto come GIT, il quale ci permette di avere una gestione decentrata dei sorgenti e condividere anche agevolmente i progetti con i clienti.<\/p>\n<h1>Gestione dei progetti e delle attivit\u00e0 (issue tracking)<\/h1>\n<p>Un progetto \u00e8 composto da molteplici attivit\u00e0, scandite da risorse necessarie, rapporti di dipendenza e scadenze temporali.<\/p>\n<p>Tenere sotto controllo tutti gli aspetti del progetto, le sue fasi e le varie attivit\u00e0 da svolgere \u00e8 molto difficile ed \u00e8 necessario affidarsi a strumenti che permettano la migliore organizzazione possibile.<\/p>\n<p>3DGIS utilizza una combinazione di strumenti che ci permettono di gestire molti progetti contemporanei nel rispetto delle procedure definite attraverso il sistema di gestione e delle tecnologie agili adottate per lo sviluppo.<\/p>\n<p>In ogni momento possiamo conoscere lo <strong>stato di avanzamento di un progetto<\/strong>, le attivit\u00e0 da terminare prima del prossimo rilascio e quali problematiche restano ancora da risolvere.<\/p>\n<h1>Continuous Integration<\/h1>\n<p>3DGIS implementa <strong>l&#8217;integrazione continua\u00a0<\/strong>(continuous integration) nei suoi processi di sviluppo.<\/p>\n<p>Si tratta di un processo per il quale il codice sorgente sul quale gli sviluppatori stanno lavorando viene assimilato al branch principale e su questo vengono effettuate dei <strong>test di integrazione e di unit\u00e0\u00a0<\/strong>al fine di stabilirne la correttezza, sintattica e funzionale.<\/p>\n<p>Il codice sorgente viene quindi <strong>validato secondo numerose metriche<\/strong>, guadagnandone in qualit\u00e0 e facilitando l&#8217;individuazione di potenziali errori non individuati durante lo sviluppo.<\/p>\n<p>La continuous integration consente inoltre di <strong>automatizzare i rilasci\u00a0<\/strong>e di facilitare quindi la distribuzione di anteprime al cliente, oltre di consentire una maggiore efficienza della procedura di release del software.<\/p>\n<h1>Trouble ticketing<\/h1>\n<p>A 3DGIS facciamo in modo che <strong>tutte le vostre segnalazioni siano tracciate<\/strong>, identificate da un numero progressivo univoco e con una priorit\u00e0 assegnata in funzione di vari parametri tra cui tipologia di errore e di contratto.<\/p>\n<p>Ogni giorno queste vengono assegnate ad un responsabile che le corregger\u00e0 nel minor tempo possibile e comunicher\u00e0 tempestivamente al cliente gli aggiornamenti del caso o la risoluzione della segnalazione.<\/p>\n<p>I clienti che lo richiederanno riceveranno <strong>accesso al portale cliente<\/strong>, capace di interfacciarsi al sistema di segnalazioni. L&#8217;accesso garantir\u00e0 la possibilit\u00e0 di visualizzare lo stato delle segnalazioni, inviare documenti e creare nuovi ticket, nel caso sia necessario.<\/p>","protected":false},"excerpt":{"rendered":"<p>Costruire software di qualit\u00e0 non \u00e8 da tutti. Noi facciamo cos\u00ec.<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-78","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.3dgis.it\/it\/wp-json\/wp\/v2\/pages\/78","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.3dgis.it\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.3dgis.it\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.3dgis.it\/it\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.3dgis.it\/it\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":23,"href":"https:\/\/www.3dgis.it\/it\/wp-json\/wp\/v2\/pages\/78\/revisions"}],"predecessor-version":[{"id":953,"href":"https:\/\/www.3dgis.it\/it\/wp-json\/wp\/v2\/pages\/78\/revisions\/953"}],"wp:attachment":[{"href":"https:\/\/www.3dgis.it\/it\/wp-json\/wp\/v2\/media?parent=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}