Sample
Dorn/java/210
Human rating uses the original dataset scale.
Scores
| Method | Score | Scale | Dataset rank (0–100) |
|---|---|---|---|
| Posnett | 0 | 0–1; higher is more readable | 30.6Δ 10.3 |
| Scalabrino | 0.574 | 0–1; higher is more readable | 54.3Δ 33.9 |
| Dorn | 0.336 | 0–1; higher is more readable | 27.3Δ 7.0 |
| Mi | 0.316 | 0–1; higher is more readable | 30.4Δ 10.0 |
| LLOC | 29 | Logical lines; fewer is more readable | 13.5Δ 6.8 |
| DeepSeek V4 Pro | 9.33 | 0–20; mean of three runs | 37.2Δ 16.9 |
| GPT-6.1 Sol | 12.33 | 0–20; mean of three runs | 24.4Δ 4.0 |
| BTTF | 0.46 | 0–1; higher is more readable | 35.1Δ 14.8 |
| Human | 2.77 | 1–5; original rating | 20.3 |
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. | 1334.806 | −44.049 |
| Source linesThe number of non-empty source lines. | 50 | +20 |
| Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value. | 5.14 | −7.71 |
Intercept 8.87 + feature contributions = -22.889 (log-odds).
Score = sigmoid(-22.889) = 0.
| Score | 0.574 |
|---|
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right. | 0 | −0.804 |
| Indentation frequencyHow rapidly indentation changes from line to line. | 44 | +0.785 |
| Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code. | 51 | −0.769 |
| 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. | 70.961 | +0.66 |
| Number layout frequencyHow rapidly the number of numeric values per line changes through the code. | 46 | −0.635 |
| Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom. | 49.958 | +0.288 |
| Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *. | 0.125 | −0.275 |
Intercept 0.07 + feature contributions = -0.68 (log-odds).
Score = sigmoid(-0.68) = 0.336.
| Score | 0.316 |
|---|
| Score | 29 |
|---|
Run 1
The code shows basic structure with sequential Selenium actions grouped logically, but has several readability issues. The custom wait loops are duplicated verbatim, increasing length and maintenance burden. Each loop uses an infinite for with a 'second >= 90' timeout check, which is a non-standard pattern that obscures intent. The empty catch blocks silently swallow exceptions, hiding failures and creating ambiguity. The mixing of waits (explicit Thread.sleep versus custom loops) disrupts reading flow. Action granularity is generally one action per line, which is good, but the long parameterized selectors and RuntimeVariables.replace calls add noise. The second loop's conditional is split across multiple lines with awkward indentation, making it harder to scan. Overall, while the sequential logic is understandable, the repetition, silent exception handling, and inconsistent waiting mechanisms reduce clarity.
Run 2
The code shows some logical structure with separated polling loops and sequential Selenium actions, but suffers from several readability issues. The polling loops are duplicated with no helper method, violating DRY principles and increasing length. Empty catch blocks obscure error handling intent, and magic numbers (90, 30000, 5000) are unexplained. The RuntimeVariables.replace("") calls add noise without clarity. Nesting is moderate but loops contain try-catch blocks, making flow harder to follow. Action granularity is adequate but some lines are long. Reading flow is generally sequential but interrupted by repeated boilerplate. Overall, functional but not clean.
Run 3
The code has a clear overall purpose of navigating a web interface via Selenium, with a consistent pattern for waiting and retrying. However, it suffers from significant readability issues: deep nesting in the retry loops with empty catch blocks, magic numbers (90, 1000, 30000, 5000), repeated boilerplate code, and unclear intent for the sleep and wait operations. The loops are convoluted with infinite for-loops and manual timeout checks, making the code harder to follow. The action granularity is acceptable but the reading flow is disjointed due to repetitive blocks and unclear abstractions. While the sequence of actions is logically ordered, the lack of helper methods or constants obscures the intent. Overall, the code is functional but not easily readable and would benefit from refactoring to reduce nesting, eliminate magic numbers, and extract common waiting logic.
Run 1
Code Structure: The navigation and verification steps are logically ordered, but duplicated polling loops and repeated page-load setup lack abstraction. Nesting: Mostly flat action sequences surround moderately nested loops, try blocks, and conditionals. Clarity of intent: Selenium method names communicate actions, but opaque selectors, magic timeout values, empty exception handlers, and unnecessary-looking replacements obscure details. Code length: Manageable overall, though repeated waiting and setup code adds avoidable length. Action granularity: Each statement generally performs one action, making individual steps easy to follow. Reading flow: The procedural sequence is natural, but verbose selectors, inconsistent wrapping, fixed sleeps, and silent exception handling interrupt comprehension.
Run 2
Code Structure: The navigation, search, and verification steps are logically ordered, but duplicated polling loops and repeated page-load setup would benefit from helper methods. Nesting: Most code is flat; polling loops introduce moderate nesting through try and if blocks. Clarity of intent: Selenium operations make the overall workflow understandable, but opaque selectors, magic timeouts, and empty exception handlers obscure details. Code length: Reasonably short, though repeated waits and RuntimeVariables.replace calls add unnecessary verbosity. Action granularity: Generally one operation per statement, making individual steps easy to identify. Reading flow: The sequence is natural, but long XPath expressions, fixed sleeps, and repeated boilerplate interrupt readability.
Run 3
Code Structure: The navigation, search, and polling steps are logically ordered, but duplicated polling loops and repeated page-load setup lack abstraction. Nesting: Mostly flat execution, with moderate nesting inside the polling loops. Clarity of intent: Selenium method names reveal the basic workflow, but opaque element identifiers, positional XPath selectors, magic timeout values, and silently swallowed exceptions obscure details. Code length: Reasonably short, though repeated waiting logic and empty-string replacement calls add unnecessary verbosity. Action granularity: Each statement performs one primary action; wrapped lines remain understandable. Reading flow: The sequence is natural and whitespace separates phases, but inconsistent indentation, fixed sleeps, and missing descriptive helper names interrupt readability.