Projeto da matéria de Engenharia de Software
Project description
Downloader Multithread com GUI
Projeto desenvolvido para a disciplina de Engenharia de Software. A aplicação foi construída em Python com interface em Tkinter e realiza downloads em múltiplas threads, dividindo o arquivo em partes e montando o arquivo final ao término da transferência.
Integrantes
- Guilherme
- Luan Robert
Funcionalidades
- Download de arquivos em múltiplas threads
- Interface gráfica com Tkinter
- Montagem automática do arquivo final
- Geração de logs do processo de download
- Pipeline CI/CD com testes, build, cobertura, deploy e notificação
Estrutura do Projeto
src/app.py: ponto de entrada da aplicaçãosrc/downloader/: lógica principal de download, segmentação, rede e IOsrc/gui/: interface gráficatests/: testes unitáriosscripts/send_notification.py: script de envio de e-mail ao final do pipeline.github/workflows/cicd.yml: pipeline CI/CDpyproject.toml: configuração do pacote Python
Requisitos
- Python 3.9 ou superior
tkinterdisponível no ambiente para execução da interface- Dependências listadas em
requirements.txt
Instalação das dependências:
pip install -r requirements.txt
Instalação do projeto em modo local:
pip install -e .
Como Executar
Depois de instalar o projeto:
c14-np1
Alternativamente, a partir da raiz do projeto:
PYTHONPATH=src python -m app
Como Rodar os Testes
Execução dos testes unitários:
python -m pytest
Execução com geração de relatório JUnit:
python -m pytest --junitxml=report.xml
Cobertura de Testes
O projeto utiliza pytest-cov para gerar relatório de cobertura em HTML.
python -m pytest --cov=downloader --cov=gui --cov=app --cov-report=html
O relatório gerado fica na pasta htmlcov/.
Pipeline CI/CD
O projeto possui um pipeline configurado no GitHub Actions com as seguintes etapas:
-
testsExecuta os testes unitários e salva o relatórioreport.xmlcomo artifact. -
buildGera a distribuição do pacote Python compython -m builde publica o conteúdo dedist/como artifact. -
coverageExecuta os testes com cobertura e publica o relatório HTML como artifact. -
pypi-publishPublica o pacote no PyPI após o sucesso das etapas de build e cobertura. -
notificationExecuta um script Python externo para enviar um e-mail com o resumo final do pipeline.
Paralelismo do Pipeline
Após a etapa tests, os jobs build e coverage podem prosseguir de forma independente. Isso atende ao requisito de possuir jobs em paralelo dentro do pipeline.
Artifacts Gerados
test-report: relatório dos testes unitáriosrelease-dists: arquivos gerados emdist/coverage-report: relatório HTML de cobertura
Deploy
O deploy adotado neste projeto é a publicação do pacote Python no PyPI, caracterizando deploy de artefato de build.
Projeto no PyPI:
https://pypi.org/project/c14-np1/
Para a publicação automática funcionar, o repositório precisa estar configurado no PyPI como Trusted Publisher ou usar autenticação por token de API.
Notificação por E-mail
A etapa de notificação utiliza o script send_notification.py e depende dos seguintes secrets no GitHub Actions:
EMAIL_USEREMAIL_PASSNOTIFICATION_EMAIL
Opcionalmente, também podem ser definidos:
SMTP_SERVERSMTP_PORT
O script envia um resumo com o status de:
- testes
- build
- cobertura
- deploy
Testes Implementados
O projeto possui mais de 20 cenários de testes unitários cobrindo:
- fluxo principal de segmentação e montagem de arquivos
- formatação e conversão de taxas e tamanhos
- casos de erro e entradas inválidas
- cenários de borda, como valores vazios, zero e ordenação de partes
Arquivos de teste:
Links de Teste
Alguns arquivos públicos que podem ser usados para validar a aplicação:
Uso de IA
Ferramentas de IA foram utilizadas como apoio para:
- revisão da estrutura do workflow CI/CD
- refinamento da documentação
- organização incremental das etapas do pipeline
As sugestões geradas foram revisadas e adaptadas manualmente antes de serem incorporadas ao projeto.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file c14_np1-0.1.5.tar.gz.
File metadata
- Download URL: c14_np1-0.1.5.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1936b4aa7e679609a98afd7c754f69a172fa85b396ad5ff3bb5e712cf6cb2061
|
|
| MD5 |
9ace3971ad6a75a9fd627bf8ac6166e5
|
|
| BLAKE2b-256 |
4df25bc78e54b75d2f17abf2c1685165f0b169c09f5aa0b6c342223329bdf9f7
|
Provenance
The following attestation bundles were made for c14_np1-0.1.5.tar.gz:
Publisher:
cicd.yml on guilhermecmr/C14-NP1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
c14_np1-0.1.5.tar.gz -
Subject digest:
1936b4aa7e679609a98afd7c754f69a172fa85b396ad5ff3bb5e712cf6cb2061 - Sigstore transparency entry: 1274419455
- Sigstore integration time:
-
Permalink:
guilhermecmr/C14-NP1@53cd9b338471293b7adf956feb535d421ff3d62e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/guilhermecmr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cicd.yml@53cd9b338471293b7adf956feb535d421ff3d62e -
Trigger Event:
push
-
Statement type:
File details
Details for the file c14_np1-0.1.5-py3-none-any.whl.
File metadata
- Download URL: c14_np1-0.1.5-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f853c783956f88c9eacc31ec141604e4a6c76a36511ea8fd9ffee1c10f5b4ce7
|
|
| MD5 |
0880e2d46d0c97cbe44fe06b2decdff5
|
|
| BLAKE2b-256 |
4fbc4373b1869058c3949da17ba26d1bc4b2b599b8a13376d387bdf95f4664ad
|
Provenance
The following attestation bundles were made for c14_np1-0.1.5-py3-none-any.whl:
Publisher:
cicd.yml on guilhermecmr/C14-NP1
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
c14_np1-0.1.5-py3-none-any.whl -
Subject digest:
f853c783956f88c9eacc31ec141604e4a6c76a36511ea8fd9ffee1c10f5b4ce7 - Sigstore transparency entry: 1274419594
- Sigstore integration time:
-
Permalink:
guilhermecmr/C14-NP1@53cd9b338471293b7adf956feb535d421ff3d62e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/guilhermecmr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cicd.yml@53cd9b338471293b7adf956feb535d421ff3d62e -
Trigger Event:
push
-
Statement type: