Sample
Schnappinger/junit4/org.junit.internal.builders.IgnoredClassRunner
Human rating uses the original dataset scale.
Scores
| Method | Score | Scale | Dataset rank (0–100) |
|---|---|---|---|
| Posnett | 0.001 | 0–1; higher is more readable | 68.6Δ 8.5 |
| Scalabrino | 0.691 | 0–1; higher is more readable | 36.3Δ 40.8 |
| Dorn | 0.736 | 0–1; higher is more readable | 77.6Δ 0.5 |
| Mi | 0.433 | 0–1; higher is more readable | 26.4Δ 50.7 |
| LLOC | 7 | Logical lines; fewer is more readable | 75.9Δ 1.2 |
| DeepSeek V4 Pro | 18 | 0–20; mean of three runs | 91.4Δ 14.4 |
| GPT-6.1 Sol | 19 | 0–20; mean of three runs | 92.6Δ 15.5 |
| BTTF | 0.653 | 0–1; higher is more readable | 67.7Δ 9.4 |
| Human | 3.96 | 1–4; original rating | 77.1 |
Views
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. | 540.537 | −17.838 |
| Source linesThe number of non-empty source lines. | 23 | +9.2 |
| 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.572 | −6.858 |
Intercept 8.87 + feature contributions = -6.626 (log-odds).
Score = sigmoid(-6.626) = 0.001.
| Score | 0.691 |
|---|
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. | 61.913 | +1.043 |
| Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right. | 0 | −0.804 |
| Number layout frequencyHow rapidly the number of numeric values per line changes through the code. | 1 | +0.398 |
| Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code. | 20 | +0.328 |
| Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom. | 21.746 | −0.106 |
| Indentation frequencyHow rapidly indentation changes from line to line. | 23 | +0.058 |
| Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *. | 0.093 | +0.038 |
Intercept 0.07 + feature contributions = 1.025 (log-odds).
Score = sigmoid(1.025) = 0.736.
| Score | 0.433 |
|---|
| Score | 7 |
|---|
Run 1
This code is highly readable. The structure is logically organized with a clear package declaration, minimal imports, and a single class definition. Nesting is flat, with only one class and three short methods, avoiding deep indentation. Intent is evident from the class name and method names: an ignored test class runner that fires an ignored notification. Code length is concise, containing only essential logic without redundant code. Action granularity is excellent—each line performs a single meaningful action, especially in the run() method where the notification is fired in one clean line. Reading flow is natural, progressing from constructor to run to getDescription, matching typical reader expectations. Minor deduction for using the legacy 'f' prefix on the field name, which is slightly outdated in Java style, but this does not meaningfully impair readability.
Run 2
The code is clear and well-structured. It has a single responsibility, straightforward methods, minimal nesting, and one action per line. The 'f' prefix on fTestClass is slightly outdated, but it's a minor style issue that doesn't affect readability.
Run 3
The code is well-structured and highly readable. It has a clear single responsibility: handling ignored test classes. The class is flat with minimal nesting. Intent is clear from the class and method names. Length is concise with no unnecessary code. Each action is on its own line. Reading flow is natural, following a logical order. Minor deductions for the legacy 'f' prefix on the field, which slightly reduces clarity, and the lack of a null check on the constructor parameter.
Run 1
Code Structure: Cleanly organized into a field, constructor, and two focused overrides. Nesting: No nested control flow, making the code easy to scan. Clarity of intent: The class name and fireTestIgnored call clearly communicate its purpose; the legacy fTestClass naming convention is slightly less intuitive than testClass. Code length: Concise, with no unnecessary logic or verbosity. Action granularity: Each statement performs one clear action. Reading flow: Natural progression from initialization to runner behavior and description creation, supported by consistent formatting and explicit @Override annotations.
Run 2
Code Structure: Cleanly organized into a field, constructor, and two focused overrides. Nesting: Flat, with no conditionals or loops. Clarity of intent: The class name and notification call clearly communicate that the test class is ignored; the legacy fTestClass naming is slightly less intuitive than testClass. Code length: Concise, with no unnecessary logic or boilerplate beyond required declarations. Action granularity: Each statement performs one clear action. Reading flow: Imports, class state, initialization, execution, and description generation follow a natural order, supported by consistent formatting.
Run 3
Code Structure: A small, logically organized class with a field, constructor, and two focused overrides. Nesting: Flat method bodies with no conditional or loop nesting. Clarity of intent: The class name and fireTestIgnored call clearly communicate its purpose; the legacy fTestClass naming convention is slightly less natural than testClass. Code length: Concise, with no unnecessary implementation or repetition. Action granularity: Each statement performs one focused action on its own line. Reading flow: Imports, state, initialization, execution, and description follow a natural order, supported by consistent formatting and whitespace.