← → 翻页 · ESC 索引
Field Notes · Vol.I
CSE430 · 01 / 10
§ 1.0 · Project Proposal

Java Tabbing CLI

A Console-Based Debate Tournament Tabulation System

Automated draw generation, ballot recording, and rankings for small tournaments — three prelims, semifinal, and final.

AklHak Hossain · 2022-3-60-057·github.com/Akhlak-Hossain-Jim/Java-Tabbing-cli
Presented to
Shartaz Sajid Nahid
Lecturer, Dept. of CSE
Team
Akhlak Hossen
Jannatul Ferdous Naba
Jarin Sabah Bushra
Md. Mehedi Hasan
ID
2022-3-60-057
2023-1-60-074
2023-1-60-062
2022-3-60-119
Java · Maven · Console I/O
CSE430 · Project Proposal
Field Notes · Vol.I
CSE430 · 02 / 10
§ 1.1 · Project Overview

Project at a Glance

A lightweight, offline-capable tournament management engine.

Lines of Code
1,530+
Pure Java, no external deps
Classes
12
Modular design
Build System
Maven
Single JAR deployment
Rounds
5
3 Prelims + Semifinal + Final
Data Format
.dat
Binary file persistence
Platform
JVM
java -jar tabbing.jar
Java · Maven · Console I/O
§ 1.1 · Project Overview
Field Notes · Vol.I
CSE430 · 03 / 10
§ 2.0 · Problem Space

Manual Tabbing

Most university tournaments in Bangladesh still tab by hand — paper, ad-hoc spreadsheets, under time pressure between rounds.

"A single addition error can send the wrong team to the semifinal — a fairness problem, not just a clerical one."
— Documented failure mode
Draw Errors
Power-pairing
Re-sorting by wins & speaker points between each round, done by hand — slow and error-prone.
Arithmetic Mistakes
Ranking
Break decisions hinge on cumulative scores across 3 rounds. One error = wrong team advances.
Time Pressure
15-30 min
Gap between rounds. Every minute spent computing the tab is a minute the tournament runs late.
Five recurring failure modes in manual tabbing
§ 2.0 · Problem Space
Field Notes · Vol.I
CSE430 · 04 / 10
§ 3.0 · Solution Architecture

Workflow Pipeline

A self-contained CLI — single source of truth for the tournament director.

Tournament Lifecycle · Pipeline
01
Create
Name & initialise tournament, persists to .dat
02
Register
Teams (3 debaters each) + Adjudicators with rating
03
Import
Bulk .dat import with validation
04
Draw
Power-pairing, judge allocation, room assignment
05
Ballot
Score entry (70-80), winner determined, tie rejected
State Machine · Guarded Transitions
R1
Require
≥1 team, even count, ≥half adjudicators
R2
Advance
Only when prior round fully scored
R3
Break
Top 4 auto-computed after round 3
R4-5
Eliminate
3-judge panels, champion crowned
AppShifter state machine · 20+ states
§ 3.0 · Solution
Field Notes · Vol.I
CSE430 · 05 / 10
§ 4.0

Testing
Methodology

From unit tests to end-to-end — 12 techniques on a real codebase.

Testing case study
§ 4.0 · Testing
Field Notes · Vol.I
CSE430 · 06 / 10
§ 3.1 · Manual vs Automated

Before / After

Before · Manual

Paper + Spreadsheets

  • Hand-calculated power-pairing between rounds
  • Manual score addition — arithmetic errors common
  • Judge allocation tracked separately
  • No tooling for small, offline events
After · Java Tabbing CLI

Automated + Enforced

  • Power-pairing via sort by wins then speaker score
  • Ballot entry with bounded input, tie rejection
  • Preconditions enforced in code — impossible to skip a round
  • Offline, single JAR, zero deployment cost
The shift from manual to automated tournament tabbing
§ 3.1 · Comparison
Field Notes · Vol.I
CSE430 · 07 / 10
§ 4.1 · Testing Techniques

12 Testing Approaches

White-box, black-box, and state-based techniques on a single codebase.

Unit Testing
White Box
Score accumulation, draw generation, team sorting — JUnit targets.
Control Flow
Coverage
586-line switch-based Main.java — JaCoCo for statement & branch.
State Transition
FSM
AppShifter FSM — valid/invalid transitions, re-entry conditions.
Boundary Value
BVA
Scores at 69/70/80/81, team counts 0/1/2/odd.
Equivalence
Partitioning
Valid vs tied vs out-of-range; even vs odd teams.
Decision Table
Testing
All precondition combinations for round access rules.
12 techniques mixed · white-box to black-box
§ 4.1 · Testing Techniques
Field Notes · Vol.I
CSE430 · 08 / 10
§ 4.2 · Testing Strategy

From Unit to E2E

Testing Pipeline · Pyramid
01
Unit
Score, Team, Round, MatchUp in isolation
02
Integration
Main + Round + MatchUp + Score + DataReader seams
03
System
Full tournament via piped stdin — champion to display
04
Negative
Corrupt .dat, non-numeric input, mid-round exit
05
Regression
Fix == → .equals(), comparator order, dead branches
Also Applied · Complementary
06
Usability
Manual session with a real tab director
07
Exploratory
"Try to corrupt state from the keyboard"
08
Performance
64-team sanity check on sorting & draw generation
09
Defects Found
== instead of .equals, unstable comparator, dead code
Full test plan · JUnit + Coverage + E2E scripts
§ 4.2 · Testing Pipeline
Field Notes · Vol.I
CSE430 · 09 / 10
§ 5.0 · Expected Outcomes

A working offline tool
+ a documented test plan
catching real defects.

White-box, black-box, and state-based techniques each catch distinct classes of bugs — several already present.

Tool
Single JAR · 0 config
Offline · No server
Testing
JUnit + JaCoCo
Scripted E2E transcripts
Impact
Remove human error
from tournament admin
github.com/Akhlak-Hossain-Jim/Java-Tabbing-cli
§ 5.0 · Outcomes
Field Notes · Vol.I
CSE430 · 10 / 10
Ref. 01 · Closing
"A console tabbing system —
because tournaments need correctness,
not dashboards."

Thank you.
Questions & discussion welcome.

Java Tabbing CLI·CSE430 · Shartaz Sajid Nahid·Jul 2026
github.com/Akhlak-Hossain-Jim/Java-Tabbing-cli
Ref. 01 · Closing