AI把开发速度拉满以后,最危险的是“我已经做完了”的错觉
用AI写代码,应用可以快得离谱。房间能建、用户能进、内容能发、票也能投。大脑马上宣布:
做完了。
服务器回答:
你刚才只测了一个人。
真正应该测的是:100个人同时操作会怎样?数据库已经写入,但成功响应在网络里丢了怎么办?截止时间和最后一票撞在一起怎么办?支付通知来两次怎么办?故障恢复后所有人一起重连怎么办?
一次小型多人Web应用的代码审查最后扩展成了324个测试项。注意,这不是发现了324个Bug。324项当时全部都还是“未执行”的测试。
1. 不要只盯着DDoS
Cloudflare在所有套餐上都提供自动DDoS检测与缓解,但官方也建议使用限流等应用层防护,因为大型攻击仍可能影响应用。[1]
而独立开发最先撞上的,甚至可能不是攻击,而是正常用户。
如果客户端每3秒轮询一次,简单计算如下:
| 同时在线设备 | 每小时状态请求 |
|---|---|
| 10 | 12,000 |
| 30 | 36,000 |
| 100 | 120,000 |
| 1,000 | 1,200,000 |
这不是实际容量预测。退避、缓存会减少请求;发帖、图片、收件箱、多标签页、定时任务又会增加请求。
截至2026年10月5日,Workers Free标明每天100,000次请求。D1 Free标明每天读取500万行、写入10万行、单数据库500MB、每次Worker调用最多50个查询。[2][3] 单个D1数据库还会逐条处理查询,并发太高时先排队,队列满后可能返回过载错误。[3]
所以真正可怕的未必是“100万攻击者”。
100个正常用户同时玩得很开心,也可能就是压力测试。
2. 为什么会有324项
范围最后覆盖16类:入口与滥用、容量、并发与恢复、定时任务、房间与权限、图片、文字输入、投票、截止时间、结果开放、公开房、长连接、设备与重连、外部服务、支付、发布与监控。
不需要同时做完。先抓可能造成数据损坏、越权、流程卡死、额度耗尽和错误扣款的项目。
3. 上线前优先打的23个点
- 明明会拒绝的请求,是否仍然进入昂贵的数据库处理。
- 自己的用量统计是否真的覆盖所有高成本路径。
- 限流是否能跨重启、跨执行位置保持。
- “没有变化”的轮询是否仍然大量读取数据库。
- 一个席位是否可以无限创建长连接。
- HTTP和长连接是否执行同样的次数限制。
- 运营停止后,已连接客户端是否也会停止。
- 定时任务延迟时,截止后的操作是否会被误收。
- 某些写入失败后,房间状态是否仍然向前推进。
- 修复任务重复执行时,统计是否会被加两次。
- 游戏真正创建前,是否可能只消耗了“开始次数”。
- 写入成功但响应丢失后重试,是否会产生两条回答。
- 全角半角、空格等差异是否能绕过昵称唯一性。
- 最后一个空位是否可能被两个人同时抢到。
- 定时任务是否会积压到永远追不上。
- 是否监控整个数据库和索引,而不只是图片容量。
- 丢失设备后,别人是否可能接管身份。
- 图片格式、像素、元数据、位置信息是否安全处理。
- 历史记录越多,页面读取成本是否线性爆炸。
- 故障恢复后的同时重连是否造成第二次故障。
- 支付是否测试了重复、延迟、失败、取消和恢复。
- 是否把本地测试通过误认为生产环境通过。
- 数据库宕机时,监控是否也一起失明。
4. Bug最喜欢“组合拳”
高价值场景可以这样设计:
100人同时投票 → 20人刷新 → 10人掉线 → 一部分写入成功但成功响应丢失 → 用户重试。
然后看票数是否重复、过期投票是否混入、界面是否回退到旧状态、同一操作是否执行两次。
OWASP也把并发会话、异常输入、错误处理分别列为测试主题。[4]
5. “写入成功”和“用户收到成功”是两件事
服务器写入成功,网络响应却丢了。用户只看到失败,于是再点一次。
如果没有操作ID或其他去重机制,就可能多一条回答、多一个房间、多一票、多一次通知,甚至多扣一次钱。
重试必须被设计,而不是靠运气。
6. 压力测试要分阶段
在自己控制的环境中从10 → 30 → 100逐步增加。
同样是100人,也要换形状:
- 全挤在一个房间;
- 分散到很多房间;
- 同时加入;
- 同时投最后一票;
- 故障后一起重连;
- 与定时任务叠加;
- 中途模拟存储失败。
不要对无权测试的第三方系统或真实生产环境随意发大量流量。开始前先定预算和停止条件。
7. “没挂”不等于通过
性能目标可以先设为:普通请求95%在1秒内、99%在3秒内,意外5xx低于0.1%。
但以下项目应当是0容忍:
- 泄露别人的数据;
- 越权操作;
- 重复计分;
- 已保存数据丢失;
- 重复扣款。
8. 测试设计9分,执行证据0分,完全可能
324项和23个优先风险做得很好,说明测试设计已经相当成熟。
但没跑之前,证据仍是0。
这不是坏消息。项目已经从“不知道测什么”走到了“知道应该从哪里把它弄坏”。
9. 然后先爆掉的可能是AI周额度
如果一天里让AI不停读大仓库、实现、修改、复查,再循环,先到极限的可能不是服务器,而是AI订阅额度。
截至2026年10月5日,Claude Max 20x网页订阅为每月200美元。“20x”指相对Pro的每个会话容量。会话限制每5小时重置,但Max还有所有模型共用的每周上限。[5]
所以20x不等于无限。
实际消耗与模型、上下文和任务有关,最可靠的是直接看Settings > Usage。
10. “Fable贵”看数字也很合理
Max里Fable 5和5.1属于标准可用模型,但Fable最多可使用每周额度的50%,而且Anthropic明确说明它会比其他Claude模型更快消耗额度。[6]
按用量计费时:
| 模型 | 每100万输入Token | 每100万输出Token |
|---|---|---|
| Sonnet 5.5 | $2 | $10 |
| Opus 5.5 | $4 | $20 |
| Fable 5.1 | $10 | $50 |
Fable 5.1的输入和输出单价都是Opus 5.5的2.5倍。Fable 5.1通过更便宜的缓存读取降低了相对Fable 5的成本,但绝对价格依然高。[6][7][8]
API价格不能直接换算成Max周额度,不过方向很清楚:重模型长时间运行不会因为“订阅了”就变成免费。
11. 不要每颗螺丝都叫吊车
Sonnet 5.5:日常修复、已知Bug、重复编辑、范围清楚的实现。
Opus 5.5:原因不明的问题、大改架构、跨文件审查、上线前关键判断。
Fable 5.1:只有在最难任务上,能力增益值得更高成本和额度消耗时再用。
这不是模型排名,而是每个任务的成本控制。
12. AI不是消灭瓶颈,而是移动瓶颈
以前:想法 → 开发几周 → 测试。
现在:想法 → 快速实现 → 测试、运维、服务器额度、AI额度一起扑上来。
所以“我一天做完了一个App”可以换成更准确的一句:
“我一天就做到了可以认真把它弄坏的阶段。”
这才是上线准备真正开始的地方。
资料
参考资料(8条)
- Cloudflare DDoS Protection developers.cloudflare.com
- Cloudflare Workers Limits / Pricing: / https://developers.cloudflare.com/workers/platform/pricing/ developers.cloudflare.com
- Cloudflare D1 Limits / Pricing: / https://developers.cloudflare.com/d1/platform/pricing/ developers.cloudflare.com
- OWASP WSTG wstg.owasp.org
- Anthropic Max plan support.claude.com
- Anthropic Fable models support.claude.com
- Claude Opus 5.5 anthropic.com
- Claude Sonnet 5.5 anthropic.com
