Arquitetura-de-Software

Arquitetura de Software: Breve Introdução

Vamos relembrar os conceitos de Arquitetura de Software e Requisitos funcionais e não funcionais

Continuando a série de posts sobre Arquitetura de software e o fenômeno dos aplicativos para dispositivos móveis, vamos relembrar alguns conceitos importantes para não somente projetos de aplicativos mas sim para qualquer projeto de TI que trabalhamos no dia a dia, seja de infra estrutura, software, processos, etc.

Na faculdade de TI em algum momento aprendemos sobre Engenharia de Software onde nossos ilustres professores nos apresentaram a obra de Roges S. Pressman.

Eu entendo que arquitetura de Software é um tópico dentro de Engenharia de Software, pelo fato de Engenharia de Software tratar de forma ampla diversas fases e aspectos de projetos de software como riscos, decisões, etc. No entanto Arquitetura de Software fica encarregada de tratar de forma detalhada os aspectos que envolvem em como o software será feito para que os requisitos sejam atendidos. Componentes envolvidos, como serão colocados no ecossistema da aplicação, como será integrado, como será feita a segurança da aplicação, armazenamento de dados, camada de transporte e protocolos, e a documentação desses artefatos envolvidos, etc.

O que é arquitetura de Software e qual seu objetivo?

Basicamente a arquitetura de software consiste na definição dos componentes de software, suas propriedades externas, e seus relacionamentos com outros softwares. O termo também se refere à documentação da arquitetura de software do sistema.
Sendo a arquitetura de software uma disciplina em maturação, sem regras claras, a ação do arquiteto de software é ainda uma composição de arte e ciência.
A arquitetura de software tem como objetivo, projetar um sistema computacional com base nos requisitos funcionais e não funcionais demandados de diversas áreas de uma entidade pública ou privada de qualquer segmento.

Qual a importância da arquitetura de software?

Arquiteto_Software

A arquitetura de software é uma etapa que permite projetar o sistema computacional seguindo os requisitos funcionais e não funcionais e faz uso de documentações em forma de diagramas, documentação de visão de projeto, requisitos funcionais, casos de teste, critérios de aceite, riscos de projeto, premissas e restrições, escolhas de tecnologias, regras de integração, padrões a serem seguidos, etc.
Arquitetura de software é essencial para definir exatamente quais componentes a solução deve e vai ter, como será a comunicação com sistemas externos se necessário e como será tratada os aspectos de segurança, resiliência, falhas, etc e com isso auxilia na diminuição de riscos de projeto, previsão de esforço necessário para realização do projeto e estimativa de custos, alinhamento de expectativas entre as partes envolvidas.

Requisitos Funcionais

Diagrama-de-Requisitos-FuncionaisUm requisito de sistema de software que especifica uma função que o sistema ou componente deve ser capaz de realizar. Estes são requisitos de software que definem o comportamento do sistema, ou seja, o processo ou transformação que componentes de software ou hardware efetuam sobre as entradas para gerar as saídas. Esses requisitos capturam as funcionalidade sob o ponto de vista do usuário.

Requisitos Não Funcionais

descricao-itens-nao-funcionaisEm engenharia de sistemas de software, um requisito não funcional de software é aquele que descreve não o que o sistema fará, mas como ele fará. Assim, por exemplo, têm-se requisitos de desempenho, requisitos da interface externa do sistema, restrições de projeto e atributos da qualidade. A avaliação dos requisitos não funcionais é feita, em parte, por meio de testes, enquanto que outra parte é avaliada de maneira subjetiva.

Arquitetura de software e os requisitos de software

arquitetura-de-softwareO projeto da arquitetura de software é uma etapa essencial no desenvolvimento de sistemas de software de grande porte e complexos.

Dentro deste contexto, a arquitetura de software é fundamental para o desenvolvimento de linhas de produção de software onde se tem um conjunto de funcionalidades concebidas e implementadas a partir da mesma arquitetura (de software) base. Entretanto, antecedendo a etapa de projeto da arquitetura de software, há a necessidade de fazer o levantamento dos requisitos do sistema.

De um modo geral, o conjunto de requisitos de um sistema é definido durante as fases iniciais do processo de desenvolvimento. Tal conjunto de requisitos é visto como uma especificação do que deveria ser implementado. Os requisitos são descrições de como o sistema deveria se comportar, e contêm informações do domínio da aplicação e restrições sobre a operação do sistema.

Durante a fase de elicitação de requisitos, um projetista ou arquiteto de software faz uso de sua experiência a fim levantar os requisitos, buscando identificar características do sistema a ser desenvolvido. Além disso, informações do domínio juntamente com informações de estilos arquiteturais existentes podem ser utilizados como fontes de dados que auxiliam na identificação dos requisitos.

Você precisa pensar sobre a Arquitetura da sua aplicação (Software/Sistema) antes de sair fazendo algo!

arquitetura-de-software_homeAgora que relembramos os conceitos básicos de Arquitetura de Software, posso afirmar que você sabe a importância desse processo no seu projeto.

Antes de sair fazendo qualquer coisa em software, pense sobre ele. Veja os requisitos que você precisa atender, e pense em COMO você pode atender e COMO você vai fazer pra que os requisitos sejam atendidos.

Eu falo isso por que para iniciantes em desenvolvimento de software, é comum  sair codificando classes, etc e ir pensando em tempo de desenvolvimento como vai ser. De certa forma é importante ter em mente e visão clara do que precisa ser feito e como ser feito, para ajudar nas estimativas, identificação de riscos, pontos de atenção, necessidade de recursos, possíveis limitações tecnológicas e principalmente evitar de perder tempo refazendo e acabar impactando as estimativas.

Ja ouvi sobre muitos casos em que o desenvolvedor fez escolhas tecnologicas com base na tecnologia e não pensou nos requisitos e no meio do projeto descobriu que a tecnologia tinha uma limitação de recurso que impedia o projeto de evoluir de forma segura e ainda trazia uma serie de problemas de instabilidade que não foi previsto anteriormente e acabou por condenar todo o trabalho.

Se você já entendeu os requisitos do projeto, é sobre ele que você tem que olhar.

Evite escolher tecnologias simplesmente pelo "achismo", veja se as tecnologias atendem realmente e são realmente necessárias, frameworks e APIs podem sofrer com descontinuidade de suporte, considere escolher tecnologias maduras, com comunidades que mantém uma documentação atualizada e suporte.

Faça uma documentação breve sobre suas escolhas arquiteturais e com o tempo você pode ir melhorando e acrescentando mais detalhes, nesse momento você consegue identificar melhorias e de fato é importante você ter a visão do caminho a ser percorrido até concretizar seu projeto.

Agora que você tem a visão sobre o que precisa ser feito e como será feito... bem... mão a obra!

Vamos continuar essa conversa? Deixe um comentário!

 

 

Deixe um comentário