Skip to content

v0.9.6 - Self-Test FP-Reduction (43% Noise weniger) + Perf-Optimierungen

Choose a tag to compare

@nrodear nrodear released this 31 May 21:54
· 2709 commits to main since this release

Highlights

Dogfooding-Workflow eingefuehrt: analyser.exe --path . --full --profile selftest-quiet --report-html sca-selftest.html triagiert das eigene Repo. Siehe HowTo_DetectorSelftest.md.

False-Positive-Reduction: 12 200 -> 6 917 Findings (-43%), Errors 37 -> 5 (-86%)

Acht Triage-Runden gegen das eigene Repo, jeder Detector-Fix mit struktureller Begruendung dokumentiert in Todo_FalsePositiveReduction.md Section D.

Detector-Fixes (16 Detektoren plus Parser)

  • uHardcodedSecret (SCA004): Meta-Felder (SourceToken/PasswordChar/TokenRef) skippen
  • uRestHttpSecurity (SCA116): TLS-Pattern auf string-stripped Code (kein Self-Match in Fix-Templates)
  • uSqlDangerousStatement (SCA058): := im Literal -> Pascal-Code-Zitat, kein SQL
  • uFormatMismatch (SCA005): IsInsideStringLiteral-Guard
  • uUseAfterFree (SCA134): Sibling-Free-Guard fuer if/else-Pattern
  • uFieldName (SCA103): Default-Visibility ist published (TForm/TFrame/TDataModule) - eliminierte ~3000 FPs
  • uRedundantJump (SCA080): Look-Ahead - nur flaggen wenn nach end; Block-Terminator - eliminierte ~900 FPs
  • uUnusedRoutine (SCA164): MaxLineOf statt NextStartAfter fuer Self-Call-Range
  • uPublicField (SCA089): Multi-line Method-Header-Continuation + Section-Boundaries
  • uGroupedDeclaration (SCA076): ParenDepth-Filter - Param-Listen idiomatisch, nicht geflaggt
  • uCommentedOutCode (SCA070): Backtick-Code-Spans aus Doc-Kommentaren strippen
  • uCanBeClassMethod (SCA148): Event-Handler-Signature (Sender: TObject) -> Instance-Method bleiben
  • uLeakDetector2 (SCA001): Acquire/Release/Dispose/Return/Recycle-Pool-Pattern erkennen - eliminierte 65 FPs
  • uExceptionTooGeneral (SCA078): Legit Top-Level-Handler (Log+Exit/Halt/Raise/Result-Assign)
  • uUnusedLocal (SCA053): Source-Verify gegen Parser-Cleanup-Edge-Case
  • uFreeWithoutNil (SCA139): Nur Felder flaggen - Locals fallen aus dem Scope - eliminierte 111 FPs
  • uTodoComment (SCA019): Skip Pfad-Refs (todo-sonar.md)
  • uMethodName (SCA106): DFM-Event-Handler-Skip
  • uTypeName (SCA104): Exception-Klassen (E*/*Error/*Exception)
  • uLockWithoutTryFinally (SCA109): Method-Header + Cache-Calls mit Args ausschliessen
  • Parser uParser2.ParseForStmt: Loop-Variable in for k := 1 to N do wird jetzt in TypeRef gejoint (war vorher aus AST verworfen)

Neue Infrastruktur

  • Profile-Negation-Syntax: [""*"", ""!Kind1"", ""-Kind2""] in rules/sca-rules.json
  • Bundled Profile selftest-quiet: 11 Style-Detektoren ausgeblendet fuer fokussiertes Dogfooding
  • CLI-Flag --report-html: Self-contained HTML Code-Review-Report (filter/sort/snippets)
  • HowTo_DetectorSelftest.md: Workflow-Dokumentation

Performance

Round 9 (commit 81749a0): 4 Hot-Path-Detektoren (uRestHttpSecurity, uPerfHotspots, uLockWithoutTryFinally, uUseAfterFree) compileren ihre Regex-Patterns nur noch EINMAL pro Prozess statt pro File. Gemessener Effekt: 3.0s -> 2.92s (-2.7% auf bereits sehr flotter Baseline).

Tests

Alle 1696 DUnit-Tests gruen. Zwei Tests an neues Verhalten angepasst:

  • uTestGroupedDeclaration.ParameterGrouped_Reported -> _NotReported
  • uTestFreeWithoutNil.FreeWithoutNil_Reported SRC von Local auf Field umgestellt

Version

Alle internen Version-Konstanten (uSCAConsts, uConsoleRunner, uIDEExpert, sca-rules.json, dproj VerInfo) jetzt einheitlich auf 0.9.6. Vorher waren drei verschiedene Versionen verstreut (0.9.1 / 0.9.3 / 0.9.5).

Vollstaendiger Changelog: v0.9.5...v0.9.6