Gostaria de abordar hoje sobre as capacidades que uma arquitetura bem planejada deve contemplar para proporcionar bons indices de qualidade. Este tema se torna extremamente importante se olharmos sob a otica de que a qualidade afeta diretamente a satisfacao do cliente e envolvidos com o sistema, sendo um ponto fundamental para o sucesso de um projeto de software. Foram eleitas basicamente as seguintes 11 capacidades:DisponibilidadeE a capacidade do sistema se manter no ar para uso devido. Diz-se que o sistema possui alta disponibilidade quando se mantem disponivel a maior parte do tempo. Quando se contrata servicos de infra-estrutura, geralmente e acorda um percentual de disponibilidade que tal infra deve garantir, podendo pagar multas caso nao cumpra o acordo, sao as chamadas SLA's de disponibilidade. RobustezE a caracteristica pela qual se mede o nivel de tolerancia a falhas do sistema. O software deve ser capaz de prever situacoes inusitadas vindas de seus usuarios e reagir com medidas que o mantenha estavel, ou seja, sem apresentar falhas.GerenciabilidadeE a capacidade que mede o quao um sofware e configuravel. A configuracao dos niveis de logs gerados por um determinado software e um bom exemplo disso. FlexibilidadeCaracteristica inerente a maneira em como um determinado software se comporta a mudancas, tanto arquiteturais quanto funcionais. Por exemplo, se um software hoje acessa uma base de dados Oracle, diz-se que ele e flexivel caso seja possivel muda-lo para acessar uma base de dados SQL Server sem que para isso sejam necessarias grandes alteracoes em seu codigo-fonte. DesempenhoEsta caracteristica esta relacionada a utilizacao de recursos, como por exemplo, o tempo de processamento de uma grande quantidade de mensagens em uma fila JMS ou o tempo de processamento de uma consulta no banco de dados. CapacidadeSe refere as limitacoes impostas ao sistema, com o que o sistema deve suportar. Por exemplo: um sistema deve suportar 500 acessos simultaneos. ResilienciaEste nome um tanto quanto "exotico" se refere ao grau de estabilidade do sistema mediante a picos de processamentos. Exemplo: um determinado sistema tem que suportar uma carga durante 3 horas e depois voltar ao seu estado normal sem sofrer quedas ou gerar defeitos. EscalabilidadeE a capacidade de um determinado sistema ser flexivel a ponto de prever o seu crescimento, ou seja, possbilita o seu incremento de funcionalidade e capacidades sem se tornar obsoleto, acompanhando sempre as necessidades do usuario. ExtensibilidadeE a capacidade que o sistema tem de crescer pela adicao de novos componentes e que, muitas vezes, permita ao sistema fazer algo que ele ja faz, mas de forma diferente. O polimorfismo em classes e um bom exemplo de extensibilidade em sistemas orientados a objetos, sendo possivel atraves do uso de programacao para interfaces e nunca para classes com implementacao concreta. ReusabilidadePermite que um determinado sistema seja usado em contextos diferentes, ou entao, que seus componentes sejam usados tambem em outras aplicacoes. Este tipo de reusabilidade de componentes facilita muito o desenvolvimento de aplicacoes corporativas, pois, proporciona uma maior facilidade de manutencao e ganho na produtividade do software.SegurancaE a caracteristica que permite avaliar o quanto um sistema e protegido, dadas as suas condicoes