{"id":14891,"date":"2020-05-13T07:30:49","date_gmt":"2020-05-13T05:30:49","guid":{"rendered":"https:\/\/www.unilab.eu\/?p=14891"},"modified":"2020-05-12T10:42:09","modified_gmt":"2020-05-12T08:42:09","slug":"progettare-software","status":"publish","type":"post","link":"https:\/\/www.unilab.eu\/it\/articoli\/coffee-break-it\/progettare-software\/","title":{"rendered":"Progettare un software: perch\u00e9 \u00e8 pi\u00f9 complesso di quanto si creda"},"content":{"rendered":"<p>Con <strong>progettazione e ingegneria del software<\/strong> si intendono due processi fondamentali, che concorrono alla realizzazione di un\u2019applicazione. Esistono altri step come la scrittura del codice, il collaudo e la manutenzione, ma i due sopra citati sono i pi\u00f9 cruciali, poich\u00e9 ne determinano l\u2019efficienza e la qualit\u00e0.<\/p>\n<p>Delineare dei corretti parametri logici alla base di un software, le sue funzionalit\u00e0 e come esse interagiscono fra loro, non \u00e8 certo una cosa facile. Per questo motivo l\u2019ingegneria del software pu\u00f2 essere vista come quella <strong>disciplina che studia e determina le varie fasi della progettazione<\/strong>.<\/p>\n<p><strong>Descrizione del problema e analisi dei requisiti<\/strong><\/p>\n<p>Prima di cominciare lo sviluppo di qualunque software (sia esso un programma, una app o un sito web), \u00e8 imperativo <strong>descrivere il problema<\/strong> da risolvere. Fatto ci\u00f2 bisogna poi delineare delle specifiche iniziali e identificare i requisiti, che consentono all\u2019applicativo di trovare soluzioni concrete al problema stesso.<\/p>\n<p>In questa fase gli ingegneri cercano di determinare le caratteristiche pi\u00f9 importanti per lo svolgimento delle <strong>funzionalit\u00e0 principali<\/strong>. Per darsi un ordine logico da seguire le suddividono in:<\/p>\n<ul>\n<li><strong>specifiche funzionali<\/strong>, per tutti quei requisiti che devono essere tassativamente presenti all\u2019interno del software;<\/li>\n<li><strong>specifiche non funzionali<\/strong>, che costituiscono un opzione extra, non cruciale per il raggiungimento dell\u2019obiettivo per cui \u00e8 stato sviluppato l\u2019applicativo.<\/li>\n<\/ul>\n<p>Il metodo pi\u00f9 facile per fare ci\u00f2 \u00e8 attraverso la <strong>tabella di MosCow<\/strong>. Si tratta di un semplice elenco, in cui i parametri funzionali vengono associati al concetto \u201cMust Have\u201d, mentre quelli opzionali a \u201cShould Have\u201d.<\/p>\n<p>A tale fase preparatoria segue poi una delle fasi pi\u00f9 importanti nella progettazione e ingegneria del software: l\u2019<strong>analisi dei requisiti<\/strong>. Dato che un errore in questo frangente pu\u00f2 determinare perdite di tempo e denaro non indifferenti, \u00e8 bene prestare quanta pi\u00f9 attenzione possibile.<\/p>\n<p>Stilare il <strong>documento dei requisiti fondamentali<\/strong> del software, significa fornire dati importanti su tutti i suoi aspetti (una vera e propria descrizione dettagliata). I pi\u00f9 significativi si possono riassumere in:<\/p>\n<ul>\n<li>domini di applicazione del programma;<\/li>\n<li>dati informativi sull\u2019applicazione;<\/li>\n<li>funzionalit\u00e0;<\/li>\n<li>prestazioni che ci si possono aspettare;<\/li>\n<li>interfacce che utilizza il software.<\/li>\n<\/ul>\n<p>Esistono vari <strong>diagrammi e schemi logici<\/strong> ideati per aiutare gli sviluppatori a identificare i requisiti pi\u00f9 facilmente, delineandone al contempo caratteristiche e relazioni. I pi\u00f9 noti sono i diagrammi UML e i sistemi Alloy e Gellish.<\/p>\n<p><strong>Progettazione di un software<\/strong><\/p>\n<p>Una volta determinati i requisiti, si passa alla <strong>progettazione vera e propria del software<\/strong>. In questa fase si definiscono le strutture dati, le funzioni e i comportamenti che i singoli elementi devono avere, nel pieno rispetto dei vincoli precedentemente stabiliti. Gli <strong>strumenti pi\u00f9 utilizzati<\/strong> sono il diagramma delle classi, il linguaggio OCL e le reti di Petri.<\/p>\n<p>Nello specifico, il <strong>linguaggio di progettazione OCL<\/strong> (Object Constraint Language) risulta ideale per facilitare la scrittura del codice. Si basa sulla rappresentazione degli oggetti che compongono il sistema, definendone i relativi attributi, comportamenti e vincoli.<\/p>\n<p>Le <strong>reti di Petri<\/strong> sono considerate uno degli strumenti pi\u00f9 potenti a disposizione della progettazione e dell\u2019ingegneria dei software. Il loro scopo principale \u00e8 quello di mostrare la logica del programma nella sua totalit\u00e0, attraverso elementi specifici quali posti, transizioni, archi e token.<\/p>\n<p>Con questo speciale diagramma \u00e8 possibile avere un\u2019idea pi\u00f9 concreta di come ogni parte del software interagisce con le altre. Con tutti gli elementi ben definiti si pu\u00f2 passare alla fase di <strong>scrittura del codice<\/strong>, seguita poi dal <strong>collaudo<\/strong> e dalla <strong>manutenzione<\/strong>.<\/p>\n<!--themify_builder_content-->\n<div id=\"themify_builder_content-14891\" data-postid=\"14891\" class=\"themify_builder_content themify_builder_content-14891 themify_builder tf_clear\">\n    <\/div>\n<!--\/themify_builder_content-->\n","protected":false},"excerpt":{"rendered":"<p>Con progettazione e ingegneria del software si intendono due processi fondamentali, che concorrono alla realizzazione di un\u2019applicazione. Esistono altri step come la scrittura del codice, il collaudo e la manutenzione, ma i due sopra citati sono i pi\u00f9 cruciali, poich\u00e9 ne determinano l\u2019efficienza e la qualit\u00e0<\/p>\n","protected":false},"author":10,"featured_media":14889,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"46","_seopress_titles_title":"","_seopress_titles_desc":"Con progettazione e ingegneria del software si intendono due processi fondamentali, che concorrono alla realizzazione di un\u2019applicazione. Esistono altri step come la scrittura del codice, il collaudo e la manutenzione, ma i due sopra citati sono i pi\u00f9 cruciali, poich\u00e9 ne determinano l\u2019efficienza e la qualit\u00e0","_seopress_robots_index":"","footnotes":""},"categories":[46],"tags":[],"class_list":["post-14891","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coffee-break-it","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"builder_content":"","_links":{"self":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts\/14891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/comments?post=14891"}],"version-history":[{"count":0,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts\/14891\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/media\/14889"}],"wp:attachment":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/media?parent=14891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/categories?post=14891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/tags?post=14891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}