Software: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Corretto: "le versioni"
 
(346 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
{{Nota disambigua}}
[[File:LibreOffice Writer 4.1.0.4 ITA.png|miniaturathumb|upright=1.4|[[LibreOffice]] Writer]], un [[software libero]] di [[videoscrittura]]]]
Il '''software''' in [[informatica]] è l'[[informazione]] o le informazioni utilizzate da uno o più [[sistemi informatici]] e memorizzate su uno o più [[supporti informatici]]. Tali informazioni possono essere rappresentate da uno o più [[Programma (informatica)|programmi]], da uno o più [[dati]], oppure da una combinazione delle due.
 
Il '''software''', in [[informatica]] ed [[elettronica]], indica (per un [[sistema informatico]]) l'insieme delle componenti intangibili di [[elaborazione dati|elaborazione]]. Il significato è contrapposto a quello di '' [[hardware]]'', che corrisponde alla parte materiale (strato fisico/tangibile) del detto sistema.<ref name=":0" />
Il termine si contrappone tradizionalmente ad [[hardware]] (la componente fisica di un sistema di calcolo), che rende possibile l'[[Esecuzione (informatica)|esecuzione]] del software (la componente logica dello stesso). Nel tempo sono entrati nell'uso altri termini che descrivono elementi di un computer, come il [[firmware]]. Il suffisso ''-ware'' (il cui significato è «componente») viene usato anche in altri termini che indicano particolari tipi di programmi: in funzione del ruolo che hanno in un sistema di calcolo (per esempio [[middleware]]), del tipo di [[Licenza (informatica)|licenza]] con cui sono distribuiti ([[freeware]], [[shareware]]), dell'[[Edizione (software)|edizione]] e altro ancora.
 
Sebbene popolarmente l'opinione diffusa sia che il software sia solo quello che si può trovare su un [[Personal computer|PC]] o al più su di uno [[smartphone]], tipologie specifiche di software si trovano su i più disparati dispositivi (p.es. un televisore, un'automobile, un cronotermostato, una lavatrice; per non parlare tra l'altro di applicazioni produttive).jhfkuyjhujhjytjhyhjhgjyjujujuyyttttyrtytrhytrgfhyuytuj
 
== Etimologia ==
Il termine «software» è un [[prestito linguistico|prestito]] dell'[[lingua inglese|inglese]]. Nella lingua inglese ''software'' nasce per imitazione del termine ''hardware'' e dalla [[Composizione (linguistica)|composizione]] delle parole ''soft'' (in [[lingua italiana|italiano]] «morbido», «tenero», «leggero»)<ref>Confronta il [http://dizionari.corriere.it/dizionario_inglese/Inglese/S/soft.shtml lemma "soft" su «Il Sansoni - Inglese»].</ref> e ''ware'' («merci», «articoli», «prodotti», «mercanzie»).<ref>Confronta il [http://dizionari.corriere.it/dizionario_inglese/Inglese/W/ware_1.shtml lemma "ware<sup>1</sup>" su «Il Sansoni - Inglese»].</ref>
 
La paternità della coniazione del termine ''software'' non è certa. L'americano Paul Niquette la rivendica sostenendo di aver coniato il termine ''software'' nel [[1953]].<ref>Paul Niquette, ''[http://niquette.com/books/softword/part0.htm Introduction: the software age]'', «Sophisticated: The Magazine», 1995.</ref> Certa invece è la prima apparizione del termine ''software'' in una pubblicazione scritta: un articolo dell'[[American Mathematical Monthly]] scritto nel [[1958]] dallo [[statistico]] americano [[John Wilder Tukey]].<ref>David Leonhardt, ''[http://www.nytimes.com/2000/07/28/us/john-tukey-85-statistician-coined-the-word-software.html John Tukey, 85, statistician; coined the word 'software']'', «[[New York Times]]», 28 luglio [[2000]].</ref>
 
== Storia ==
=== La creazione del concetto ===
Il termine ''software'' ha origine durante la [[seconda guerra mondiale]]. I tecnici dell'esercito [[inghilterra|inglese]] erano impegnati nella [[Crittoanalisi|decrittazione]] dei codici tedeschi di ''[[Enigma (crittografia)|Enigma]]'', di cui già conoscevano la meccanica interna (detta ''[[hardware]]'', ''componente dura'', nel senso di ferraglia) grazie ai [[servizi segreti]] polacchi. La prima versione di Enigma sfruttava tre [[Rotore (matematica)|rotori]] per mescolare le lettere.
Il termine sarebbe stato creato durante la [[seconda guerra mondiale]]; tecnici del [[Royal Army]] britannico erano impegnati nella [[Crittoanalisi|decrittazione]] dei codici tedeschi di ''[[Enigma (crittografia)|Enigma]]'', di cui già conoscevano la meccanica interna (detta ''[[hardware]]'', ''componente dura'', nel senso di ferraglia) grazie ai [[servizi segreti]] polacchi. La prima versione di Enigma sfruttava tre [[Rotore (matematica)|rotori]] per mescolare le lettere. Dopo il [[1941]], ad ''Enigma'' venne aggiunto un rotore, e il team di [[Crittoanalisi#Crittanalisti storici|criptoanalisti]] inglesi, capitanati da [[Alan Turing]], si dovette interessare non più alla sua struttura fisica, ma alle posizioni in cui venivano utilizzati i rotori della nuova [[Enigma (crittografia)|Enigma]]. Dato che queste istruzioni erano scritte su pagine [[solubilità|solubili]] nell'acqua (per poter essere più facilmente distrutte, evitando in tal modo che cadessero nelle mani del nemico) furono chiamate ''software'' (''componente tenera''), in contrapposizione all'''hardware''.
 
Il senso moderno del termine deriva dalle istruzioni date ai [[computer]], ed è stato utilizzato per la prima volta nel 1957 da [[John Wilder Tukey]], noto statistico [[Stati Uniti d'America|statunitense]]<ref>{{Cita news |url=https://www.focus.it/tecnologia/digital-life/perche-il-software-si-chiama-cosi |autore=Fabrizia Sacchetti |titolo=Perché il software si chiama così? |rivista=Focus |data=6 giugno 2022}}</ref>. Dal 1950 l'analogia tra l{{'}}''[[hardware]]'' ed il [[corpo umano]] e quella tra il ''software'' e la [[mente umana]] si è fatta molto forte, dal momento che Turing ha sostenuto che il progresso [[tecnologia|tecnologico]] sarebbe riuscito a creare, entro il 2000, delle macchine intelligenti (in grado cioè di «pensare» autonomamente) atte alla risoluzione dei problemi.
Dopo il [[1941]], ad ''Enigma'' venne aggiunto un rotore, e il team di [[Crittoanalisi#Crittanalisti storici|criptoanalisti]] inglesi, capitanati da [[Alan Turing]], si dovette interessare non più alla sua struttura fisica, ma alle posizioni in cui venivano utilizzati i rotori della nuova [[Enigma (crittografia)|Enigma]].
 
=== L'evoluzione e l'applicazione delle leggi di Moore ===
Dato che queste istruzioni erano scritte su pagine [[solubilità|solubili]] nell'acqua (per poter essere più facilmente distrutte, evitando in tal modo che cadessero nelle mani del nemico) furono chiamate ''software'' (''componente tenera''), in contrapposizione all'''hardware''.
A partire dal [[secondo dopoguerra]], con lo sviluppo dell'[[hardware]] sono aumentate le possibilità per gli sviluppatori; ai sensi della [[legge di Moore#Seconda legge di Moore|seconda legge di Moore]], una minaccia alla velocità di elaborazione, oltre ai costi, proviene dal software. Infatti ciò che conta per un utente non è tanto la velocità di elaborazione del processore, quanto la velocità effettiva di elaborazione del codice, calcolata in base al tempo che occorre alla [[CPU]] per eseguire un'operazione (come la scrittura di un testo, la creazione di una cartella).
 
=== Gli studi di Myhrvold ===
Il senso moderno del termine deriva dalle istruzioni date ai [[computer]], ed è stato utilizzato per la prima volta nel 1957 da [[John Wilder Tukey]], noto statistico [[Stati Uniti d'America|statunitense]].
Nathan Myhrvold, direttore dell'Advanced Technology Group della [[Microsoft]], ha effettuato uno studio sui prodotti Microsoft calcolando le linee di codifica per le successive [[release (informatica)|release]] dello stesso software:
* Basic: da {{formatnum:4000}} [[linee di codice]] nel 1975 a {{formatnum:500000}} nel 1995
* Word: da {{formatnum:27000}} linee di codice nel 1982 a {{formatnum:2000000}} nel 2002
 
La continua aggiunta di nuove funzionalità al software esistente giustifica la costante richiesta di [[processore|processori]] più veloci, [[memoria (informatica)|memorie]] sempre più grandi e più ampie capacità di [[Input/output|I/O]] (Input/Output).
Dal 1950 l'analogia tra l'''hardware'' ed il [[corpo umano]] e quella tra il ''software'' e la [[mente umana]] si è fatta molto forte, dal momento che Turing ha sostenuto che il progresso [[tecnologia|tecnologico]] sarebbe riuscito a creare, entro il 2000, delle macchine intelligenti (in grado cioè di «pensare» autonomamente) atte alla risoluzione dei problemi.
 
Infatti, anche le altre tecnologie si sono evolute di pari passo:
=== Aumento del codice e potenziamento dell'hardware ===
* i dischi rigidi da {{M|10|ul=MB}} (1982) a {{M|1|ul=TB}} (2007);
Alla storia dell'evoluzione del software è legato lo sviluppo dell'hardware. Come evidenziato dalla [[legge di Moore#Seconda legge di Moore|seconda legge di Moore]], una minaccia alla velocità di elaborazione, oltre ai costi, proviene dal software. Infatti ciò che conta per un utente non è tanto la velocità di elaborazione del processore, quanto la velocità effettiva di elaborazione del codice, calcolata in base al tempo che occorre alla [[CPU]] per eseguire un'operazione (come la scrittura di un testo, la creazione di una cartella, ecc.).
* i [[modem]] analogici da {{M|110|ul=bit/s}} a {{M|56|ul=kbit/s}}.
 
Myhrvold traccia un parallelismo con la legge di Moore: «''abbiamo aumentato la dimensione e la complessità del software ancora più rapidamente di quanto non prevedeva la legge di Moore''», «''gli utenti del software hanno sempre consumato le maggiori capacità di elaborazione ad una velocità uguale o superiore a quella con cui i produttori di [[circuito integrato]] le mettevano a disposizione''» ([[Stewart Brand]], 1995).
Nathan Myhrvold, direttore dell'Advanced Technology Group della [[Microsoft]], ha effettuato uno studio sui [[prodotti Microsoft]] calcolando le linee di codifica per le successive ''release'' dello stesso software:
 
== Descrizione ==
* Basic: da 4.000 linee di codice nel 1975 a 500.000 nel 1995
=== Caratteri generali ===
* Word: da 27.000 linee di codice nel 1982 a 2.000.000 nel 2002
In particolare in informatica si intendono tali il semplice [[dato]] o [[informazione]]<ref>{{Cita web|https://github.com/danielskatz/software-vs-data/blob/master/README.md|Software and data|lingua=en|citazione=software, while similar to data in terms of not traditionally having been cited in publications, is also different than data|30 settembre 2018}}</ref> oppure più propriamente le [[Istruzione (informatica)|istruzioni]] di un [[programma (informatica)|programma]] codificate in [[linguaggio macchina]] o in [[linguaggio di programmazione]] ([[codice sorgente]]), memorizzate su uno o più [[supporti informatici|supporti fisici]], sotto forma di [[codice eseguibile]]. Riguardo all'invenzione del termine, lo statunitense Paul Ni Quette sostiene di averlo coniato nel [[1953]],<ref>Paul Niquette, ''[http://niquette.com/books/softword/part0.htm Introduction: the software age]'', «Sophisticated: The Magazine», 1995.</ref> tuttavia è invece ritenuta certa la prima apparizione in una [[pubblicazione scientifica]] del [[1958]] dell'American Mathematical Monthly da parte dello [[statistico]] [[John Wilder Tukey]].<ref>David Leonhardt, ''[https://www.nytimes.com/2000/07/28/us/john-tukey-85-statistician-coined-the-word-software.html John Tukey, 85, statistician; coined the word 'software']'', «[[New York Times]]», 28 luglio [[2000]].</ref>
 
Genericamente si intende l’insieme dei [[Programma (informatica)|programmi]] impiegati in un [[sistema di elaborazione dati]]<ref name=":0">{{Cita web|url=http://www.treccani.it/vocabolario/software/|titolo=software in Vocabolario - Treccani|lingua=it-IT|accesso=2018-12-03}}</ref> che gestisce il funzionamento di un elaboratore<ref name=":1">{{Cita web|url=http://dizionari.corriere.it/dizionario_italiano/S/software.shtml|titolo=Software: Definizione e significato di Software – Dizionario italiano – Corriere.it|sito=dizionari.corriere.it|lingua=it|accesso=2018-12-03}}</ref>; si distingue fra:
La continua aggiunta di nuove funzionalità al software esistente giustifica la costante richiesta di [[processore|processori]] più veloci, [[memoria (informatica)|memorie]] sempre più grandi e più ampie capacità di [[Input/output|I/O]] ([[Input]]/[[Output]]).
* software di sistema: quello relativo al [[sistema operativo]] dell’[[Computer|elaboratore elettronico]];<ref name=":0" /><ref name=":1" />
* software di base: insieme dei programmi e delle procedure di utilità generale impiegabili da altri programmi;<ref name=":0" />
* software [[applicazione (informatica)|applicativo]]: relativo ai programmi applicativi progettati per particolari funzioni che possono essere ad esempio la [[videoscrittura|scrittura]], l'[[elaborazione digitale delle immagini|elaborazione di immagini]], la [[database|gestione dei dati]] e altro.<ref name=":0" /><ref>{{cita libro|url=https://books.google.it/books?id=2-hiBAAAQBAJ&pg=PA270&dq=software+applicativo+di+sistema+programmazione&hl=it&sa=X&ved=2ahUKEwid5LyqxMXtAhXK26QKHZSWAowQ6AEwAXoECAIQAg#v=onepage&q&f=false|pagina=270|titolo= I contratti di somministrazione e di distribuzione|autore=Roberto Bocchini|autore2=Alberto Maria Gambino|editore=UTET Giuridica|anno=2011|isbn=978-88-59-80718-6}}</ref>
 
Il termine si contrappone tradizionalmente ad [[hardware]] (la componente fisica di un sistema di calcolo),<ref name=":0" /> che rende possibile l'[[Esecuzione (informatica)|esecuzione]] del software (la componente logica dello stesso). Nel tempo sono entrati nell'uso altri termini che descrivono elementi di un computer, come il [[firmware]]. Il suffisso ''-ware'' (il cui significato è «componente») viene usato anche in altri termini che indicano particolari tipi di programmi: in funzione del ruolo che hanno in un sistema di calcolo (per esempio [[middleware]]), del tipo di [[Licenza (informatica)|licenza]] con cui sono distribuiti ([[freeware]], [[shareware]]), dell'edizione e altro ancora. Software di tipo speciale si trovano sui più disparati dispositivi (p.es. un televisore, un'automobile, un cronotermostato, una lavatrice ma anche applicazioni produttive).
Infatti, anche le altre tecnologie si sono evolute di pari passo:
 
[[File:Python_add5_syntax.svg|thumb|[[Codice sorgente]] in [[Python]]]]
* i dischi rigidi da 10 [[megabyte|MB]] (1982) a 1 [[terabyte|TB]] (2007);
[[File:Operating_system_placement-it.svg|thumb|Livelli di astrazione tra utente ed [[hardware]].]]
* i [[modem]] analogici da 110 [[bit]]/sec a 56 [[Kilobit|kbit]]/sec.
 
Myhrvold traccia un parallelismo con la legge di Moore: «''abbiamo aumentato la dimensione e la complessità del software ancora più rapidamente di quanto non prevedeva la legge di Moore''», «''gli utenti del software hanno sempre consumato le maggiori capacità di elaborazione ad una velocità uguale o superiore a quella con cui i produttori di [[circuito integrato]] le mettevano a disposizione''» ([[Stewart Brand]], 1995).
 
==Descrizione==
=== Classificazione ===
I software possono essere classificati in base a diverse loro caratteristiche:
* grado di permissività della [[Licenza (informatica)|licenza]] ([[software libero]] o [[software proprietario]]);
* [[Installazione (informatica)|da installare]] o [[Applicazione portabile|portabile]] (ovvero sotto forma di prodotto) o fruibile come servizio ([[SaaS]]);
* [[sistema operativo]] su cui possono essere utilizzati (OS ecc.);
* tipo di [[interfaccia utente]] visiva<ref group="N">Visiva in quanto esiste anche il riconoscimento vocale come interfaccia con l'utente.</ref> ([[Interfaccia a riga di comando|testuale]] o [[Interfaccia grafica|grafica]], modalità [[touch screen]]; vi sono tipologie di software in cui l'interfaccia utente è nascosta ovvero sostituita dall'ambiente di programmazione, come succede, ad esempio, nei [[System-on-a-chip|SoC)]];
* modalità di esecuzione, [[batch]] quando i lavori sono impostati in modo che possano essere eseguiti fino al completamento senza l'intervento umano, [[online]] (o programmi interattivi) che invece richiedono l'intervento umano per l'immissione dati ed il controllo del lavoro;
* funzione ([[videoscrittura]], [[foglio elettronico]], [[database management system]], [[Computer grafica|grafica]], [[sistema operativo]], [[browser]], [[lettore multimediale]], [[posta elettronica]] e altre decine di migliaia-, considerando la variabilità in termini di versionisoluzioni applicative), piattaforme ed edizioni/versioni;
* campo di applicazione: utilizzo casalingo (''home'') o professionale (''business''). In alcuni casi un prodotto vale per ambo le categorie, in molte altre un prodotto ha versioni specifiche (esempio un sistema operativo o una suite di produttività), in tantissime esiste solo per una delle due, spesso quella aziendale (ad esempio un sistema [[Enterprise resource planning|ERP]]);
* ''stand alone'' (ovvero che possono girare completamente autonomi su sistemi isolati) oppure ''network'' (ovvero che funzionano in un ambito di [[Rete di calcolatori|rete]]). Il secondo caso può essere a sua volta diviso in software in versione [[client-server]] (sul client può essere installato magari solo un ''agent'' oppure l'intero software che però si appoggia ad una [[base di dati]] installato su un server oppure ad un servizio server<ref group="N">Specie nella configurazione nella quale sul client è installato solo l'agent.</ref>), oppure in modalità ''terminal-server'' oppure [[Cloud computing|cloud]] (applicazioni [[web]]) anche in modalità [[Software as a service|SaaS]]<ref group="N">Esempio semplice: Facebook è un'applicazione software web (''full web application'' in quanto non necessita di alcun agent installato a differenza, ad esempio, di Skype (inteso come app).</ref>. Esempi classici di programma di rete, in ambito aziendale, è il [[Enterprise resource planning|sistema gestionale]], la [[posta elettronica]] centralizzata (spesso associata ai moduli di pianificazione attività e risorse), il [[firewall]] della [[LAN]].
* grado di permissività della [[Licenza (informatica)|licenza]] ([[software libero]] o [[software proprietario]]);
* [[sistema operativo]] su cui possono essere utilizzati ([[Microsoft Windows|Windows]], [[Mac OS]], [[Android]], [[Linux]], [[Unix]], [[DOS]], ecc.);
* [[Installazione (informatica)|da installare]] o [[Applicazione portabile|portabile]];
* tipo di [[interfaccia utente]] visiva<ref>Visiva in quanto esiste anche il riconoscimento vocale come interfaccia con l'utente.</ref> ([[Interfaccia a riga di comando|testuale]] o [[Interfaccia grafica|grafica]], modalità [[touch screen]]);
* ''stand alone'' (ovvero che possono girare completamente autonomi su sistemi isolati) oppure ''network'' (ovvero che funzionano in un ambito di [[Rete di calcolatori|rete]]). Il secondo caso può essere a sua volta diviso in software in versione [[client-server]] (sul client può essere installato magari solo un ''agent'' oppure l'intero software che però si appoggia ad un [[base di dati]] installato su di un server oppure ad un servizio server<ref>Specie nella configurazione nella quale sul client è installato solo l'agent.</ref>), oppure in modalità ''terminal-server'' oppure [[Cloud computing|cloud]] (applicazioni [[web]])<ref>Esempio semplice: Facebook è un'applicazione software web (''full web application'' in quanto non necessita di alcun agent installato a differenza, ad esempio, di Skype)</ref>. Esempi classici di programma di rete, in ambito aziendale, è il [[Enterprise resource planning|sistema gestionale]], la [[posta elettronica]] centralizzata (spesso associata ai moduli di pianificazione attività e risorse), il [[firewall]] della [[LAN]].
 
Dal punto di vista gerarchico<ref group="N">La distinzione è relativa al grado di «utilizzabilità» e «prossimità» rispetto all'utente.</ref> i software possono essere divisi in quattro<ref group="N">Si potrebbe anche considerare una quinta categoria di software: gli «strumenti» (''tool'' nel linguaggio informatico). Si tratta di programmi di gestione di una periferica (''device''), ad esempio il pannello di controllo della stampante, della scheda video, di un disco esterno, ecc. Si tratta di software di interconnessione tra il sistema operativo e periferica (e quindi dei driver relativi) che consentono di regolare (''setup'') la periferica e il suo funzionamento nei confronti del sistema operativo o di altri programmi. Esistono anche tool di gestione di software applicativi, ad esempio il pannello di controllo di un ''anti-malware'' oppure quello di supervisione delle applicazioni specifiche del produttore del computer (OEM). Infine, esistono tool per la gestione (installazione, modifica-sviluppo, aggiornamento, manutenzione, ecc) di firmware o sistemi operativi</ref> categorie principali:
* [[firmware]];
* [[software di base]] (che a sua volta si divide in [[Sistema operativo|sistemi operativi]], [[Compilatore|compilatori]] e [[Interprete (informatica)|interpreti]], [[Libreria software|librerie]]);
Riga 60 ⟶ 59:
Con il termine ''suite'' si designa un software strutturato in diversi programmi/moduli, solitamente configurabili (nel senso di installabili, attivabili) separatamente ma facenti parte di un'unica soluzione. [[Microsoft Office]] o [[AVG (software)|AVG]] AntiVirus o [[SAP ERP]] sono esempi di suite software.
 
=== Realizzazione del software ===
{{vedi anche|ProcessoSviluppo software}}
 
Un software viene normalmente realizzato attraverso un processo di [[programmazione (informatica)|programmazione]] utilizzando uno o più [[Linguaggio di programmazione|linguaggi di programmazione]] ad opera di un [[programmatore]]. Se il progetto diventa complesso, è opportuno dividere il programma in uno o più [[modulo (programmazione)|moduli]], che possono essere così affidati a diversi [[programmatore|programmatori]], modificati più semplicemente e riutilizzati in altri progetti.
Un software viene normalmente realizzato attraverso un processo di [[programmazione (informatica)|programmazione]] utilizzando uno o più [[Linguaggio di programmazione|linguaggi di programmazione]] ad opera di un [[programmatore]]. Se il progetto diventa complesso, è opportuno dividere il programma in uno o più [[modulo (programmazione)|moduli]], che possono essere così affidati a diversi [[programmatore|programmatori]], modificati più semplicemente e riutilizzati in altri progetti. La realizzazione del software è un'attività complessa articolata in più fasi, per questo motivo spesso il software è associato ad un prodotto ingegneristico, ma se ne differenzia soprattutto per alcune caratteristiche:
* è molto «[[malleabilità|malleabile]]»;
* è un prodotto ''human intensive'' (e cioè un prodotto che richiede un considerevole sforzo in risorse umane perché si concentra soprattutto sulla [[progettazione]] e sull'[[implementazione]]).
 
La fase detta di [[compilazione]], traduce ogni file del [[codice sorgente]], scritto nel o nei linguaggi di programmazione, in un [[file oggetto]] contenente il [[Programma (informatica)|programma]] in [[linguaggio macchina]] adeguato all'[[Architettura (computer)#Architettura hardware|architettura hardware]] di destinazione. In seguito tutti i [[file oggetto]] attraversano una fase di [[linking]] per giungere al prodotto finale: il [[file eseguibile]].
 
Alcuni software non vengono compilati in quanto le istruzioni contenute nel [[codice sorgente]] vengono eseguite utilizzando un software detto [[interprete (informatica)|interprete]].
 
=== Il modello di sviluppo ===
{{vedi anche|Modello di sviluppo del software}}
 
La gestione del processo di sviluppo è caratterizzato dalla scelta di un [[modello di sviluppo del software]] codificato nell'ambito dell'[[ingegneria del software]] (''Software Engineering''), esistono:
 
* Ilil modello classico o a [[Modello a cascata|cascata]] (''water-fall''),
* Ilil [[modello a spirale]] (''object oriented''),
* [[metodologia agile]] (''agile software development'', ASD). I metodi agili si contrappongono al modello a cascata (''waterfall model'') e altri [[Modello di sviluppo del software|modelli di sviluppo]] tradizionali, proponendo un approccio meno strutturato e focalizzato sull'obiettivo di consegnare al cliente, in tempi brevi e frequentemente (''early delivery''/''frequent delivery''), software funzionante e di qualità.
 
=== Le versioni ===
La realizzazione del software è un'attività complessa articolata in più fasi, per questo motivo spesso il software è associato ad un prodotto ingegneristico, ma se ne differenzia soprattutto per alcune caratteristiche:
{{vedi anche|Controllo di versione}}
* è molto «[[malleabilità|malleabile]]»;
* è un prodotto ''human intensive'' (e cioè un prodotto che richiede un considerevole sforzo in risorse umane perché si concentra soprattutto sulla [[progettazione]] e sull'[[implementazione]]).
 
Molte volte i software realizzati vengono distribuiti sotto forma di versioni successive, ciascuna identificata da un numero intero progressivo (accompagnata dalla relativa data) in aggiunta uno o più numeri decimali che identificano il codice di [[release (informatica)|rilascio]]: tipicamente l'ordine di rilascio segue un andamento progressivo della numerazione per cui le versioni successive rappresentano cambiamenti delle precedenti con modifiche o miglioramenti in termini di nuove caratteristiche e funzionalità aggiunte e/o [[bug]] corretti con opportune [[patch (informatica)|patch]] oppure ottimizzazioni prestazionali. L''''edizione''' è il principale stadio di una evoluzione del prodotto nel tempo (una sorta di grande revisione o ristrutturazione), mentre le versioni ne rappresentano i minori cambiamenti. La cosiddetta '''[[build (informatica)|build]]''' a volte accompagna un numero di versione. Alcuni produttori (ad esempio [[Microsoft]] nel caso di [[Windows 10]] e successivi) aggiungono, oltre a versione e/o build, anche il numero di '''esperienza''', strato legato principalmente alle caratteristiche dell'interfaccia utente ([[user experience]]).
==== Versione ====
Molte volte i software realizzati vengono rilasciati sotto forma di versioni e [[release (informatica)|release]] successive, ciascuna identificata da un numero intero progressivo con in aggiunta uno o più numeri decimali che identificano la release: tipicamente l'ordine di rilascio segue un andamento progressivo della numerazione dove versione o release successive rappresentano evoluzioni delle precedenti con miglioramenti in termini di nuove caratteristiche e funzionalità aggiunte e/o [[bug]] corretti. L'edizione è il principale stadio di una evoluzione, mentre le versioni ne rappresentano i minori cambiamenti.
 
Molto spesso la versione e le altre informazioni pertinenti sono consultabili nel menù impostazioni\informazioni su...(nome prodotto) oppure, nei sistemi operativi, anche con un comando specifico (ad esempio in Windows è "winver").
=== Licenze d'utilizzo e distribuzione ===
{{Vedi anche|Licenza (informatica)}}
{{Vedi categoria|Licenze software}}
 
== Licenze d'utilizzo e distribuzione ==
{{vedi categoria|Licenze software}}
[[File:Categorie software.png|thumb|upright=1.5|Le differenti categorie del software]]
 
La [[Licenza (informatica)|licenza d'uso]] è un [[documento]] che accompagna il ''software'' e specifica i [[diritto|diritti]] e i [[dovere|doveri]] di chi lo riceve e di chi lo diffonde.
 
Riga 98 ⟶ 103:
* [[Licenza BSD|BSD]]
* [[Licenze Creative Commons|Creative Commons]]
 
Ogni tipo di licenza [[comparazione di licenze libere|differisce dagli altri per vari aspetti]]
Ogni tipo di licenza [[comparazione di licenze libere|differisce dagli altri per vari aspetti]].
 
=== Brevettabilità del software ===
Nell'[[Unione europea]], i software non possono essere oggetto di [[brevetto]], come accade invece negli [[Stati Uniti]]. Il 6 luglio [[2005]], il [[Parlamento europeo]] ha respinto la proposta di [[Direttiva dell'Unione europea|direttiva]] per la ''Brevettabilità delle invenzioni attuate per mezzo di elaboratori elettronici'', sostenuta dalla [[Commissione europea|Commissione]]<ref>{{collegamento interrotto|1=[http://64.233.183.104/search?q=cache:SQehO9LJHPQJ:www.europarl.europa.eu/pv2/pv2%3FPRG%3DCALDOC%26TPV%3DDEF%26FILE%3D20030924%26SDOCTA%3D2%26TXTLST%3D2%26POS%3D1%26LASTCHAP%3D3%26Type_Doc%3DFIRST%26LANGUE%3DIT+proposta+di+direttiva+del+Parlamento+europeo+e+del+Consiglio+relativa+alla+brevettabilit%C3%A0+delle+invenzioni+attuate+per+mezzo+di+elaboratori+elettronici+N+A5-0238/2003&hl=it&ct=clnk&cd=2&gl=it/ Testo della proposta di Direttiva per la brevettabilità del software] |data=aprile 2018 |bot=InternetArchiveBot }}</ref><ref>[https://web.archive.org/web/20120927144046/http://www.europarl.europa.eu/hearings/20021107/juri/wd_directive_it.pdf Argomenti della Commissione Europea a sostegno della brevettabilità]</ref>.
 
La proposta è stata rigettata alla prima votazione con 648 voti contrari, 32 favorevoli, rispetto a 680 schede scrutinate.
Riga 107 ⟶ 113:
Il giorno prima della votazione, la Commissione Europea ha confermato che, in caso di bocciatura, non sarebbe stato presentato un nuovo testo sull'argomento.
 
=== Menù aiuto ===
Questo menù (presente praticamente in ogni programma informaticoapplicativo che preveda l'interazione visiva con utente umano), tipicamente inserito nella barra principale, è quello che fornisce le informazioni nominalistiche sul relativo programma («Informazioni su ...»: nome, produttore, versione, disclaimer), la guida in linea, il supporto, ecc. Spesso il menù è etichettato con un punto di domanda ('''?''').
 
== Diritto d'Autoreautore ==
Fin dall'inizio degli anni Ottanta, c'erano state sentenze che avevano riconosciuto i programmi per elaboratori come opere letterarie e quindi meritevoli di essere protette dal diritto di autore.
Come espresso negli articoli 1 e 2 n. 8 della Legge sul Diritto d'Autore (L.633/41) anche i programmi per elaboratore sono protetti da diritto d'autore in qualsiasi forma espressi purché siano originali. Viene altresì tutelato il materiale preparatorio a differenza delle idee e dei principi che stanno alla base di qualsiasi elemento di un programma (compresi quelli alla base delle sue interfacce) i quali non vengono tutelati.
 
È con il [[decreto legislativo]] 518/1992 in attuazione della direttiva 91/250 che si adotta in Italia la tutela del diritto d'autore anche per i programmi per elaboratore.
Secondo l'articolo 12 bis della legge sopracitata, in caso di lavoro su commissione il titolare del diritto esclusivo di utilizzazione economica è il datore di lavoro. Questo però non fa venire meno i diritti morali di chi ha creato il codice, ovvero il lavoratore dipendente.
 
Il software, secondo la definizione elaborata dall’[[Organizzazione mondiale per la proprietà intellettuale|Organizzazione Mondiale della Proprietà Intellettuale]] (WIPO), viene definito come:{{Citazione|espressione di un insieme organizzato e strutturato di istruzioni in qualsiasi forma o su qualunque supporto capace, direttamente o indirettamente, di far eseguire o far ottenere una funzione o un compito o far ottenere un risultato particolare per mezzo di un sistema di elaborazione elettronica dell’informazione}}Da queste definizioni si deduce ed interpreta l’appartenenza del software ai beni giuridici immateriali e in particolare alla categoria delle creazioni intellettuali; pertanto è tutelato dagli artt. 1 e 2 della [[Diritto d'autore|Legge sul Diritto d'Autore]] (L. 633/41).
Diritti patrimoniali esclusivi:
 
* Pubblicazione (articolo 12 LDA)
L'oggetto sottoposto a tutela (art.1, comma 2, LDA) è il programma per elaboratore, in qualsiasi forma espresso purché originale, quale risultato di creazione intellettuale dell'autore. È compreso inoltre nella tutela il materiale preparatorio per la progettazione del programma stesso.
* Riproduzione permanente o temporanea, totale o parziale, del programma per elaboratore con qualsiasi mezzo o in qualsiasi forma (articolo 64-bis lettera a, articolo 13 LDA)
 
* Modificazione (articolo 64-bis lettera b, articolo 18 LDA)
Restano esclusi dalla tutela (art. 2, comma 8, LDA) le idee e i principi che stanno alla base di qualsiasi elemento del programma, compresi quelli alla base delle sue interfacce. La non tutela delle interfacce dal diritto d'autore è stata stabilita dalla Sentenza C-406/10 del 2 maggio 2012 della [[Corte di giustizia dell'Unione europea|Corte di Giustizia dell'Unione Europea]]. Questo risultato è stato determinato al fine di conseguire l'interoperabilità tra programmi per elaboratori diversi.
* Distribuzione (articolo 64-bis lettera c, articolo 17 LDA)
 
* Noleggio e prestito (articolo 18-bis)
Inoltre l'art.12-bis della legge sopracitata specifica che, salvo patto contrario, il datore di lavoro è titolare del diritto esclusivo di utilizzazione economica del programma per elaboratore creato dal lavoratore dipendente nell'esecuzione delle sue mansioni o su istruzioni impartite dallo stesso datore di lavoro. All'autore è riconosciuto il diritto morale ovvero il diritto di essere menzionato come autore o coautore nelle forme d'uso e nelle interfacce del programma.
* Esecuzione e rappresentazione in forma pubblica (articolo 15 LDA)
 
* Comunicazione al pubblico (articolo 16 LDA)
Così come per altre opere di ingegno anche i diritti di utilizzazione economica per i programmi per elaboratore decadono al compimento del settantesimo anno dopo la morte dell'autore (art. 25, LDA).
* Pubblicazione in raccolta (articolo 18.2 LDA)
 
I Diritti patrimoniali esclusivi sono<ref>{{Cita web|url=https://www.altalex.com/documents/codici-altalex/2014/06/26/legge-sul-diritto-d-autore|titolo=Legge sul diritto d'autore 2020}}</ref>:
* Pubblicazione e utilizzazione economica (art. 12, LDA)
* Riproduzione (artt. 13 e 64-bis lett. A, LDA)
* Modificazione (artt. 18 e 64-bis lett. B, LDA)
* Distribuzione (artt. 17 e 64-bis lett. C, LDA)
* Noleggio e prestito (art. 18-bis LDA)
* Esecuzione e rappresentazione in forma pubblica (art. 15 LDA)
* Comunicazione al pubblico (art. 16 LDA)
* Pubblicazione in raccolta (art. 18.2 LDA)
 
Restano esclusi da tali diritti:
* Uso e correzione di errori (art. 64-ter.1 LDA)
* Copia di backup (64-ter.2 LDA)
* Studio del funzionamento (art. 64-ter.3 LDA)
* [[Interoperabilità]] (art. 64-quater)
 
== Fabbrica software ==
{{vedi anche|Casa di sviluppo}}
Una '''fabbrica software''' (''software factory''), a volte ''software house'', è un’organizzazione (reparto o unità di affari di un’azienda, oppure impresa, ente pubblico o associazione nella loro interezza) che produce software (proprio e/o per altri soggetti). È strutturata secondo una gerarchia di ruoli, presenza di competenze specifiche, impiego di risorse informatiche di sviluppo e di gestione del progetto, processi ben definiti. Solitamente riceve gli elementi in ingresso dal marketing e/o vendite e rilascia i prodotti all’assistenza per l’avvio della manutenzione. Tipicamente non ha solo personale interno ma ricorre a risorse specializzate esterne o a veri e propri fornitori (altre organizzazioni).
 
== Note ==
;Annotazioni
<references group="N"/>
;Fonti
<references/>
 
Riga 132 ⟶ 161:
 
== Voci correlate ==
{{div col|cols=2}}
=== Sviluppo del software ===
=== Concetti generali ===
* [[Aggiornamento software]]
* [[Changelog]]
* [[Ciclo di vita del software]]
* [[Collaudo del software]]
* [[Distribuzione (software)]]
* [[Documentazione del software]]
* [[Ingegneria del software]]
** [[Progettazione (ingegneriaIspezione del software)]]
*** [[Metodologia di sviluppo delManutenzione (software)]]
*** [[Processo softwareMiddleware]]
*** [[CicloMetodologia di vitasviluppo del software]]
*** [[Metrica software]]
* [[Modello di sviluppo del software]]
* [[Open source]]
**** [[Localizzazione software|Localizzazione]]
* [[Product key]]
**** [[Manutenzione (software)|Manutenzione]]
* [[Progettazione (ingegneria del software)]]
**** [[Release candidate]]
* [[Release candidate]]
**** [[Collaudo del software|Collaudo]]
* [[Release to Manufacturing]]
**** [[Changelog]]
* [[Sviluppo del software]]
***** [[Software-in-the-loop|Tecniche di controllo]]
* [[Software as a service]]
**** [[Ispezione del software|Ispezione]]
* [[Software-in-the-loop]]
* [[Software libero]]
* [[Vaporware]]
 
=== Strumenti ===
* [[Compilatore]]
* [[Computer-aided software engineering]]
* [[Linker]]
* [[Libreria (software)]]
* [[Software development kit]]
* [[Toolchain]]
 
=== Procedure su software ===
* [[Installazione (informatica)]]
* [[Configurazione (informatica)]]
* [[Installazione (informatica)]]
* [[Localizzazione software]]
 
=== Tipi di software in relazione alla licenza d'uso ===
Riga 161 ⟶ 205:
* [[Software proprietario]]
* [[Software libero]]
** [[Adozioni di software libero]]
* [[Software libero/draft]]
* [[Software Free/Libero/Open-Source]] (FLOSS)
** [[Free Software Users Group]] (FSUG)
* [[Free and Open Source Software]] (FOSS)
** [[Differenza tra Software Libero e Open Source]]
 
=== Tipi di software ===
* [[:Categoria:Software per genere|Elenco di tipi di software]]
** Software per l'[[Software di produttività personale|office automation]]
* [[Utility]]
 
=== Professioni correlate ===
Riga 179 ⟶ 222:
=== Fondazioni e organizzazioni ===
* [[Creative Commons]]
* [[Free Software Foundation]] (FSF)
* [[Software house]]
* [[Società di consulenza]]
{{div col end}}
 
== Altri progetti ==
{{interprogetto|commons=Category:Software|commons_preposizione=sul|etichetta=software|wikt=software|wikt_etichetta=software}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
 
{{Controllo di autorità}}
{{portale|informatica|software libero}}
 
[[Categoria:Software| Software]]