Arquitetura de software envolve a integração de metodologias e modelos de desenvolvimento de software, mas não podemos confundi-la com metodologias para a análise e projeto de sistema. A arquitetura de software é um corpo de métodos e técnicas que nos ajuda a gerenciar as complexidades do desenvolvimento de software.
Essa mudança não está só relacionada com a adição e remoção de funcionalidades, mas também está relacionada com a manutenção do código ao longo do ciclo de vida do software. Essa manutenção pode melhorar ou deteriorar tanto atributos externos de qualidade do software, os quais são percebidos pelos usuários (desempenho, tolerância a falhas, disponibilidade), quanto os atributos internos de qualidade do software, os quais são percebidos pelos envolvidos no desenvolvimento (testabilidade, legibilidade, reusabilidade).
Uma vez que um dos principais objetivos de se projetar uma arquitetura é o de atingir a qualidade desejada pelos interessados no sistema, se torna claro o papel da arquitetura em conduzir a evolução do software, uma vez que ela conterá decisões que contribuirão para a preservação da qualidade do sistema durante seu ciclo de vida.
Existem três entendimentos fundamentais sobre a arquitetura que ajudam a contextualizá-la em relação à engenharia de software:
Voltando a nossa analogia de um prédio, é evidente que todo edifício tem uma arquitetura. Não significa dizer que esta arquitetura é funcional e que deixa os construtores orgulhosos, mas, mesmo assim, todo edifício, seja ele feio ou bonito, tem uma arquitetura.
O mesmo pode ser observado com os softwares. Através desta observação alguns questionamentos são levantados: De onde vem a arquitetura desta aplicação? Quais as propriedades desta arquitetura? Esta arquitetura é boa ou é ruim?
Mesmo com estes questionamentos é inegável que um software possui uma arquitetura.
O segundo conceito flui a partir do primeiro, em virtude de decisões realizadas ao longo do projeto ou de necessidades específicas é possível que uma aplicação não tenha uma única arquitetura. Isso quer dizer que é possível que uma aplicação tenha uma mistura de diferentes arquiteturas.
A Arquitetura de software refere-se à essência de uma aplicação, às principais decisões de design, às principais abstrações que caracterizam uma aplicação.
Em uma compreensão simplista, tradicional, e imprecisa, a arquitetura é um produto específico de uma determinada fase do processo de desenvolvimento. Mas para que esta premissa seja atendida seria necessário conhecer todos os requisitos do projeto. Assim, se pensarmos na arquitetura como um produto de uma fase limitando o seu momento de atuação, pricipalmente no início de projeto, estamos restringindo a arquitetura a apenas algumas decisões de design. Em muitos casos, estas decisões necessitam ser violadas por necessidades posteriores identificadas ao longo do projeto. Assim, temos que encarar a arquitetura de software como uma atividade que permeia todo o processo de desenvolvimento.
X