Les distincions entre les activitats esmentades fins ara no sempre són clares com es volgués en les teories clàssiques d'enginyeria de programari. El disseny, en particular, pot descriure el funcionament intern d'un sistema en diferents nivells de detall, cadascuna d'ells es col·loca en una posició intermèdia entre l'anàlisi i codificació.
 
Les distincions entre les activitats esmentades fins ara no sempre són clares com es volgués en les teories clàssiques d'enginyeria de programari. El disseny, en particular, pot descriure el funcionament intern d'un sistema en diferents nivells de detall, cadascuna d'ells es col·loca en una posició intermèdia entre l'anàlisi i codificació.
   −
Normalment s'entén per "'''disseny de l'arquitectura'''" al disseny de "molt alt nivell", que només defineix l'estructura del sistema en termes de la mòduls de programari que es compon i les relacions macroscòpiques entre ells. A aquest nivell de disseny pertanyen fórmules com client-servidor o "tres nivells", o, més generalment, les decisions sobre l'ús de l'arquitectura de maquinari especial que s'utilitzi, el sistema operatiu, DBMS, Protocols de xarxa, etc.
+
Normalment s'entén per "'''disseny de l'arquitectura'''" al disseny de "molt alt nivell", que només defineix l'estructura del sistema en termes de la mòduls de programari que es compon i les relacions macroscòpiques entre ells. A aquest nivell de disseny pertanyen fórmules com client-servidor o "tres nivells", o, més generalment, les decisions sobre l'ús de l'arquitectura de maquinari especial que s'utilitzi, el sistema operatiu, sistema gestor de bases de dades, protocols de xarxa, etc.
    
Un nivell intermedi de detall pot definir la '''descomposició''' del sistema en mòduls, però aquesta vegada amb una referència més o menys explícita a la manera de descomposició que ofereix el particular llenguatge de programació amb el que el desenvolupament s'implementarà, per exemple, en un disseny realitzat amb la tecnologia d'objectes, el projecte podria descriure el sistema en termes de classes i les seves interrelacions.
 
Un nivell intermedi de detall pot definir la '''descomposició''' del sistema en mòduls, però aquesta vegada amb una referència més o menys explícita a la manera de descomposició que ofereix el particular llenguatge de programació amb el que el desenvolupament s'implementarà, per exemple, en un disseny realitzat amb la tecnologia d'objectes, el projecte podria descriure el sistema en termes de classes i les seves interrelacions.
 
=== Codificació del programari ===
 
=== Codificació del programari ===
   −
Durant aquesta etapa es realitzen les tasques que comunament es coneixen com '''programació''', que consisteix, essencialment, a portar a codi font, en el llenguatge de programació triat, tot el dissenyat en la fase anterior. Aquesta tasca la realitza el programador, seguint del tot les línies impostos en el disseny i en consideració sempre als requisits funcionals i no funcionals (ERS) especificats en la primera etapa.
+
Durant aquesta etapa es realitzen les tasques que comunament es coneixen com '''programació''', que consisteix, essencialment, a portar a codi font, en el llenguatge de programació triat, tot el dissenyat en la fase anterior. Aquesta tasca la realitza el programador, seguint del tot les línies impostos en el disseny i en consideració sempre als requisits funcionals i no funcionals especificats en la primera etapa.
    
És comú pensar que l'etapa de programació o codificació (alguns l'anomenen '''implementació''') és la que requereix la major part del treball de desenvolupament del programari, però, això pot ser relatiu (i generalment aplicable a sistemes de petit port) ja que les etapes prèvies són crucials, crítiques i poden portar bastant més temps. Se sol fer estimacions d'un 30% del temps total consumit en la programació, però aquesta xifra no és consistent ja que depèn en gran mesura de les característiques del sistema, la seva criticitat i el llenguatge de programació escollit. Mentre menor és el nivell del llenguatge major serà el temps de programació requerit, així per exemple es trigaria més temps a codificar un algorisme en llenguatge assemblador que el mateix programat en llenguatge C.
 
És comú pensar que l'etapa de programació o codificació (alguns l'anomenen '''implementació''') és la que requereix la major part del treball de desenvolupament del programari, però, això pot ser relatiu (i generalment aplicable a sistemes de petit port) ja que les etapes prèvies són crucials, crítiques i poden portar bastant més temps. Se sol fer estimacions d'un 30% del temps total consumit en la programació, però aquesta xifra no és consistent ja que depèn en gran mesura de les característiques del sistema, la seva criticitat i el llenguatge de programació escollit. Mentre menor és el nivell del llenguatge major serà el temps de programació requerit, així per exemple es trigaria més temps a codificar un algorisme en llenguatge assemblador que el mateix programat en llenguatge C.
   −
Mentre es programa l'aplicació, sistema, o programari en general, es realitzen també tasques de '''depuració''', això és la tasca d'anar alliberant al codi dels errors factibles de ser trobats en aquesta fase (de semàntica, sintàctica i lògica). Hi ha una mena de solapament amb la fase següent, ja que per depurar la lògica és necessari realitzar proves unitàries, normalment amb dades de prova, clar és que no tots els errors seran trobats només en l'etapa de programació, hauran altres que es trobaran durant les etapes subsegüents. L'aparició d'algun '''error funcional''' (mala resposta als requeriments) eventualment pot portar a retornar a la fase de disseny abans de continuar la codificació.
+
Mentre es programa l'aplicació, sistema, o programari en general, es realitzen també tasques de '''depuració''', això és la tasca d'anar alliberant al codi dels errors factibles de ser trobats en aquesta fase (de semàntica, sintàctica i lògica). Hi ha una mena de solapament amb la fase següent, ja que per depurar la lògica és necessari realitzar proves unitàries, normalment amb dades de prova, clar és que no tots els errors seran trobats només en l'etapa de programació, hi haurà altres que es trobaran durant les etapes següents. L'aparició d'algun '''error funcional''' (mala resposta als requeriments) eventualment pot portar a retornar a la fase de disseny abans de continuar la codificació.
    
Durant la fase de programació, el codi pot adoptar diversos estats, depenent de la forma de treball i del llenguatge triat, a saber:
 
Durant la fase de programació, el codi pot adoptar diversos estats, depenent de la forma de treball i del llenguatge triat, a saber:
 
:* '''Proves d'integració:''' Es realitzen una vegada que les proves unitàries van ser concloses amb èxit, amb aquestes s'intenta assegurar que el '''sistema complet''', fins i tot els sotsistemes que componen les peces individuals grans del programari funcionin correctament en operar i interoperar en conjunt.
 
:* '''Proves d'integració:''' Es realitzen una vegada que les proves unitàries van ser concloses amb èxit, amb aquestes s'intenta assegurar que el '''sistema complet''', fins i tot els sotsistemes que componen les peces individuals grans del programari funcionin correctament en operar i interoperar en conjunt.
   −
Les proves normalment s'efectuen amb els anomenats dades de prova:
+
Les proves normalment s'efectuen amb les anomenades dades de prova:
 
:* '''dades típiques''' a les quals es pot veure sotmès el sistema, els mòduls o els blocs de codi;
 
:* '''dades típiques''' a les quals es pot veure sotmès el sistema, els mòduls o els blocs de codi;
 
:* dades que porten a '''condicions límits''' al programari per tal de provar la seva tolerància i robustesa;
 
:* dades que porten a '''condicions límits''' al programari per tal de provar la seva tolerància i robustesa;
 
:* dades que provoquen '''condicions eventuals''' o particulars poc comuns, a les quals el programari normalment no estarà sotmès però poden ocórrer.
 
:* dades que provoquen '''condicions eventuals''' o particulars poc comuns, a les quals el programari normalment no estarà sotmès però poden ocórrer.
   Exception encountered, of type "Error"