<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hung Nguyen Van</title>
    <description>The latest articles on DEV Community by Hung Nguyen Van (@hung_nguyenvan_4520065f5).</description>
    <link>https://dev.to/hung_nguyenvan_4520065f5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3920478%2Fd61b6c99-52c4-4148-a450-d6392e9e70f7.jpg</url>
      <title>DEV Community: Hung Nguyen Van</title>
      <link>https://dev.to/hung_nguyenvan_4520065f5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hung_nguyenvan_4520065f5"/>
    <language>en</language>
    <item>
      <title>Your Test Suite Now Mostly Proves the AI Agrees With Itself</title>
      <dc:creator>Hung Nguyen Van</dc:creator>
      <pubDate>Sat, 30 May 2026 08:45:28 +0000</pubDate>
      <link>https://dev.to/dqa/your-test-suite-now-mostly-proves-the-ai-agrees-with-itself-7mh</link>
      <guid>https://dev.to/dqa/your-test-suite-now-mostly-proves-the-ai-agrees-with-itself-7mh</guid>
      <description>&lt;p&gt;Picture a renewal call. The client is happy with the work. Then they ask one fair question.&lt;/p&gt;

&lt;p&gt;"This feature here. Show me the requirement it came from, and the test that proves it does what we asked."&lt;/p&gt;

&lt;p&gt;You know the suite is green. You know coverage is high. And you realize you can't actually answer. Not quickly, not with evidence. You can show that the tests pass. You can't show that the code does what the spec said.&lt;/p&gt;

&lt;p&gt;That gap used to be tiny. In the AI coding era it has quietly become the most expensive thing in your codebase, and almost nobody is measuring it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a green build became a feeling instead of a fact
&lt;/h2&gt;

&lt;p&gt;For most of software's history, the spec, the code, and the test came from different minds. A person wrote the requirement. A person wrote the code. Tests sat there as an outside check. When all three lined up, the agreement meant something, because three independent readings had converged.&lt;/p&gt;

&lt;p&gt;Now one model reads the spec, writes the code, and writes the test in the same breath. If it misreads the requirement, the code is wrong and the test is wrong in the exact same way. The test passes. Everything is green. The spec is broken and the screen tells you you're fine.&lt;/p&gt;

&lt;p&gt;A passing test used to mean an independent check agrees the code is correct. Today it usually means the model is consistent with itself. Most of your green suite is the AI grading its own homework.&lt;/p&gt;

&lt;p&gt;The cruel part is that every tool you'd reach for to catch this is the one the problem already corrupted. Coverage tells you which lines ran, never whether they do the right thing. The test runner confirms the code matches the test, which is the precise thing that's now suspect. Linters check style. Your ticket tracker never touches the code. Each tool reads one side of the triangle and trusts the other two. The one cross-check that ever mattered, a second independent reading, is exactly what the AI removed.&lt;/p&gt;

&lt;p&gt;So you ship on a feeling. The bill arrives later, in someone else's environment. The business rule that was never really implemented. The requirement that drifted three sprints ago and took the old green tests with it. The audit question that turns a confident team silent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one question that still means anything
&lt;/h2&gt;

&lt;p&gt;There's a single question left that survives all of this, and it's narrower than the ones teams usually ask.&lt;/p&gt;

&lt;p&gt;For this requirement, is there real code that implements it, and a real test that exercises that code. Proven by evidence, not claimed by a label.&lt;/p&gt;

&lt;p&gt;Answer that for every requirement and the fear drains out of the room. The tautology can't hide, because a test that only claims to cover something proves nothing on its own. A high coverage number can't bury a weak group, because you're reading requirement by requirement, not one comfortable average. Drift shows up the moment alignment breaks, not the moment a customer finds it. And the renewal-call question stops being a threat. It becomes a screen you turn around and point at.&lt;/p&gt;

&lt;p&gt;The trouble is that nothing in a normal toolchain answers it. Knowing whether spec, code, and test agree means reading all three as separate things and checking them against each other. No tool most teams own does that.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when you can actually see it
&lt;/h2&gt;

&lt;p&gt;This is the entire reason DQA exists. It reads the spec, the code, and the tests as three independent sources and tells a team, requirement by requirement, whether they truly line up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2mxs2nobmkzyhot3vni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2mxs2nobmkzyhot3vni.png" alt=" " width="800" height="820"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The line it refuses to blur is proven versus declared. A test that says it covers a requirement is declared, and declared is what an AI can fake all day. A requirement where evidence shows real code implements it and a real test exercises that code is proven. Only proven counts. That one rule is what beats the model grading its own homework.&lt;/p&gt;

&lt;p&gt;What comes back isn't another percentage to feel good about. It's a plain list. What's fully aligned, what's only partial, what has nothing real behind it, sorted worst first, so the weakest spot is the first thing you see instead of the thing an average hides.&lt;/p&gt;

&lt;p&gt;That turns the renewal call into a different conversation. One version ends with "I'll get back to you" and a quiet scramble through Jira. The other ends with you turning the screen around. Same client, same question, completely different business.&lt;/p&gt;

&lt;p&gt;AI will write most new code within a couple of years. That isn't the risk. The risk is shipping it while still trusting a green test the way we did when a second human wrote it.&lt;/p&gt;

&lt;p&gt;The shops that come out of this era with their reputations intact won't be the ones that adopted AI fastest. They'll be the ones who could still say, on any given commit, exactly which requirements had real code and a real test behind them, and prove it without flinching.&lt;/p&gt;

&lt;p&gt;So, your last release. Do you know which requirements are actually aligned, or do you only know that the tests passed?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm running a free gap report for 3 dev shops this month. Send 1 repo and 1 spec, and I'll send back which requirements are proven-aligned, which aren't, and which "covered" tests don't actually prove anything. No pitch, no commitment. Comment "gap" or DM me.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>softwareengineering</category>
      <category>testing</category>
    </item>
    <item>
      <title>tautology problem — AI confirming itself.</title>
      <dc:creator>Hung Nguyen Van</dc:creator>
      <pubDate>Wed, 13 May 2026 01:48:57 +0000</pubDate>
      <link>https://dev.to/hung_nguyenvan_4520065f5/tautology-problem-ai-confirming-itself-4e9a</link>
      <guid>https://dev.to/hung_nguyenvan_4520065f5/tautology-problem-ai-confirming-itself-4e9a</guid>
      <description>&lt;p&gt;Yesterday I posted about senior devs spending 25 minutes reviewing a single AI-generated PR. Someone DMed me: "Just replace the senior with an AI reviewer." That's the trap.&lt;/p&gt;

&lt;p&gt;AI writes the code. AI writes the tests. AI reviews the code. Three layers, each one "smart." The problem: all three share the same source of reasoning.&lt;/p&gt;

&lt;p&gt;If the AI misreads the spec — the code is wrong, the tests pass with wrong code, the review approves wrong code. All three layers green. Spec still violated.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;tautology problem&lt;/strong&gt; — AI confirming itself.&lt;/p&gt;

&lt;p&gt;In April 2026, Anthropic published a postmortem most people didn't read carefully. They admitted: AI-generated regressions in their own codebase slipped past human review, automated review, unit tests, end-to-end tests, automated verification, and dogfooding. Anthropic's full stack — still missed it.&lt;/p&gt;

&lt;p&gt;If Anthropic's stack can't catch it — the honest question for any team shipping AI-assisted code: how much is your stack actually catching?&lt;/p&gt;




&lt;p&gt;The industry has tried several approaches. None of them solves tautology:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test frameworks&lt;/strong&gt; (Jest, Pytest…) — tests written by the same AI, same source&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linters / SAST&lt;/strong&gt; (SonarQube, Semgrep) — don't read the spec, only pattern-match code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI code review&lt;/strong&gt; (Copilot, CodeRabbit, Qodo) — review code-vs-codebase, not code-vs-original-spec&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual senior review&lt;/strong&gt; — doesn't scale, returns you to 25 min/PR (see yesterday's post)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why we built DQA — a &lt;strong&gt;Trust Layer for AI-generated code&lt;/strong&gt;. Not a fifth review tool. A structurally different layer.&lt;/p&gt;

&lt;p&gt;DQA compiles rules directly from the spec document — no AI interpretation in the loop. Every commit AI ships gets cross-checked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this feature trace back to an original requirement?&lt;/li&gt;
&lt;li&gt;Does it violate any structural constraint?&lt;/li&gt;
&lt;li&gt;Is there a signed, timestamped evidence chain for audit?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It sits between "AI writes code" and "code merges to production." A third party, structurally independent — not sharing the same source of reasoning as code-AI, test-AI, or review-AI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yg583vprqz7mdshnw3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yg583vprqz7mdshnw3w.png" alt="tautology problem — AI confirming itself" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you're shipping AI-assisted code actively in production and want to compare notes on verification patterns your team is hitting — DM me.&lt;/p&gt;

&lt;p&gt;I'm in conversations with three dev teams this week, ~30 min each. No pitch deck. You share your pain, I share patterns from other teams. If it fits, I'll suggest a next step. If not, you walk away with 30 minutes of insight into how others are handling this.&lt;/p&gt;

&lt;p&gt;👉 DM me or comment "DM" — I'll message you first.&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>codequality</category>
      <category>software</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
