[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-testing-on-a-budget-zh-CN":3,"blog-adjacent-testing-on-a-budget-zh-CN":29,"blog-related-testing-on-a-budget-zh-CN":63},{"id":4,"slug":5,"title":6,"excerpt":7,"content":8,"cover":9,"tone":10,"author":11,"publishedAt":12,"updatedAt":12,"readingMinutes":13,"featured":14,"tags":15,"category":19,"seoSettings":28},40,"testing-on-a-budget","预算有限时，测试该测什么","没有专职测试团队，也要有测试策略。关键是把有限的精力放在出错代价最高的地方。","\u003Cp>小团队做项目，测试时间常常被压缩。完全不测，线上事故频发；想全面覆盖，工期又不允许。我们的做法是承认资源有限，按风险排序。\u003C\u002Fp>\n\u003Ch2>优先测这四类\u003C\u002Fh2>\n\u003Cp>涉及钱和权限的逻辑：金额计算、审批流转、越权访问。这类错误代价最高。\u003C\u002Fp>\n\u003Cp>数据的写入与迁移：重复提交、并发修改、导入导出，出错后很难修复。\u003C\u002Fp>\n\u003Cp>核心流程的主路径：用户每天都要走的操作，必须保证顺畅。\u003C\u002Fp>\n\u003Cp>历史缺陷：每个修过的严重问题都补一条回归用例。\u003C\u002Fp>\n\u003Ch2>可以适当放过的\u003C\u002Fh2>\n\u003Cp>纯展示页面的细节样式，靠验收环节确认即可。\u003C\u002Fp>\n\u003Cp>低频管理功能，允许存在小问题，但要保证数据不丢。\u003C\u002Fp>\n\u003Cp>自动化覆盖率不必追求数字，稳定跑通核心路径比 80% 覆盖率更有意义。\u003C\u002Fp>\n\u003Cp>测试策略的核心不是覆盖率，而是判断哪些错误绝对不能发生。回答清楚这个问题，资源自然知道往哪放。\u003C\u002Fp>","","cyan","佳益方圆团队","2026-06-19T11:10:00+08:00",1,false,[16,17,18],"测试","质量","工程实践",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},0,"engineering","技术专栏","架构设计、性能优化、AI 集成与跨端方案等一线技术实践，由研发团队持续分享。","cpu","blue","article",60,{},{"previous":30,"next":47},{"id":31,"slug":32,"title":33,"excerpt":34,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":35,"updatedAt":35,"readingMinutes":13,"featured":14,"tags":36,"category":40},19,"brand-for-small-teams","小公司的品牌从哪里来","没有预算投广告的小团队，品牌来自每一次交付、每一封邮件和每一个被认真处理的问题。","2026-06-21T10:57:00+08:00",[37,38,39],"创业","品牌","口碑",{"id":41,"parentId":20,"slug":42,"name":43,"description":44,"icon":45,"cover":9,"tone":25,"kind":26,"sortOrder":46,"count":20},6,"founder-notes","创业手记","创始团队在经营、管理与产品上的思考，记录一家软件公司的成长过程。","pen-tool",10,{"id":27,"slug":48,"title":49,"excerpt":50,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":51,"updatedAt":51,"readingMinutes":13,"featured":14,"tags":52,"category":56},"pricing-tiers-design","定价与套餐设计","套餐不是把功能随机分组，而是让客户能清楚判断自己属于哪一档。","2026-06-17T11:10:00+08:00",[53,54,55],"定价","商业化","产品",{"id":57,"parentId":20,"slug":58,"name":59,"description":60,"icon":61,"cover":9,"tone":25,"kind":26,"sortOrder":62,"count":20},2,"product-thinking","产品思维","需求分析、用户体验与产品设计方法论，以及从业务问题到产品方案的思考过程。","lightbulb",50,[64,74,85],{"id":65,"slug":66,"title":67,"excerpt":68,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":69,"updatedAt":69,"readingMinutes":13,"featured":14,"tags":70,"category":73},30,"integration-api-pitfalls","企业系统集成：接口对接最容易踩的五个坑","接口文档写得再全，真正对接时仍然会卡在字段约定、超时和重复推送这些细节上。","2026-10-17T09:00:00+08:00",[71,72,18],"系统集成","接口",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":13,"slug":75,"title":76,"excerpt":77,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":78,"updatedAt":79,"readingMinutes":57,"featured":80,"tags":81,"category":84},"why-enterprise-systems-age","为什么企业系统会在三年后开始“老化”","系统上线时功能齐全，三年后却处处别扭。问题往往不在代码，而在交付时被忽略的那些变化。","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",true,[82,83],"系统演进","架构设计",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":86,"slug":87,"title":88,"excerpt":89,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":90,"updatedAt":90,"readingMinutes":13,"featured":14,"tags":91,"category":95},31,"idempotent-design-basics","幂等设计：重复提交不只是用户手抖","网络重试、消息重投、用户连点，都会让同一个请求到达多次。幂等应该设计在接口里。","2026-10-05T10:13:00+08:00",[92,93,94],"接口设计","幂等","可靠性",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20}]