Skip to content

Desafio técnico proposto pela XP Inc. onde é simulada uma tela de histórico de ordens na bolsa de valores, sendo renderizada para UWP e WPF utilizando Xamarin.Forms.

License

ahcantarim/xpinc-xamarin-forms

Repository files navigation

Contributors Forks Stargazers Issues MIT License


xpinc-xamarin-forms

Desafio Técnico | XP Inc.

Desafio técnico proposto pela XP Inc. (Tribo Bull) onde é simulada uma tela de histórico de ordens na bolsa de valores, renderizada para UWP e WPF utilizando Xamarin.Forms.

Ver problemas abertos · Reportar um problema

Sumário

  1. Sobre este projeto
  2. Configurações do ambiente de desenvolvimento
  3. Estrutura da aplicação
  4. Execução da aplicação
  5. Teste de aumento de carga
  6. Testes unitários
  7. Análise de cobertura de código
  8. Análise de performance
  9. Licença
  10. Contato

Sobre este projeto

Desafio composto pelas etapas abaixo:

1. Layout
  • Criação da tela de histórico.
  • A tela deve ser renderizada tanto em UWP (Universal Windows Platform) quanto em WPF (Windows Presentation Foundation), utilizando Xamarin.Forms.
2. Criação do Mock
  • A tela deve sofrer alterações constantes semelhante a execução de ordens na bolsa de valores.
  • A cada 50 milissegundos, incluir um item novo na lista e/ou modificar os itens existentes.
  • A tela deve refletir essa alteração.
3. Desafio extra #1
  • Simular momentos de aumento de carga, onde múltiplos itens da lista são alterados.
4. Testes unitários
  • A aplicação deve conter ao menos 80% de cobertura de testes unitários.
5. Desafio extra #2
  • Gerar os relatórios de cobertura de código utilizando o Coverlet.
6. Análise de performance
  • Realizar uma análise de performance da aplicação, fazendo um comparativo entre UWP e WPF, principalmente ao uso de processamento e memória.

Tecnologias utilizadas

Configurações do ambiente de desenvolvimento

Para obter uma cópia local atualizada e que possa ser executada corretamente, siga os passos abaixo.

Pré-requisitos

  • Visual Studio com os seguintes componentes inclusos na instalação:
    • Desenvolvimento móvel com .NET
    • Desenvolvimento com a Plataforma Universal do Windows

Clonando o repositório

git clone https://github.com/ahcantarim/xpinc-xamarin-forms.git

Estrutura da aplicação

A solução está dividida em quatro projetos, conforme imagem:

Solution Explorer

  • XPInc.Cantarim.UI.Mobile.CrossPlatform: projeto cross-platform com alto nível de compartilhamento de código entre as plataformas alvo.

  • XPInc.Cantarim.UI.Mobile.CrossPlatform.UWP: projeto alvo para UWP (Universal Windows Platform).

  • XPInc.Cantarim.UI.Mobile.CrossPlatform.WPF: projeto alvo para WPF (Windows Presentation Foundation).

  • XPInc.Cantarim.UI.Mobile.CrossPlatform.Test: projeto para testes de unidade do código cross-platform.

Execução da aplicação

Independente da plataforma alvo escolhida para execução, a aplicação terá o mesmo comportamento.

A cada 50 milissegundos é simulada uma alteração no histórico de ordens.

Nessa simulação, sorteia-se uma ação a ser realizada:

  • Incluir nova ordem: uma nova ordem aleatória é adicionada à listagem, com Quantidade Executada zerada.

  • Alterar ordem existente: sorteia-se um número de ordens que serão alteradas e, para cada ordem sorteada, a Quantidade Executada é incrementada de forma aleatória. Ordens totalmente executadas (Quantidade Executada = Quantidade) são removidas da listagem, enquanto ordens parcialmente executadas (Quantidade Executada < Quantidade) continuam sendo exibidas, mas com valores atualizados em tela.

  • Ambos: as ações anteriores são executadas mais vezes do que seriam comumente.

Exemplo da execução do projeto alvo UWP

Universal Windows Platform

Exemplo da execução do projeto alvo WPF

Windows Presentation Foundation

Teste de aumento de carga

O método responsável por simular alterações no histórico de ordens, sorteia a quantidade de ordens que deverão ser modificadas na listagem.

Essa quantidade pode ser grande ou pequena e, para facilitar a análise, um log foi escrito neste momento para exibir:

  • A quantidade atual de ordens no histórico;

  • A quantidade de ordens que deverão ser alteradas, com base no sorteio prévio;

  • A quantidade atualizada de ordens no histórico, desconsiderando ordens que após a alteração podem ter sido totalmente executadas;

Conforme imagem, nota-se que existem momentos em que a quantidade de ordens alteradas é relativamente grande quando comparada com a quantidade de ordens existentes, simulando assim um aumento na carga de processamento e na atualização da tela:

Output Window

Testes unitários

O projeto conta com testes unitários do MSTest para garantir seu funcionamento em diversas situações.

Atualmente, todos os testes estão sendo executados com êxito, confirmando o resultado esperado:

Test Explorer

Análise de cobertura de código

Com base nos testes unitários escritos para validação do código, foi gerado o relatório de cobertura com o Coverlet.

Atualmente, o projeto conta com uma cobertura de código de +92%:

Coverlet Report

Análise de performance

É possível notar que, em ambos os projetos alvo, o desempenho é muito parecido.

No entanto, há diferenças perceptíveis quanto ao uso de memória e CPU:

Diagnóstico do projeto alvo UWP

O uso de memória teve um pico de 120 MB, mantendo-se sempre constante após inicialização e carga inicial da aplicação.

O uso de CPU teve um pico de 42%, sendo bem variável e mantendo-se em uma média abaixo de ~25%.

Diagnostic Tools UWP

Diagnóstico do projeto alvo WPF

O uso de memória teve um pico de 128 MB, sendo bem variável e, na média, até melhor que a aplicação UWP.

O uso de CPU teve um pico de 38%, mantendo-se sempre constante e em uma média acima de ~25%.

Diagnostic Tools WPF

Licença

Distribuído através da licença MIT. Veja LICENSE para mais informações.

Contato

André Cantarim

LinkedIn

🔝 Voltar ao topo

About

Desafio técnico proposto pela XP Inc. onde é simulada uma tela de histórico de ordens na bolsa de valores, sendo renderizada para UWP e WPF utilizando Xamarin.Forms.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published