Per poter redigere un efficace contratto di sviluppo software è imprescindibile, per un avvocato che si rispetti, acquisire innanzitutto una “alfabetizzazione informatica” che gli permetta di comprendere il linguaggio e le possibilità offerte dalla programmazione (premere qui per approfondire questo concetto), e poi anche acquisire una adeguata comprensione del codice e del processo di sviluppo che porterà al risultato previsto.
Ebbene, lo sviluppo di un software è un’attività che si svolge in diverse fasi: la parte più importante è l’analisi nella quale si indicano gli obiettivi da realizzare e i modi in cui raggiungerli. Possiamo distinguere l’analisi dei requisiti, nella quale interagendo con i futuri utenti, il programmatore individua le funzioni che il sistema deve realizzare e a fase della specificazione dei requisiti, in cui si individuano con maggior precisione le caratteristiche del software e le modalità del suo inserimento nell’organizzazione cui è destinato.
Segue poi la fase di progettazione (di architettura e algoritmi) in cui vengono disposte l’articolazione del software in moduli e la definizione dei rapporti tra tali moduli, nonché delle forme della loro comunicazione. In questa fase si definiscono poi i principali algoritmi inerenti ai moduli stessi.
Si viene quindi alla programmazione (implementazione o codifica) consistente nella scrittura dei programmi che realizzano i singoli moduli.
Infine, nella fase di verifica ci si accerta che il software sia privo di errori e risponda adeguatamente alle esigenze (in questa fase bisognerà controllare il funzionamento del programma con i più diversi input e casi d’uso, al fine di individuare e correggere gli errori).
Lo sviluppo del software è completato dalla documentazione, cioè dalla stesura dei documenti intesi ad illustrare la struttura ed il funzionamento del sistema informatico prodotto.
Una volta che il software sia entrato in funzione si entra nella fase di manutenzione, la quale si distingue in manutenzione correttiva, volta a rimediare agli errori sfuggiti alla fase di verifica, e manutenzione integrativa, volta ad arricchire il software di nuove funzioni.
Il modello così illustrato è quello tradizionale cd. dello “sviluppo a cascata”, il quale presuppone che lo sviluppo del software proceda ordinatamente sulla base di un piano globale; tuttavia, esso espone al rischio che eventuali errori negli assunti di partenza si manifestino molto tardi, quando il software è ormai completo. Questo modello, inoltre, sembra implicare un’organizzazione centralizzata e gerarchica e per certi aspetti autoritaria del lavoro, nella misura in cui le diverse fasi di sviluppo sono affidate a soggetti diversi, dotati di competenze decrescenti.
Per tali motivi, sono stati studiati modelli alternativi e più sofisticati di sviluppo del software, come quello cd. di sviluppo agile o prototipazione, in cui il programma viene “spezzato” ed analizzato in segmenti, così da verificare se ognuno di essi sia stato sviluppato nel modo adeguato, identificando subito eventuali problemi di malfunzionamento prima di procedere allo sviluppo delle fasi successive.
Altresì, ricorrente è il cd. modello del bazar, utilizzato spesso per i software open source. Qui, più soggetti partecipano allo sviluppo del software ed ognuno di essi sceglie le componenti su cui vuole indipendentemente dall’attività degli altri. Se il frammento si inserisce adeguatamente nel tutto, viene poi implementato nel software.
Naturalmente questa non è la sede più opportuna per approfondire ciascuna di queste metodologie di sviluppo, qui ci limitiamo solamente a sottolineare come l’acquisizione di competenze tecnologiche e di conoscenze relative allo sviluppo software possa aiutare gli avvocati a rimanere competitivi in un mercato legale in rapida evoluzione, dove la capacità di adattarsi al cambiamento e di avere una consapevolezza commerciale e sociale è sempre più richiesta.
Per approfondire
- W. ROYCE. Managing the development of large software systems, in Proceedings of IEEE WESCON, 26.1, 1970. pp. 1-9;
- L. LESSIG, Code and Other laws of Cyberspace, New York, 1999;
- G. SARTOR, Il diritto della rete globale, in Ciberspazio e diritto, 4, 2003, pp. 67-94;
- G. SARTOR, L'informatica giuridica e le tecnologie dell'informazione, Torino, 2016;
- F. ROMEO, Lezioni di logica ed informatica giuridica, Torino, 2012;
- W.S. MCCULLOCH, W.H. PITTS, A logical calculus of the ideas immanent in nervous activity, 1943;
- A.M. TURING, Computing machinery and intelligence, in Mind, 59, 1950, p. 236 ss.
Nicola Nappi
Ultimi post di Nicola Nappi (vedi tutti)
- Ruolo e responsabilità del “responsabile del trattamento” nell’ecosistema del GDPR - Dicembre 9, 2024
- La qualificazione giuridica del contratto di licenza d’uso - Dicembre 2, 2024
- Sui limiti all’utilizzabilità delle deroghe al trasferimento transfrontaliero dei dati personali - Novembre 25, 2024
- L’esercizio di poteri pubblici come deroga al trasferimento transfrontaliero di dati personali - Novembre 18, 2024
- Il legittimo interesse del titolare come deroga al trasferimento transfrontaliero dei dati personali - Novembre 11, 2024