Questo forum utilizza i cookies
Questo forum fa uso di cookie per memorizzare le informazioni di login se sei registrato, e la tua ultima visita se non lo sei. I cookie sono brevi documenti di testo memorizzati sul tuo computer; i cookie impostati dal forum possono essere utilizzati solo su questo sito e senza rischi per la sicurezza. I cookie su questo forum possono anche monitorare gli argomenti specifici che hai letto e quando li hai letti. Si prega di confermare se si accettano o si rifiutano le impostazioni di questi cookie.

Un cookie viene memorizzato nel browser indipendentemente dalla scelta agita per evitare che sia ripetuta ancora una volta la domanda. Sarai in grado di modificare le impostazioni dei cookie in qualsiasi momento utilizzando il link a piè di pagina


03 - Dimensione sociale del software
#1
Osservando nuovamente e brevemente il rapporto tra i costi dell’hardware e del software nel contesto dell’evoluzione relativa alle proprie tecnologie possiamo riscontrare un aspetto effettivamente sconcertante: il progresso nello sviluppo tecnologico del software è assai lento ma, per quanto riguarda il supporto hardware, driver di riconoscimento ed altro, risulta essere addirittura velocissimo. Probabilmente nessun’altra tecnologia ha avuto, come l’hardware, un guadagno di ben 6 ordini di grandezza nel rapporto prestazioni / costi quantificabile in un arco di tempo pari a trenta anni. Al contrario, i progressi in ambito software si scontrano con difficoltà in parte superabili dallo sviluppo scientifico e tecnologico, ma in parte è l’essenza stessa del software che favorirà il perdurare delle difficoltà anche in futuro. Il motivo di quanto appena accennato è da ricercare nella complessità, infatti, a parità di dimensione, la difficoltà ad intuire, progettare e realizzare anche solo un frammento di software è di gran lunga superiore a quella corrispondente per qualsiasi altro prodotto. Programmi di notevole laboriosità non sono ottenuti per giustapposizione tra componenti simili o identiche, come nella gran parte dei prodotti industriali, al contrario, la struttura di un programma ben di rado porta con sé elementi regolari. Altresì il software è invisibile, difficilmente deducibile e non occupa spazio, pertanto non sussistono evidenti astrazioni o semplicemente delle analogie figurative che permettano all’uomo di descrivere, disquisire o comunicare il software.
A queste intrinseche difficoltà se ne sommano delle altre, cagionate da approcci manchevoli limitatamente basati su metodologie operative rigorose che rendono alquanto scarsa l’affidabilità del software rispetto alla reale esigenza delle applicazioni. Queste ultime, per contro, tendono esponenzialmente a divenire sempre più critiche e complesse. Osserviamo alcuni esempi:
  • Applicazioni che gestiscono le transazioni finanziarie delle banche.
  • Applicazioni che gestiscono rotta e volo degli aerei di linea.
  • Applicazioni che gestiscono il monitoraggio dei pazienti negli ospedali
  • Applicazioni di tipo militare

Errori presenti in applicativi del genere possono causare perdite finanziare, disastri aerei e porre in pericolo la vita di quei pazienti la cui sopravivenza è legata al corretto funzionamento di determinate apparecchiature. Per non parlare di errori presenti in applicativi dedicati alla difesa che rilevano condizioni di attacco ed impostano contromisure offensive.
Dalle considerazioni in analisi è ovvio che sussiste, da un lato, la necessità di formare ingegneri del software che abbiano le competenze per progettare applicazioni sofisticate la cui affidabilità sia confortata dalle conoscenze teoriche e metologiche, dall’altro l’esigenza che questa professionalità acquisita sia sottoposta al servizio della propria coscienza, in modo particolare anteponendo sempre e comunque la qualità ed affidabilità del prodotto a qualsiasi altro aspetto. La coscienza civile dell’ingegnere del software deve mettere in guardia le persone inesperte in merito ai rischi di certe applicazioni, soprattutto ad alto grado di criticità, e ridimensionare energicamente le facili foghe che conferiscono al software la bacchetta magica con la quale risolvere agevolmente qualsivoglia problema. La progettazione del software richiede professionalità ed anche la necessaria umiltà che consentono di analizzare ed affrontare problemi il cui grado di complessità va oltre il limite entro il quale conoscenza e tecnologia consentono di sviluppare applicazioni affidabili. Vi sono casi nei quali l’ingegnere del software deve affermare, responsabilmente, che certi obiettivi in grado di garantire un minimo di affidabilità per quanto riguarda l’applicazione non possono essere raggiunti.
Particolarmente illuminante in merito è indubbiamente la vicenda di David Lorge Parnas, canadese, uno dei massimi esperti mondiali di ingegneria del software che ha motivato pubblicamente le proprie dimissioni da una commissione del Segretariato della Difesa degli Stati Uniti nella quale dovevano essere fornite delle raccomandazioni sull’utilizzo dell’informatica nell’ambito del programma noto come Star Wars all’epoca caldeggiato da Ronald Reagan. Parns affermò con grande onestà intellettuale che le conoscenze e la tecnologia dell’epoca non erano in grado e tanto meno potranno esserlo in un futuro prossimo, di affrontare il grado di criticità e complessità proposto da applicazioni simili a quelle del programma di guerre stellari.
Concludiamo questo articolo esaminando quella che potrebbe essere la definizione ideale per quanto riguarda l’ingegneria del software. In base alla terminologia proposta dal glossario IEEE (Standard Glossary of Software Engineering), l’ingegneria del software definisce l’approccio sistematico allo sviluppo, operatività, manutenzione e ritiro del software. Per software si intendono i programmi, procedure, regole, documentazione correlata e i dati che compongono un sistema di elaborazione. Suddetto approccio sistematico si conforta negli aspetti di tipo tecnico ed altri di natura organizzativo – gestionale. Infatti l’ingegneria del software è la disciplina tecnologica e manageriale inerente la produzione sistematica e la manutenzione dei software che vengono sviluppati ed aggiornati entro tempi e costi in precedenza preventivati.
Altresì possiamo affermare che l’ingegneria del software è un insieme di teorie, metodi e strumenti che consentono la produzione di applicativi che rispettano i parametri di qualità ed affidabilità. L’obbiettivo preponderante della disciplina consiste nel porre lo specialista in condizioni di affrontare la complessità di grossi progetti, gestendo al meglio le risorse disponibili, in modo particolare quelle umane e sviluppando applicativi che rispecchino le peculiarità richieste in sede di committenza, quindi entro quei parametri che indicano vincoli di natura economica e di tempo impiegato alla progettazione. Da ciò possiamo derivare che l’ingegneria del software ingloba un corpus di contenuti comprendenti teoria di base, metodologie rigorose che si giustificano nella preparazione dell’ingegnere, tecnologie collaudate da impiegare nei processi produttivi che si accompagnano ad una notevole sensibilità pratica che può essere di tipo empirico, quindi in grado di formulare teorie in un atteggiamento progettuale che sappia misurare l’approccio in funzione del problema specifico da risolvere.


Vai al forum:


Utente(i) che stanno guardando questa discussione: 1 Ospite(i)