miniatura|Etapes del desenvolupament del programari|400x400px En l'enginyeria de programari, el procés de desenvolupament de programari (o cicle de vida del desenvolupament de programari) és una part del desenvolupament de programari. Es defineix com una seqüència d'activitats que han de ser seguides per un equip de desenvolupadors per generar o mantenir un conjunt coherent de productes.

Es pot definir un procés com un marc de treball que ajuda el cap del projecte a controlar-ne la gestió i les activitats d'enginyeria. Això ajuda a establir el "qui fa què, quan i com" i un mecanisme de control per veure l'evolució del projecte.

Procés Unificat de Rational (RUP) El procés unificat de Rational (RUP) és un procés del desenvolupament de programari proposat per la companyia Rational Software el qual incorpora els coneixements anomenats best practices i està suportat per un conjunt d'eines, com el Llenguatge Unificat de Modelatge UML.

Els mètodes ofereixen tècniques de modelatge per les diferents etapes del procés de desenvolupament, incloent-hi anotacions especials, gràfics i criteris per desenvolupar programari de qualitat.

Les eines CASE (Computer Aided Software Engineering) ajuden a l'automatització de tot el procés de construcció del programari obtenint resultats d'alta qualitat.

Etapes del desenvolupament de programari Anàlisi de requisits L'objectiu principal d'aquesta etapa és obtenir el document d'especificació dels requisits. Aquest document se'l coneix com a especificació funcional. S'entén per especificació com la tasca d'escriure detalladament el programari a desenvolupar d'una forma matemàticament rigorosa. Aquestes especificacions es pacten amb els clients, els quals solen tenir una visió molt abstracta del resultat final, però no sobre les funcions que hauria de complir el programari.

L'anàlisi de requisits és regulat per la IEEE SA 830-1998, document el qual conté pràctiques recomanades per a l'especificació dels requeriments del programari.

Disseny i arquitectura Aquesta etapa determina el funcionament general del programari sense entrar en detalls concrets sobre la seva implementació tècnica. També es tenen en consideració les implementacions tecnològiques necessàries com per exemple el maquinari i la xarxa.

Programació La complexitat i durada d'aquesta etapa depèn dels llenguatges de programació utilitzats, així com el disseny previ realitzat. Consisteix en la implementació

Un bon disseny inicial simplifica aquesta etapa. Mai s'hauria d'arribar a l'etapa de programació directament des del principi.

Proves En aquesta etapa els desenvolupadors de programari comproven que aquest funcioni de la manera esperada i especificada en les etapes anteriors. Aquesta és una etapa molt important doncs permet detectar errors de funcionament del programari abans de ser lliurat a l'usuari final. Es considera una bona pràctica que les proves les realitzin persones diferents dels desenvolupadors del programari.

Desplegament i manteniment El desplegament consisteix en l'entrega o posada en marxa del programari a l'usuari final. Es produeix un cop ha sigut degudament provat i avaluat.

El manteniment del programari consisteix en la correcció, millora i optimització d'aquest després del seu lliurament final a l'usuari. Això pot comportar la inclusió de codi addicional que no s'ajusta al disseny original per tal de solucionar un problema o ampliar la funcionalitat del programari al client final.

Podem distingir quatre tipus de manteniment de programari: Perfectiu: millora la qualitat interna dels sistemes, com per exemple el codi font i l'optimització del rendiment. Evolutiu: canvis que es realitzen en el programari per cobrir les noves necessitats de l'usuari. Adaptatiu: són les modificacions que afecten els entorns on el sistema opera, com el sistema operatiu i les bases de dades. Correctiu: són els canvis realitzats per solucionar errors de programari que no s'han pogut detectar a la fase de proves, o bé errors que s'han generat durant l'addició de noves característiques en el manteniment.

Models de desenvolupament de programari Els models de desenvolupament de programari són una representació abstracta que han estat utilitzats des dels orígens de la tecnologia de la informació.

Poden ser adaptats i modificats segons les necessitats del programari durant el procés de desenvolupament.

Podem diferenciar els models de desenvolupament de programari en 3 tipus:

Model en cascada També conegut com a model tradicional, s'anomena "en cascada" per la posició de les fases de desenvolupament en aquesta, que fan la impressió que cauen com si fossin un salt d'aigua (cap avall). 

Les diferents fases són: Anàlisi Especificació de requisits Disseny del programari Construcció o Implementació del programari Fase de Proves  Integració   Instal·lació  Manteniment Les fases tenen un curs de forma estricta, és a dir, fins que no ha acabat una fase, no "baixa" a la següent. Fins i tot es pot realitzar una revisió abans de començar la següent fase, cosa que obre a la possibilitat de canvis, a més d'assegurar-te que la fase s'ha executat correctament.

Aquest control és un dels avantatges més destacades d'aquest model, en el qual també s'inclou la minimització de les despeses en la planificació del projecte.

En canvi els desavantatges que s'hi troben a part de ser un flux seqüencial són que no involucren a l'usuari en el desenvolupament del projecte i cal molt de temps per al seu desenvolupament. També si l'usuari oblida especificar algun requeriment, el cost pot ser molt elevat. 

Model de prototip miniatura|Model de prototip El model de prototip de programari consisteix en la construcció d'aplicacions(prototips incomplets) que mostren la funcionalitat del producte mentre està en desenvolupament, tenint en compte que el resultat final pot no seguir la lògica del programari original.

Permet donar a conèixer al client els requeriments del programari en les primeres fases del procés de desenvolupament. També ajuda els desenvolupadors a entendre que s'espera exactament del producte en fase de desenvolupament.

Les fases de desenvolupament del model de prototip de programari són: Identificació dels requeriments bàsics. Entendre les bases del producte en terme d'interfície d'usuari. Desenvolupar el prototip inicial. Anàlisi del prototip. El prototip és presentat al client, es recullen les opinions de manera organitzada per a futurs canvis. Revisió i millora del prototip. Amb les opinions aconseguides, es discuteixen les possibles millores al prototip original.

Model de desenvolupament incremental miniatura|Exemple de tasques en un model incremental El model de desenvolupament incremental consisteix a anar incrementant el contingut del model fase per fase (disseny, implementació i fase de proves) constantment fins a acabar el programari. Inclou tant el desenvolupament del producte com el seu posterior manteniment.

Les claus són: El model aplica diferents petits models salt d'aigua, on totes les fases d'un salt d'aigua formen part d'una petita part del sistema. Com que aplica models salt d'aigua, després de cada iteració es pot fer una revisió per comprovar que tot ha anat correctament, i es pot canviar les errades que s'hi poden haver trobat. El client pot respondre als canvis i analitzar constantment el producte per a possibles canvis. L'enviament del producte inicial és més ràpid i pot ser més barat, però el producte resultant pot ser molt més car del previst. Mentre es va progressant, poden aparèixer problemes d'estructura no presents en prototips de fases anteriors.

Model de desenvolupament iteratiu i incremental Model obtingut de combinar el model iteratiu amb el model de desenvolupament incremental. La relació entre ells dos ve determinada per la metodologia de desenvolupament i el procés de construcció del programari.

Facilita el procés de detecció d'errors i problemes importants abans que es manifestin i puguin causar un desastre (gràcies al model iteratiu, permet el backtracking).

Model espiral miniatura|Model en espiral Les activitats d'aquest model es conformen en una espiral, en la qual cada bucle o iteració representa un conjunt d'activitats. Aquestes activitats se seleccionen segons el factor de risc que representen, començant pel bucle anterior.

Es combinen aspectes claus del model de cascada i el model ràpid d'aplicacions per intentar aprofitar els avantatges que aporten els dos models.

Els principis bàsics d'aquest model són: El model se centra en l'avaluació del risc que es produeix i en la minimització del risc partint el projecte en diferents segments més petits i proveint facilitat de canvis en el procés de desenvolupament. Cada cicle consta d'una progressió per la mateixa seqüència de passos, per cada part del producte i per cada un dels seus nivells d'elaboració. Cada viatge per l'espiral travessa quatre quadrants: Determinació d'objectius Identificació i resolució de riscos Desenvolupament i proves Planificar la següent iteració Cada cicle comença amb una identificació de les seves condicions de victòria. El risc identificat en cada procés determina el nivell d'esforç i el grau de detall del desenvolupament del programari.

Model ràpid d'aplicacions El model de desenvolupament ràpid d'aplicacions (Rapid application development - RAD) combina el desenvolupament iteratiu amb la ràpida construcció de prototips en comptes de planificacions a llarg termini. La falta d'aquesta planificació normalment permet que s'escrigui molt més ràpidament el programari, i fa més fàcil el canvi de requeriments.

El procés de desenvolupament ràpid comença amb el desenvolupament de models de dades preliminars i la utilització de tècniques estructurades per als models de processament. A la següent fase, els requeriments són verificats mitjançant prototips. Aquestes fases es repeteixen de manera iterativa.

Els principis bàsics són: L'objectiu clau és el desenvolupament ràpid i l'enviament d'un sistema d'alta qualitat al menor preu possible Intenta reduir el risc que conté el projecte trencant-lo en segments més petits i proveir facilitats de canvis durant el procés de desenvolupament. Apunta a produir un sistema d'alta qualitat, principalment amb la creació de prototips, alta activitat dels usuaris i utilització d'eines de desenvolupament computades. Involucrament actiu de l'usuari és imperativa . Produeix programari de producció iterativa, al contrari d'un prototip de llançament. Produeix informació necessària per a facilitar futurs desenvolupaments i manteniments. El control del projecte es basa a prioritzar el desenvolupament i controlar les dates d'entrega del projecte (deadlines). Si un projecte comença a retardar-se, la prioritat es basa a reduir els requeriments perquè entri dins els terminis d'entrega i no en fer augmentar la data d'entrega final. Els avantatges són el control de riscos, la millor qualitat i la relació entrega-cost-qualitat (entregar el projecte dins els terminis al menor cost possible mantenint la qualitat). Els desavantatges són el risc a una nova aproximació, requeriment de temps per a la recol·lecció de recursos, menys control general, disseny pobre i llargs sistemes.

Model de desenvolupament àgil Amb "model de desenvolupament àgil" ens referim a un grup de metodologies de desenvolupament programari basades en el desenvolupament iteratiu, on requeriments i solucions evolucionen via col·laboracions entre equips organitzats.

S'utilitza el desenvolupament iteratiu com a base per a advocar un punt de vista més lleuger i centrat en les persones que en el cas de les solucions tradicionals. Els processos àgils utilitzen retroalimentació en comptes de planificació com a principal mecanisme de control. Aquesta retroalimentació es canalitza per mitjà de proves periòdiques i versions freqüents del programari.

Codificació i correcció