FinanceJ
Java desktop personal finance app (income, expenses, budgets). Team of 6 developers, LOG240 course (Testing & Maintenance). 5,250+ LOC, 133 tests (100% JaCoCo coverage), 85 commits. MVC architecture with Singleton, DAO and AbstractTableModel patterns. Most active contributor (28 commits).

The problem
As part of the LOG240 course (Testing & Maintenance) at ÉTS, our team of 6 developers had to build a Java desktop application allowing users to track income and expenses against a budget, without requiring accounting knowledge. The challenge: deliver a reliable application with complete test coverage in ~3.5 months (January – April 2026).
Constraints
Imposed MVC architecture with Java Swing. Embedded Apache Derby database (no external server). Maven pipeline with mandatory quality gates (Checkstyle, PMD, JaCoCo). 100% code coverage target. GUI integration tests with AssertJ Swing (black-box testing). Structured documentation with equivalence classes and identified defects. Git Flow with per-developer/feature branches.
The solution
MVC architecture with Java Swing, structured around 4 functional modules: accounts (CRUD + real-time balance and net worth), categories/budgets, transaction ledger (income/expenses with account, category and beneficiary associations), and HTML financial reports (summary and detailed). Design patterns: Singleton (DerbyUtils — DB connection), DAO (AccountDAO, CategoryDAO — data access abstraction), MVC (Model-View-Controller with Swing), TableModel (AbstractTableModel for data binding). Full Maven pipeline with JUnit 4 for unit testing, AssertJ Swing for GUI integration tests, JaCoCo for coverage, and Checkstyle/PMD/QALab for static analysis and quality tracking.
Tech stack
Outcomes
5,250+ total lines of code (13 production classes + 9 test classes). Test/code ratio of 61% (1,981 / 3,269 LOC). 133 unit and integration tests with 100% coverage target achieved. 85 commits across the project, 6 contributing developers. 4 DB tables (account, category, ledger, beneficiary). Generated HTML financial reports (summary and detailed). Git Flow with per-developer/feature branches (ralph/lab4-account, jeremy/lab4-infrastructure, etc.).
My contribution & learnings
28 commits — most active contributor on the project. Developed the complete Account module (DAO, TableModel, tests). Integrated tests to reach 100% coverage (133/133). Resolved merge conflicts and final consolidation on main. Key learning: investing in GUI integration tests (AssertJ Swing) catches bugs that unit tests alone miss — interactions between Swing components reveal threading and data binding issues invisible in isolation. Static analysis (Checkstyle, PMD) combined with JaCoCo creates a comprehensive safety net that gives confidence to refactor without regressions.