Sistema CRUD de gestão financeira pessoal evoluído no TP4 com pipeline CI/CD automatizada via GitHub Actions — build, testes, cobertura JaCoCo ≥ 85% e entrega contínua a cada push.
- Sobre o Projeto
- Pipeline CI/CD
- Tecnologias
- Arquitetura
- Testes e Cobertura
- Como Executar
- Estrutura do Projeto
- Documentação Completa
- Autor
- Licença
O SAIKOO é um sistema CRUD de gestão financeira pessoal construído com Java 21 e Spring Boot 3.3, cobrindo o portfólio completo do investidor: Ações, FIIs, Criptomoedas, Renda Fixa, Precatórios e Ativos Reais. A interface usa dark theme inspirado em terminais profissionais de home broker.
O TP4 evolui o sistema incorporando uma pipeline CI/CD completa com GitHub Actions, automatizando validação, cobertura de código, testes E2E com Selenium e entrega do artefato a cada alteração no repositório.
O foco do TP4 é a automação completa do ciclo de vida do software via dois workflows independentes em .github/workflows/.
Dispara em todo push (qualquer branch) e em pull requests para main.
push / pull_request
│
▼
Job 1: testes-unitarios-integracao (timeout: 15 min)
├── Setup Java 21 (Temurin) + cache Maven
├── mvn -B clean verify -Dtest="!AtivoSeleniumTest"
│ ├── compila o projeto
│ ├── executa 50+ testes unitários e de integração
│ └── JaCoCo gate — falha o build se cobertura < 85%
├── Upload: surefire-reports
└── Upload: jacoco-coverage-report
│
│ (needs — só avança se job 1 passou)
▼
Job 2: testes-e2e (timeout: 10 min)
├── mvn -B test -Dtest=AtivoSeleniumTest
│ └── Chrome headless (configurado no próprio teste)
└── Upload: selenium-screenshots (if: always)
Dispara somente após o CI passar com sucesso em main (via workflow_run) ou em push de tag v*.*.*.
CI concluído com sucesso em main (ou tag v*.*.*)
│
▼
Job 1: build-artefato (timeout: 10 min)
├── mvn -B clean package -DskipTests
│ └── gera saikoo-1.0.0.jar (fat-JAR Spring Boot)
└── Upload: saikoo-jar (30 dias)
│
│ (needs + somente em tags v*.*.*)
▼
Job 2: release (timeout: 5 min)
├── Cria GitHub Release com JAR anexado
└── Gera changelog automático dos commits
| Run | Trigger | Status | Duração | Artefatos |
|---|---|---|---|---|
| CI #1 | push main |
✅ Success | 2m 17s | jacoco-report · screenshots · surefire-reports |
| CD #1 | workflow_run (CI passou) | ✅ Success | 21s | saikoo-jar (43,5 MB) |
| CD #2 | tag v1.0.0 |
✅ Success | 48s | saikoo-jar + GitHub Release |
| Prática | O que resolve |
|---|---|
workflow_run no CD |
CD só executa após CI aprovado — impede artefato de código quebrado |
-B em todos os mvn |
Logs limpos no runner — sem ANSI colors e sem prompts interativos |
concurrency com cancel |
Cancela runs obsoletos em branches de feature, preserva execuções em main |
timeout-minutes por job |
Impede que runner seja bloqueado por teste ou build travado |
permissions: contents: read no CI |
Princípio do menor privilégio — CI não precisa escrever no repositório |
| Categoria | Tecnologia | Versão | Uso |
|---|---|---|---|
| Backend | Java | 21 | Linguagem principal |
| Backend | Spring Boot | 3.3.0 | Web, Data JPA, Thymeleaf, Validation |
| Backend | H2 Database | — | Banco em memória para dev e testes |
| Frontend | Thymeleaf | SSR | Templates com arquitetura de componentes |
| Frontend | Bootstrap 5 + Icons | — | Layout responsivo e ícones |
| Frontend | Chart.js | — | Gráficos interativos no dashboard |
| Testes | JUnit 5 + Mockito | — | Testes unitários e de integração |
| Testes | Selenium WebDriver | 4.21.0 | Automação E2E no browser |
| Testes | Jqwik | 1.8.5 | Property-based e fuzz testing |
| Testes | JaCoCo | 0.8.12 | Cobertura de código (mínimo 85%) |
| CI/CD | GitHub Actions | — | Pipeline CI — build, testes, cobertura |
| CI/CD | GitHub Actions | — | Pipeline CD — empacotamento e release |
Layered Architecture com separação estrita entre Controller, Service, Repository e Model.
src/main/java/com/infnet/financas/
├── controller/ # Roteamento HTTP — zero lógica de negócio
├── service/ # Regras de negócio + DashboardMetrics (Java 21 record)
├── repository/ # Spring Data JPA
├── model/ # Entidade JPA + enums aninhados + getPrecoMedio()
└── exception/ # Exceções de domínio + @ControllerAdvice global
| Pacote | Cobertura de Linhas |
|---|---|
com.infnet.financas |
100% |
com.infnet.financas.controller |
100% |
com.infnet.financas.service |
100% |
com.infnet.financas.exception |
100% |
com.infnet.financas.model |
86% |
| Total (excl. boilerplate) | ≥ 85% — PASS |
| Classe | Tipo | Casos |
|---|---|---|
AtivoFinanceiroServiceTest |
Unitário (Mockito) | 12 |
AtivoControllerTest |
Unitário (MockMvc) | 17 |
AtivoFinanceiroRepositoryTest |
Integração (@DataJpaTest) | 7 |
AtivoFinanceiroTest |
Unitário (modelo) | 7 |
GerenciadorExcecoesGlobalTest |
Unitário | 4 |
HomeControllerTest |
Unitário (MockMvc) | 1 |
CenariosAdversosTest |
Cenários adversos | 8 |
AtivoFinanceiroPropriedadeTest |
Property-based (Jqwik) | 4 × 1.000 |
AtivoSeleniumTest |
E2E (Selenium) | 6 |
SaikooApplicationTest |
Contexto Spring | 2 |
Pré-requisitos: Java 21+, Maven 3.9+, Google Chrome (para testes Selenium)
# Clonar o repositório
git clone https://github.com/andrebecker84/PB_TP4.git
cd PB_TP4
# Iniciar a aplicação
mvn spring-boot:run| URL | Descrição |
|---|---|
http://localhost:8080/ |
Redireciona para o dashboard |
http://localhost:8080/ativos/dashboard |
Dashboard financeiro |
http://localhost:8080/ativos |
Gestão de Ativos (CRUD) |
http://localhost:8080/h2-console |
Console H2 (dev) |
# Suíte completa + relatório JaCoCo
mvn clean verify
# Apenas testes unitários e de integração (sem Selenium)
mvn clean verify -Dtest="!AtivoSeleniumTest" -DfailIfNoTests=false
# Apenas testes Selenium
mvn test -Dtest=AtivoSeleniumTest -DfailIfNoTests=falseArtefatos locais após mvn clean verify:
| Artefato | Local |
|---|---|
| Cobertura JaCoCo | target/site/jacoco/index.html |
| Screenshots Selenium | src/test/resources/screenshots/ |
| Log da aplicação | logs/saikoo-<data-hora>.log |
Dashboard financeiro capturado durante execução do teste E2E Selenium — shouldVisitDashboardWithCharts
PB_TP4/
├── .github/
│ └── workflows/
│ ├── ci.yml # Pipeline CI (build, testes, cobertura)
│ └── cd.yml # Pipeline CD (empacotamento e release)
├── doc/
│ ├── DOCUMENTACAO_PB_TP4.md
│ └── images/
│ └── card.svg
├── src/
│ ├── main/
│ │ ├── java/com/infnet/financas/
│ │ │ ├── SaikooApplication.java
│ │ │ ├── controller/
│ │ │ ├── service/
│ │ │ ├── repository/
│ │ │ ├── model/
│ │ │ └── exception/
│ │ └── resources/
│ │ ├── templates/
│ │ ├── static/
│ │ └── application.properties
│ └── test/
│ └── java/com/infnet/financas/
│ ├── SaikooApplicationTest.java
│ ├── unit/
│ └── selenium/
│ ├── AtivoSeleniumTest.java
│ └── pageobjects/
├── pom.xml
├── LICENSE
└── README.md
Consulte a documentação técnica detalhada em doc/DOCUMENTACAO_PB_TP4.md.
MIT — André Luis Becker. Consulte o arquivo LICENSE.
