Sample
Scalabrio110
Human rating uses the original dataset scale.
Scores
| Method | Score | Scale | Dataset rank (0–100) |
|---|---|---|---|
| Posnett | 0 | 0–1; higher is more readable | 60.8Δ 15.3 |
| Scalabrino | 0.388 | 0–1; higher is more readable | 35.2Δ 10.3 |
| Dorn | 0.515 | 0–1; higher is more readable | 59.3Δ 13.8 |
| Mi | 0.318 | 0–1; higher is more readable | 59.8Δ 14.3 |
| LLOC | 12 | Logical lines; fewer is more readable | 57.3Δ 11.8 |
| DeepSeek V4 Pro | 14 | 0–20; mean of three runs | 49.2Δ 3.8 |
| GPT-6.1 Sol | 16 | 0–20; mean of three runs | 34.7Δ 10.8 |
| BTTF | 0.565 | 0–1; higher is more readable | 62.8Δ 17.3 |
| Human | 3.56 | 1–5; original rating | 45.5 |
Views
Select the downloaded ZIP or its extracted folder. Files stay in your browser.
Loading feature diagnosis…
Source regions
Feature contributions
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Halstead volumeHow much symbolic information the code contains. It combines the total number of operators and values with the number of distinct ones. | 815.163 | −26.9 |
| Source linesThe number of non-empty source lines. | 35 | +14 |
| Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value. | 4.87 | −7.305 |
Intercept 8.87 + feature contributions = -11.335 (log-odds).
Score = sigmoid(-11.335) = 0.
| Score | 0.388 |
|---|
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Identifier layout (horizontal)How rapidly the visual pattern of identifier characters changes from left to right. It measures spatial frequency, not the meaning of the names. | 133.971 | −2.009 |
| Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right. | 134 | +1.358 |
| Number layout frequencyHow rapidly the number of numeric values per line changes through the code. | 1 | +0.398 |
| Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *. | 0.064 | +0.324 |
| Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code. | 35 | −0.203 |
| Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom. | 33.844 | +0.063 |
| Indentation frequencyHow rapidly indentation changes from line to line. | 23 | +0.058 |
Intercept 0.07 + feature contributions = 0.059 (log-odds).
Score = sigmoid(0.059) = 0.515.
| Score | 0.318 |
|---|
| Score | 12 |
|---|
Run 1
The code is highly readable with clear structure and intent. It uses well-defined methods and exception handling that make the flow logical. The nesting is shallow with a single loop and try-finally blocks that don't exceed two levels. The Javadoc and inline comments provide helpful context without being excessive. Each action is on its own line, promoting clarity. The method is concise, avoiding unnecessary length while handling important edge cases like transaction registration and cache invalidation. The reading flow is natural: iterate, execute, register processes, then handle cache invalidation and cleanup. Minor improvements could include breaking the long cache invalidation comment into a more concise form, but overall this is excellent readability.
Run 2
The code has some positive aspects, like Javadoc and comments explaining intent, but readability suffers due to complexity. The method combines several responsibilities: executing actions, registering transaction processes, invalidating query spaces conditionally, clearing the list, and executing batch. This violates single responsibility. Nesting is deep: a try-finally block with a for loop containing another try-finally and an if condition. Multiple actions are performed on single lines within the inner finally block, reducing granularity. Reading flow is disrupted by the large conditional block in the outer finally. The logic around transaction process registration inside a loop that may partially execute is not immediately clear. Error handling combines resource cleanup with conditional cache invalidation, making the control flow harder to follow. However, exception handling is structured, and the todo comment acknowledges the double iteration, showing some self-awareness.
Run 3
The code is generally readable with clear variable names and logical organization. The method has a single responsibility and the try-finally blocks properly ensure resource cleanup. However, there are a few readability challenges: the generic type bounds are complex and could benefit from extraction or documentation, the nested try-finally blocks create some indentation depth, and the comment about double iteration suggests potential structural improvements. The code length is reasonable, with generally one action per line, though the combined list.clear() and executeBatch() at the end could be separated for clarity. The TODO comment adds helpful context about known limitations. The Javadoc is concise but could describe the method's parameters more clearly. Overall, the code structure is solid but could be improved by reducing nesting depth and simplifying generic declarations.
Run 1
1. Code Structure: Logically organizes execution, transaction-process registration, cache invalidation, and final cleanup. Nested try/finally blocks preserve important failure-handling behavior. 2. Nesting: Moderate nesting from the loop and two try/finally layers increases reading effort but is justified. 3. Clarity of intent: Descriptive method names and explanatory comments make the purpose clear, although the variable 'e' is terse and the generic signature is dense. 4. Code length: Compact overall; the TODO and cache-invalidation comments add useful context but are somewhat verbose. 5. Action granularity: Each statement performs a distinct action, with no crowded multi-action lines. 6. Reading flow: Execution proceeds naturally into registration and invalidation, then clearing and batch execution. However, understanding which operations occur after an exception requires careful attention to the finally boundaries.
Run 2
Code Structure: Logically organized into execution, callback registration, cache invalidation, and final cleanup/batch execution. Nesting: Nested try/finally blocks within a loop, plus a conditional, add complexity but reflect exception-handling requirements. Clarity of intent: The method name, documentation, and comments explain its purpose and cache behavior; the variable name 'e' is less descriptive. Code length: Mostly concise, although lengthy comments and the generic signature add reading overhead. Action granularity: Each statement performs a distinct action, with no compressed multi-action lines. Reading flow: Operations follow a natural sequence, but readers must track which finally blocks run on failure and recognize that list clearing and batch execution are skipped if an exception propagates.
Run 3
Code Structure: Logically organized into execution, transaction-process registration, cache invalidation, and final cleanup/batch execution. Nesting: Nested try/finally blocks inside a loop add complexity, but serve clear exception-handling purposes. Clarity of intent: Descriptive method names and comments explain execution and invalidation; the generic variable 'e' is less descriptive. Code length: Reasonably concise, though the lengthy signature, chained calls, and comments increase reading effort. Action granularity: Each statement performs one primary action, with some compound expressions for registration and array conversion. Reading flow: Mostly natural, but readers must carefully track finally semantics and recognize that list clearing and batch execution are skipped if an exception propagates.