惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
Know Your Adversary
Know Your Adversary
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
News and Events Feed by Topic
Spread Privacy
Spread Privacy
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Secure Thoughts
G
GRAHAM CLULEY
Google Online Security Blog
Google Online Security Blog
Help Net Security
Help Net Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
O
OpenAI News
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LINUX DO - 最新话题
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
Lohrmann on Cybersecurity
H
Hacker News: Front Page
W
WeLiveSecurity
P
Privacy International News Feed
Forbes - Security
Forbes - Security
月光博客
月光博客
PCI Perspectives
PCI Perspectives
T
Tailwind CSS Blog
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
Engineering at Meta
Engineering at Meta
F
Full Disclosure
AI
AI
Hacker News - Newest:
Hacker News - Newest: "LLM"
Schneier on Security
Schneier on Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Visual Studio Blog
The Hacker News
The Hacker News
博客园 - 叶小钗
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
The First QA Checklist I Would Run On Any AI-Built App In 2026
Marcus Kim · 2026-06-21 · via DEV Community

The most dangerous moment in an AI-built app is not when the app is obviously broken.

That part is annoying, but at least it is honest.

The dangerous moment is when the app looks done.

The buttons are there. The screens load. The AI says it fixed the bug. You click around for thirty seconds and nothing immediately catches fire.

Then your brain starts whispering the sweetest lie in software:

"We are probably good."

Probably good is not a QA strategy.

It is a tiny trap door with nice lighting.

If you are a beginner building with AI, you need a first QA pass that is simple enough to actually run. Not an enterprise test plan. Not a 400-line spreadsheet created by someone who uses the phrase "quality gate" recreationally.

Just a practical checklist that proves the app can survive normal use, bad input, empty data, account boundaries, and the bugs AI tends to hide while it is "fixing" something else.

The point is not to become a full-time QA engineer before you ship version one.

The point is to stop treating "the AI said it works" as evidence.

The Rule: Test The Workflow, Not The Vibe

When I use AI coding tools, I do not trust the app because the code looks busy.

I trust it more when I can walk through a real user workflow and see the app behave correctly from beginning to end.

That distinction matters.

Beginners often test randomly. They click a few screens, refresh, maybe create one record, and then call the app done because the visible parts seem alive.

But a useful app is not a pile of screens.

A useful app is a workflow.

Someone has a goal. They enter information. The app saves it. The app shows it back. The app handles mistakes. The app protects the wrong person from seeing the wrong thing. The app does not collapse when the user does something slightly inconvenient, like leaving a field blank or using the back button.

That is what you are testing.

If you are still at the stage where you have an app idea but do not know what to ask AI before building or testing it, I made a free AI App Builder Starter Prompts pack for beginners. It helps you turn a rough app idea into a scoped first build with AI:

https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts

For QA, the useful question is not:

"Does the app look done?"

The useful question is:

"Can the user complete the promised workflow without me standing over their shoulder explaining the weird parts?"

That is the first pass.

1. Write The One Workflow You Are Testing

Before touching the app, write one sentence:

A user should be able to [do one specific job] so they can [get one specific result].

Examples:

  • A musician should be able to record a song idea and tag it by key and tempo so they can find it later.
  • A car enthusiast should be able to create an event and invite nearby drivers so the group can coordinate.
  • A freelance client should be able to submit a project request so I can review scope before a call.
  • A student should be able to save study notes and search them before an exam.

This sentence becomes your QA target.

Without it, you will test the app like you are wandering through a furniture store.

"This button works. This page exists. This dropdown opens. This couch is somehow on sale."

Everything looks like progress, but you are not proving the thing that matters.

You are proving that separate parts exist.

QA starts when the parts are forced to work together.

2. Run The Happy Path Slowly

The happy path is the normal path.

It is what should happen when the user does everything correctly.

For a simple app, the happy path might be:

  1. Create an account.
  2. Log in.
  3. Create a record.
  4. Save it.
  5. Leave the page.
  6. Come back.
  7. Confirm the record is still there.
  8. Edit it.
  9. Delete it.
  10. Confirm it is gone.

Do not rush this.

AI-built apps can fail in boring places. The save button looks like it worked, but the data never persisted. The edit screen opens, but it is editing the wrong field. The delete button removes the item visually, but it comes back after refresh like a software boomerang.

Run the happy path slowly and write down every expectation before you test it.

Good QA sounds boring:

When I create a note called "Practice riff" and save it, I should see it in the notes list after refreshing the page.

That sentence is stronger than "check notes feature."

"Check notes feature" is a fog machine.

Specific expected behavior is a flashlight.

3. Refresh More Than Feels Necessary

One beginner mistake is trusting the screen state too much.

Modern apps can make something look saved before it is actually saved where it needs to live.

So refresh.

Refresh after creating data.

Refresh after editing data.

Log out and log back in.

Close the tab and reopen it.

If it is a mobile app, kill and reopen the app.

You are checking whether the app has real persistence or just temporary optimism.

This matters especially with AI-generated code because the tool may wire up a beautiful interface before the data flow is truly correct.

The screen can be convincing while the backend is silently shrugging.

I want to know:

  • Does the created data survive refresh?
  • Does the edited data stay edited?
  • Does deleted data stay deleted?
  • Does the list reload from the real source of truth?
  • Does the app show stale data after a change?

If the answer is unclear, the app is not done.

It is wearing a done costume.

4. Try Empty Inputs

Users do not lovingly fill out every field like they are completing a sacred ritual.

They skip things.

They paste weird text.

They submit forms early.

They type one letter and then get distracted by a microwave beep or the sudden realization that they forgot to respond to an email from four days ago.

Your app needs to handle this.

For every important form, test:

  • all fields empty
  • one required field missing
  • spaces only
  • very short input
  • very long input
  • duplicate values when duplicates should not exist
  • invalid email formats
  • weird characters
  • pasted text with line breaks

You are not trying to be dramatic.

You are trying to find the places where the app assumes the user behaves like the developer.

That assumption is usually false.

AI-generated code can be especially optimistic here. It may build the form, connect the button, and skip the boring validation rules unless you explicitly ask for them.

Ask for them.

Then test them yourself.

5. Test The Empty State

An empty state is what the app shows when there is no data yet.

Beginners forget this constantly because they build while staring at fake sample data.

The app looks great when it has five beautiful placeholder records.

Then a real new user signs in and sees a blank void with a navigation bar.

That is not a first impression.

That is a small abandoned warehouse.

For each main screen, ask:

  • What does a brand-new user see?
  • Does the screen explain what to do next?
  • Is there a clear first action?
  • Does the app avoid broken-looking blank space?
  • Does the empty screen match the actual workflow?

A good empty state does not need to be clever.

It just needs to answer:

"What now?"

If your app cannot answer that, the user has to guess.

Guessing is friction.

Friction is where beginner apps quietly lose people.

6. Test Account Boundaries

If your app has accounts, this part is not optional.

You need at least two test accounts.

Not one.

Two.

Account A should not see Account B's private data.

Account B should not edit Account A's records.

Logged-out users should not reach private screens just by typing a URL.

This is where "it works on my machine" becomes dangerous, because your machine is probably logged in as the same test user all the time.

Create two accounts and test:

  • Can Account A create private data?
  • Can Account B see it?
  • Can Account B edit it?
  • Can a logged-out visitor reach it?
  • What happens if you paste a private URL into another browser session?
  • What happens after logout?

Do not rely on vibes here.

Authentication is the bouncer at the door.

If the bouncer is asleep, the furniture arrangement does not matter.

7. Make AI Give You A Test Plan Before Fixing Bugs

When something breaks, the beginner instinct is to paste the error into AI and say:

"Fix this."

That can work.

It can also create a chain of tiny surgical fixes that solve the visible symptom while quietly damaging the larger workflow.

I prefer to slow the tool down.

Before asking for a fix, ask for a test plan.

Use a prompt like this:

I am testing this workflow:
[describe the workflow]

The bug I saw is:
[describe the bug]

Before changing code, explain:
1. the likely causes
2. which files or areas might be involved
3. what behavior should be true after the fix
4. what regression checks I should run
5. the smallest safe fix you recommend

Do not write code yet. Give me the plan first.

This is one of the reasons I include QA and debugging prompts in the free AI App Builder Starter Prompts pack. The useful move is not asking AI to magically fix everything. The useful move is forcing it to name the expected behavior before it changes the project:

https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts

That step protects you from the AI tool becoming a very confident racetrack for random patches.

Planning before fixing sounds slower.

In practice, it often saves time because you stop turning one bug into three new bugs wearing different hats.

8. Re-Test The Thing That Used To Work

This is the regression pass.

Regression is when a new change breaks something that used to work.

AI can do this very easily because it is often focused on the local task you just gave it.

It fixes the signup bug, but now profile editing breaks.

It fixes the save button, but now the list does not refresh.

It fixes the mobile layout, but now the desktop layout looks like someone folded the page in half and sat on it.

After every meaningful fix, re-test:

  • the original broken behavior
  • the happy path
  • any nearby feature that uses the same data
  • login/logout if accounts are involved
  • refresh/persistence
  • mobile and desktop if the app supports both

This is not glamorous.

It is also where a lot of real software quality lives.

The question is not:

"Did AI fix the bug?"

The question is:

"Did the app still keep its promises after the fix?"

9. Test One Bad Network Or Loading State

You do not need to simulate every disaster for version one.

But you should at least check what happens when loading is slow or data is missing.

Beginner apps often fail because they assume everything appears instantly.

Then the real world arrives with a weak connection, a slow request, a failed upload, or a backend rule that rejects something.

Check:

  • Does the app show a loading state?
  • Does the button prevent double-submit when needed?
  • Does the app show a useful error?
  • Can the user retry?
  • Does the app avoid saving half-complete data?

Even one pass here can reveal a lot.

If your app shows nothing while loading, users may click again.

If your app shows a technical error, users may leave.

If your app silently fails, users may think they did something wrong.

Silence is not a user experience.

It is a mystery novel with no ending.

10. Define "Done" In Plain English

Before you call the app done, write a done-when line.

This workflow is done when a new user can create an account, create one project, edit it, see it after refresh, delete it, and confirm another account cannot access it.

That is much stronger than:

Project screen finished.

Finished according to whom?

Finished under what conditions?

Finished until which user clicks which cursed button?

A done-when line gives you a finish line you can test.

It also gives AI a better target. If you tell the tool exactly what done means, it has less room to wander into cosmetic improvements, extra features, or random refactors that do not help the first version.

This is one of the main lessons I keep learning in freelance work and AI-assisted development:

Clear definitions beat heroic effort.

The app does not care how hard you worked.

The user does not care how many files changed.

The workflow either works or it does not.

My First QA Pass, Condensed

If I had to turn this into a simple checklist, I would run this:

1. Write the one user workflow.
2. Run the happy path slowly.
3. Refresh after create, edit, and delete.
4. Test empty and invalid inputs.
5. Check brand-new empty states.
6. Use two accounts and test boundaries.
7. Ask AI for a test plan before bug fixes.
8. Re-test old behavior after every fix.
9. Check one loading or error state.
10. Write the done-when line in plain English.

That is not a complete QA department.

It is a first pass.

But a first pass is much better than the usual beginner pattern:

Click around, feel hopeful, ship, panic.

AI can help you build faster.

It can also help you create a mess faster.

QA is how you slow the project down just enough to keep control.

The practical takeaway:

Do not ask, "Does the app look done?"

Ask, "Can the user complete the promised workflow, recover from mistakes, and trust the data afterward?"

That question will make your AI-built app better immediately.

I made a free AI App Builder Starter Prompts pack for beginners who want to turn a rough app idea into a scoped first build with AI:

https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts

If you want the full build-along field manual behind the free prompts, AI App Builder From Zero walks through idea, scope, stack, prompting, QA, deployment, and launch:

https://marcusykim.gumroad.com/l/ai-app-builder-from-zero

More from me

Medium: https://medium.com/@contact_30652
DEV.to: https://dev.to/marcusykim
X: https://x.com/contact_30652
LinkedIn: https://www.linkedin.com/in/marcusykim/