Nel mondo globalizzato e tecnologico in cui viviamo, è necessario cercare modi per migliorare il sistema informatico digitale. Il software, ad esempio, è in continua evoluzione, poiché è necessario correggere gli errori esistenti o aggiungere nuove caratteristiche e funzionalità. Questa necessità evolutiva del sistema software lo rende "inaffidabile" e predisposto a difetti, ritardi di consegna e sforamenti dei costi. La complessità dei sistemi software richiede che i professionisti del settore ragionino, progettino, codifichino e comunichino attraverso componenti software. L'ingegneria del software è diventata più interessante a causa di questa esigenza ed è diventata un'area di recente approccio. Anche attraverso di essa è emersa la branca dell'architettura del software, che lavora con l'uso di strati, con l'obiettivo di facilitare l'assegnazione delle funzionalità dei requisiti e di supportare la flessibilità e la portabilità, che si traduce in facilità di riutilizzo e manutenzione. Ciò avviene grazie a interfacce standard ben definite che incapsulano i componenti. Oltre alla modularizzazione, l'architettura supporta una serie di attributi di qualità e prestazioni.