Problem Statement
Deep trace analysis of the comparison experiment (100 APKs, 600s, 3 reps) revealed 17 issues in rvsmart's exploration algorithm that collectively explain the -4.39pp method coverage gap vs APE (p<0.001).
The most critical finding: BACK action is never executed (0 of 251,081 actions) due to a hash domain mismatch in ActionSelector. Additionally, 24.5% of all iterations are wasted on ping-pong cycles with no detection, and static analysis data is parsed at activity-level when widget-level data is available in the JSON.
Affected Domains
Scope
Bugs (6)
- BUG-01 (CRITICAL): BACK permanently disabled —
getParents(contentHash) vs record(structHash) mismatch in ActionSelector
- BUG-02 (CRITICAL): No cycle detection — 2-state ping-pong wastes 24.5% of iterations (61,470 total)
- BUG-03 (HIGH):
getSaturationRate() returns 1.0 when totalActions=0 → infinite RESTART loops
- BUG-04 (HIGH): Stuck recovery always RESTARTs to same screen (no escape for single-activity apps)
- BUG-05 (MEDIUM): Preference screen content hash explosion traps Phase 1
- BUG-06 (MEDIUM): SystemDialogDetector only recognizes 4 system packages
Algorithm Gaps (4)
- GAP-1 (HIGH):
isClusterForced() is dead code (never called by ActionSelector)
- GAP-2 (MEDIUM): NavigationMap limited to observed transitions
- GAP-3 (LOW): 3-failure filter excludes transient failures permanently from Phase 1
- GAP-4 (MEDIUM): Saturation based on execution count, not success count
Saturation/Tracking (3)
- SAT-1:
recordAction() called BEFORE executeAction() — action counted even on silent failure
- SAT-2: Widget marked saturated with 4 failed attempts (success ignored)
- SAT-3:
isInteractive() excludes longClickable — invisible to LLM prompt
Static Analysis Data Loss (4)
- SA-1: Widget-level MOP scoring (handlers per-widget available but discarded)
- SA-2: WTG-guided widget targeting (which widget opens which activity)
- SA-3: Static inputType for InputValueGenerator
- SA-4: Handler-level navigation hints for LLM
Acceptance Criteria
Priority
High — blocks further calibration experiments.
Track
Quick Path (bug fixes + mechanical improvements, no design decisions)
References
- Analysis:
docs/20260310_comparacao_resultados.md (Sections 8-18)
- Source:
rvsec/rvsec-android/rvsmart/src/main/java/br/unb/cic/rvsmart/
- Experiment data:
data/results/cmp01-cmp08/
Problem Statement
Deep trace analysis of the comparison experiment (100 APKs, 600s, 3 reps) revealed 17 issues in rvsmart's exploration algorithm that collectively explain the -4.39pp method coverage gap vs APE (p<0.001).
The most critical finding: BACK action is never executed (0 of 251,081 actions) due to a hash domain mismatch in ActionSelector. Additionally, 24.5% of all iterations are wasted on ping-pong cycles with no detection, and static analysis data is parsed at activity-level when widget-level data is available in the JSON.
Affected Domains
Scope
Bugs (6)
getParents(contentHash)vsrecord(structHash)mismatch in ActionSelectorgetSaturationRate()returns 1.0 when totalActions=0 → infinite RESTART loopsAlgorithm Gaps (4)
isClusterForced()is dead code (never called by ActionSelector)Saturation/Tracking (3)
recordAction()called BEFOREexecuteAction()— action counted even on silent failureisInteractive()excludeslongClickable— invisible to LLM promptStatic Analysis Data Loss (4)
Acceptance Criteria
isClusterForced()wired into ActionSelectorrecordAction()moved to after executionisInteractive()includeslongClickablePriority
High — blocks further calibration experiments.
Track
Quick Path (bug fixes + mechanical improvements, no design decisions)
References
docs/20260310_comparacao_resultados.md(Sections 8-18)rvsec/rvsec-android/rvsmart/src/main/java/br/unb/cic/rvsmart/data/results/cmp01-cmp08/