news 2026/9/4 15:05:49

软件测试效率提升实战:从用例设计到自动化与AI辅助

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
软件测试效率提升实战:从用例设计到自动化与AI辅助

2026 年聊软件测试,大家问得最多的问题已经变了:以前是“怎么入行”,现在是“同一天入职,为什么别人半年就能独立带模块,我还在天天点页面”。再到热搜上常年挂着的“软件测试面试必背 100 例”“软件测试八股文”“软件测试项目实战”,背后其实都指向同一个焦虑——平时做的事情没有沉淀成方法,关键时刻拿不出可量化的交付。

这个话题说穿了不是能力问题,而是效率问题。我接触过很多测试工程师,发现效率低的人往往有一个通病:大量时间花在低价值重复劳动上,自己却没有意识到。具体表现很统一:需求文档看完就开始写用例,用例写到一半发现规则没吃透;回归测试全靠手工点,点完也不知道漏没漏;环境一崩就整晚干等,等完再重新跑一遍;到了面试写简历,发现自己连一个能讲清楚的测试项目都凑不出来。

这篇文章不打算灌鸡汤,直接拆解这个通病背后的工作方式问题,并给出可以照着落地的提效方法,覆盖软件测试用例设计、手工执行、接口测试、自动化测试、环境与数据管理、AI 辅助测试,以及如何把日常项目经验转化成面试和简历里的有效素材。

1. 软件测试效率低的通病盘点:表象、根因与解法

先说结论:低效不是因为你不够努力,而是工作方法没有结构化。把效率低的人做的事情和高效率的人做的事情放在一起对比,差异非常明显。

低效表象根因提效方向
用例写得慢、评审总被挑战没有建立需求分析到测试点的结构化拆解流程先画业务规则矩阵,再生成用例
回归测试靠手工点,每次版本迭代都心里没底没有把稳定功能沉淀成自动化资产接口自动化优先,UI 自动化选择性落地
大量时间耗在测试环境不稳定、造数据难环境问题没有纳入测试流程治理用容器化环境 + 标准化测试数据
同一类 Bug 反复出现,用例覆盖不到没有做缺陷分析和用例回溯建立 Bug 聚类与测试用例补充机制
能力有但说不出来,面试和晋升都吃亏日常没有积累项目表达素材按“背景-动作-结果”整理项目地图
学了一堆工具但用不上学习路线偏技术名词,不解决真实任务用具体测试场景反向驱动学习

这六类问题串起来,基本就是一个低效测试工程师的完整画像。接下来的内容,会针对每一类问题给出具体可操作的解法。

2. 软件测试基础提效:把用例设计从“凭感觉”变成“套方法”

很多测试工程师写用例的顺序是:打开需求文档,从头看到尾,然后凭感觉开始列操作步骤。这种方式的效率非常低,因为需求理解不完整,很容易漏规则,漏了规则就会在后续测试执行中被开发打回,或者在线上出问题后复盘才补用例。

高效的用例设计应该分为三步走:第一步做需求拆解,第二步选择用例设计方法,第三步才落到具体用例。

2.1 需求拆解:从“一段描述”抽成“规则列表”

拿到需求后不要急着写步骤,先把需求里出现的名词、规则、限制条件全部抽出来。比如“用户注册后 24 小时内未激活则自动注销”,这句话里至少包含时间边界、状态判断、触发动作三个维度。

实际操作时,可以在本地维护一个简单的测试需求拆解模板,把一段产品描述转成多条规则。例如:

  • 正常路径规则:输入正确信息,系统处理成功;
  • 边界规则:时间边界、数量边界、金额边界、长度边界;
  • 异常规则:接口报错、网络超时、服务不可用;
  • 数据状态规则:前置数据不存在、重复提交、状态冲突。

2.2 用例设计方法组合:等价类、边界值、判定表、场景法

单独使用某一种用例设计方法容易产生盲区,实际项目里应该组合使用:

  • 等价类划分:把无限输入归纳为有限类别,适合处理输入框、枚举值、文件类型;
  • 边界值分析:针对上限、下限、临界值设计用例,大多数数值类缺陷都出在边界;
  • 判定表:适合规则多且相互组合的场景,例如优惠券叠加、审批流程状态流转;
  • 场景法:站在用户真实操作链路角度设计用例,覆盖功能之间的串联关系。

以最常见的登录功能为例,一个高效的测试用例集不会只写“输入用户名、密码、点登录”这一条。至少要覆盖:正确登录、密码错误、用户名不存在、用户名/密码为空、密码长度边界、连续多次错误触发锁定、锁定时间结束后能否登录、会话过期后再操作是否跳转登录页、多端登录互踢、切换网络断线等场景。

把这些规则列完后,再落到表格里:

用例编号测试点前置条件操作步骤预期结果优先级
TC-LOGIN-001正常登录用户已注册且状态正常输入正确用户名和密码,点击登录登录成功,跳转首页P0
TC-LOGIN-002密码错误用户已注册输入正确用户名、错误密码提示“用户名或密码错误”P0
TC-LOGIN-003密码锁定用户已注册,已连续输错 4 次第 5 次输入错误密码提示账号已锁定,并显示剩余锁定时间P1
TC-LOGIN-004会话过期用户登录后闲置超过设定时间过期后点击任意业务入口跳转登录页,登录后回跳原目标页P1

做到这一步,后续评审和测试执行都会轻松很多,因为你每一个用例背后都有明确的规则依据,而不是“我觉得应该测一下”。

2.3 用例评审与会话复用

用例评审低效的常见原因,是评审会上才逐条读用例。正确做法是评审前把规则矩阵发出去,评审过程只讨论“规则是否有遗漏”和“用例优先级是否合理”。

复用方面,建议把高频业务模块的用例沉淀成“基线用例库”。每次版本迭代,新用例单独维护,基线用例只做差异对比,这样回归范围能快速收敛,也不用每次从零开始写软件测试的测试用例。

3. 手工执行提效:用最少的时间发现最有价值的缺陷

不能否认,很多场景仍然需要手工测试。探索性测试、复杂业务场景的评审、视觉与交互体验类问题,手工执行是自动化的有效补充。但手工测试效率低,往往不是“执行慢”,而是执行前没有建立优先级,执行中记录散乱,执行后又缺少输出物。

3.1 按测试金字塔分配时间

在一个迭代里,建议把测试执行的时间这样分配:

  • 40%:接口测试和自动化冒烟测试结果分析;
  • 30%:核心链路和关键业务场景的手工验证;
  • 20%:探索性测试,专注容易出问题的边界和异常场景;
  • 10%:回归测试结果抽检与问题确认。

这样安排,可以把宝贵的人工精力放在真正需要人判断的地方。如果需求变更频繁,手工验证的比例要适当上调,但前提是接口层的回归仍然通过自动化兜底。

3.2 Bug 提报结构化:减少来回确认

一个 Bug 单写得是否专业,直接影响开发处理速度和测试效率。低效的 Bug 单常见问题是“描述很模糊、没有日志、没有前置数据、预期结果含糊”。

一个足够好的 Bug 单应该能回答以下问题:

  • 什么环境?包括版本号、设备型号、浏览器、操作系统;
  • 什么前置条件?包括账号数据、网络状态、操作历史;
  • 做了什么操作?步骤要精确到每一步;
  • 实际看到什么?截图、日志、接口返回;
  • 期望看到什么?产品文档中的原始描述;
  • 影响范围是什么?影响了哪些用户和功能。

下面是常见的 Bug 描述模板:

## 标题:支付页面在优惠券过期后仍显示可勾选 - 环境:Android App 版本 3.2.1,线上正式环境 - 前置条件:用户账号已登录,购物车内有 3 件商品,存在一张已过期优惠券 - 操作步骤: 1. 进入购物车结算页 2. 打开优惠券选择列表 3. 观察已过期优惠券展示状态 - 实际结果:过期优惠券仍显示“可选中”,点击后提交订单时提示失败 - 预期结果:过期优惠券应置灰并标记“已过期” - 相关日志:/log/payment_error.log?orderId=xxx - 影响范围:使用过期券提交订单的用户会看到支付失败提示

不要小看这个模板,把 Bug 提报结构化,能让开发平均少追问两轮,整体沟通时间和沟通摩擦都会明显下降。

4. 接口测试与自动化测试:把重复劳动交给脚本

很多测试工程师听到“自动化测试”就想到 Selenium、想到 UI 自动化。但从投资回报率看,接口自动化的性价比要高得多。接口层更稳定、执行更快、批量运行更方便,而且能直接验证后端逻辑是否正确。

4.1 接口测试用例和功能用例的关系

功能测试关注“页面能不能操作”,接口测试关注“后台逻辑能不能正确处理”。很多场景在功能层很难构造,比如直接传异常参数、伪造登录态、并发请求,这类测试通过接口很容易完成。做接口测试时,用例设计要考虑五类内容:

  • 正常参数:验证核心业务逻辑正确性;
  • 异常参数:缺参、多参、类型错误、边界值;
  • 鉴权校验:未登录、Token 过期、权限不足;
  • 依赖场景:前置数据存在或不存在;
  • 并发场景:同一条数据同时被多个请求修改。

4.2 用 pytest + requests 搭建轻量级接口自动化

下面给出一套适合本地学习和项目落地的接口自动化代码示例,核心结构是 pytest + requests,不需要引入重量级平台。

import requests import pytest BASE_URL = "http://127.0.0.1:8080" def test_login_success(): """正常登录场景:用户名和密码正确""" url = f"{BASE_URL}/api/v1/login" payload = { "username": "tester001", "password": "Test@123" } response = requests.post(url, json=payload, timeout=10) assert response.status_code == 200 assert response.json().get("code") == 0 assert response.json().get("data").get("token"), "登录成功应返回 token" def test_login_wrong_password(): """异常登录场景:密码错误""" url = f"{BASE_URL}/api/v1/login" payload = { "username": "tester001", "password": "wrong_password" } response = requests.post(url, json=payload, timeout=10) assert response.status_code == 200 assert response.json().get("code") != 0 assert response.json().get("msg") == "用户名或密码错误" @pytest.fixture() def auth_token(): """登录并返回 token,供其他接口使用""" url = f"{BASE_URL}/api/v1/login" payload = { "username": "tester001", "password": "Test@123" } response = requests.post(url, json=payload, timeout=10) return response.json().get("data").get("token")

在上述脚本中,登录接口的成功和失败场景都覆盖到了。如果后续要测试“创建订单”这类依赖登录态的接口,可以通过 fixture 取出 token,再将其放入请求头:

def test_create_order(auth_token): """依赖登录态的接口:先登录,再创建订单""" url = f"{BASE_URL}/api/v1/order/create" headers = {"Authorization": f"Bearer {auth_token}"} payload = { "goods_id": "G20260001", "count": 1, "address_id": 1001 } response = requests.post(url, json=payload, headers=headers, timeout=10) assert response.status_code == 200 assert response.json().get("code") == 0, f"创建订单失败: {response.text}"

这里要说明一下,上面的接口地址和参数是演示用的,真实项目需要按团队接口文档替换路径、请求头和字段名。对做软件测试的人来说,会这一套,已经能覆盖大量日常业务的接口回归需求。

4.3 项目实践中的维护策略

接口自动化最常见的失败原因是脚本本身不稳定,而不是系统有 Bug。所以维护和代码设计同等重要,这里有几个建议:

  • 把环境地址配置写在独立配置文件中,不要硬编码;
  • 用例之间不要相互依赖,每个用例尽量能独立运行;
  • 给请求设置超时时间,避免连接卡死导致测试挂起;
  • 输出清晰的断言日志,失败时能直接看到实际返回和预期值;
  • 把常用公共方法封装到 helper 模块,避免每个用例里重复写请求代码。

一个可参考的自动化测试项目结构如下:

api_test_project/ ├── config/ │ ├── dev.yaml │ └── prod.yaml ├── common/ │ ├── request_util.py │ └── assert_util.py ├── testcases/ │ ├── test_login.py │ ├── test_order.py │ └── test_user.py ├── data/ │ ├── login_data.json │ └── order_data.json ├── reports/ │ └── .gitkeep └── conftest.py

这个目录结构基本对应了市面上面试常考的“软件测试项目实战”,不是只写脚本,而是有配置、有公共封装、有用例分层。

5. 测试环境与测试数据管理:真正决定测试效率的基础设施

有一类测试工程师的时间消耗非常可惜:早上到岗发现环境挂了,等环境恢复用了两个小时;接口测试需要特定账号数据,但账号在别人手里,又等了半个工作日。这类问题表面看是“外部原因”,其实和环境与数据管理方法有关。

5.1 测试环境稳定性治理思路

环境不稳定不能只靠运维同学解决,测试同学要推动做以下三件事:

  • 环境状态可视化:建立环境检查页面,展示各服务、数据库、缓存的健康状态;
  • 部署窗口通知机制:每次代码更新前明确通知测试团队,并自动执行一次冒烟用例;
  • 快速回滚机制:环境发布失败时,第一时间回滚,而不是让测试在坏环境上执行任务。

5.2 用容器化环境解决依赖问题

本地开发和测试使用 Docker 是非常成熟的做法。当你需要一套包含前端、后端、数据库、缓存的测试环境时,可以用 docker-compose 快速拉起一套独立环境。下面是通用示例,实际服务名和镜像名需要按项目情况替换:

version: "3.8" services: mysql: image: mysql:8.0 container_name: test-mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: test_db ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql redis: image: redis:7-alpine container_name: test-redis ports: - "6379:6379" backend: image: your-project-backend:test container_name: test-backend depends_on: - mysql - redis environment: DB_HOST: mysql DB_PORT: 3306 REDIS_HOST: redis ports: - "8080:8080"

该示例的重点是传达环境隔离思路:把每次测试需要的数据、配置、依赖服务都固化到脚本里,拉起来就是一套干净可用环境,用完可以直接销毁。这样可以避免测试人员之间互相影响。

5.3 测试数据构建与隐私保护

测试数据准备建议遵循一个原则——尽量用脚本自动生成,不要手动在页面上造数据。每次跑测试前,执行一段初始化脚本,往数据库里插入满足各种场景的数据,跑完后再执行清理。测试数据要避免使用线上真实用户数据,如果确实需要模拟,必须做脱敏处理,比如把手机号、身份证号、真实姓名替换为符合校验规则但不属于真实个人的测试数据。涉及用户隐私的数据,只能在授权且合规的测试环境中使用,这一点在当前的软件测试流程里非常重要。

6. AI 软件测试:把重复脑力劳动也交给工具

2026 年的软件测试,已经绕不开“ai软件测试”这个关键词。AI 并不是来取代测试工程师的,而是可以显著提高用例设计、测试数据准备、日志分析等环节的效率。

6.1 AI 适合应用在哪些测试场景

从实际使用效果看,下面几个场景最适合先引入 AI:

  • 根据需求描述生成初版测试用例,人工再审核补充业务规则;
  • 读取接口返回的 JSON 数据,自动生成断言字段建议;
  • 分析缺陷描述,帮助归类相似问题,辅助定位根因;
  • 根据 Java/Python 异常日志解释错误含义,缩短排查时间;
  • 将产品需求文本整理成业务规则矩阵,方便评审。

6.2 AI 辅助用例生成示例

实际项目里可以在内网部署一个统一的大模型接口,然后写一个简易的自动生成用例脚本。下面这个是流程示例:

import requests # 这里假设团队内部有统一的模型服务,实际地址取决于你的内部部署 url = "http://your-llm-service/api/v1/generate" payload = { "task_type": "generate_test_cases", "requirement": "用户输入手机号和验证码完成登录,验证码有效期 5 分钟,一个手机号每分钟最多发送 1 次", "case_format": "markdown" } response = requests.post(url, json=payload, timeout=120) if response.status_code == 200: with open("generated_cases.md", "w", encoding="utf-8") as f: f.write(response.json().get("content", "")) print("用例已生成") else: print(f"生成失败: {response.text}")

使用 AI 辅助时,有一个原则必须记住:AI 生成的测试用例是种子素材,不是最终结论。真正负责的测试工程师,要花时间把 AI 生成的用例和真实业务规则逐条核对,补充遗漏的边界和异常场景。这恰恰是把“AI 工具使用者”和“高级测试工程师”区分开来的地方。

7. 软件测试学习路线与技能沉淀:不是学得越多越好,是解决得越多越好

热搜里常年挂着“软件测试学习路线”“软件测试基础”“软件测试八股文”,说明大家确实在学,但学习效率低同样存在。常见困惑是:今天学 JMeter,明天学 Selenium,后天学 Postman,工具装了一堆,能讲出原理的却没有几个。

7.1 从“学工具”转向“学解决问题”

正确的学习路线应该是按“测试任务”反向组织技能树。比如你的任务是“对一个购物 App 的下单功能做完整测试”,需要掌握的能力是:

  • 需求分析:拆解业务规则;
  • 用例设计:接口、功能、兼容、异常场景覆盖;
  • 接口测试:抓包工具、接口文档理解、Postman 或 curl 使用;
  • 自动化测试:使用 Python 或 Java 编写脚本;
  • 数据库操作:通过 SQL 验证订单数据是否落库;
  • 性能意识:如果涉及秒杀活动,还需要了解并发测试思路。

每完成一次测试任务,把学到的内容沉淀成文档。这样积累半年后,形成的就是一套完整的软件测试项目实战经验,而不是一堆零散工具名。

7.2 软件测试八股文应该怎么背

关于“软件测试面试必背100例”和“软件测试八股文”,我的看法是:要背,但不能死背。面试官看重的不是标准答案,而是你是否真正理解并能结合实际项目讲清楚。

比如一个问题:“什么是等价类划分?”普通答案是背定义。高分的答案是:先说明等价类划分的思路是把无限输入分为有限有效/无效类,再结合你的项目例子,比如订单金额输入框,正数金额是有效等价类,负数、零、超长数字是无效等价类,边界上还要单独补 0.01、9999.99 这类数值。

把八股文中的每个问题,都结合自己做过的软件测试的测试用例来回答,效果会完全不同。这也是为什么软件测试简历上一定要有具体的“项目名称、业务模块、自己负责的测试范围、可衡量的产出”这类内容。

8. 软件测试面试与简历:把日常效率转化为可表达的亮点

软件测试简历写不好,很多时候不是没有做过事,而是不知道怎样把测试动作转化成价值表达。

8.1 按 STAR 结构整理项目

每个测试项目都可以用这个框架整理:

  • Situation:项目背景,包括业务阶段、团队规模、系统复杂度;
  • Task:你负责的测试职责,比如功能测试、接口自动化或质量体系建设;
  • Action:你具体采取的行动,比如重构了用例设计流程,搭建了接口自动化框架;
  • Result:结果如何量化,比如用例评审通过率提升、回归时间缩短、漏测率下降。

举例来说,“负责项目功能测试”和“负责用户中心项目的功能测试与接口自动化,通过梳理核心业务规则,将登录和订单模块的回归时间从 2 小时压缩到 30 分钟”放在一起,后者显然更有说服力。

8.2 软件测试面试中常见的问题类型

软件测试面试题通常集中在以下几类:

  • 基础理论:测试流程、测试用例设计方法、Bug 生命周期;
  • 项目经验:印象最深的 Bug、需求不明确时怎么处理;
  • 工具类:Postman 用法、Fiddler/Charles 抓包、JMeter 使用;
  • 编程基础:Python/Java 语法、Linux 常用命令、SQL 查询;
  • 自动化:框架分层设计、元素定位策略、稳定性保障;
  • 场景设计:给定一个支付/登录/购物车功能,现场设计测试用例。

回答项目经验题时,要讲清楚问题背景、分析思路、定位过程和最终结果。平时测试过程中遇到的每一个难缠的 Bug,都应该及时记录下来,这些是软件测试面试最独特的素材。

9. 常见测试效率陷阱与排查建议

问题现象可能原因排查方向解决建议
自动化用例频繁失败,不敢信任用例之间相互依赖;断言过于宽松或严格;环境数据被改动检查失败集中在哪些用例,对比失败日志消除用例依赖;统一数据构建与清理机制
手工回归总是漏测回归范围没有基于代码变更和影响链路分析关注需求变更点、公共模块改动建立变更影响分析和回归范围基线库
开发和测试就 Bug 是否要改反复拉扯Bug 单缺少预期依据或优先级不清晰回归产品需求文档和历史约定明确 Bug 单字段,提交前补充依据
测试环境恢复正常后忘记验证环境处理过程没有记录检查环境故障记录和恢复通知设立环境恢复后的冒烟验证流程
用例评审时间过长评审内容太细且没有准备会前分发规则矩阵和待确认清单评审只讨论规则争议和高风险问题
学了自动化却不会分析结果把写脚本当成了目的,缺少业务判断统计有效失败率、误报率每次跑完自动化必须人工分析失败原因

这张排查表可以打印出来贴在工位上,每次效率卡壳时对照一下,基本能快速定位问题出在哪个环节。

10. 真正值得改变的一个习惯

回到文章开头说的那个通病。2026 年软件测试效率低的人,往往不是输在智商或技术基础上,而是把时间消耗在大量无沉淀的重复劳动里。解决这个问题,不需要一次性引进复杂平台,只需要从一个习惯开始:每次完成一项测试任务后,追问自己三句话:

  • 这次任务里有哪一步是重复劳动?能不能自动化?
  • 这次发现的 Bug 反映的是哪些测试盲区?下一次用例设计要如何覆盖?
  • 如果要把这次任务写成简历项目,我该用哪一组数据说明成果?

把这三句话养成习惯,再用本文提到的用例结构化、接口自动化、环境治理、AI 辅助和项目沉淀方法去填充细节,效率提升只是时间问题。

无论你是刚入门做软件测试,还是已经在找软件测试项目实战机会,我都建议你从今天开始,重新审视手头最常见的测试任务:先把它拆出规则,再用脚本替你做重复校验,最后把过程记录成自己的质量改进数据。这才是应对软件测试面试、晋升和日常工作最稳的长期路径。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 15:03:23

游戏辅助工具技术原理剖析:从图像识别到自动化控制

这次我们来看一个名为“依旧带飞辅助治疗王昭君”的项目。从标题来看,这很可能是一个与《王者荣耀》游戏角色“王昭君”相关的辅助工具或脚本,核心功能可能涉及“辅助治疗”或“带飞”等自动化操作。这类项目通常会引起技术爱好者对游戏AI、自动化脚本或…

作者头像 李华
网站建设 2026/9/4 14:59:41

ESP32-S3转接板PCB设计全流程:从原理图到打样

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 14:58:58

Claude HUD 实战:3 行实时状态监控,告别上下文焦虑

Claude HUD 实战:3 行实时状态监控,告别上下文焦虑 【免费下载链接】claude-hud A Claude Code plugin that shows whats happening - context usage, active tools, running agents, and todo progress 项目地址: https://gitcode.com/GitHub_Trendin…

作者头像 李华
网站建设 2026/9/4 14:58:53

管材折弯加工如何降低废品率?了解乐博机械弯管机产品设计思路

管材折弯加工中,机身长期重载后发生形变、液压系统波动导致批量精度不稳定、薄壁管起皱塌陷、换模时间过长,这些问题通常会直接拉高废品率和停机成本。对于中小管件加工厂来说,选择设备不能只看参数表,还要看厂家在结构、工艺和售…

作者头像 李华
网站建设 2026/9/4 14:56:54

256K上下文+MoE架构:Qwen3-Next-80B如何重塑开源大模型效率标杆

256K上下文MoE架构:Qwen3-Next-80B如何重塑开源大模型效率标杆 你还在为处理超长文档时频繁截断上下文而烦恼?还在为大模型推理成本居高不下而头疼?2025年9月15日,阿里云正式发布Qwen3-Next-80B-A3B-Instruct大模型,以…

作者头像 李华
网站建设 2026/9/4 14:56:40

AI造AI实战:从需求规格到云上部署,AI编程Agent全链路复现

这条标题在社区里刷屏的时候,我一开始没当回事,想着无非又是一轮“AI取代程序员”的情绪化宣泄。直到我自己连续两周用 AI 编程 Agent 去做 AI 应用的落地实验,才发现问题真正值得回答,只是需要先把“自己”和“造”这两个词拆开—…

作者头像 李华