What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
In one Oracle ADF to Spring Boot migration project, the defects that changed behavior surfaced only after the generated endpoints were called and their results compared with the original application. Unit tests, compilation of generated projects and schema validation had all passed before that. The account comes from software developer Mohamed Essam’s first-person essay on DEV Community, dated September 16 (the page as accessed shows no year).
What the earlier checks had established
Essam’s project had a set of structural and partial runtime checks, and he reports that all of them passed. The figures below are his own project counts. They have not been independently audited, and the article does not give a year for them.
As an Amazon Associate I earn from qualifying purchases.
| Check | Reported figure | What it exercised | Limit the author identified |
|---|---|---|---|
| Unit tests | 192 | Generated SQL text | They checked the SQL text, not what a call did at runtime |
| Compilation of generated projects | 263 real applications | Whether the generated code compiles | Compilation does not run any endpoint |
| Schema validation | A sample started against a live Oracle database | JPA mappings against the real schema | Did not exercise the native query |
| ADF attribute mapping | 3,311 of 3,312 attributes mapped or explained by a diagnostic | Attribute coverage | A coverage count; it does not show that returned data matches the original |
| Acceptance tests | 45 against a real database | Not stated | Not stated |
Essam’s conclusion from this experience is blunt: “I now assume that anything which has only passed structural checks is probably wrong in some way I haven’t looked for yet.” The title carries the same point: “Every real defect this project has ever had came from the second kind,” meaning running the software and comparing results with expected behavior.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Three defects that the earlier checks did not expose
When a script called every endpoint of one real application, roughly half returned HTTP 500. Tracing those failures and the wrong results behind them turned up three defects.
Named SQL parameters were not passed
The generated native query kept SQL containing named bind variables, but the code did not supply those parameters at execution time. Compilation and schema validation never ran that query, and the unit tests inspected the generated SQL text instead of the call’s behavior. The failure only appeared when an endpoint was invoked.
Entity names collided
The migration resolved entities by simple class name. Two different fully qualified classes, such as a billing Customer and a CRM Customer, could be confused with each other. The result is the most instructive case in the project: the endpoint returned HTTP 200 with well-formed JSON while reading rows from the wrong table. A healthy status code and a valid response shape told the author nothing about whether the right data was returned.
A view filter was lost
A WHERE clause that narrowed an ADF view was not carried into the generated endpoint in one case. The endpoint returned more rows than the original. Essam points out that when a filter encodes a row-level access rule, the same migration error can also expose data that should stay hidden.
Free tools Windows power users keep installed
One-click scans. No signup required.
Did you actually call the endpoints?
Essam’s testing change was a command that starts the generated application, calls each published endpoint, and reports which endpoints served data, which were correctly denied, and which failed. A practical version of that check looks like this:
- Start the generated application against a database loaded with the same seed data the original ADF application used. Confirm the seed first (see the fixtures section below).
- List every published endpoint and record the ADF view, entity or resource it replaces.
- Call each endpoint with the same inputs on both systems. Repeat the calls for each role you use and for an unauthenticated request.
- Compare the returned rows with the rows the original application returns for the same input. Do not stop at the status code or JSON shape.
- Label each result as served correctly, correctly denied, or failed. Investigate every HTTP 500, and every 403 where the original application’s grant would have allowed the call.
A 403 can be the correct answer
A denied request is not automatically a bug. Essam notes that a 403 can be correct when the original ADF resource had no grant. The comparison therefore has to include the source application’s authorization policy. For each endpoint, record which grant protected the original resource, then check that the generated endpoint denies the same roles and allows the same ones. Filters that act as row-level rules belong in this check too, because a missing filter can widen access even when every role is correctly authorized at the endpoint level.
Verify the fixtures before blaming the code
Essam twice investigated empty responses that turned out to come from failed INSERT statements in the seed script, not from broken queries. Before you attribute a surprising empty result to application code, confirm that the seed ran cleanly and that each seeded table holds the rows you expect. A query that returns nothing is only evidence of a query defect once you know the data is there.
Rank #4
What this evidence does and does not show
The account rests on one author’s migration project. The counts are self-reported, and the article does not provide an external study or benchmark comparing code reading with execution-based testing. It therefore does not establish that reading code or running structural checks is generally useless, and it does not show that running the software finds every defect. What it does show is narrower and still useful: in this project, checks that never called the endpoints missed behavior defects that calling them revealed. The article also names the author’s MIT-licensed assessment tool, adfmig, which runs on the user’s own machine.
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




