Avaliação técnica para a posição de full-stack engineer (Python) na VC-X Solutions.
O objetivo aqui é realizar a implementação de duas estruturas de dados clássicas: a fila e pilha, não utilizando outras estruturas auxiliares, que sejam nativas da linguagem de programação em questão (eg. listas, tuplas, etc.). A especificação e demais orientações acerca da execução do teste, submetidas pela empresa, podem ser conferidas aqui.
O seu workspace já deve possuir instalados os seguintes ítems:
Em relação ao gerador de ambientes virtuais para Python, nesse projeto foi utilizado o venv. Para instalá-lo, execute no terminal:
sudo apt-get install python3-venv
De modo a instalar o ambiente virtual do Python, e as dependências de projeto, executar no terminal:
python3 -m venv env \ # Instala ambiente virtual
&& source env/bin/activate \ # Ativa ambiente virtual localmente
&& pip install --upgrade pip --no-cache-dir \ # Instala e atualiza package manager, sem usar ~/.cache/pip
&& pip install -r requirements.txt --no-cache-dir # Instala dependências de projeto, sem usar ~/.cache/pip
Com o ambiente virtual e dependências instaladas, os testes unitários pode ser executados. Nesse projeto, o pytest está sendo utilizado, pelo fato de o mesmo possuir uma verbosidade superior ao unittest, (na minha opinião). Assim, para executar os testes e também gerar o relatório de cobertura, execute no terminal:
pytest --cov=src -vv src/tests/
Caso você queira só executar os testes unitários, com verbosidade:
pytest -vv
Concernindo padronização de código, o code linting nesse projeto está sendo feito mediante a utilização da ferramenta prospector, que por sua vez converge vários outros analisadores de integridade de código (como mypy para análise estática de tipos e mccabe, para aferição de complexidade ciclomática).
Para rodar o code linting no código em Python, basta executar:
prospector
A saída deverá, no cenário em que nenhuma inconsistência é encontrada, será similar à: