Data | Versão | Modificação | Autor |
---|---|---|---|
06/09/2019 | 0.1 | Criação e desenvolvimento do documento | Shayane |
A arquitetura de software é uma abordagem usada no desevolvimento do software para auxiliar no direcionamento da equipe de trabalho de um projeto. Ela é uma abstração de um sistema que seleciona alguns detalhes e busca representá-los em um certo nível de abstração. A importância de adotar padrões arquiteturais pode vir a auxiliar em ganhos de eficiência na manutenção, evolução e agilidade.
De acordo com Bass, 2003, a arquitetura de software de um programa ou de um sistema computacional é a estrutura ou as estruturas do sistema, que compreende elementos de software, as propriedades visíveis e externas desses elementos, e as relações entre eles.
Complementar à este autor, Krafzig, 2004 define a arquitetura de software como um conjunto de declarações, que descreve os componentes de software e atribui funcionalidades de sistema para cada um deles. Ela descreve a estrutura técnica, limitações e características dos componentes, bem como as interfaces entre eles. Por este processo descrever as partes de um sistema, é possível esboçar o esqueleto do sistema e, por isso, tornar-se o plano de mais alto-nível da construção de cada novo sistema.
O primeiro passo dado pela equipe do projeto foi avaliar as potenciais tecnologias a serem usadas no projeto de desenvolvimento do produto proposto. Para cumprir este objetivo, foram feitos estudos que buscaram averiguar a viabilidade em usar as tecnologias previamente selecionadas, por meio de artigos e pesquisas de mercado. As tecnologias selecionadas previamente para o back-end foi Django-Rest, já para o front-end foram os frameworks Vue.js e React.
Após a prévia seleção a escolha consistiu na avaliação dos seguintes tópicos:
- Qual é o nível da curva de aprendizado?
- Qual é a familiaridade da equipe de desenvolvimento com as tecnologias?
- Qual é a relação entre o deadline de entrega do produto com a curva de aprendizado?
Após análise dos tópicos de avaliação de tecnologias, foi possível então averiguar que para o front-end a opção de tecnologia mais viável é a Vue.js e para back-end Django-rest. A seguir apresenta-se suas análises.
- Curva de aprendizado: Pelas fontes pesquisadas sobre as tecnologias, Vue mostrou-se com uma curva de aprendizado menor, em relação à React [1] e [2]. Em relação ao back-end, Django tem uma curva de aprendizado mais alta em relação a Flask [3], por exemplo. Apesar disto, os membros têm noções básicas do framework e de python.
- Familiaridade com as tecnologias: De acordo com o quadro de conhecimentos atual, a equipe tem familiaridade com Python e pelos membros da equipe já terem conhecimento do padrão arquitetural MVC, possibilitando um back-end mais prático e produtivo. Já no front-end, não há conhecimentos consideráveis de Javascript. Apesar disto, será uma grande chance de aprendizado para todos do grupo de trabalhar com uma tecnologia em tendência no mercado de trabalho.
- Curva de aprendizado x Tempo: Devido a imprevistos e definição tardia do tema a ser desenvolvido, o deadline está corrido. Logo, é importante que as tecnologias usadas tenham uma curva de aprendizado menor, com o objetivo de trabalhar a produtividade da equipe.
Após análise dos fatores descritos na seção anterior, o cenário de desenvolvimento usando estas tecnologias é positivo. Apesar de Vue.js não ser um framework que a equipe domina, é possível equilibrar com o uso do Django, que usa python, sendo mais acessível para os integrantes de acordo com o quadro de conhecimento.
BASS, Len; CLEMENTS, Paul; KAZMAN, Rick. Software architecture in practice. Addison-Wesley Professional, 2003.
KRAFZIG, Dirk et al. Service-Oriented Architecture Best Practices. Indiana: Prentice Hall PTR, 2004.