Desenvolver software não é uma tarefa fácil. É por esse motivo que muitos projetos de software fracassam durante seu desenvolvimento ou ao obter seus resultados. Entre esses maus resultados, encontramos os que custaram muito acima do orçamento, os incompletos e os que não solucionam os problemas como deveriam resolver.
Não é fácil alcançar um bom produto de software devido à complexidade envolvida em seu processo de desenvolvimento. Além de lidar com a complexidade inerente ao problema, devemos também nos preocupar em como o software resolve esse problema. Assim, o software deve, além de resolver o problema, resolvê-lo da forma esperada. Ou em outras palavras:
Espera-se que, além de função, o produto de software possua os atributos de qualidade esperados.
Exemplo 1
Considere um programa que realize as quatro operações: soma, subtração, multiplicação e divisão. Se o tempo de resposta de suas operações for sempre maior do que o tempo que seu usuário está disposto a esperar, esse programa não terá utilidade mesmo que sempre retorne o resultado correto.
Podemos observar no Exemplo 1 que o programa funciona corretamente, mas, por não exibir o desempenho esperado, acaba sendo abandonado. Por outro lado, consertar esse programa para que seja útil é relativamente fácil. Por exemplo, se o programa não multiplica rápido o bastante, basta apenas reimplementar a função de multiplicação para que tenha um melhor desempenho.
Exemplo 2
Considere agora o SASF, já apresentado no Capítulo XX. Considere também que ele se mostra incapaz de responder em menos de dois segundos às operações de aluguel de filmes. Uma vez que os usuários não estão dispostos a esperar esse tempo pela principal operação do sistema, isso resultará numa má experiência de uso, que será motivo para que seus usuários deixem de usá-lo e também deixem de pagar pelo serviço.
Acontece que diminuir o tempo de resposta de uma funcionalidade no SASF, dado o tamanho do sistema, pode não ser tão simples quanto diminuir o tempo de execução de uma função matemática. O alto tempo de resposta de um serviço no SASF pode ser função de uma ou mais decisões tomadas ao longo do desenvolvimento que resultaram na sua estrutura e organização interna. Essa estrutura e organização é o que chamamos de arquitetura. Como o atendimento aos atributos de qualidade do software se deve em grande parte à sua arquitetura, surge a necessidade de estudá-la. E, por fim, é através do estudo das características e técnicas de projeto de arquitetura que poderemos projetar e desenvolver melhores produtos de software.










